Как настроить конвертацию перечисления из 1С 7.7 в справочник 1С 8 и исправить ошибку функции при выгрузке

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

При переходе с устаревших систем на платформе 1С 7.7 на современные конфигурации 1С 8.3 (например, Бухгалтерия 2.0 или 3.0) часто возникает задача трансформации типов данных. Одной из классических проблем является перенос единиц измерения, которые в старых самописных базах часто реализованы как Перечисления, тогда как в новых они представлены справочником КлассификаторЕдиницИзмерения. В этой статье мы подробно разберем, как правильно настроить правила конвертации объектов (ПКО) и свойств (ПКС), а также выясним, почему возникает ошибка "Функция не обнаружена" при попытке выгрузки данных из 7.7.

Разбор архитектурных различий между Перечислением и Справочником

Прежде чем приступать к коду, проанализируем ситуацию. Перечисление в 1С 7.7 — это жестко заданный список значений, у которых есть идентификатор и представление (синоним). Справочник в 1С 8.х — это полноценный объект с кодом, наименованием и, зачастую, дополнительными реквизитами (например, кодом по классификатору ОКЕИ).

Для корректного переноса нам необходимо создать «мостик» между простым значением перечисления и сложным элементом справочника. Рассмотрим по шагам, как это реализовать в конфигурации «Конвертация данных 2.0».

Шаг 1: Создание Правила Конвертации Объектов (ПКО)

Нам необходимо создать новое правило, где в качестве Источника будет указано ваше перечисление из 7.7 (например, ЕдиницыИзмерения), а в качестве Приемника — справочник КлассификаторЕдиницИзмерения.

  1. Создаем ПКО.
  2. Источник оставляем пустым, если мы хотим полностью программно управлять созданием элементов, или выбираем тип перечисления.
  3. В таблице свойств (ПКС) добавляем строку для реквизита Наименование (Приемник). Источник для этого свойства оставляем пустым.
  4. В обработчике ПКС ПередВыгрузкой прописываем логику получения строкового значения.

Рассмотрим пример кода для ПКС Наименование:


// В ПКС Наименование, обработчик ПередВыгрузкой
// Получаем строковое представление значения перечисления
Значение = Строка(Источник);

Если представления в 7.7 не соответствуют наименованиям в 8.х, воспользуемся явным сопоставлением:


// Если нужно жесткое соответствие идентификаторов
Если Источник = Перечисление.Единицы.шт Тогда
    Значение = "шт";
ИначеЕсли Источник = Перечисление.Единицы.кг Тогда
    Значение = "кг";
КонецЕсли;

Важный момент: Обязательно установите галочку «Поиск» для свойства Наименование в ПКС. Это позволит системе при загрузке сначала искать уже существующую единицу измерения, а не плодить дубли.

Шаг 2: Решение ошибки «Функция не обнаружена» в 1С 7.7

Это самая распространенная проблема при работе с «семеркой». Ошибка Функция не обнаружена (ПКС_ПередВыгрузкой_...) возникает из-за особенностей работы обработки V77Exp.ert.

Проанализируем причину: в отличие от 1С 8.х, платформа 7.7 не умеет динамически исполнять программный код из XML-файла правил. Весь код обработчиков (ПКО, ПКС, ПВД) при сохранении правил в «Конвертации данных» выгружается в отдельный текстовый файл — Модуль выгрузки.

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

  1. В конфигурации «Конвертация данных» при сохранении правил нажмите кнопку «Сохранить модуль выгрузки».
  2. Откройте полученный текстовый файл и полностью скопируйте его содержимое.
  3. Откройте вашу обработку выгрузки (обычно V77Exp.ert) в конфигураторе 1С 7.7.
  4. Перейдите в Модуль обработки и найдите место, куда необходимо вставить сгенерированный текст (обычно это в самом конце или в специальной секции, помеченной комментариями системы конвертации).
  5. Сохраните обработку и запустите выгрузку заново.

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

Шаг 3: Дополнение данных для классификатора (ОКЕИ)

Просто перенести наименование «шт» часто недостаточно для полноценного учета в 1С:Бухгалтерии 2.0. Элементы справочника КлассификаторЕдиницИзмерения обычно требуют наличия цифрового кода (например, 796 для штук).

Рассмотрим, как передать код вместе с наименованием, даже если в 7.7 его нет в перечислении. Мы можем добавить еще одно ПКС для реквизита Код (Приемник) и использовать ту же логику проверки:


// В ПКС Код, обработчик ПередВыгрузкой
Если Источник = Перечисление.Единицы.шт Тогда
    Значение = "796";
ИначеЕсли Источник = Перечисление.Единицы.кг Тогда
    Значение = "166";
КонецЕсли;

Такой подход гарантирует, что созданные в базе-приемнике объекты будут валидными с точки зрения методологии учета 1С.

Шаг 4: Использование входящих данных (Альтернативный метод)

Если вы хотите сделать правила более универсальными, можно использовать механизм ВходящиеДанные. Это полезно, когда перечисление является частью другого объекта (например, номенклатуры). Мы можем подготовить структуру данных в ПКС номенклатуры и передать её в ПКО единицы измерения.

Проанализируем пример в ПКС ЕдиницаИзмерения у Номенклатуры:


// В ПКС ЕдиницаИзмерения (у Номенклатуры)
ИмяПКО = "КлассификаторЕдиницИзмерения";
ВходящиеДанные = СоздатьОбъект("СписокЗначений");
ВходящиеДанные.Установить("Наименование", Строка(Источник.Единица));
ВходящиеДанные.Установить("Код", "000"); // Или логика поиска кода

Затем в ПКО КлассификаторЕдиницИзмерения в соответствующих ПКС нужно поставить галочку «Получать значение из входящих данных». Это обеспечит гибкую передачу параметров между объектами.

Резюме и рекомендации

Подводя итог, при конвертации из 1С 7.7 в 1С 8.х ключевыми моментами являются:

Использование этих методов позволит вам избежать типичных ошибок и обеспечит качественный перенос данных из самописных конфигураций в типовые решения на платформе 1С 8.3.

← На главную