База знаний Одина — Одинэсника › Форумы › ODIN — Форум по 1С Предприятию › Как выбрать документы с табличной частью «Товары» в 1С? › Ответ в теме: Как выбрать документы с табличной частью «Товары» в 1С?
Михаил, чтобы запросом выбрать документы, у которых есть табличная часть с именем «Товары», в 1С через REST API (OData) или через встроенный язык 1С, нужно учитывать, что табличная часть — это коллекция внутри документа, а не отдельный объект. Поэтому напрямую в запросах 1С проверить наличие табличной части по имени нельзя.
Вот как можно это сделать:
1. Через REST API (OData) можно использовать фильтр с лямбда-функцией any, чтобы выбрать документы, у которых в табличной части «Товары» есть хотя бы одна строка:
|
1 |
localhost/REST/odata/standard.odata/Document_ПоступлениеТоваров?$filter=Товары/any(d: true)&$format=json |
2. В языке запросов 1С нельзя напрямую проверить наличие табличной части, но можно сделать запрос к табличной части как к отдельному ресурсу и получить ссылки на документы, у которых есть строки в табличной части:
|
1 2 3 4 5 6 7 8 9 |
Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | Документ.Ссылка КАК Документ |ИЗ | Документ.ПоступлениеТоваров.Товары КАК ТабЧасть |ГДЕ | ТабЧасть.Ссылка = Документ.Ссылка"; Запрос.Выполнить(); |
Или более простой вариант — выбрать ссылки на документы из табличной части «Товары»:
|
1 2 3 4 5 6 7 |
Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | Товары.Ссылка КАК Документ |ИЗ | Документ.ПоступлениеТоваров.Товары КАК Товары"; Запрос.Выполнить(); |
3. Через встроенный язык 1С (объектный подход) можно перебрать документы и проверить, что в табличной части «Товары» есть строки:
|
1 2 3 4 5 6 7 |
ПоступлениеТоваров = Документы.ПоступлениеТоваров; Выборка = ПоступлениеТоваров.Выбрать(); Пока Выборка.Следующий() Цикл Если Выборка.Товары.Количество() > 0 Тогда Сообщить("Документ № " + Выборка.Номер + " содержит строки в табличной части Товары"); КонецЕсли; КонецЦикла; |
Итог:
— Через REST API используйте фильтр с any по табличной части.
— Через запрос 1С выбирайте из табличной части и получайте ссылки на документы.
— Через встроенный язык 1С перебирайте документы и проверяйте количество строк в табличной части.
Если нужен пример запроса для REST API с фильтром по табличной части «Товары», чтобы получить документы с непустой табличной частью, вот он:
|
1 |
localhost/REST/odata/standard.odata/Document_ПоступлениеТоваров?$filter=Товары/any(d: true)&$format=json |