Реально ли скорректировать регистр Себестоимость товаров в 1С:ERP и почему Корректировка регистров не помогает

Программист 1С v8.3 (Управляемые формы) 1С:ERP Управление предприятием Управленческий учет Промышленность, строительство и АПК
← На главную

В процессе эксплуатации 1С:ERP Управление предприятием специалисты часто сталкиваются с ситуациями, когда в прошлых периодах (иногда даже несколько лет назад) были допущены ошибки в партионном учете. Типичный пример: в регистре СебестоимостьТоваров по разделам Товары на складах или Производственные затраты не заполнилась Партия. Рассмотрим, почему попытки исправить это стандартным документом Корректировка регистров обречены на провал, и разберем работающие методики восстановления данных.

Анализ проблемы: почему расчет себестоимости не видит корректировки

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

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

Разбор этапов расчета себестоимости

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


// Этап 4: Распределение номенклатуры на производство
РаспределениеНоменклатурыНаПроизводство(ПараметрыРасчета);

// Этап 7: Распределение материалов между остатком НЗП и выпуском
РаспределениеМатериаловМеждуОстаткомНЗПиВыходнымиИзделиями(ПараметрыРасчета);

// Этап 8: Заполнение партий в регистре Себестоимость товаров
ЗаполнениеПартийВРегистреСебестоимостьТоваров(ПараметрыРасчета);

// Этап 9: Основной расчет фактической себестоимости (решение системы уравнений)
РасчетСебестоимостиТоваров(ПараметрыРасчета, СтрокаСхемыРасчета, Истина);

Как мы видим, система сначала распределяет количественные показатели, затем пытается восстановить партионные цепочки и только потом приступает к расчету стоимости. Если на этапе 8 система не сможет связать ваш ручной «приход» в корректировке с реальным «расходом» производства из-за отсутствия правильного ДокументаДвижения или АналитикиУчетаПартий, стоимость на этапе 9 будет равна нулю.

Методика исправления через программную правку движений

Поскольку Корректировка регистров не позволяет полноценно эмулировать движения, наиболее эффективным (хотя и требующим осторожности) методом является программное исправление записей в регистре накопления непосредственно у исходного документа-регистратора. Рассмотрим алгоритм действий:

  1. Моделирование на копии: Прежде всего, необходимо создать копию базы. В копии следует открыть период и попробовать перепровести проблемный документ. Если партия не подхватывается автоматически, нужно выяснить причину (например, отсутствие остатков на складе на момент проведения в 2018 году).
  2. Подготовка правильных записей: Выясним, какие именно значения должны быть в полях АналитикаУчетаПартий и Партия. Для этого можно посмотреть аналогичные исправные документы того же периода.
  3. Программная замена данных: Напишем обработку, которая без перепроведения документа (чтобы не изменить другие данные и не нарушить границу последовательности) заменит пустые значения в регистре.

Пример кода для программной корректировки записей регистра СебестоимостьТоваров:


Процедура ИсправитьДвиженияДокумента(ДокументСсылка, НужнаяПартия, НужныйКлючПартии)
    
    Запрос = Новый Запрос;
    Запрос.Текст = 
        "ВЫБРАТЬ * ИЗ РегистрНакопления.СебестоимостьТоваров 
        ГДЕ Регистратор = &Регистратор";
    Запрос.УстановитьПараметр("Регистратор", ДокументСсылка);
    
    Выборка = Запрос.Выполнить().Выбрать();
    
    Набор = РегистрыНакопления.СебестоимостьТоваров.СоздатьНаборЗаписей();
    Набор.Отбор.Регистратор.Установить(ДокументСсылка);
    Набор.Прочитать();
    
    Для Каждого Запись Из Набор Цикл
        // Проверяем, что это нужная нам строка (например, по номенклатуре)
        Если Запись.Раздел = Перечисления.РазделыУчетаСебестоимостиТоваров.ПроизводственныеЗатраты 
             И НЕ ЗначениеЗаполнено(Запись.АналитикаУчетаПартий) Тогда
            
            Запись.АналитикаУчетаПартий = НужныйКлючПартии;
            Запись.Партия = НужнаяПартия;
            
            // Важно: в ERP 2.4/2.5 также нужно проверять реквизит ДокументДвижения
            Если НЕ ЗначениеЗаполнено(Запись.ДокументДвижения) Тогда
                Запись.ДокументДвижения = НужнаяПартия;
            КонецЕсли;
            
        КонецЕсли;
    КонецЦикла;
    
    // ОбменДанными.Загрузка = Истина позволяет обойти проверки при записи
    Набор.ОбменДанными.Загрузка = Истина;
    Набор.Записать();
    
КонецПроцедуры

Почему это работает?

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

Важные рекомендации по работе с регистрами себестоимости

Разберем дополнительные нюансы, которые помогут избежать ошибок при восстановлении учета:

Резюмируем: Корректировка регистра СебестоимостьТоваров через стандартный документ Корректировка регистров для исправления старых ошибок партионного учета практически нереальна. Система 1С:ERP требует жесткой связки первичного регистратора и аналитики ключей. Единственным надежным способом остается программное исправление записей регистра непосредственно у исходных документов в закрытом периоде с последующим выполнением регламентных операций в текущем месяце.

← На главную