Проверить запросом табличное поле на отсутствие значений
По теме из базы знаний
- Всякие полезности
- Обзор полезных методов БСП 3.1.4
- Смотрим запросы 1С через Microsoft SQL Profiler по следам ошибок разработчиков, приводящих к проблемам производительности
- Инвентаризация кодов маркировки системы "Честный знак", запрос, сравнение с остатками 1С, списание, ОСУ
- Опять "Поле объекта не обнаружено". Способы проверки
Ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
(1) squall84,
как проверить табличное поле
Никак. В 1С невозможно запросом получить табличное поле. А ответы остальных, которые путают ТЗ, ТЧ и ТП - говорят о многом.
(2) Boneman,
А некоторые, читающие целые "лекции" о пользе и развитии "клиент-сервера в 1С" и общей "полезности" 8.2-8.3 - даже не знают, с какой стороны этот "клиент-сервер" торчит.
(1) squall84,
Делается небольшим запросом - при условии, что известны, какие виды документов искать.
Ответ на "первоначальный" вопрос ("получить документы, у которыхтабличное поле табличная часть содержит взаиморасчеты") запросом в 1С получить нельзя.
Мне нужно выбрать все документы, в которых в табличном поле взаиморасчеты с контрагентами нет записей.
Обойдите все документы, у которых есть табличная часть "взаиморасчеты", найдите с нулевыми записями, и получите их.
Делается небольшим запросом - при условии, что известны, какие виды документов искать.
Ответ на "первоначальный" вопрос ("получить документы, у которых
(1) squall84,
ВЫБРАТЬ
Док.Ссылка
ИЗ
Документ.ВозвратТоваровОтПокупателя КАК Док
ЛЕВОЕ СОЕДИНЕНИЕ Документ.ВозвратТоваровОтПокупателя.ДокументыРасчетовСКонтрагентом КАК ТЧ
ПО Док.Ссылка = ТЧ.Ссылка
И (ТЧ.НомерСтроки = 1)
ГДЕ
ТЧ.Ссылка ЕСТЬ NULL
ПоказатьВЫБРАТЬ Ссылка
ИЗ Документ.ВозвратТоваровОтПокупателя ГДЕ НЕ Ссылка В (ВЫБРАТЬ Различные Ссылка ИЗ документ.ВозвратТоваровОтПокупателя.ДокументыРасчетовСКонтрагентом )
наспамлю немного: если взаиморасчеты таб часть, тогда план запроса такой: (На примере реализации и т.ч. Товары)
ВЫБРАТЬ
РеализацияТоваровУслуг.Ссылка
ПОМЕСТИТЬ вт1
ИЗ
Документ.РеализацияТоваровУслуг КАК РеализацияТоваровУслуг
;
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ РАЗЛИЧНЫЕ
РеализацияТоваровУслугТовары.Ссылка
ПОМЕСТИТЬ вт2
ИЗ
Документ.РеализацияТоваровУслуг.Товары КАК РеализацияТоваровУслугТовары
;
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
вт1.Ссылка
ИЗ
вт1 КАК вт1
ЛЕВОЕ СОЕДИНЕНИЕ вт2 КАК вт2
ПО вт1.Ссылка = вт2.Ссылка
ГДЕ
НЕ вт2.Ссылка ЕСТЬ NULL
Показать
Как-то так (документ и табличное поле другие, как заменить - сообразишь сам):
ВЫБРАТЬ
АвансовыйОтчетПрочее.Ссылка,
КОЛИЧЕСТВО(*) КАК Колво
ПОМЕСТИТЬ ВТ_Колво
ИЗ
Документ.АвансовыйОтчет.Прочее КАК АвансовыйОтчетПрочее
СГРУППИРОВАТЬ ПО
АвансовыйОтчетПрочее.Ссылка
;
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
АвансовыйОтчет.Ссылка,
ВТ_Колво.Колво
ИЗ
Документ.АвансовыйОтчет КАК АвансовыйОтчет
ЛЕВОЕ СОЕДИНЕНИЕ ВТ_Колво КАК ВТ_Колво
ПО АвансовыйОтчет.Ссылка = ВТ_Колво.Ссылка
ГДЕ
ВТ_Колво.Колво ЕСТЬ NULL
Показать
(5) До сих пор не понял для чего в первом запросе считается количество, вы же во втором можете на есть нулл ссылку проверять, есть ссылка значит и количество есть, нет ссылки, значит и количества нет, а уж сколько там количества этого - неважно, главное наличие или отсуствие.
(25) Еще раз перефразирую, нафига какое то количество считать в запросе(в выборке 2 поля, ссылка и количество), если в таб части есть ссылка на объект, по которой при склеивании с таблицей самого объекта можно понять есть в таб части что-то или нет.
Как тогда по вашему объект связывается со своей таб частью если в таб части нет ссылки на него, меня аж просто заел интерес... Что же такое придумала 1с, чтобы связать таблицу объектов с таблицей табличных частей объектов без ссылки?
Как тогда по вашему объект связывается со своей таб частью если в таб части нет ссылки на него, меня аж просто заел интерес... Что же такое придумала 1с, чтобы связать таблицу объектов с таблицей табличных частей объектов без ссылки?
(30) vx_gas, сама табличная часть не имеет ссылку. Ссылка есть на объект.Документ. В строке таблицы, которая содержит Табличные части, хранится ссылка на документ и номер строки.
Вы путаете понятия: у табличной части "не может быть ссылки" и "не может хранить ссылки".
Вы путаете понятия: у табличной части "не может быть ссылки" и "не может хранить ссылки".
Ну я так понял , что нужно выбрать все Возвраты покупателя, по которым по факту нет взаиморасчетов, т.е. надо вязать с виртуальной таблицей ВзаиморасчетыСКонтрагентами, обороты и остатки.
ВЫБРАТЬ
ВозвратТоваровОтПокупателя.Ссылка,
ВзаиморасчетыСКонтрагентамиОстаткиИОбороты.СуммаВзаиморасчетовКонечныйОстаток
ИЗ
Документ.ВозвратТоваровОтПокупателя КАК ВозвратТоваровОтПокупателя
ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ВзаиморасчетыСКонтрагентами.ОстаткиИОбороты(, , Регистратор, , ) КАК ВзаиморасчетыСКонтрагентамиОстаткиИОбороты
ПО ВозвратТоваровОтПокупателя.ДоговорКонтрагента = ВзаиморасчетыСКонтрагентамиОстаткиИОбороты.ДоговорКонтрагента
И ВозвратТоваровОтПокупателя.Ссылка = ВзаиморасчетыСКонтрагентамиОстаткиИОбороты.Регистратор
ГДЕ
ВозвратТоваровОтПокупателя.Дата МЕЖДУ &НачалоПериода И &КонецПериода
И ВозвратТоваровОтПокупателя.ПометкаУдаления = ЛОЖЬ
И ВозвратТоваровОтПокупателя.Проведен = ИСТИНА
И ВзаиморасчетыСКонтрагентамиОстаткиИОбороты.СуммаВзаиморасчетовКонечныйОстаток <= ВозвратТоваровОтПокупателя.СуммаДокумента
Показать
Написал такой запрос
Тут я получаю все возвраты, у которых заполнена табличная часть. но, как не пытаюсь у меня не выходит получить возвраты, у которых табличная часть пуста.
по сути мне просто нужно выбрать все возвраты за заданные числа из исключить из них те, которые я уже нашел.
дописываю конструктором запрос
Получаю полный список документов. Не срабатывает условие неравенства.
ВЫБРАТЬ
ВозвратТоваровОтПокупателяДокументыРасчетовСКонтрагентом.Ссылка,
ВозвратТоваровОтПокупателяДокументыРасчетовСКонтрагентом.Ссылка.Номер
ПОМЕСТИТЬ возврат
ИЗ
Документ.ВозвратТоваровОтПокупателя.ДокументыРасчетовСКонтрагентом КАК ВозвратТоваровОтПокупателяДокументыРасчетовСКонтрагентом
ГДЕ
ВозвратТоваровОтПокупателяДокументыРасчетовСКонтрагентом.Ссылка.Дата МЕЖДУ &Дата1 И &Дата2
СГРУППИРОВАТЬ ПО
ВозвратТоваровОтПокупателяДокументыРасчетовСКонтрагентом.Ссылка,
ВозвратТоваровОтПокупателяДокументыРасчетовСКонтрагентом.Ссылка.Номер
ИМЕЮЩИЕ
КОЛИЧЕСТВО(ВозвратТоваровОтПокупателяДокументыРасчетовСКонтрагентом.ДокументРасчетовСКонтрагентом) > 0
;
ПоказатьТут я получаю все возвраты, у которых заполнена табличная часть. но, как не пытаюсь у меня не выходит получить возвраты, у которых табличная часть пуста.
по сути мне просто нужно выбрать все возвраты за заданные числа из исключить из них те, которые я уже нашел.
дописываю конструктором запрос
ВЫБРАТЬ
ВозвратТоваровОтПокупателя.Ссылка
ИЗ
Документ.ВозвратТоваровОтПокупателя КАК ВозвратТоваровОтПокупателя
ВНУТРЕННЕЕ СОЕДИНЕНИЕ возврат КАК возврат
ПО ВозвратТоваровОтПокупателя.Ссылка <> возврат.Ссылка
ГДЕ
ВозвратТоваровОтПокупателя.Дата МЕЖДУ &Дата1 И &Дата2
Получаю полный список документов. Не срабатывает условие неравенства.
(14) squall84,
Решение (возможный из вариантов) - в 12)
"Обманку" писать надо.
(12) объясните, наконец, что предложили - я не ошибся, автор не понял, что это было предложено решение ))
но, как не пытаюсь у меня не выходит получить возвраты, у которых табличная часть пуста.
И не получится. 1С не может, как SQL, найти ПУСТЫЕ записи.
Решение (возможный из вариантов) - в 12)
"Обманку" писать надо.
(12) объясните, наконец, что предложили - я не ошибся, автор не понял, что это было предложено решение ))
(16) AlexO, Я понял объяснение. Но только не совсем уловил, взаимосвязь между двумя запросами.
Я уже понял, что я не найду пустые записи. Поэтому я решил найти все документы с заполненной табличной частью. Я их получил-запрос построил мне список. Теперь мне просто нужно получить весь список документов возврата и исключить из него те, которые я уже нашел. я такое уже делал не раз, но именно в данном конкретном случае у меня запрос не исключает. Т.е. равенство срабатывает. неравенство выдает полный список всех документов.
Я уже понял, что я не найду пустые записи. Поэтому я решил найти все документы с заполненной табличной частью. Я их получил-запрос построил мне список. Теперь мне просто нужно получить весь список документов возврата и исключить из него те, которые я уже нашел. я такое уже делал не раз, но именно в данном конкретном случае у меня запрос не исключает. Т.е. равенство срабатывает. неравенство выдает полный список всех документов.
(17) squall84,
А то написать - полдела, а вот объянить, что написал - может не каждый ))
Но только не совсем уловил, взаимосвязь между двумя запросами.
Там нет никакой связи, кроме той, что предложено два из возможных варианта решения ))
Т.е. равенство срабатывает. неравенство выдает полный список всех документов.
Ну пусть автор запроса и объяснит ))
А то написать - полдела, а вот объянить, что написал - может не каждый ))
(14) squall84, не слушай того, что якобы 1С не может.
ВЫБРАТЬ
ВозвратТоваровОтПокупателя.Ссылка,
ВозвратТоваровОтПокупателя.Номер
ИЗ
Документ.ВозвратТоваровОтПокупателя КАК ВозвратТоваровОтПокупателя
ГДЕ
ВозвратТоваровОтПокупателя.Дата МЕЖДУ &Дата1 И &Дата2
СГРУППИРОВАТЬ ПО
ВозвратТоваровОтПокупателя.Ссылка,
ВозвратТоваровОтПокупателя.Номер
ИМЕЮЩИЕ
КОЛИЧЕСТВО(ВозвратТоваровОтПокупателя.ДокументРасчетовСКонтрагентом.НомерСтроки) = 0
Показать
(19) spacecraft,
(19) spacecraft, вы и сотоварищи-однокружковцы хвалитесь,рвете рубашки, выкрикиваете панегерики и спорите по продукту, которого не знаете вообще. Как и по остальным вопросам и областям.
ИМЕЮЩИЕ
КОЛИЧЕСТВО(ВозвратТоваровОтПокупателя.ДокументРасчетовСКонтрагентом.НомерСтроки) = 0
Это не считая того, что КОЛИЧЕСТВО - вообще запрещено использовать внутри ИМЕЮЩИЕ.
КОЛИЧЕСТВО(ВозвратТоваровОтПокупателя.ДокументРасчетовСКонтрагентом.НомерСтроки) = 0
(19) spacecraft, вы и сотоварищи-однокружковцы хвалитесь,рвете рубашки, выкрикиваете панегерики и спорите по продукту, которого не знаете вообще. Как и по остальным вопросам и областям.
Что то долго спор идет, решил накидать и выбрать Реализации у которых пустая табличная часть Услуги.. Работает
ВЫБРАТЬ
РеализацияТоваровУслуг.Ссылка
ИЗ
Документ.РеализацияТоваровУслуг КАК РеализацияТоваровУслуг
ЛЕВОЕ СОЕДИНЕНИЕ Документ.РеализацияТоваровУслуг.Услуги КАК РеализацияТоваровУслугУслуги
ПО (РеализацияТоваровУслугУслуги.Ссылка = РеализацияТоваровУслуг.Ссылка)
ГДЕ
РеализацияТоваровУслуг.Дата МЕЖДУ &ДатаНач И &ДатаКон
СГРУППИРОВАТЬ ПО
РеализацияТоваровУслуг.Ссылка
ИМЕЮЩИЕ
КОЛИЧЕСТВО(РАЗЛИЧНЫЕ РеализацияТоваровУслугУслуги.Ссылка) = 0
УПОРЯДОЧИТЬ ПО
РеализацияТоваровУслуг.Номер
ПоказатьЗапрос = Новый Запрос;
Запрос.Текст = "
|ВЫБРАТЬ
| Документ.Ссылка,
| Документ.Услуги.НомерСтроки КАК КоличествоУслуг,
| Документ.Товары.НомерСтроки КАК КоличествоТоваров
|ИЗ
| Документ.РеализацияТоваровУслуг КАК Документ
|ГДЕ
| Документ.Дата МЕЖДУ &ДатаНачала И &ДатаОкончания
|";
Запрос.УстановитьПараметр("ДатаНачала", ДатаНачала);
Запрос.УстановитьПараметр("ДатаОкончания", ДатаОкончания);
ТЗЗапроса = Запрос.Выполнить().Выгрузить();
Для Каждого СтрокаТЗ Из ТЗЗапроса Цикл
КоличествоУслуг = СтрокаТЗ.КоличествоУслуг.Количество();
КоличествоТоваров = СтрокаТЗ.КоличествоТоваров.Количество();
// ...
КонецЦикла;
// ...
Показать
(40) Это решение, когда нужно не просто отобрать документы с какой-то одной пустой ТЧ, а нужно получить значение заполнение любого количества ТЧ документа, и на основании комбинаций этих значений произвести какие-то действия.
Подходит и для решения задачи автора темы.
Подходит и для решения задачи автора темы.
Запросом по таблице получаем все ссылки документов где заполнена хоть одна строка таблицы, помещаем эти ссылки на документы во временную таблицу, во втором запросе получаем все документы, кроме документов с заполненной таблицей
ВЫБРАТЬ
ИМ_КлиентыТелефоны.Ссылка КАК Ссылка
ПОМЕСТИТЬ ВТ_КлиентыСЗаполненнойТаблицейНомеров
ИЗ
Справочник.ИМ_Клиенты.Телефоны КАК ИМ_КлиентыТелефоны
ГДЕ
НЕ ИМ_КлиентыТелефоны.Ссылка.ПометкаУдаления
;
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
ИМ_Клиенты.Ссылка КАК Ссылка
ИЗ
Справочник.ИМ_Клиенты КАК ИМ_Клиенты
ГДЕ
НЕ ИМ_Клиенты.ПометкаУдаления
И НЕ ИМ_Клиенты.Ссылка В
(ВЫБРАТЬ
ВТ_КлиентыСЗаполненнойТаблицейНомеров.Ссылка КАК Ссылка
ИЗ
ВТ_КлиентыСЗаполненнойТаблицейНомеров КАК ВТ_КлиентыСЗаполненнойТаблицейНомеров)
Показать
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот