При работе в устаревших, но все еще используемых конфигурациях на платформе 1С:Предприятие 7.7 (например, «1С:Бухгалтерия 7.7» ред. 4.5, релиз 7.70.658 и смежные) пользователи могут столкнуться с неожиданным аварийным завершением работы программы. Характерный пример — ошибка при формировании регламентированных отчетов для Пенсионного фонда (ПФР/СФР):
{Отчет.ПодготовкаСведенийДляПФР2010.Форма.Модуль(4504)}: Неверный идентификатор колонки!
В этой статье мы подробно разберем, почему возникает данная техническая проблема, рассмотрим способы ее устранения в коде 1С 7.7, а также проанализируем нюансы экстренного перехода на современную платформу 1С 8.3, который часто планируют бухгалтеры при возникновении подобных сбоев.
Давайте проанализируем строку кода, на которую указывает конфигуратор:
СотрудникИнвалид = ДоходыВычетыНалогиСотрудников.ПолучитьЗначение(СтрокаИтоговойТаблицы, "ТарифИнвалид");
Проблема кроется в объекте типа ТаблицаЗначений с идентификатором ДоходыВычетыНалогиСотрудников. Этот объект создается и заполняется динамически в процессе сбора сведений по доходам и страховым взносам физических лиц. В платформе 1С 7.7 метод ПолучитьЗначение() или прямое обращение к колонке таблицы по ее строковому имени вызовет критическую ошибку, если колонка с таким идентификатором не была предварительно добавлена в структуру таблицы с помощью метода НоваяКолонка().
Почему этой колонки не оказалось в таблице? Причиной стали масштабные изменения в законодательстве РФ (в частности, введение пониженных тарифов страховых взносов для субъектов малого и среднего предпринимательства). Разработчики фирмы «1С» обновили глобальные модули конфигураций для корректного расчета налогов по новым шкалам, изменив структуру возвращаемых таблиц. Однако старый отчет ПодготовкаСведенийДляПФР2010, давно снятый с активной поддержки, не был адаптирован под новые алгоритмы формирования таблиц доходов и налогов. В результате при попытке прочитать колонку ТарифИнвалид, которой больше физически нет в новой структуре данных, программа закрывается с ошибкой.
Прежде чем вносить изменения в конфигурацию, важно понять, действительно ли вам нужен этот отчет. Форма «Подготовка сведений для ПФР 2010» безнадежно устарела. Для сдачи текущей отчетности в Социальный фонд России (СФР, объединивший ПФР и ФСС) за последние периоды используются совершенно другие формы.
Если вам необходимо сдать сведения о стаже или персонифицированные сведения, выполните следующие шаги:
Старый отчет «Подготовка сведений для ПФР 2010» может понадобиться исключительно для подготовки корректирующих форм за периоды до 2016 года включительно. Если это ваш случай, перейдем к техническим методам исправления кода.
Если запуск старого отчета неизбежен, мы можем самостоятельно внедрить «обходной путь» в код программы. Для этого нам понадобятся права администратора базы данных.
Выполним процедуру исправления по шагам:
ПодготовкаСведенийДляПФР2010. Если этого отчета нет в дереве, значит, он используется как внешний. В таком случае откройте файл отчета через меню «Файл» — «Открыть», перейдя в каталог базы данных, далее в папку ExtForms, и найдите файл с расширением .ert (например, pfr2010.ert).Ctrl + F) и найдите строку, в которой инициализируется таблица значений ДоходыВычетыНалогиСотрудников. Обычно это выглядит как ДоходыВычетыНалогиСотрудников = СоздатьОбъект("ТаблицаЗначений");.НоваяКолонка(), добавьте принудительное создание отсутствующего поля.Добавьте следующую строку кода:
ДоходыВычетыНалогиСотрудников.НоваяКолонка("ТарифИнвалид", "Число", 15, 2);
Такая модификация гарантирует, что даже если глобальный модуль не заполнит это поле данными, колонка все равно будет существовать в структуре таблицы значений. При вызове метода ПолучитьЗначение() программа вернет пустое значение или ноль вместо аварийного завершения работы.
Сохраните изменения в отчете (или сохраните внешний файл .ert) и перезапустите 1С в режиме «Предприятие» для проверки результата.
Иногда сбои обращения к колонкам в регламентированных отчетах 1С 7.7 вызваны некорректно сохраненной историей или кэшем предыдущих расчетов. Система сохраняет параметры выгрузок в специальные файлы настроек.
Чтобы исключить влияние кэша, выполните следующие действия:
Admin or Buh). Если пользователи не настроены, файлы сохраняются непосредственно в корне каталога базы.При следующем запуске отчета система инициализирует структуру таблиц заново «с чистого листа», что во многих случаях помогает избежать системных конфликтов конфигурации.
Появление подобных ошибок часто становится для руководства компании последним аргументом в пользу скорейшего перехода с устаревшей платформы 1С 7.7 на современную «1С:Бухгалтерия 8» (ред. 3.0). Однако процесс переноса данных (миграции) может сопровождаться собственными трудностями.
Рассмотрим две ключевые проблемы, упомянутые практикующими специалистами при переходе, и способы их решения.
А. Ошибка устаревшей учетной политики при загрузке данных
При попытке загрузить выгруженные из 1С 7.7 данные в базу 1С 8.3 («тройку») загрузка может прерваться ошибкой со ссылкой на несуществующую или старую учетную политику (которая уже несколько лет как не актуальна). Это происходит по причине переноса периодических реквизитов и истории констант.
В платформе 1С 7.7 константы и параметры учетной политики хранятся в виде периодических значений. Если в истории этих значений за прошлые годы остались пустые строки, некорректные даты или «битые» ссылки, правила конвертации данных попытаются перенести их «как есть», что вызовет ступор у механизмов контроля платформы 1С 8.3.
Для решения этой проблемы перед выгрузкой данных выполните следующие шаги в старой базе 1С 7.7:
F5), чтобы просмотреть изменения константы по годам.Б. Несовместимость правил переноса данных
Другой распространенный сбой при миграции — использование неподходящих правил обмена данными. Правила переноса напрямую привязаны к релизам конфигураций-источников и приемников.
Запомните важное правило: выгружать обработку и правила переноса данных необходимо непосредственно из той базы «1С:Бухгалтерия 8», в которую вы планируете загружать информацию!
Сделайте следующее:
acc77_8.ert и XML-правила) во внешнюю папку.