Переход с устаревшей платформы 1С:Предприятие 7.7 на современную 1С:Бухгалтерия 8.3 — задача ответственная и зачастую сопряженная с техническими сложностями. Особенно часто проблемы возникают при миграции из конфигурации «Упрощенная система налогообложения» (УСН). В процессе выгрузки пользователи сталкиваются с тем, что справочники переносятся корректно, а вот документы ввода начальных остатков не создаются вовсе, или процесс прерывается огромным списком ошибок. Разберем подробно, почему это происходит и как доработать правила переноса самостоятельно.
Проанализируем типовую ситуацию. При переносе остатков по счетам 10 «Материалы» или 41 «Товары» алгоритм обработки пытается сопоставить данные бухгалтерского учета с данными налоговых регистров УСН. Основная проблема заключается в состоянии данных в базе 7.7. Часто в учетных регистрах по определенным позициям номенклатуры числится нулевое количество, но при этом висит ненулевая сумма (так называемые «хвосты» или «зависшие суммы»).
Рассмотрим механизм работы стандартного обработчика usn_acc8.ert. В момент формирования проводок и документов ввода остатков система пытается вычислить стоимость единицы товара или материала, чтобы корректно распределить суммы по партиям. Если в коде не предусмотрена проверка на нулевое количество, происходит деление на ноль, и выполнение правила прерывается. Это блокирует создание не только проблемной позиции, но и всего документа ввода остатков в целевой базе 1С 8.3.
Для решения проблемы нам потребуется внести изменения в файл обработки выгрузки. Этот файл обычно называется usn_acc8.ert и находится в каталоге ExtForms вашей рабочей информационной базы 1С 7.7. Если вы используете встроенный помощник перехода в 8.3, то файлы правил могут быть временно извлечены в локальные папки пользователя.
Выясним, какую именно функцию нужно редактировать. Нам необходима функция СинхронизацияТабличныхЧастей_ТМЦ. Разберем по шагам процесс внедрения исправления:
usn_acc8.ert через конфигуратор 1С 7.7 или любым текстовым редактором.СинхронизацияТабличныхЧастей_ТМЦ.Посмотрим на пример исправленного кода, который успешно прошел тестирование на нескольких реальных базах:
Функция СинхронизацияТабличныхЧастей_ТМЦ( ИсходящиеДанные = "", ВходящиеДанные = "", ... )
// ... (начальный код функции)
Пока РасходыНоменклатура.ПолучитьСтроку = 1 Цикл
Пока КоллекцияОбъектов.ПолучитьСтроку = 1 Цикл
Если (КоллекцияОбъектов.Субконто1 = РасходыНоменклатура.Номенклатура) И (КоллекцияОбъектов.Субконто3 = РасходыНоменклатура.РасчетныйДокумент) Тогда
Количество = 0; Сумма = 0; НДС = 0; СуммаВал = 0; НДСВал = 0;
// Внедряем проверку, чтобы избежать деления на ноль
Если РасходыНоменклатура.Количество <> 0 Тогда
Сумма = КоллекцияОбъектов.Количество / РасходыНоменклатура.Количество * РасходыНоменклатура.Сумма;
НДС = КоллекцияОбъектов.Количество / РасходыНоменклатура.Количество * РасходыНоменклатура.НДС;
СуммаВал = КоллекцияОбъектов.Количество / РасходыНоменклатура.Количество * РасходыНоменклатура.СуммаВал;
НДСВал = КоллекцияОбъектов.Количество / РасходыНоменклатура.Количество * РасходыНоменклатура.НДСВал;
Иначе
// Если количество равно 0, обнуляем суммы
Количество = 0; Сумма = 0; НДС = 0; СуммаВал = 0; НДСВал = 0;
Если РасходыНоменклатура.Валюта = Параметры.Рубли Тогда
СуммаВал = Сумма; НДСВал = НДС;
КонецЕсли;
// Если и сумма и количество нулевые, пропускаем итерацию
Если (Сумма = 0) И (Количество = 0) Тогда
Продолжить;
КонецЕсли;
КонецЕсли;
// ... (дальнейшая логика заполнения ТаблицаТМЦ)
КонецЕсли;
КонецЦикла;
КонецЦикла;
// ...
КонецФункции
После внесения изменений сохраним файл и попробуем запустить выгрузку данных повторно. Этот код гарантирует, что даже при наличии ошибок в учете 7.7, процесс переноса не «упадет» на этапе расчета остатков ТМЦ.
Хотя правка кода помогает обойти программную ошибку, мы рекомендуем предварительно навести порядок в базе-источнике. Проанализируем ситуацию с точки зрения методологии учета:
<Объект не обнаружен>. Если правила переноса наткнутся на «битую» ссылку в реквизите Номенклатура, вы получите ошибку «Поле агрегатного объекта не обнаружено».Номенклатура. Стандартные правила usn_acc8 жестко завязаны на индексы субконто. Если вы меняли план счетов вручную, перенос может работать некорректно.Если типовые правила (даже с правками) продолжают выдавать ошибки, или структура вашей базы 7.7 слишком сильно изменена, рассмотрим альтернативный вариант. Его суть заключается в использовании обработки «Загрузка данных из табличного документа» в 1С 8.3.
Разберем этот метод по шагам:
Этот путь более трудозатратен, так как требует работы с каждым счетом отдельно, но он является самым надежным, если конфигурация 7.7 имеет «неисцелимые» ошибки в регистрах налогового учета УСН, мешающие работе стандартного XML-выгружателя.
Важный момент: При переносе остатков ТМЦ в 1С 8.3 крайне важно, чтобы в настройках учетной политики новой базы был включен партионный учет (если он велся в 7.7) и выбран соответствующий метод оценки стоимости (ФИФО). В противном случае данные о документах оприходования из УСН 7.7 просто не найдут места в структуре новой программы.
Подводя итог, скажем: большинство ошибок переноса из УСН 7.7 лечатся либо очисткой базы от «нулевых остатков с суммами», либо небольшой корректировкой файла usn_acc8.ert. Совместное применение этих методов позволит вам успешно завершить миграцию и начать учет в современной системе.