Проверить запросом табличное поле на отсутствие значений

1. squall84 24.03.15 13:56 Сейчас в теме
здравствуйте.
Не могу сообразить как проверить табличное поле в документе на пустое знаачение.
Есть документ Возврат товаров от покупателя. Мне нужно выбрать все документы, в которых в табличном поле взаиморасчеты с контрагентами нет записей.
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. Boneman 299 24.03.15 14:01 Сейчас в теме
(1) squall84, проверяй на количество строк
10. AlexO 135 24.03.15 15:18 Сейчас в теме
(1) squall84,
как проверить табличное поле
Никак. В 1С невозможно запросом получить табличное поле. А ответы остальных, которые путают ТЗ, ТЧ и ТП - говорят о многом.
(2) Boneman,
А некоторые, читающие целые "лекции" о пользе и развитии "клиент-сервера в 1С" и общей "полезности" 8.2-8.3 - даже не знают, с какой стороны этот "клиент-сервер" торчит.
11. AlexO 135 24.03.15 15:23 Сейчас в теме
(1) squall84,
Мне нужно выбрать все документы, в которых в табличном поле взаиморасчеты с контрагентами нет записей.
Обойдите все документы, у которых есть табличная часть "взаиморасчеты", найдите с нулевыми записями, и получите их.
Делается небольшим запросом - при условии, что известны, какие виды документов искать.
Ответ на "первоначальный" вопрос ("получить документы, у которых табличное поле табличная часть содержит взаиморасчеты") запросом в 1С получить нельзя.
12. Allexe8.1 24.03.15 15:36 Сейчас в теме
(1) squall84,

ВЫБРАТЬ
	Док.Ссылка
ИЗ
	Документ.ВозвратТоваровОтПокупателя КАК Док
		ЛЕВОЕ СОЕДИНЕНИЕ Документ.ВозвратТоваровОтПокупателя.ДокументыРасчетовСКонтрагентом КАК ТЧ
		ПО Док.Ссылка = ТЧ.Ссылка
			И (ТЧ.НомерСтроки = 1)
ГДЕ
	ТЧ.Ссылка ЕСТЬ NULL 
Показать


ВЫБРАТЬ Ссылка 
ИЗ Документ.ВозвратТоваровОтПокупателя ГДЕ НЕ Ссылка В (ВЫБРАТЬ Различные Ссылка ИЗ документ.ВозвратТоваровОтПокупателя.ДокументыРасчетовСКонтрагентом )
schthaxe; bakhrooom; Евгений Онегин; squall84; +4 Ответить
15. AlexO 135 24.03.15 17:05 Сейчас в теме
(12) Allexe8.1, а теперь объясняйте человеку, как это работает, а то судя по сообщению через час - он не воспринял это как решение )
39. karamazoff 100 14.09.23 17:33 Сейчас в теме
(1)Табличное поле запросом не взять, если прям надо-надо, выгружайте тд в тз и уже там
3. vx_gas 32 24.03.15 14:11 Сейчас в теме
взаиморасчеты с контрагентами это табличная часть?
4. vx_gas 32 24.03.15 14:16 Сейчас в теме
наспамлю немного: если взаиморасчеты таб часть, тогда план запроса такой: (На примере реализации и т.ч. Товары)

ВЫБРАТЬ
	РеализацияТоваровУслуг.Ссылка
ПОМЕСТИТЬ вт1
ИЗ
	Документ.РеализацияТоваровУслуг КАК РеализацияТоваровУслуг
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ РАЗЛИЧНЫЕ
	РеализацияТоваровУслугТовары.Ссылка
ПОМЕСТИТЬ вт2
ИЗ
	Документ.РеализацияТоваровУслуг.Товары КАК РеализацияТоваровУслугТовары
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
	вт1.Ссылка
ИЗ
	вт1 КАК вт1
		ЛЕВОЕ СОЕДИНЕНИЕ вт2 КАК вт2
		ПО вт1.Ссылка = вт2.Ссылка
ГДЕ
	НЕ вт2.Ссылка ЕСТЬ NULL 
Показать
5. FractonKireyev 24.03.15 14:21 Сейчас в теме
Как-то так (документ и табличное поле другие, как заменить - сообразишь сам):
ВЫБРАТЬ
	АвансовыйОтчетПрочее.Ссылка,
	КОЛИЧЕСТВО(*) КАК Колво
ПОМЕСТИТЬ ВТ_Колво
ИЗ
	Документ.АвансовыйОтчет.Прочее КАК АвансовыйОтчетПрочее

СГРУППИРОВАТЬ ПО
	АвансовыйОтчетПрочее.Ссылка
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
	АвансовыйОтчет.Ссылка,
	ВТ_Колво.Колво
ИЗ
	Документ.АвансовыйОтчет КАК АвансовыйОтчет
		ЛЕВОЕ СОЕДИНЕНИЕ ВТ_Колво КАК ВТ_Колво
		ПО АвансовыйОтчет.Ссылка = ВТ_Колво.Ссылка
ГДЕ
	ВТ_Колво.Колво ЕСТЬ NULL 
Показать
24. vx_gas 32 26.03.15 09:27 Сейчас в теме
(5) До сих пор не понял для чего в первом запросе считается количество, вы же во втором можете на есть нулл ссылку проверять, есть ссылка значит и количество есть, нет ссылки, значит и количества нет, а уж сколько там количества этого - неважно, главное наличие или отсуствие.
25. spacecraft 26.03.15 09:35 Сейчас в теме
(24) vx_gas, табличная часть это не объект, у нее не может быть ссылки. Там ссылка на сам документ, а она конечно же будет, если документ есть.
27. vx_gas 32 26.03.15 10:52 Сейчас в теме
(25) Еще раз перефразирую, нафига какое то количество считать в запросе(в выборке 2 поля, ссылка и количество), если в таб части есть ссылка на объект, по которой при склеивании с таблицей самого объекта можно понять есть в таб части что-то или нет.

Как тогда по вашему объект связывается со своей таб частью если в таб части нет ссылки на него, меня аж просто заел интерес... Что же такое придумала 1с, чтобы связать таблицу объектов с таблицей табличных частей объектов без ссылки?
28. 32ops 193 26.03.15 11:28 Сейчас в теме
(27) Наверное чтобы первую ВТ уменьшить. Работать будет и без количества, только различные надо добавлять и дольше выбирать будет (наверное)
29. spacecraft 26.03.15 11:30 Сейчас в теме
(27) vx_gas, Вам такой термин "связь один ко многим" что-нибудь говорит?
30. vx_gas 32 26.03.15 13:50 Сейчас в теме
(29) Ну вот и я хочу добиться как без ссылки (цитирую: табличная часть это не объект, у нее не может быть ссылки) табличная часть может понять к какому она объекту относится?
31. spacecraft 26.03.15 13:54 Сейчас в теме
(30) vx_gas, сама табличная часть не имеет ссылку. Ссылка есть на объект.Документ. В строке таблицы, которая содержит Табличные части, хранится ссылка на документ и номер строки.
Вы путаете понятия: у табличной части "не может быть ссылки" и "не может хранить ссылки".
32. vx_gas 32 26.03.15 14:06 Сейчас в теме
(31) Ну вот видите, поискали и опс, ссылка то и нашлась :)
33. spacecraft 26.03.15 14:09 Сейчас в теме
(32) vx_gas, Вы путаете понятия: у табличной части "не может быть ссылки" и "не может хранить ссылки".
6. anterehin 15 24.03.15 14:29 Сейчас в теме
Ну я так понял , что нужно выбрать все Возвраты покупателя, по которым по факту нет взаиморасчетов, т.е. надо вязать с виртуальной таблицей ВзаиморасчетыСКонтрагентами, обороты и остатки.

ВЫБРАТЬ
	ВозвратТоваровОтПокупателя.Ссылка,
	ВзаиморасчетыСКонтрагентамиОстаткиИОбороты.СуммаВзаиморасчетовКонечныйОстаток
ИЗ
	Документ.ВозвратТоваровОтПокупателя КАК ВозвратТоваровОтПокупателя
		ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ВзаиморасчетыСКонтрагентами.ОстаткиИОбороты(, , Регистратор, , ) КАК ВзаиморасчетыСКонтрагентамиОстаткиИОбороты
		ПО ВозвратТоваровОтПокупателя.ДоговорКонтрагента = ВзаиморасчетыСКонтрагентамиОстаткиИОбороты.ДоговорКонтрагента
			И ВозвратТоваровОтПокупателя.Ссылка = ВзаиморасчетыСКонтрагентамиОстаткиИОбороты.Регистратор
ГДЕ
	ВозвратТоваровОтПокупателя.Дата МЕЖДУ &НачалоПериода И &КонецПериода
	И ВозвратТоваровОтПокупателя.ПометкаУдаления = ЛОЖЬ
	И ВозвратТоваровОтПокупателя.Проведен = ИСТИНА
	И ВзаиморасчетыСКонтрагентамиОстаткиИОбороты.СуммаВзаиморасчетовКонечныйОстаток <= ВозвратТоваровОтПокупателя.СуммаДокумента
Показать
8. squall84 24.03.15 14:56 Сейчас в теме
(6) anterehin, Да. Мне нужны документы в которых взаиморасчетов нет. Мне нужно их будет туда вписать, т.к. у нас не везде они вписаны, хотя должны были.
9. anterehin 15 24.03.15 15:00 Сейчас в теме
(8) squall84, Не понимаю, куда вы их собираетесь вписывать?
13. squall84 24.03.15 16:49 Сейчас в теме
(9) anterehin, у нас в некоторых документов взаиморасчеты с контрагентами не записаны именно в документе возврата. Нужно отобрать те, у которых табличная часть не заполнена. Найти какую именно реализацию туда вписать. И записать ее в табличную часть.
7. vasyak319 151 24.03.15 14:48 Сейчас в теме
Я так понимаю, как выбрать документы, в которых взаиморасчёты есть, вы в курсе? Тогда ваше условие такое: "ГДЕ Ссылка НЕ В (<тут подзапрос, возвращающий ссылки на документы, в которых взаиморасчёты есть>)"
14. squall84 24.03.15 17:00 Сейчас в теме
Написал такой запрос
ВЫБРАТЬ
	ВозвратТоваровОтПокупателяДокументыРасчетовСКонтрагентом.Ссылка,
	ВозвратТоваровОтПокупателяДокументыРасчетовСКонтрагентом.Ссылка.Номер
ПОМЕСТИТЬ возврат
ИЗ
	Документ.ВозвратТоваровОтПокупателя.ДокументыРасчетовСКонтрагентом КАК ВозвратТоваровОтПокупателяДокументыРасчетовСКонтрагентом
ГДЕ
	ВозвратТоваровОтПокупателяДокументыРасчетовСКонтрагентом.Ссылка.Дата МЕЖДУ &Дата1 И &Дата2

СГРУППИРОВАТЬ ПО
	ВозвратТоваровОтПокупателяДокументыРасчетовСКонтрагентом.Ссылка,
	ВозвратТоваровОтПокупателяДокументыРасчетовСКонтрагентом.Ссылка.Номер

ИМЕЮЩИЕ
	КОЛИЧЕСТВО(ВозвратТоваровОтПокупателяДокументыРасчетовСКонтрагентом.ДокументРасчетовСКонтрагентом) > 0
;
Показать

Тут я получаю все возвраты, у которых заполнена табличная часть. но, как не пытаюсь у меня не выходит получить возвраты, у которых табличная часть пуста.
по сути мне просто нужно выбрать все возвраты за заданные числа из исключить из них те, которые я уже нашел.
дописываю конструктором запрос
ВЫБРАТЬ
	ВозвратТоваровОтПокупателя.Ссылка
ИЗ
	Документ.ВозвратТоваровОтПокупателя КАК ВозвратТоваровОтПокупателя
		ВНУТРЕННЕЕ СОЕДИНЕНИЕ возврат КАК возврат
		ПО ВозвратТоваровОтПокупателя.Ссылка <> возврат.Ссылка
ГДЕ
	ВозвратТоваровОтПокупателя.Дата МЕЖДУ &Дата1 И &Дата2

