Часто при разработке отчетов в 1С перед программистом встает задача: вывести в одну строку данные из двух разных источников — например, текущие остатки на складе и связанные с ними документы реализации. Начинающие разработчики часто пытаются решить эту задачу с помощью оператора ОБЪЕДИНИТЬ или ОБЪЕДИНИТЬ ВСЕ, однако этот путь приводит к тому, что данные о товаре и данные о документе выводятся в разных строках, оставляя пустые ячейки (NULL). Давайте разберем, почему это происходит и как сделать правильно.
Важно понимать разницу в логике работы операторов запроса. ОБЪЕДИНИТЬ ВСЕ просто «склеивает» результаты двух выборок, помещая строки второй таблицы строго под строками первой. Запрос не умеет автоматически объединять столбцы по общему признаку, если вы не используете агрегатные функции и группировку.
Если ваша цель — получить структуру Товар | Остаток | Документ | Количество, то использование объединения лишь создаст «лесенку» из данных. Чтобы исправить это, вам придется оборачивать результат во вложенный запрос и использовать группировки, что сильно усложнит код и снизит производительность.
Если вам нужно видеть остатки и связанные с ними реализации в одной строке, правильнее использовать механизм соединений. Рассмотрим основные варианты:
При использовании соединений не забывайте использовать функцию ЕСТЬNULL(). Это критически важно, чтобы вместо пустых значений NULL в отчете отображались нули, что позволит корректно суммировать данные.
ВЫБРАТЬ
ЕСТЬNULL(Остатки.Номенклатура, Продажи.Номенклатура) КАК Номенклатура,
ЕСТЬNULL(Остатки.КоличествоОстаток, 0) КАК Остаток,
Продажи.Ссылка КАК Документ,
ЕСТЬNULL(Продажи.Количество, 0) КАК КоличествоПродаж
ИЗ
РегистрНакопления.ТоварыНаСкладах.Остатки(&НаДату, ) КАК Остатки
ПОЛНОЕ СОЕДИНЕНИЕ
Документ.РеализацияТоваровУслуг.Товары КАК Продажи
ПО Остатки.Номенклатура = Продажи.Номенклатура
Самым методически верным решением для платформы 1С является использование Системы компоновки данных (СКД). Она избавляет от необходимости писать сложные «тяжелые» запросы и помогает избежать классических ошибок, таких как декартово произведение (задвоение данных).
Рассмотрим шаги по настройке СКД:
Номенклатура.Преимущество этого метода в том, что СКД автоматически сгруппирует данные по номенклатуре, корректно посчитает итоги и избавит вас от «размножения» строк, которое часто случается при ручном написании ПОЛНОГО СОЕДИНЕНИЯ в консоли запросов.
Работая с остатками и оборотами, всегда учитывайте следующие моменты:
Используя предложенные методы, вы сможете построить отчет любой сложности, сохранив при этом чистоту кода и высокую скорость работы системы.