База знаний Одина — Одинэсника › Форумы › ODIN — Форум по 1С Предприятию › Как получить все документы по организации в 1С, игнорируя их виды? › Ответ в теме: Как получить все документы по организации в 1С, игнорируя их виды?
В 1С нет универсального объекта, который сразу вернет все документы разных видов в одном наборе, потому что каждый вид документа — это отдельный объект метаданных с собственным набором реквизитов и табличных частей. Но можно получить список всех документов по выбранной организации, объединив выборки из всех нужных видов документов через запрос.
Пример подхода на языке 1С (8.3), где объединяются документы нескольких видов по организации:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 |
Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | Док.Дата КАК Дата, | Док.Номер КАК Номер, | &ВидДокумента КАК ВидДокумента, | Док.Ссылка КАК Ссылка |ИЗ | Документ.ЗаказПокупателя КАК Док |ГДЕ | Док.Организация = &Организация |ОБЪЕДИНИТЬ ВСЕ |ВЫБРАТЬ | Док.Дата, | Док.Номер, | &ВидДокумента2, | Док.Ссылка |ИЗ | Документ.ПоступлениеТоваров КАК Док |ГДЕ | Док.Организация = &Организация"; Запрос.УстановитьПараметр("Организация", СсылкаНаОрганизацию); Запрос.УстановитьПараметр("ВидДокумента", "ЗаказПокупателя"); Запрос.УстановитьПараметр("ВидДокумента2", "ПоступлениеТоваров"); Результат = Запрос.Выполнить().Выбрать(); Пока Результат.Следующий() Цикл // Здесь можно обработать каждый документ: Результат.Дата, Результат.Номер, Результат.ВидДокумента, Результат.Ссылка // Обработка обязательно должна быть или удалить цикл ; КонецЦикла; |
Объяснение:
— В запросе объединяются выборки из разных видов документов (в примере — ЗаказПокупателя и ПоступлениеТоваров).
— В каждом подзапросе фильтруется по выбранной организации.
— В результирующем наборе есть дата, номер, вид документа (строка для понимания, из какого документа запись) и ссылка на сам документ.
— Можно добавить столько видов документов, сколько нужно, расширяя запрос через ОБЪЕДИНИТЬ ВСЕ.
Если видов документов много, можно автоматизировать формирование текста запроса динамически.
Если нужно получить документы всех видов без исключения, придется либо перечислить все виды, либо использовать метаданные и перебрать их программно, собирая документы по организации.
Пример перебора всех видов документов и выборки по организации:
|
1 2 3 4 5 6 7 8 9 10 |
Организация = СсылкаНаОрганизацию; ВсеДокументы = Метаданные.Документы; Для каждого ВидДокумента Из ВсеДокументы Цикл Выборка = ВидДокумента.Выбрать(); Пока Выборка.Следующий() Цикл Если Выборка.Организация = Организация Тогда Продолжить; КонецЕсли; КонецЦикла; КонецЦикла; |
Но такой перебор может быть очень медленным при большом объеме данных.
Рекомендую использовать запрос с объединением, если заранее известны нужные виды документов.