Как исправить ошибки и падение 1С 7.7 (AppCrash) при формировании и проверке отчета СЗВ-СТАЖ и ОДВ-1

Программист 1С v7.7 1С:Зарплата и Управление Персоналом Налоговый учет IT и автоматизация бизнеса
← На главную

При подготовке ежегодной пенсионной отчетности по форме СЗВ-СТАЖ и сопутствующей описи ОДВ-1 в конфигурациях на платформе 1С:Предприятие 7.7 (в частности, в «Зарплата и Кадры 7.7», ред. 7.70.366 и смежных решениях) пользователи и программисты сталкиваются с рядом критических сбоев. Программа может аварийно завершать работу с ошибкой AppCrash при обработке сотен сотрудников, выдавать синтаксические ошибки при проверке выгруженных файлов или выдавать исключения при формировании печатных форм.

Разберем детально причины возникновения этих проблем и проанализируем практические способы их устранения.

Причина 1: Аварийное завершение программы (AppCrash) при записи XML-файла

Проанализируем техническую сторону формирования XML-файлов в среде 1С 7.7. Платформа изначально работает с однобайтовой кодировкой ANSI (Windows-1251) и не имеет встроенных нативных механизмов прямой потоковой записи в кодировке UTF-8. Для решения этой задачи в типовых модулях отчетности разработчики используют системный COM-объект Windows ADODB.Stream.

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


// Сохраняем файл в кодировке UTF-8
АдоДБСтрим = CreateObject("Adodb.Stream");
АдоДБСтрим.Charset = "windows-1251";
АдоДБСтрим.Type = 2; // adTypeText
АдоДБСтрим.Mode = 3; // adModeReadWrite
АдоДБСтрим.Open();
АдоДБСтрим.LoadFromFile(ПолноеИмяФайла);
ТекстАдоДБСтрим = АдоДБСтрим.ReadText();
АдоДБСтрим.Close();

АдоДБСтрим.Charset = "utf-8";
АдоДБСтрим.Open();
АдоДБСтрим.WriteText(ТекстАдоДБСтрим);
АдоДБСтрим.SaveToFile(ПолноеИмяФайла, 2);
АдоДБСтрим.Close();

Выясним, почему возникает падение процесса 1cv7s.exe. Когда в организации числится большое количество сотрудников (от 100–300 человек и более), переменная ТекстАдоДБСтрим превращается в гигантскую непрерывную строку. При вызове метода WriteText() для единого текстового массива сверхбольшого объема компонент ADODB.Stream вызывает переполнение внутреннего буфера, что приводит к необрабатываемому системному сбою памяти (AppCrash) и мгновенному закрытию 1С.

Рассмотрим варианты обхода и решения этой проблемы:

  1. Запись текста частями (порциями). Вместо передачи всей строки целиком в один вызов WriteText() можно разбить длинный текст на строки или блоки фиксированного размера (например, по 4096–8192 символов) и передавать их в поток последовательно в цикле.
  2. Выгрузка в кодировке Windows-1251 с последующей перекодировкой. Закомментируем повторное открытие потока через ADODB.Stream. Файл останется на диске в кодировке Windows-1251. После этого перекодируем сформированный XML-файл в кодировку UTF-8 (без BOM) с помощью любого внешнего консольного конвертера, текстового редактора (например, Notepad++ или встроенного редактора FAR Manager) либо скрипта.
  3. Использование внешней утилиты ПФР (Spu_Orb). Заменим в XML-заголовке выгруженного файла параметр кодировки encoding="UTF-8" на encoding="windows-1251", после чего загрузим файл в официальную программу «СПУ-ОРБ». Программа ПФР корректно прочитает файл, перекодирует его в UTF-8 и выгрузит готовый итоговый пакет.

Причина 2: Ошибка «Неверное имя ОДВ_1» при формировании печатной формы

При нажатии на кнопку печати описи ОДВ-1 в модуле отчета ПодготовкаСведенийДляПФР2017 может появляться исключение вида:


Таб.ИсходнаяТаблица("ОДВ_1");
{Отчет.ПодготовкаСведенийДляПФР2017.Форма.Модуль(1258)}: Неверное имя ОДВ_1

Разберем структуру метаданных конфигурации, чтобы понять источник ошибки. В типовом обновлении ЗиК 7.7 печатный макет ОДВ_1 разработчики разместили не внутри таблицы конкретного отчета, а в ветке метаданных Общие таблицы всей конфигурации. Если обновление на новый релиз выполнялось путем частичного переноса только внешних отчетов или без корректного объединения метаданных файла конфигурации 1cv7.md, то таблица макета в базе просто отсутствует.

Для устранения ошибки выполним следующие действия:

  1. Откроем базу в режиме Конфигуратор с правами администратора.
  2. Выберем меню Конфигурация — Объединение конфигураций.
  3. Укажем актуальный файл конфигурации поставщика (1cv7.md релиза 366 или выше).
  4. Убедимся, что отмечена для объединения ветка Общие таблицы (в частности таблица ОДВ_1).
  5. Сохраним структуру метаданных.

Причина 3: Ошибки проверки файла выгрузки программами контроля ПФР

Часто бухгалтеры и технические специалисты получают сообщения о нераспознанном формате или синтаксических ошибках в заголовках XML сразу после формирования пакета.

Проанализируем работу проверочных утилит:

  1. CheckXML: Данная программа предназначалась для проверки устаревших форматов персонифицированного учета (таких как формы РСВ-1, СЗВ-6 и т.д.). Новый формат СЗВ-СТАЖ и ОДВ-1 модуль CheckXML не поддерживает и воспринимает XML-структуру как поврежденную.
  2. CheckPFR (ПО ПД): Для проверки файлов СЗВ-СТАЖ, ОДВ-1, СЗВ-КОРР необходимо использовать специализированную программу CheckPFR (или программный комплекс проверки документов ПО ПД). Только этот модуль содержит актуальные XSD-схемы и алгоритмы верификации логических блоков стажа, кодов территориальных и особых условий труда.

Если в файле присутствуют сотрудники с льготным стажем (вредные и тяжелые условия труда), важно помнить, что сведения по ним сопровождаются обязательным заполнением Раздела 5 формы ОДВ-1. В случае выявления расхождений после отправки исходных сведений корректирующие формы формируются с типом СЗВ-КОРР, при этом проверку сформированного пакета также следует выполнять исключительно через актуальную версию CheckPFR.

← На главную