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