Новости для бухгалтера, бухучет, налогообложение, отчетность, ФСБУ, прослеживаемость и маркировка, 1С:Бухгалтерия

Вход или Регистрация

Показывать по 10 20 40 сообщений
Новая тема Ответить
Письмо в техподдержку 1С
[Прочее]

Запрос - из 2-х таблиц=результат-записи, которые не входят во вторую таблицу

Денис (САМАРА)
читатель
офлайн
Дата регистрации: 09.04.2008
Сообщений: 8351
Пост №11
 
14.09.2011 10:55

"<pre>Процедура КнопкаВыполнитьНажатие(Кнопка) ТЗ1 = Новый ТаблицаЗначений; ТЗ1.Колонки.Добавить("кол1", ОбщегоНазначения.ПолучитьОписаниеТиповСтроки(2)); ТЗ1.Колонки.Добавить("кол2", ОбщегоНазначения.ПолучитьОписаниеТиповСтроки(2)); ТЗ1.Колонки.Добавить("кол3", ОбщегоНазначения.ПолучитьОписаниеТиповСтроки(2)); Для н = 1 По 3 Цикл НовСтр = ТЗ1.Добавить(); НовСтр.Кол1 = "А" + н; НовСтр.Кол2 = "Б" + н; НовСтр.Кол3 = "В" + н; КонецЦикла; ТЗ2 = ТЗ1.Скопировать(); НовСтр = ТЗ2.Добавить(); НовСтр.Кол1 = "А4"; НовСтр.Кол2 = "Б4"; НовСтр.Кол3 = "В4"; НовСтр = ТЗ1.Добавить(); НовСтр.Кол1 = "А5"; НовСтр.Кол2 = "Б5"; НовСтр.Кол3 = "В5"; Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | ВнИст1.Кол1, | ВнИст1.Кол2, | ВнИст1.Кол3 |ПОМЕСТИТЬ ВТ1 |ИЗ | &Ист1 КАК ВнИст1 |; | |////////////////////////////////////////////////////////////­//////////////////// |ВЫБРАТЬ | ВнИст2.Кол1, | ВнИст2.Кол2, | ВнИст2.Кол3 |ПОМЕСТИТЬ ВТ2 |ИЗ | &Ист2 КАК ВнИст2 |; | |////////////////////////////////////////////////////////////­//////////////////// |ВЫБРАТЬ | ВТ1.Кол1, | ВТ1.Кол2, | ВТ1.Кол3 |ИЗ | ВТ1 КАК ВТ1, | ВТ2 КАК ВТ2 |ГДЕ | (НЕ ВТ1.Кол1 В | (ВЫБРАТЬ | ВТ2.Кол1 | ИЗ | ВТ2)) | И (НЕ ВТ1.Кол2 В | (ВЫБРАТЬ | ВТ2.Кол2 | ИЗ | ВТ2)) | И (НЕ ВТ1.Кол3 В | (ВЫБРАТЬ | ВТ2.Кол3 | ИЗ | ВТ2)) | |ОБЪЕДИНИТЬ | |ВЫБРАТЬ | ВТ2.Кол1, | ВТ2.Кол2, | ВТ2.Кол3 |ИЗ | ВТ1 КАК ВТ1, | ВТ2 КАК ВТ2 |ГДЕ | (НЕ ВТ2.Кол1 В | (ВЫБРАТЬ | ВТ1.Кол1 | ИЗ | ВТ1)) | И (НЕ ВТ2.Кол2 В | (ВЫБРАТЬ | ВТ1.Кол2 | ИЗ | ВТ1)) | И (НЕ ВТ2.Кол3 В | (ВЫБРАТЬ | ВТ1.Кол3 | ИЗ | ВТ1))" ; Запрос.УстановитьПараметр("Ист1", ТЗ1); Запрос.УстановитьПараметр("Ист2", ТЗ2); Результат = Запрос.Выполнить(); ТЗ = Результат.Выгрузить(); ТЗ.ВыбратьСтроку(); КонецПроцедуры </pre>"

Olga3891
читатель
офлайн
Дата регистрации: 10.10.2006
Сообщений: 497
Пост №12
 
14.09.2011 13:22

Да, сделала не запросом, а циклом.

Петров-В
читатель
офлайн
Дата регистрации: 23.01.2011
Сообщений: 581
Пост №13
 
14.09.2011 21:23

