При ведении учета в конфигурациях «1С:Управление производственным предприятием 1.3» (УПП) или «1С:Комплексная автоматизация 1.1» (КА) с использованием расширенной аналитики учета затрат (РАУЗ) нередко возникает критическая ошибка: в складских отчетах (например, «Товары на складах») движения и остатки по сериям отображаются корректно, а в отчете «Ведомость по учету МПЗ» часть документов делает движения по ключам аналитики без указания серии. В результате по одним сериям зависают положительные остатки, по ключам без серии образуются отрицательные остатки (минусы), а регламентный документ «Расчет себестоимости выпуска» завершается с ошибками или формирует искаженные суммовые проводки.
Разберем детально, как устроена аналитика учета затрат по сериям в РАУЗ, по каким причинам серии могут пропадать из ключей и какими способами можно восстановить корректный учет без тотального перепроведения всей информационной базы.
Для понимания проблемы проанализируем различия в формировании движений между складскими регистрами и регистрами учета затрат:
ТоварыНаСкладах фиксирует физическое движение номенклатуры. Наличие серии в движениях этого регистра определяется исключительно реквизитом ВестиУчетПоСериям в карточке номенклатуры. Если серия выбрана в табличной части документа, она напрямую записывается в измерение регистра склада.УчетЗатрат и УчетЗатратРегл оперируют не прямыми ссылками на номенклатуру, склады и серии, а ссылками на элементы справочника КлючиАналитикиУчетаЗатрат. Чтобы серия вошла в состав ключа аналитики и зафиксировалась в регистре сведений АналитикаУчетаЗатрат, система проверяет соблюдение параметров учета затрат.Если в параметрах учетной политики или в самой номенклатуре не задан суммовой учет по сериям, механизм проведения документов намеренно очищает серию при генерации ключа затрат. В документе реквизит «Серия» остается заполненным, в складском отчете серия отображается, но в ключ аналитики РАУЗ подставляется пустая ссылка.
Первым делом выясним, включен ли суммовой (партионный) учет серий для проблемных позиций. Проверим следующие настройки:
ВестиУчетПоСериям. Этот флаг отвечает за возможность выбора серии в документах и складской количественный учет.Обратим внимание: если флаг «Вести партионный учет по сериям» устанавливается уже после того, как по номенклатуре были введены документы за длительный период, старые движения автоматически не обновятся. Потребуется актуализация движений по затратным регистрам.
В типовых конфигурациях за подбор и генерацию ключей отвечает процедура формирования аналитики (вызов метода НайтиИлиСоздатьКлючАналитики()). Этот механизм активно кэширует соответствия измерений в оперативной памяти текущего сеанса пользователя.
Рассмотрим сценарий, когда в базе возникает дублирование или рассинхронизация ключей:
АналитикаУчетаЗатрат, в кэше сеанса сохраняются устаревшие ссылки. В итоге проведение одного и того же документа может давать случайный результат: то правильный ключ, то пустой.Для устранения системных сбоев справочников аналитики выполним регламентную процедуру: откроем меню Операции → Обработка → Тестирование и исправление ключей аналитики. Данная обработка сверяет состав измерений в регистрах сведений с полями справочников ключей и устраняет расхождения в наименованиях и связях.
Если перепроведение документа не меняет движения по регистрам РАУЗ и документ продолжает упорно ссылаться на старый ключ, обязательно проверим состояние набора записей. В платформе «1С:Предприятие» при ручной правке движений взводится свойство набора записей РучнаяКорректировка.
Посмотрим, как проверить наличие ручной блокировки программно:
НаборЗаписей = РегистрыНакопления.УчетЗатрат.СоздатьНаборЗаписей();
НаборЗаписей.Отбор.Регистратор.Установить(СсылкаНаДокумент);
НаборЗаписей.Прочитать();
Если НаборЗаписей.РучнаяКорректировка Тогда
Сообщить("Движения документа заблокированы ручной корректировкой!");
КонецЕсли;
Если для движений установлен признак ручной корректировки, стандартное перепроведение документа полностью пропускает алгоритм расчета и перезаписи движений по затратным регистрам, оставляя ошибочный ключ нетронутым.
Когда перепроведение документов за прошлые месяцы или годы недопустимо из-за закрытых периодов и сданной отчетности, применим один из следующих способов исправления:
Этот метод является самым безопасным с точки зрения целостности закрытых периодов. Разберем порядок действий:
КорректировкаЗаписейРегистров на дату текущего открытого периода.УчетЗатрат и УчетЗатратРегл.РасчетСебестоимостиВыпуска за корректируемый месяц. СЛАУ успешно решится без деления на ноль и зависших остатков.Если пересортица по сериям затронула не только РАУЗ, но и складские регистры, наиболее корректным типовым инструментом служит документ КомплектацияНоменклатуры с видом операции «Комплектация»:
Если необходимо восстановить учет в рамках текущего месяца, но нельзя трогать взаиморасчеты и партии НДС, напишем простую сервисную обработку. Вместо полного перепроведения документа выполним перезапись исключительно движений РАУЗ:
Для Каждого ДокСсылка Из МассивПроблемныхДокументов Цикл
ДокументОбъект = ДокСсылка.ПолучитьОбъект();
// Очищаем и заново формируем движения только по РАУЗ
ДокументОбъект.Движения.УчетЗатрат.Очистить();
ДокументОбъект.Движения.УчетЗатратРегл.Очистить();
// Вызываем типовой механизм формирования движений учета затрат
ОбработкаТабличныхЧастей.СформироватьДвиженияПоУчетуЗатрат(ДокументОбъект);
ДокументОбъект.Движения.УчетЗатрат.Записать();
ДокументОбъект.Движения.УчетЗатратРегл.Записать();
КонецЦикла;
Такой подход исключает случайные изменения в регистрах взаиморасчетов с контрагентами, регистрах НДС и остатках взаиморасчетов по накладным.
Для предотвращения повторения подобных инцидентов настроим системные ограничения в базе данных: