Как устранить зависание 1С 7.7 и ошибку «Деление на 0» при выгрузке данных в XML?

Программист 1С v7.7 Бухгалтерский учет Сфера услуг, туризм и социальный сектор
← На главную

При переносе данных и переходе с платформы 1С:Предприятие 7.7 на современную версию «восьмерки» специалисты нередко сталкиваются со сбоями в типовой обработке V77Exp.ert. Процесс может прерываться ошибкой «Ошибка исполнения обработчика: ПВД_ПередОбработкойПравил ... Деление на 0» либо намертво зависать на этапе завершения выгрузки без формирования итогового файла XML. Разберем по шагам причины такого поведения платформы и детально рассмотрим варианты решения обеих проблем.

Причины ошибки «Деление на 0» при выгрузке остатков

Проанализируем ситуацию, когда обработка прерывается сообщениями о делении на ноль при выгрузке остатков по материальным счетам (например, 231, 234, 238, 239) или денежным счетам (331):

  1. Перекосы количества и суммы в ТМЦ: В типовых правилах конвертации (BBU77_81.xml) при выгрузке остатков по счетам материальных ценностей алгоритм вычисляет учетную цену по формуле Сумма / Количество. Если в информационной базе 7.7 по счету числится суммовой остаток при нулевом или отрицательном количестве, возникает исключение «Деление на 0». В стандартной свернутой оборотно-сальдовой ведомости такая ошибка может не бросаться в глаза.
  2. Разрывы аналитики: В бюджетном учете остатки детализируются по кодам экономической классификации расходов (КЕКВ/КЭКР) и источникам финансирования. Пересортица по субконто приводит к тому, что по одной строке аналитики зависает сумма без количества.
  3. Валютные счета и курсы валют: На счетах учета денежных средств деление на ноль возникает при пересчете валютных сумм, если курс валюты на дату среза остатков равен нулю либо не заполнен справочник валют.

Способы устранения ошибки деления на ноль

Для устранения этой ошибки применим два подхода: наведение порядка в учетных данных либо корректировку самих правил конвертации.

Во-первых, разберем поиск расхождений в данных базы 1С 7.7:

  1. Сформируем отчет «Оборотно-сальдовая ведомость по счету» с максимальной детализацией по всем субконто: Номенклатура, МестаХранения, КЕКВ.
  2. Обязательно включим флаг отображения количественного учета.
  3. Найдем строки, где сальдо конечное суммовое не равно нулю, а количество отсутствует. Скорректируем такие позиции бухгалтерской справкой или инвентаризацией на дату, предшествующую выгрузке.
  4. Проверим справочник валют: курс каждой используемой валюты на дату остатков должен быть строго больше нуля.

Во-вторых, если исправить учетные данные оперативно невозможно, внесем безопасную проверку в файл правил конвертации BBU77_81.xml. Откроем правила в конфигурации «Конвертация данных» либо в текстовом редакторе, найдем проблемный обработчик ПВД и заменим расчет цены на безопасную конструкцию:


Если Количество <> 0 Тогда
    Цена = Сумма / Количество;
Иначе
    Цена = 0;
КонецЕсли;

Причины зависания платформы при выгрузке большого объема данных

Выясним причину, по которой 1С 7.7 зависает после обработки большого количества объектов (например, свыше 70 000 объектов при размере базы более 1 Гб), а файл XML не формируется:

  1. Лимит адресного пространства 32-битного процесса: Платформа 1С 7.7 (процесс 1cv7s.exe) является 32-разрядным приложением. Стандартное адресное пространство процесса ограничено 2 ГБ. С учетом системных библиотек и фрагментации памяти лимит исчерпывается уже при приближении к 1,2–1,5 ГБ.
  2. DOM-модель внешней компоненты v7plus.dll: По умолчанию выгрузка в XML через компоненту v7plus.dll строит дерево документа целиком в оперативной памяти с использованием модели DOM парсера MSXML. Запись на диск происходит лишь на самом последнем этапе. Когда количество объектов велико, памяти на финализацию документа не хватает, система впадает в постоянный свопинг (обращение к файлу подкачки), а процесс зависает навсегда.

Решение 1: Поэтапная (порционная) выгрузка данных

Самый надежный и простой способ обойти ограничение памяти — разделить процесс на несколько независимых этапов. Разберем порядок действий:

  1. Открываем обработку V77Exp.ert.
  2. В дереве правил выгрузки снимаем все флаги и оставляем только нормативно-справочную информацию (справочники Контрагенты, Номенклатура, классификаторы). Выгружаем эти данные в первый файл (например, Sprav.xml).
  3. Вторым проходом отмечаем остатки по счетам основных средств и нематериальных активов. Формируем отдельный файл.
  4. Третьим проходом выгружаем материальные запасы (счета группы 23x). При необходимости их также можно разделить по отдельным субсчетам.
  5. Отдельным проходом выгружаем денежные средства, расчеты и оставшиеся балансовые счета.
  6. В целевой конфигурации 1С 8 запускаем обработку Универсальный обмен данными в формате XML и загружаем полученные файлы строго по очереди: сначала справочники, затем остатки. Объекты сопоставятся корректно по внутренним идентификаторам и кодам.

Решение 2: Снятие лимита 2 ГБ через флаг Large Address Aware (LAA)

Если требуется выгрузить базу единым файлом без дробления, снимем системное ограничение 32-разрядных процессов на 64-битной версии Windows:

  1. Завершим работу всех сеансов 1С 7.7.
  2. Сделаем резервную копию исполняемого файла 1cv7s.exe (или 1cv7.exe), расположенного в каталоге BIN платформы.
  3. С помощью утилиты editbin из пакета разработчика Visual Studio или любой сторонней утилиты (LAA Patcher) установим флаг IMAGE_FILE_LARGE_ADDRESS_AWARE: editbin /LARGEADDRESSAWARE 1cv7s.exe
  4. Это позволит процессу 1С 7.7 адресовать до 4 ГБ виртуальной памяти в 64-битной среде, благодаря чему компонента MSXML сможет завершить сериализацию итогового дерева XML без исчерпания памяти.

Решение 3: Оптимизация дисковой подсистемы и временных каталогов

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

  1. Перенос временных файлов на быстрый накопитель: Перенаправим каталоги временных файлов системы (TEMP и TMP) на локальный SSD-диск. В свойствах ярлыка запуска 1С можно явно указать путь к рабочему каталогу пользователя.
  2. Исключения антивирусного ПО: На время длительной выгрузки временно приостановим антивирусные экраны либо добавим каталог информационной базы, исполняемые файлы 1С и целевую папку сохранения XML в список исключений антивируса.
  3. Обновление библиотек: Убедимся, что файл v7plus.dll в каталоге базы и в папке BIN обновлен до последнего стабильного релиза (не ниже 7.70.0.14), и в операционной системе зарегистрированы актуальные библиотеки msxml4.dll или msxml6.dll.
← На главную