Как правильно доработать движения регистра «Себестоимость товаров» в 1С:ERP и УТ 11?

Программист 1С v8.3 (Управляемые формы) 1С:ERP Управление предприятием Управленческий учет IT и автоматизация бизнеса
← На главную

Разработка и доработка механизмов расчета себестоимости в конфигурациях 1С:ERP и «Управление торговлей 11» — одна из самых сложных и ответственных задач для программиста 1С. Любое неквалифицированное вмешательство в регистр накопления СебестоимостьТоваров может привести к фатальным ошибкам при регламентной операции «Закрытие месяца», нарушению баланса партионного учета и искажению финансового результата компании. В этой статье мы подробно разберем, как устроена архитектура этого регистра, как правильно работать с его ключевыми аналитиками и какие альтернативные, более безопасные методы решения бизнес-задач существуют.

В чем опасность прямой записи движений в регистр «Себестоимость товаров»?

Проанализируем ситуацию, которая возникает при попытке заставить новый кастомный документ делать прямые движения по регистру СебестоимостьТоваров. На первый взгляд, регистр выглядит как обычный регистр остатков. Однако его поведение при закрытии месяца кардинально отличается от простых регистров оперативного учета.

Выясним главные причины, почему прямое проведение кастомного документа по этому регистру может «сломать» закрытие месяца:

  1. Двухфазный расчет себестоимости. В течение месяца документы делают так называемые «первичные» движения (фиксируют количество и предварительную стоимость). При закрытии месяца процедура расчета себестоимости полностью очищает расчетные движения и пересчитывает их заново по сложным алгоритмам (например, распределяет партии по ФИФО 2.2 или решает систему линейных уравнений РАУЗ). Если ваш документ делает движения «вручную», расчет себестоимости может либо проигнорировать их, либо выдать ошибку распределения стоимости.
  2. Нарушение финансового баланса. Любое движение по регистру СебестоимостьТоваров должно быть строго сбалансировано с другими связанными регистрами. В системе 1С:ERP учет строится по принципу двойной записи на уровне регистров накопления. Если вы делаете списание или приход по себестоимости, параллельно должны быть сделаны корректные движения по регистрам ТоварыОрганизаций, ТоварыНаСкладах, ВыручкаИСебестоимостьПродаж, а также по регистрам партионного учета (например, ДетализацияПартийТоваровДляНДС). Разрыв связей между этими регистрами приведет к расхождению отчетов и невозможности закрыть месяц.
  3. Регистрация в очередях расчета. Механизм распределения партий и расчета стоимости списания работает по очередям изменений. Чтобы ваш документ полноценно участвовал в расчете себестоимости, его движения должны регистрироваться в служебных регистрах сведений очереди (таких как ОчередьРасчетаСебестоимостиТоваров). Без этого система просто не увидит необходимость пересчета партий по вашему документу.

Как правильно получать ключи аналитики учета номенклатуры (АУН)?

Регистр СебестоимостьТоваров хранит сведения о ТМЦ не в виде прямых ссылок на справочники Номенклатура или Склады, а через специальный разрез — измерение АналитикаУчетаНоменклатуры (АУН). Это сделано для оптимизации производительности СУБД при расчете сложных формул.

Разберем по шагам, как программно получить или создать корректный ключ аналитики для вашего документа. Для этого ни в коем случае нельзя вручную создавать элементы справочника КлючиАналитикиУчетаНоменклатуры. В системе предусмотрены готовые процедуры в менеджере соответствующего регистра сведений.

Рассмотрим пример кода, который возвращает нужный ключ аналитики:


ПараметрыАналитики = Новый Структура("Номенклатура, Характеристика, Склад, Назначение, СтатьяКалькуляции");
ПараметрыАналитики.Номенклатура = СтрокаТабличнойЧасти.Номенклатура;
ПараметрыАналитики.Характеристика = СтрокаТабличнойЧасти.Характеристика;
ПараметрыАналитики.Склад = СтрокаТабличнойЧасти.Склад;
ПараметрыАналитики.Назначение = СтрокаТабличнойЧасти.Назначение;
ПараметрыАналитики.СтатьяКалькуляции = Справочники.СтатьиКалькуляции.ПустаяСсылка();

КлючАналитики = РегистрыСведений.АналитикаУчетаНоменклатуры.ЗначениеКлючаАналитики(ПараметрыАналитики);

Этот метод самостоятельно проверит базу данных на наличие соответствующей комбинации параметров. Если ключ уже существует, функция быстро вернет ссылку на него. Если такой комбинации еще не было в базе, система автоматически создаст новый элемент справочника ключей аналитики и запишет его в регистр сведений, вернув готовую ссылку программисту. Этот код рекомендуется вызывать при проведении документа или при заполнении табличной части.

Виды запасов и партионный учет

Еще одно важнейшее измерение регистра себестоимости — ВидЗапасов. Оно определяет, кому принадлежит товар (собственный товар, комиссионный, давальческое сырье, товар на ответственном хранении и т.д.).

Если вы разрабатываете собственный документ прихода (например, аналог поступления на ответственное хранение), критически важно правильно заполнять вид запасов. Если оставить это поле пустым или заполнить его неверно, алгоритм партионного учета ФИФО не сможет сопоставить приход с последующим расходом. В результате при проведении документов списания себестоимость по вашей «партии» списываться не будет, а на остатках зависнут «суммовые хвосты».

В партионном учете версии 2.2 и выше документ партии (например, ПриобретениеТоваровУслуг) подставляется в регистр себестоимости не в момент проведения первичного документа списания, а непосредственно во время регламентного расчета партий при закрытии месяца. Ваш кастомный документ прихода должен быть признан системой как «партиобразующий». Для этого его необходимо добавить в определяемые типы и подписки на события, отвечающие за проведение по партиям, что требует глубокого вмешательства в код конфигурации.

Альтернативные и безопасные варианты решения задачи

Учитывая колоссальные риски и трудозатраты на доработку типового механизма РАУЗ, рассмотрим более изящные архитектурные решения. Очень часто бизнес-требования (например, учет аренды оборудования или возврат изношенных аналогов ТМЦ) можно успешно реализовать без изменения движений регистра СебестоимостьТоваров.

Вариант 1. Использование схемы «Списание на расходы» и «Прочее оприходование»

Если бизнес-процесс требует передать в аренду товар стоимостью 100 рублей, а вернуть из аренды аналогичный изношенный товар стоимостью 30 рублей, можно применить следующую схему с использованием типовых документов:

  1. Передача ТМЦ в аренду оформляется типовым документом «Внутреннее потребление» с видом операции «Списание на расходы». Себестоимость товара (100 рублей) списывается на специально выделенную статью расходов (например, «Амортизация арендуемого имущества»).
  2. Для забалансового количественного учета ТМЦ у арендатора создается простой кастомный регистр сведений или накопления (например, ТоварыВАренде). Движения по нему делает ваш кастомный АРМ или документ «Передача в аренду».
  3. Возврат изношенного аналога оформляется типовым документом «Прочее оприходование товаров». При этом товар приходуется по фиксированной стоимости (30 рублей) на статью доходов (для компенсации ранее списанных расходов).

В результате финансовый баланс предприятия абсолютно корректен: чистый расход по сделке аренды составил 70 рублей (100 списано, 30 возвращено), а регламентный расчет себестоимости отработал без единой ошибки, так как использовались только типовые документы.

Вариант 2. Перемещение на выделенный склад хранения

Если арендованное имущество не должно списываться с баланса, а должно продолжать числиться в составе запасов компании:

  1. Создается виртуальный склад (например, «Арендаторы»).
  2. Передача оборудования оформляется типовым документом «Перемещение товаров» со склада компании на склад «Арендаторы». При этом себестоимость сохраняется на балансе предприятия.
  3. Для детального аналитического учета (какой конкретно клиент взял оборудование) используется кастомный регистр накопления, который никак не влияет на финансовые регистры ERP, но позволяет строить детальные отчёты по клиентам.

Резюме

Дописывать движения в регистр СебестоимостьТоваров вручную крайне не рекомендуется. Это оправдано только в уникальных случаях при создании глубоко кастомизированных отраслевых решений. Во всех остальных ситуациях лучшим решением будет использование типовых механизмов списания и оприходования ТМЦ, дополненных внешними забалансовыми регистрами для ведения специфического оперативного учета.

← На главную