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