Получаю полный список документов. Не срабатывает условие неравенства.
16. AlexO 135 24.03.15 17:08 Сейчас в теме
(14) squall84,
но, как не пытаюсь у меня не выходит получить возвраты, у которых табличная часть пуста.
И не получится. 1С не может, как SQL, найти ПУСТЫЕ записи.
Решение (возможный из вариантов) - в 12)
"Обманку" писать надо.
(12) объясните, наконец, что предложили - я не ошибся, автор не понял, что это было предложено решение ))
17. squall84 24.03.15 17:21 Сейчас в теме
(16) AlexO, Я понял объяснение. Но только не совсем уловил, взаимосвязь между двумя запросами.
Я уже понял, что я не найду пустые записи. Поэтому я решил найти все документы с заполненной табличной частью. Я их получил-запрос построил мне список. Теперь мне просто нужно получить весь список документов возврата и исключить из него те, которые я уже нашел. я такое уже делал не раз, но именно в данном конкретном случае у меня запрос не исключает. Т.е. равенство срабатывает. неравенство выдает полный список всех документов.
18. AlexO 135 24.03.15 17:24 Сейчас в теме
(17) squall84,
Но только не совсем уловил, взаимосвязь между двумя запросами.
Там нет никакой связи, кроме той, что предложено два из возможных варианта решения ))
Т.е. равенство срабатывает. неравенство выдает полный список всех документов.
Ну пусть автор запроса и объяснит ))
А то написать - полдела, а вот объянить, что написал - может не каждый ))
19. spacecraft 24.03.15 17:59 Сейчас в теме
(14) squall84, не слушай того, что якобы 1С не может.

ВЫБРАТЬ
    ВозвратТоваровОтПокупателя.Ссылка,
    ВозвратТоваровОтПокупателя.Номер
ИЗ
    Документ.ВозвратТоваровОтПокупателя КАК ВозвратТоваровОтПокупателя
ГДЕ
    ВозвратТоваровОтПокупателя.Дата МЕЖДУ &Дата1 И &Дата2

СГРУППИРОВАТЬ ПО
    ВозвратТоваровОтПокупателя.Ссылка,
    ВозвратТоваровОтПокупателя.Номер

ИМЕЮЩИЕ
    КОЛИЧЕСТВО(ВозвратТоваровОтПокупателя.ДокументРасчетовСКонтрагентом.НомерСтроки) = 0
Показать
arxxm; 32ops; +2 Ответить
20. AlexO 135 24.03.15 23:11 Сейчас в теме
(19) spacecraft, номерстроки = 0 - сильно
Оно там, кстати, как-бы вообще Неопределено.
21. AlexO 135 24.03.15 23:29 Сейчас в теме
(19) spacecraft,
ИМЕЮЩИЕ
КОЛИЧЕСТВО(ВозвратТоваровОтПокупателя.ДокументРасчетовСКонтрагентом.НомерСтроки) = 0
Это не считая того, что КОЛИЧЕСТВО - вообще запрещено использовать внутри ИМЕЮЩИЕ.
(19) spacecraft, вы и сотоварищи-однокружковцы хвалитесь,рвете рубашки, выкрикиваете панегерики и спорите по продукту, которого не знаете вообще. Как и по остальным вопросам и областям.
22. spacecraft 24.03.15 23:38 Сейчас в теме
(21) AlexO, товарищ теоретик, Вы сначала попробуйте...
23. vasyak319 151 25.03.15 10:17 Сейчас в теме
(14) squall84, хоть я и написал это в (7), мне не лень повторить:
ваше условие такое: "ГДЕ Ссылка НЕ В (<тут подзапрос, возвращающий ссылки на документы, в которых взаиморасчёты есть>)"
26. caponid 26.03.15 10:10 Сейчас в теме
ВЫБРАТЬ
	Док.Ссылка КАК Ссылка
ИЗ
	Документ.Ордер КАК Док
		ЛЕВОЕ СОЕДИНЕНИЕ Документ.Ордер.Товары КАК ДокТовары
		ПО (Док.Ссылка = ДокТовары.Ссылка)
ГДЕ
	ДокТовары.НомерСтроки ЕСТЬ NULL
Показать
34. anterehin 15 26.03.15 14:24 Сейчас в теме
Что то долго спор идет, решил накидать и выбрать Реализации у которых пустая табличная часть Услуги.. Работает

ВЫБРАТЬ
	РеализацияТоваровУслуг.Ссылка
ИЗ
	Документ.РеализацияТоваровУслуг КАК РеализацияТоваровУслуг
		ЛЕВОЕ СОЕДИНЕНИЕ Документ.РеализацияТоваровУслуг.Услуги КАК РеализацияТоваровУслугУслуги
		ПО (РеализацияТоваровУслугУслуги.Ссылка = РеализацияТоваровУслуг.Ссылка)
ГДЕ
	РеализацияТоваровУслуг.Дата МЕЖДУ &ДатаНач И &ДатаКон

СГРУППИРОВАТЬ ПО
	РеализацияТоваровУслуг.Ссылка

ИМЕЮЩИЕ
	КОЛИЧЕСТВО(РАЗЛИЧНЫЕ РеализацияТоваровУслугУслуги.Ссылка) = 0

УПОРЯДОЧИТЬ ПО
	РеализацияТоваровУслуг.Номер
Показать
35. vasyak319 151 26.03.15 14:38 Сейчас в теме
(34) anterehin, группировка и расчёт агрегатной функции (да ещё и с РАЗЛИЧНЫЕ) это лишее. Достаточно в
ГДЕ
добавить
И РеализацияТоваровУслугУслуги.Ссылка ЕСТЬ NULL
36. anterehin 15 26.03.15 14:43 Сейчас в теме
(35) vasyak319, Ну я накидал так.. просто что то никак к общему консенсусу народ не придет никак.
37. spacecraft 26.03.15 14:59 Сейчас в теме
(36) anterehin, да нет. все нормально. Просто возникло небольшое недопонимание.
38. AnPet 3 14.09.23 17:25 Сейчас в теме
Запрос = Новый Запрос;   

	Запрос.Текст = " 
	|ВЫБРАТЬ 
	|   Документ.Ссылка,  
	|   Документ.Услуги.НомерСтроки КАК КоличествоУслуг,
	|   Документ.Товары.НомерСтроки КАК КоличествоТоваров
	|ИЗ 
	|   Документ.РеализацияТоваровУслуг КАК Документ
	|ГДЕ 
	|	Документ.Дата МЕЖДУ &ДатаНачала И &ДатаОкончания 
	|";    
	

	Запрос.УстановитьПараметр("ДатаНачала", ДатаНачала); 
	Запрос.УстановитьПараметр("ДатаОкончания", ДатаОкончания);     
	
	ТЗЗапроса = Запрос.Выполнить().Выгрузить();

	Для Каждого СтрокаТЗ Из ТЗЗапроса Цикл

       КоличествоУслуг = СтрокаТЗ.КоличествоУслуг.Количество();
       КоличествоТоваров = СтрокаТЗ.КоличествоТоваров.Количество();

       // ...

    КонецЦикла;

       // ...
Показать
40. пользователь 14.09.23 17:47
Сообщение было скрыто модератором.
...
41. Sashares 35 14.09.23 18:10 Сейчас в теме
42. AnPet 3 15.09.23 09:00 Сейчас в теме
(40) Это решение, когда нужно не просто отобрать документы с какой-то одной пустой ТЧ, а нужно получить значение заполнение любого количества ТЧ документа, и на основании комбинаций этих значений произвести какие-то действия.
Подходит и для решения задачи автора темы.
43. user1867738 12.01.24 14:18 Сейчас в теме
Запросом по таблице получаем все ссылки документов где заполнена хоть одна строка таблицы, помещаем эти ссылки на документы во временную таблицу, во втором запросе получаем все документы, кроме документов с заполненной таблицей

ВЫБРАТЬ
	ИМ_КлиентыТелефоны.Ссылка КАК Ссылка
ПОМЕСТИТЬ ВТ_КлиентыСЗаполненнойТаблицейНомеров
ИЗ
	Справочник.ИМ_Клиенты.Телефоны КАК ИМ_КлиентыТелефоны
ГДЕ
	НЕ ИМ_КлиентыТелефоны.Ссылка.ПометкаУдаления
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
	ИМ_Клиенты.Ссылка КАК Ссылка
ИЗ
	Справочник.ИМ_Клиенты КАК ИМ_Клиенты
ГДЕ
	НЕ ИМ_Клиенты.ПометкаУдаления
	И НЕ ИМ_Клиенты.Ссылка В
				(ВЫБРАТЬ
					ВТ_КлиентыСЗаполненнойТаблицейНомеров.Ссылка КАК Ссылка
				ИЗ
					ВТ_КлиентыСЗаполненнойТаблицейНомеров КАК ВТ_КлиентыСЗаполненнойТаблицейНомеров)
Показать
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот