В процессе разработки отчетов или механизмов выгрузки данных в конфигурации «1С:Бухгалтерия 8.3» (редакция 3.0) программисты часто сталкиваются с задачей получения себестоимости списанного товара. Типичная ошибка новичка — попытка найти эти данные в табличных частях документа Реализация товаров и услуг или связать реализацию напрямую с документом Поступление товаров и услуг. Разберем подробно, почему такой подход не работает и как правильно «вытащить» себестоимость с помощью запроса.
В 1С учет организован таким образом, что в самом документе реализации фиксируется только то, что мы продаем, сколько и по какой цене (цена продажи). Себестоимость же является расчетной величиной. Она определяется программой только в момент проведения документа на основании выбранного метода оценки МПЗ (ФИФО или «По средней»). При миграции данных корректно перенести остатки и документы позволяет переход с 1С:УПП 1.3 на 1С:Бухгалтерию 3.0.
Попытка связать таблицы товаров реализации и поступления через запрос ЛЕВОЕ СОЕДИНЕНИЕ по номенклатуре приведет к неверным результатам, так как одна строка реализации может списывать остатки из десяти разных поступлений (партий). Единственным достоверным источником данных о себестоимости являются движения документа по регистрам.
Для получения себестоимости в «1С:Бухгалтерии» необходимо обращаться к таблице РегистрБухгалтерии.Хозрасчетный.ДвиженияССубконто. Именно здесь фиксируются проводки, которые создаются при проведении документа. Проанализируем типичную проводку по списанию товара:
Реализация товаров и услуг.Сумма по этой проводке и будет являться искомой себестоимостью. Рассмотрим, как это выглядит в коде запроса.
Чтобы получить данные, нам нужно отфильтровать записи регистра по регистратору и счетам учета. Рассмотрим пример построения запроса:
ВЫБРАТЬ
ХозрасчетныйДвиженияССубконто.СубконтоКт1 КАК Номенклатура,
ХозрасчетныйДвиженияССубконто.СубконтоКт2 КАК Склад,
ХозрасчетныйДвиженияССубконто.СубконтоКт3 КАК Партия,
ХозрасчетныйДвиженияССубконто.КоличествоКт КАК Количество,
ХозрасчетныйДвиженияССубконто.Сумма КАК СебестоимостьИтого
ИЗ
РегистрБухгалтерии.Хозрасчетный.ДвиженияССубконто КАК ХозрасчетныйДвиженияССубконто
ГДЕ
ХозрасчетныйДвиженияССубконто.Регистратор = &СсылкаНаДокумент
И ХозрасчетныйДвиженияССубконто.СчетДт = ЗНАЧЕНИЕ(ПланСчетов.Хозрасчетный.СебестоимостьПродаж)
И ХозрасчетныйДвиженияССубконто.СчетКт = ЗНАЧЕНИЕ(ПланСчетов.Хозрасчетный.ТоварыНаСкладах)
В данном примере СубконтоКт1 соответствует номенклатуре, а Сумма — общей себестоимости списанной партии. Чтобы получить себестоимость единицы, необходимо разделить Сумма на КоличествоКт прямо в тексте запроса или при обработке выборки.
Рассмотрим ситуацию, когда в учетной политике установлен метод ФИФО. В этом случае на счете 41.01 (или 10.01 для материалов) включается третье субконто — Партии. Это субконто содержит ссылку на документ поступления.
Если одна строка реализации списывает товар из разных партий, запрос вернет несколько строк для одной и той же номенклатуры. Для получения корректной «цены за единицу» в рамках всего документа реализации рекомендуется использовать агрегатные функции СУММА() с группировкой по номенклатуре.
Важный момент: Если в настройках параметров учета отключено ведение аналитического учета по партиям, то субконто Партии будет пустым. В таком случае расчет себестоимости фактически идет по «Средней», даже если в политике формально указано ФИФО.
Проанализируем еще один критический аспект — регламентные операции. В «1С:Бухгалтерии» в течение месяца себестоимость при проведении документов может рассчитываться предварительно (например, без учета дополнительных расходов на приобретение или транспортных затрат).
Окончательная и юридически значимая себестоимость формируется только после выполнения обработки «Закрытие месяца», а именно операции Корректировка стоимости номенклатуры. Эта операция может создавать дополнительные проводки, корректирующие сумму списания. Поэтому, если вы строите отчет за прошлые периоды, убедитесь, что месяц закрыт, иначе данные запроса по регистратору могут быть неполными.
Выясним, когда стоит использовать другие регистры. Если в организации включен раздельный учет НДС (например, для экспорта или совмещения систем налогообложения), данные о себестоимости и партиях дублируются в регистре накопления РаздельныйУчетНДС.
Работать с ним зачастую проще, чем с регистром бухгалтерии, так как он имеет плоскую структуру (измерения и ресурсы) и содержит прямые поля Номенклатура, АналитикаУчетаПартий (где хранится документ поступления) и Стоимость. Запрос к этому регистру будет работать быстрее и синтаксически выглядеть проще.
Подведем итог нашему исследованию. Для того чтобы корректно получить себестоимость в 1С 8.3, следует придерживаться следующих правил:
Реализация и Поступление.Выборка.Сумма / Выборка.Количество.Соблюдение этих методологических принципов позволит вам создавать надежные отчеты и механизмы интеграции, которые будут выдавать данные, идентичные тем, что видит бухгалтер в стандартных отчетах программы. Для реализации готового обмена без программирования можно подобрать решения из раздела переносов данных для 1С:Бухгалтерии.