Переход на новую систему автоматизации класса ERP — это всегда сложный и многоэтапный процесс. Одной из наиболее частых проблем, с которой сталкиваются практикующие специалисты при запуске «1С:ERP Управление предприятием» (или «1С:Комплексная автоматизация 2»), является необходимость отражения операций, относящихся к прошлому периоду. Типичный пример: предприятие начало вести учет в новой базе с 1 января текущего года, а в феврале или марте возникает необходимость оформить корректировку реализации за прошлый год. Но как это сделать, если исходной реализации в новой базе просто нет, а ввод начальных остатков уже выполнен? Для минимизации подобных сложностей на этапе запуска системы полезно использовать методику ускорения переноса остатков в 1С:ERP.
В рамках этой статьи мы подробно разберем, почему возникает эта проблема, проанализируем ситуацию на примере реального кейса и рассмотрим три эффективных способа решения задачи: от современных штатных инструментов системы до программных методов обхода ограничений для старых релизов конфигурации.
Выясним причину, по которой стандартная схема работы вызывает затруднения. В более старых программных продуктах (например, в «1С:Управление производственным предприятием» или «1С:Бухгалтерия») система позволяла создавать документ КорректировкаРеализации на основании непроведенного документа продажи. Это очень выручало при переносе остатков.
Однако в «1С:ERP» логика работы документов гораздо строже. Попытка провести корректировку при непроведенном документе-основании приводит к ошибке: система требует обязательного проведения исходной РеализацияТоваровУслуг. Если же мы проведем исходную реализацию прошлым периодом (например, 2018 годом при старте учета с 2019), возникнут следующие критические проблемы:
Ниже мы подробно разберем по шагам, как решить эту дилемму различными методами.
Разработчики фирмы «1С» учли жалобы пользователей и добавили специализированный инструмент, который полностью решает данную проблему без программирования и «грязных» манипуляций с базой данных. Рассмотрим подробнее этот алгоритм.
Для реализации этого сценария используется специальный тип операции — «Корректировка до ввода остатков». Давайте разберем по шагам, как настроить и использовать этот функционал:
НСИ и администрирование -> Настройка НСИ и разделов -> Продажи -> Оптовые продажи включена возможность использования корректировок реализаций.РеализацияКлиенту. Этот документ используется как объект расчетов при вводе остатков. Важно: сам по себе этот документ не делает никаких проводок и движений по регистрам. Он выполняет роль информационной карточки, где фиксируются исходные реквизиты старой сделки (состав товаров, цены, ставки НДС).КорректировкаРеализации. В качестве вида операции выбираем «Корректировка до ввода остатков».Также обратим внимание на важный нюанс: на вкладке «Расчеты» документа корректировки обязательно установите признак «Прошлый год закрыт для бухгалтерского учета (отчетность подписана)». Это позволит программе сделать все корректирующие проводки в текущем периоде, не пытаясь сторнировать прошлый закрытый год, что исключит искажение сданной отчетности. Стоит также помнить, что сами корректировки не изменяют складские остатки, поэтому для отражения движений по складу можно использовать инструмент для формирования ордеров на излишки и недостачи на основании корректировок.
Посмотрим на пример, когда предприятие работает на более ранних релизах «1С:ERP», где штатный механизм корректировки до ввода остатков еще не реализован. В этом случае мы можем поправить логику контроля документов с помощью механизма расширений.
Нам необходимо временно или постоянно отключить проверку, которая запрещает отменять проведение документа-основания при наличии проведенных подчиненных корректировок. Проанализируем пример кода, который можно внедрить в расширение конфигурации:
&Вместо("ПроверитьВозможностьОтменыПроведенияРеализации")
Процедура Расш_ПроверитьВозможностьОтменыПроведенияРеализации(ДокументСсылка, Отказ)
// Подавляем стандартную проверку наличия корректировок
// Это позволит свободно распроводить исходную реализацию-заглушку
// оставляя подчиненный документ корректировки проведенным.
// Оставляем процедуру пустой или пишем свою логику обхода
Возврат;
КонецПроцедуры
После подключения этого расширения порядок действий будет следующим:
РеализацияТоваровУслуг за прошлый год (например, 31.12.2018). Заполняем его спецификацию.КорректировкаРеализации нужной датой в текущем периоде (например, в 2019 году).Разберем еще один альтернативный способ, который не требует создания постоянных расширений, но предполагает использование внешней обработки для очистки движений. Этот метод часто используют администраторы баз данных и внедренцы при первичном наполнении базы.
Суть метода заключается в том, что мы оставляем исходный документ РеализацияТоваровУслуг в статусе «Проведен», но принудительно стираем все его записи в регистрах накопления и регистре бухгалтерии.
Схема действий выглядит следующим образом:
РеализацияТоваровУслуг и очищает таблицы наборов записей по всем регистрам.Ниже приведен пример программного кода, который можно запустить во внешней обработке для очистки движений конкретного документа:
// Пример программной очистки движений документа-основания
Процедура ОчиститьДвиженияДокумента(ДокументСсылка) Экспорт
НачатьТранзакцию();
Попытка
ДокументОбъект = ДокументСсылка.ПолучитьОбъект();
// Перебираем все движения документа и записываем пустые наборы
Для Каждого НаборЗаписей Из ДокументОбъект.Движения Цикл
НаборЗаписей.Прочитать();
Если НаборЗаписей.Количество() > 0 Тогда
НаборЗаписей.Очистить();
НаборЗаписей.Записать();
КонецЕсли;
КонецЦикла;
// Устанавливаем признак ручной корректировки движений,
// чтобы система случайно не пересчитала движения при перепроведении
Если ОбщегоНазначения.ЕстьРеквизитОбъекта("РучнаяКорректировка", ДокументОбъект) Тогда
ДокументОбъект.РучнаяКорректировка = Истина;
ДокументОбъект.Записать(РежимЗаписиДокумента.Запись);
КонецЕсли;
ЗафиксироватьТранзакцию();
Сообщить("Движения документа успешно очищены!");
Исключение
ОтменитьТранзакцию();
ВызватьИсключение КраткоеПредставлениеОшибки(ИнформацияОбОшибке());
КонецПопытки;
КонецПроцедуры
Данный подход гарантирует, что связь между документами не нарушается, корректировка остается полностью проведенной и работоспособной, а сама реализация больше не влияет на складские остатки и взаиморасчеты прошлых периодов, так как все ее регистры очищены.
Мы проанализировали три различных подхода к решению сложной задачи корректировки продаж прошлых периодов. Подведем итоги: