Как исправить ошибку расхождения регистров "Себестоимость товаров" и "Товары организаций" при закрытии месяца в 1С:ERP и КА?

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

При обновлении крупных корпоративных систем на базе 1С, таких как 1С:ERP Управление предприятием или 1С:Комплексная автоматизация, специалисты часто сталкиваются с непредвиденным поведением системы при выполнении регламентных операций. Одной из наиболее резонансных проблем в релизах ветки 2.4.5.111 стала ошибка контроля согласованности данных при закрытии месяца.

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

Суть проблемы и симптомы ошибки

Давайте проанализируем ситуацию, которая возникает при попытке выполнить операцию «Закрытие месяца». На этапе расчета себестоимости система выдает жесткую ошибку следующего содержания:

Движения этапа производства по регистру "Себестоимость товаров" не соответствуют регистру "Товары организаций". Требуется перепровести документ по регистру "Себестоимость товаров": Этап производства [Номер] от [Дата], организация "[Название]", регистр "СебестоимостьТоваров".

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

  1. По регистру ТоварыОрганизаций документ списывает материалы со склада (производится расход физического запаса).
  2. По регистру СебестоимостьТоваров происходит перенаправление затрат со склада на производственные затраты (списание стоимости материалов в незавершенное производство).

С точки зрения методологии учета движения абсолютно корректны, однако встроенный алгоритм автоматической проверки считает иначе. Выясним причину такого поведения системы.

Почему происходит сбой: глубокий анализ механизмов учета

Проблема кроется в процедуре автоматической сверки движений, которая была внедрена разработчиками для предотвращения расхождений между фактическим наличием товаров у юридических лиц и их стоимостной оценкой. Сбой в логике проверки (зарегистрированный в базе ошибок «1С» под номером 000046842) происходит на стыке взаимодействия двух факторов:

1. Отключенная опция обособленного учета себестоимости.
Если в информационной базе по пути НСИ и администрирование — Настройка НСИ и разделов — Финансовый результат и контроллинг — Учет товаров выключена настройка «Обособленный учет себестоимости товаров по видам запасов», то система при расчете стоимости должна очищать аналитику от конкретного назначения или вида запасов. Однако проверочный запрос в общем модуле ПартионныйУчет22 не учитывал эту особенность и пытался сопоставить аналитики напрямую, что приводило к ложному сигналу о несоответствии ключей.

2. Использование номенклатуры с типом «Работа».
В производственных процессах часто используются не только сырье и материалы, но и нематериальные составляющие — работы (услуги сторонних контрагентов или собственных подразделений). Номенклатура с типом Работа не имеет физического выражения на складе, поэтому она не делает и не должна делать движений по регистру ТоварыОрганизаций. В то же время ее стоимость обязана учитываться в регистре СебестоимостьТоваров для корректного формирования производственных затрат. Ошибка в запросе проверки приводила к тому, что система пыталась найти движения по работам в регистре ТоварыОрганизаций, не находила их и сигнализировала о расхождении контуров.

Способ 1. Официальное исправление в программном коде (для программистов)

Если вы имеете доступ к изменению конфигурации или используете механизм расширений, наиболее правильным решением будет внесение исправлений непосредственно в общий модуль ПартионныйУчет22. Давайте пошагово разберем, какие строки кода необходимо скорректировать.

Откроем конфигуратор и перейдем в общий модуль ПартионныйУчет22. Найдем процедуру ИсправитьПроблемыВДвиженияхИДокументах() и перейдем к области #Область СоответствиеТоваровОрганизацийИСебестоимости.

В тексте запроса нам необходимо заменить исходный пакет формирования временной таблицы ВтТоварыОрганизацийИСебестоимость. Найдем следующий фрагмент кода:


"ВЫБРАТЬ
|    ТоварыОрганизаций.Регистратор КАК Регистратор,
|    ТоварыОрганизаций.АналитикаУчетаНоменклатуры КАК АналитикаУчетаНоменклатуры,
|    ТоварыОрганизаций.Количество КАК Количество,
|    ТоварыОрганизаций.Организация КАК Организация
|ПОМЕСТИТЬ ВтТоварыОрганизацийИСебестоимость
|ИЗ
|    РегистрНакопления.ТоварыОрганизаций КАК ТоварыОрганизаций

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


