Как устранить ошибки при переносе данных из Торговли 7.7 в Бухгалтерию 7.7 и настроить правила обмена

Программист 1С v7.7 1C:Бухгалтерия Бухгалтерский учет Торговля и дистрибуция
← На главную

Перенос данных между конфигурациями на платформе 1С 7.7, такими как «Торговля и Склад 9.2» (ТиС) и «Бухгалтерский учет 4.5», — это классическая задача, которая до сих пор актуальна для многих предприятий. Несмотря на почтенный возраст платформы, механизмы обмена в ней имеют свои уникальные особенности, которые могут поставить в тупик современного специалиста, привыкшего к инструментам версии 8.x. В этой статье мы разберем основные сложности, возникающие при использовании типового обмена, и выясним, как правильно редактировать правила и исправлять ошибки уникальности.

Разберем проблему инструментария: почему не подходит Конвертация данных 2.0

Часто программисты пытаются открыть файл правил обмена (обычно это Tr77_45.xml) в привычной конфигурации «Конвертация данных 2.0» или 2.1. Однако при попытке загрузки система выдает ошибку или просто не распознает XML-структуру. Проанализируем причину этой ситуации.

Дело в том, что формат обмена данными в 1С 7.7 (версия формата 1.0) принципиально отличается от того, что используется в 8.x. Правила для 7.7 создавались в специализированной конфигурации «Конвертация данных 1.0» (последние актуальные версии были 1.04 и 1.05).

Важные отличия:

  1. Правила версии 1.0 ориентированы на жесткую структуру метаданных 7.7.
  2. Внутренняя логика обработки событий (ПередВыгрузкой, ПриЗагрузке) написана на языке 1С 7.7, который несовместим с синтаксисом 8.x.
  3. Структура самого XML-файла не соответствует схеме XSD, которую ожидает увидеть версия 2.0.

Если вам необходимо отредактировать типовые правила, рекомендуем найти старый дистрибутив «Конвертации данных 1.0» на дисках ИТС или в архивах ресурсов поддержки. Если же правки незначительны, опытные специалисты иногда вносят их вручную через текстовый редактор, соблюдая структуру тегов, однако это требует глубокого понимания формата.

Выясним причину ошибки «Номер не уникальный»

Наиболее распространенная проблема при загрузке данных в Бухгалтерию 7.7 — это остановка процесса с системным сообщением Номер не уникальный. Как правило, ошибка указывает на строку кода в обработке загрузки, где вызывается метод Записать(). Рассмотрим подробнее, почему это происходит.

В платформе 1С 7.7 контроль уникальности номера документа жестко привязан к моменту записи объекта в базу данных. В отличие от версии 8.3, где контроль может быть отложенным или настраиваемым, здесь система блокирует создание документа, если в данном периоде (год, квартал или месяц — в зависимости от настроек нумерации) уже существует документ такого же вида с таким же номером.

Основные причины конфликта:

Проанализируем ситуацию с авансовыми счетами-фактурами

Рассмотрим конкретный пример из практики: после обновления или доработки базы ТиС в документах «Счет-фактура выданный (аванс)» изменилась логика формирования номеров. При загрузке в Бухгалтерию программа выдает ошибку. Проанализируем, как система ищет объект при загрузке:


// Пример упрощенной логики в обработке загрузки (V77Imp.ert)
Док = СоздатьОбъект("Документ." + ВидДок);
Если Док.НайтиПоНомеру(НомерИзФайла, ДатаИзФайла) = 1 Тогда
    // Если найден - обновляем
    Док.Записать();
Иначе
    // Если не найден - создаем новый
    Док.Новый();
    Док.НомерДок = НомерИзФайла;
    Док.Записать(); // Здесь часто возникает ошибка, если номер совпал с другим объектом
КонецЕсли;

Если в торговой базе номера стали длиннее или изменился формат префикса, метод НайтиПоНомеру может не сработать (так как ищет точное совпадение), а при попытке записи нового документа возникает конфликт уникальности с уже существующим в базе документом.

Инструкция по решению проблемы уникальности без изменения кода

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

  1. Выясните, какой именно документ вызывает ошибку. Обычно это последний успешно загруженный документ в журнале плюс один.
  2. В базе «Бухгалтерский учет» проверьте наличие документа такого же вида с номером, который вы пытаетесь загрузить.
  3. Если документ найден и он был введен вручную, добавьте к его номеру буквенный префикс (например, Б0000001 вместо 00000001). Это освободит номер для загрузки из Торговли.
  4. Проверьте длину номера в конфигураторе обеих баз. Если в ТиС она 10, а в Бухгалтерии 8 — это потенциальный источник постоянных ошибок. Рекомендуется привести длину номеров в Бухгалтерии к значению, соответствующему торговой базе (с обязательным созданием резервной копии!).

Разберем специфику правил обмена 2016 года

Интересный факт, отмеченный пользователями: фирма 1С выпускала обновления правил Tr77_45.xml даже в 2016 году. Почему это было необходимо для старой платформы? Проанализируем изменения в законодательстве того периода. Основная причина — это НДС и коды видов операций.

Для корректного формирования Книги покупок и Книги продаж в Бухгалтерии 7.7 требуется передача специальных кодов (например, 01, 02, 22 и т.д.). В старых версиях правил эти данные не передавались или передавались не в полном объеме. Обновленные правила учитывают:

Поэтому, если вы используете старые самописные правила, рекомендуем сравнить их с типовыми правилами 2016 года из последнего релиза ТиС 9.2. Возможно, стоит перенести логику обработки НДС из новых правил в вашу рабочую конфигурацию.

Технический совет по отладке загрузки

Если ошибка возникает в строке 77 модуля формы ЗагрузкаДанных, вы можете временно модифицировать обработку загрузки (файл V77Imp.ert), чтобы увидеть, на каком именно объекте происходит сбой. Добавьте вывод сообщения перед записью:


// Фрагмент кода для отладки
Сообщить("Записываю документ: " + ВидДокумента + " № " + НомерДокумента);
Попытка
    Объект.Записать();
Исключение
    Сообщить("Ошибка при записи номера " + НомерДокумента + ": " + ОписаниеОшибки());
КонецПопытки;

Такой подход позволит вам точно идентифицировать конфликтный документ и принять меры по исправлению нумерации в базе-приемнике. Помните, что в 1С 7.7 порядок следования цифр и букв в номере влияет на автоматическую генерацию последующих номеров, поэтому старайтесь сохранять единообразие префиксов во всем периоде.

← На главную