Как сделать корректировку реализации прошлого периода при переходе на 1С:ERP?

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

Переход на новую систему автоматизации класса ERP — это всегда сложный и многоэтапный процесс. Одной из наиболее частых проблем, с которой сталкиваются практикующие специалисты при запуске «1С:ERP Управление предприятием» (или «1С:Комплексная автоматизация 2»), является необходимость отражения операций, относящихся к прошлому периоду. Типичный пример: предприятие начало вести учет в новой базе с 1 января текущего года, а в феврале или марте возникает необходимость оформить корректировку реализации за прошлый год. Но как это сделать, если исходной реализации в новой базе просто нет, а ввод начальных остатков уже выполнен? Для минимизации подобных сложностей на этапе запуска системы полезно использовать методику ускорения переноса остатков в 1С:ERP.

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

Суть проблемы: почему стандартный механизм «1С:ERP» выдает ошибку

Выясним причину, по которой стандартная схема работы вызывает затруднения. В более старых программных продуктах (например, в «1С:Управление производственным предприятием» или «1С:Бухгалтерия») система позволяла создавать документ КорректировкаРеализации на основании непроведенного документа продажи. Это очень выручало при переносе остатков.

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

  1. Дублирование движений: исходный документ сделает движения по регистрам накопления (выручка, взаиморасчеты, складские остатки). Но ведь эти остатки уже были перенесены в систему специальными документами ввода остатков! В итоге взаиморасчеты с клиентом и складские запасы «задвоятся».
  2. Блокировка отмены проведения: если мы проведем реализацию, чтобы на ее основании создать и провести корректировку, а затем попытаемся отменить проведение исходной реализации, система заблокирует это действие. Появится системное сообщение о том, что на основании документа введена проведенная корректировка.
  3. Программный обход блокировки: если снять реализацию с проведения программно (в режиме разработчика), то движения по регистрам у реализации все равно могут остаться в базе. Если же программно провести корректировку при непроведенной реализации, то сама корректировка не сформирует необходимых движений по регистрам НДС и взаиморасчетов.

Ниже мы подробно разберем по шагам, как решить эту дилемму различными методами.

Решение 1: Официальный штатный механизм (для версий 1С:ERP 2.5.11 и выше)

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

Для реализации этого сценария используется специальный тип операции — «Корректировка до ввода остатков». Давайте разберем по шагам, как настроить и использовать этот функционал:

  1. Проверка функциональной опции: убедимся, что в разделе НСИ и администрирование -> Настройка НСИ и разделов -> Продажи -> Оптовые продажи включена возможность использования корректировок реализаций.
  2. Создание документа-заглушки: вместо полноценного документа продажи, который делает движения по складам и финансовому учету, мы используем специальный вспомогательный первичный документ. Переходим в журнал документов и создаем первичный документ с типом РеализацияКлиенту. Этот документ используется как объект расчетов при вводе остатков. Важно: сам по себе этот документ не делает никаких проводок и движений по регистрам. Он выполняет роль информационной карточки, где фиксируются исходные реквизиты старой сделки (состав товаров, цены, ставки НДС).
  3. Создание корректировки: на основании созданного первичного документа создаем документ КорректировкаРеализации. В качестве вида операции выбираем «Корректировка до ввода остатков».
  4. Заполнение данных: на вкладке «Данные корректировки» указываем исходные позиции и новые скорректированные значения.
  5. Проведение документа: при проведении корректировки система не будет требовать проведения исходного первичного документа. Корректировка успешно проведется и сформирует все необходимые движения по взаиморасчетам и НДС в текущем (новом) периоде.

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

Решение 2: Использование расширения конфигурации для отключения контроля связи документов

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

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


&Вместо("ПроверитьВозможностьОтменыПроведенияРеализации")
Процедура Расш_ПроверитьВозможностьОтменыПроведенияРеализации(ДокументСсылка, Отказ)
    // Подавляем стандартную проверку наличия корректировок
    // Это позволит свободно распроводить исходную реализацию-заглушку
    // оставляя подчиненный документ корректировки проведенным.
    
    // Оставляем процедуру пустой или пишем свою логику обхода
    Возврат;
КонецПроцедуры

После подключения этого расширения порядок действий будет следующим:

  1. Создаем документ РеализацияТоваровУслуг за прошлый год (например, 31.12.2018). Заполняем его спецификацию.
  2. Проводим созданную реализацию (это временно создаст движения по регистрам).
  3. На основании реализации создаем и проводим документ КорректировкаРеализации нужной датой в текущем периоде (например, в 2019 году).
  4. Возвращаемся к исходной реализации и отменяем ее проведение. Благодаря расширению программа не выдаст ошибку и позволит распровести документ.
  5. В результате в системе остается непроведенная реализация (которая не делает никаких движений и не дублирует остатки) и полностью проведенная, рабочая корректировка, которая формирует НДС и взаиморасчеты в текущем периоде.

Решение 3: Программная очистка движений реализации

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

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

Схема действий выглядит следующим образом:

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

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


// Пример программной очистки движений документа-основания
Процедура ОчиститьДвиженияДокумента(ДокументСсылка) Экспорт
    
    НачатьТранзакцию();
    Попытка
        ДокументОбъект = ДокументСсылка.ПолучитьОбъект();
        
        // Перебираем все движения документа и записываем пустые наборы
        Для Каждого НаборЗаписей Из ДокументОбъект.Движения Цикл
            НаборЗаписей.Прочитать();
            Если НаборЗаписей.Количество() > 0 Тогда
                НаборЗаписей.Очистить();
                НаборЗаписей.Записать();
            КонецЕсли;
        КонецЦикла;
        
        // Устанавливаем признак ручной корректировки движений, 
        // чтобы система случайно не пересчитала движения при перепроведении
        Если ОбщегоНазначения.ЕстьРеквизитОбъекта("РучнаяКорректировка", ДокументОбъект) Тогда
            ДокументОбъект.РучнаяКорректировка = Истина;
            ДокументОбъект.Записать(РежимЗаписиДокумента.Запись);
        КонецЕсли;
        
        ЗафиксироватьТранзакцию();
        Сообщить("Движения документа успешно очищены!");
    Исключение
        ОтменитьТранзакцию();
        ВызватьИсключение КраткоеПредставлениеОшибки(ИнформацияОбОшибке());
    КонецПопытки;
    
КонецПроцедуры

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

Резюме и рекомендации

Мы проанализировали три различных подхода к решению сложной задачи корректировки продаж прошлых периодов. Подведем итоги:

← На главную