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