"ВЫБРАТЬ
|    ТоварыОрганизаций.Регистратор КАК Регистратор,
|    (ВЫБОР
|    КОГДА &УчитыватьСебестоимостьТоваровПоВидамЗапасов
|    ТОГДА ТоварыОрганизаций.АналитикаУчетаНоменклатуры
|    ИНАЧЕ АналитикаБезНазначения.КлючАналитики
|    КОНЕЦ) КАК АналитикаУчетаНоменклатуры,
|    ТоварыОрганизаций.Количество КАК Количество,
|    ТоварыОрганизаций.Организация КАК Организация
|ПОМЕСТИТЬ ВтТоварыОрганизацийИСебестоимость
|ИЗ
|    РегистрНакопления.ТоварыОрганизаций КАК ТоварыОрганизаций
|    ЛЕВОЕ СОЕДИНЕНИЕ Справочник.КлючиАналитикиУчетаНоменклатуры КАК Аналитика
|    ПО Аналитика.Ссылка = ТоварыОрганизаций.АналитикаУчетаНоменклатуры
|
|    ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.АналитикаУчетаНоменклатуры КАК АналитикаБезНазначения
|    ПО АналитикаБезНазначения.Номенклатура = Аналитика.Номенклатура
|    И АналитикаБезНазначения.Характеристика = Аналитика.Характеристика
|    И АналитикаБезНазначения.Назначение = ЗНАЧЕНИЕ(Справочник.Назначения.ПустаяСсылка)
|    И АналитикаБезНазначения.Серия = Аналитика.Серия
|    И АналитикаБезНазначения.Склад = Analytics.Склад
|    И АналитикаБезНазначения.СтатьяКалькуляции = Аналитика.СтатьяКалькуляции

Также нам необходимо исключить из проверки номенклатуру с типом Работа. Для этого в том же запросе найдем строчку проверки пустой ссылки вида запасов:


|    И СебестоимостьТоваров.ВидЗапасов <> ЗНАЧЕНИЕ(Справочник.ВидыЗапасов.ПустаяСсылка)

И заменим ее на условие, которое полностью игнорирует операции по работам при сопоставлении регистров:


|    И СебестоимостьТоваров.АналитикаУчетаНоменклатуры.Номенклатура.ТипНоменклатуры <> ЗНАЧЕНИЕ(Перечисление.ТипыНоменклатуры.Работа)

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

Способ 2. Функциональный обход проблемы в пользовательском интерфейсе

Рассмотрим альтернативный вариант решения для ситуаций, когда у вас нет возможности оперативно вносить изменения в программный код (например, база находится на строгой поддержке, или вы не обладаете правами администратора-программиста). Эту системную ошибку можно временно "обойти", изменив одну из настроек учетной политики системы.

Выполним следующие шаги в интерфейсе программы:

  1. Перейдем в раздел НСИ и администрирование.
  2. В панели навигации выберем пункт Настройка НСИ и разделов, далее откроем подраздел Финансовый результат и контроллинг.
  3. Развернем группу настроек Учет товаров.
  4. Установим флаг (включим опцию) «Обособленный учет себестоимости товаров по видам запасов».

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

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

Резюме

Мы проанализировали критическую ошибку сопоставления регистров в 1С:ERP и Комплексной автоматизации версии 2.4.5.111. Выяснилось, что ее причинами стали неучтенная ветка кода при отключенном обособленном учете и некорректная обработка номенклатурных позиций с типом «Работа».

Для исправления ситуации вы можете выбрать один из двух путей: либо точечно поправить код в общем модуле ПартионныйУчет22, воспользовавшись предложенным выше кодом официального исправления от фирмы 1С, либо временно активировать обособленный учет по видам запасов в пользовательских настройках финансового результата.

← На главную