Зачем циклами делать? Запросом нормально получается.<br>Если надо вывести строки, которые есть в ТЗ2, но нет в ТЗ1 (из первого примера Дениса - это "а4,б4,в4"), то запрос такой:<br> <br> <br><pre>ВЫБРАТЬ ВТ2.Кол1, ВТ2.Кол2, ВТ2.Кол3ИЗ ВТ2 КАК ВТ2       ЛЕВОЕ СОЕДИНЕНИЕ ВТ1 КАК ВТ1       ПО (ВТ1.Кол1 = ВТ2.Кол1)            И (ВТ1.Кол2 = ВТ2.Кол2)            И (ВТ1.Кол3 = ВТ2.Кол3)ГДЕ ВТ1.Кол1 ЕСТЬ NULL </pre>

Денис (САМАРА)
читатель
офлайн
Дата регистрации: 09.04.2008
Сообщений: 8351
Пост №14
 
16.09.2011 09:30

Да, это еще более компактный запрос (только на "Есть Null" каждую колонку надо проверить).

Петров-В
читатель
офлайн
Дата регистрации: 23.01.2011
Сообщений: 581
Пост №15
 
16.09.2011 09:36

Если соответствующая запись не нашлась левым соединением по связке 3-х колонок, то из правой таблицы все колонки будут NULL.

Алавир
читатель
офлайн
Дата регистрации: 20.04.2011
Сообщений: 511
Пост №16
 
16.09.2011 12:02

А обратное утверждение верно?<br>Не совсем обратное :) То, которое вы установили в запросе.<br>Если одна колонка Null, это значит, что эта строка во второй таблице не нашлась?

Петров-В
читатель
офлайн
Дата регистрации: 23.01.2011
Сообщений: 581
Пост №17
 
16.09.2011 12:24

Да, если не нашлась, значит NULL.<br>NULL значит не нашлась (отсутствует запись и соотпетственно все поля).<br>Каких-то других вариантов, когда в колонке NULL я не могу представить.<br>Если запись нашлась, но в поле ничего не заполнено, то будет Неопределено.

Денис (САМАРА)
читатель
офлайн
Дата регистрации: 09.04.2008
Сообщений: 8351
Пост №18
 
17.09.2011 08:11

"Неопределено" не может быть в запросе. Даже составной тип всегда требуется через "Выразить()" оформлять.

Петров-В
читатель
офлайн
Дата регистрации: 23.01.2011
Сообщений: 581
Пост №19
 
17.09.2011 14:13

В определенных случаях требуется через Выразить, но что значит "Всегда требуется через Выразить"?<br> <br>Нельзя разве такой запрос выполнить?<br><pre>ВЫБРАТЬ ЗарплатаКВыплатеОрганизаций.Ссылка, ВЫБОР       КОГДА ЗарплатаКВыплатеОрганизаций.ДокументОснование = НЕОПРЕДЕЛЕНО            ТОГДА " !!! Неопределено !!!"       ИНАЧЕ ЗарплатаКВыплатеОрганизаций.ДокументОснование КОНЕЦ КАК ДокументОснованиеИЗ Документ.ЗарплатаКВыплатеОрганизаций КАК ЗарплатаКВыплатеОрганизаций</pre><br><br> <br>Кстати насчет того когда еще может быть NULL.<br>Если написать "ВЫБОР КОГДА..." и нет ни одного истинного условия и нет "ИНАЧЕ", то получится NULL. Т.е. "никакое поле таблицы и вообще ничего здесь не выводится".

Алавир
читатель
офлайн
Дата регистрации: 20.04.2011
Сообщений: 511
Пост №20
 
17.09.2011 17:51

> Нельзя разве такой запрос выполнить?<br>Можно выполнить, но работать он будет только если поле "ДокументОснование" составного типа.<br>И если в него не записали пустую ссылку любого подходящего для него типа.<br> <br> <br> Вот в таком случае<br>> Если написать "ВЫБОР КОГДА..." и нет ни одного истинного условия и нет "ИНАЧЕ", то получится NULL. Т.е. "никакое поле таблицы и вообще ничего здесь не выводится".<br> <br>и может быть во втором запросе одна колонка NULL, а остальные значимые. Поэтому и вопрос, а не надо ли проверять их все на NULL, чтобы убедиться, что это строка, к которой не нашли соответствие в первой таблице.

Показывать по 10 20 40 сообщений

Читают тему:

1 гостей
Быстрый переход
Для технических специалистов
  • Книга жалоб и предложений по работе сайта
  • Для технических специалистов
  • Представление регламентированной отчетности
  • Говорильня
  • Бухгалтерский учет: обсуждаем проекты нормативных актов и рекомендаций по ведению учета от БМЦ
  • Новый порядок применения ККТ (онлайн кассы с передачей сведений в ФНС)
  • Интернет-конференция: Оформление командировок по новым правилам
  • МАРКИРОВКА
  • ЕГАИС
  • Учет, налогообложение, автоматизация