При переходе с устаревших систем на платформе 1С 7.7 на современные конфигурации 1С 8.3 (например, Бухгалтерия 2.0 или 3.0) часто возникает задача трансформации типов данных. Одной из классических проблем является перенос единиц измерения, которые в старых самописных базах часто реализованы как Перечисления, тогда как в новых они представлены справочником КлассификаторЕдиницИзмерения. В этой статье мы подробно разберем, как правильно настроить правила конвертации объектов (ПКО) и свойств (ПКС), а также выясним, почему возникает ошибка "Функция не обнаружена" при попытке выгрузки данных из 7.7.
Прежде чем приступать к коду, проанализируем ситуацию. Перечисление в 1С 7.7 — это жестко заданный список значений, у которых есть идентификатор и представление (синоним). Справочник в 1С 8.х — это полноценный объект с кодом, наименованием и, зачастую, дополнительными реквизитами (например, кодом по классификатору ОКЕИ).
Для корректного переноса нам необходимо создать «мостик» между простым значением перечисления и сложным элементом справочника. Рассмотрим по шагам, как это реализовать в конфигурации «Конвертация данных 2.0».
Нам необходимо создать новое правило, где в качестве Источника будет указано ваше перечисление из 7.7 (например, ЕдиницыИзмерения), а в качестве Приемника — справочник КлассификаторЕдиницИзмерения.
Наименование (Приемник). Источник для этого свойства оставляем пустым.ПередВыгрузкой прописываем логику получения строкового значения.Рассмотрим пример кода для ПКС Наименование:
// В ПКС Наименование, обработчик ПередВыгрузкой
// Получаем строковое представление значения перечисления
Значение = Строка(Источник);
Если представления в 7.7 не соответствуют наименованиям в 8.х, воспользуемся явным сопоставлением:
// Если нужно жесткое соответствие идентификаторов
Если Источник = Перечисление.Единицы.шт Тогда
Значение = "шт";
ИначеЕсли Источник = Перечисление.Единицы.кг Тогда
Значение = "кг";
КонецЕсли;
Важный момент: Обязательно установите галочку «Поиск» для свойства Наименование в ПКС. Это позволит системе при загрузке сначала искать уже существующую единицу измерения, а не плодить дубли.
Это самая распространенная проблема при работе с «семеркой». Ошибка Функция не обнаружена (ПКС_ПередВыгрузкой_...) возникает из-за особенностей работы обработки V77Exp.ert.
Проанализируем причину: в отличие от 1С 8.х, платформа 7.7 не умеет динамически исполнять программный код из XML-файла правил. Весь код обработчиков (ПКО, ПКС, ПВД) при сохранении правил в «Конвертации данных» выгружается в отдельный текстовый файл — Модуль выгрузки.
Чтобы исправить ошибку, выполните следующие действия:
V77Exp.ert) в конфигураторе 1С 7.7.Также имейте в виду, что старые версии V77Exp.ert имеют ограничение на длину имен функций. Если имя ПКС слишком длинное, оно может обрезаться, что также приведет к ошибке. Старайтесь использовать актуальную версию обработки из комплекта поставки «Конвертации данных».
Просто перенести наименование «шт» часто недостаточно для полноценного учета в 1С:Бухгалтерии 2.0. Элементы справочника КлассификаторЕдиницИзмерения обычно требуют наличия цифрового кода (например, 796 для штук).
Рассмотрим, как передать код вместе с наименованием, даже если в 7.7 его нет в перечислении. Мы можем добавить еще одно ПКС для реквизита Код (Приемник) и использовать ту же логику проверки:
// В ПКС Код, обработчик ПередВыгрузкой
Если Источник = Перечисление.Единицы.шт Тогда
Значение = "796";
ИначеЕсли Источник = Перечисление.Единицы.кг Тогда
Значение = "166";
КонецЕсли;
Такой подход гарантирует, что созданные в базе-приемнике объекты будут валидными с точки зрения методологии учета 1С.
Если вы хотите сделать правила более универсальными, можно использовать механизм ВходящиеДанные. Это полезно, когда перечисление является частью другого объекта (например, номенклатуры). Мы можем подготовить структуру данных в ПКС номенклатуры и передать её в ПКО единицы измерения.
Проанализируем пример в ПКС ЕдиницаИзмерения у Номенклатуры:
// В ПКС ЕдиницаИзмерения (у Номенклатуры)
ИмяПКО = "КлассификаторЕдиницИзмерения";
ВходящиеДанные = СоздатьОбъект("СписокЗначений");
ВходящиеДанные.Установить("Наименование", Строка(Источник.Единица));
ВходящиеДанные.Установить("Код", "000"); // Или логика поиска кода
Затем в ПКО КлассификаторЕдиницИзмерения в соответствующих ПКС нужно поставить галочку «Получать значение из входящих данных». Это обеспечит гибкую передачу параметров между объектами.
Подводя итог, при конвертации из 1С 7.7 в 1С 8.х ключевыми моментами являются:
V77Exp.ert после изменения программного кода в правилах.Код и другие реквизиты, необходимые для корректной работы бизнес-логики в базе-приемнике.Использование этих методов позволит вам избежать типичных ошибок и обеспечит качественный перенос данных из самописных конфигураций в типовые решения на платформе 1С 8.3.