Как сконвертировать строковое Субконто1 из 1С 7.7 в справочник «Статьи затрат» БП 3.0 с помощью КД 2.0?

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

Перенос данных из устаревших конфигураций на платформе 1С:Предприятие 7.7 (например, «Торговля и Склад 7.7») в современные решения на 1С 8.3 (такие как «Бухгалтерия предприятия 3.0») часто сопряжен с трудностями из-за различий в типах данных. Одной из типичных проблем является перенос аналитики (субконто) со счетов затрат (например, 44.01). В 7.7 субконто может иметь тип ЗначениеСубконто, которое фактически выгружается как строка, в то время как в 8.3 субконто должно быть ссылкой на справочник СтатьиЗатрат.

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

Выясним причину проблемы

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

Шаг 1: Создание ПКО для справочника «Статьи затрат»

Прежде всего, нам необходимо создать правило, по которому строка превратится в элемент справочника. Разберем пошагово:

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

Шаг 2: Настройка ПКС в документе-источнике

Теперь обратимся к правилам конвертации свойств (ПКС) табличной части нашего документа (например, ПоступлениеТоваровУслуг). Нам нужно программно определить, когда выгружать субконто как номенклатуру, а когда — как статью затрат. Для этого используем обработчик «Перед выгрузкой» для свойства Субконто1.

Проанализируем пример кода для 7.7, который позволяет динамически менять правило конвертации:


// Проверяем вид субконто в источнике (7.7)
Если ОбъектКоллекции.Субконто1.Вид() <> "Номенклатура" Тогда
    // Если это не номенклатура, значит считаем это статьей затрат (строкой)
    // Подготавливаем данные для поиска по наименованию
    Значение = СокрЛП(Строка(ОбъектКоллекции.Субконто1));
    
    // Указываем имя нашего ПКО для Статей затрат
    ИмяПКО = "СтатьиЗатрат"; 
    
    // Если ПКО требует входящих данных для поиска
    ПараметрыОбъекта = Значение;
Иначе
    // Если это номенклатура, используем стандартное правило
    Значение = ОбъектКоллекции.Субконто1;
    ИмяПКО = "Номенклатура";
КонецЕсли;

// Для отладки можно вывести сообщение
// Сообщить("Выгружаем субконто: " + Значение + " по правилу: " + ИмяПКО);

Шаг 3: Передача данных через СписокЗначений (сложный случай)

Иногда простого присвоения значения недостаточно, если ПКО приемника ожидает структуру данных. В этом случае в 7.7 следует использовать СписокЗначений. Посмотрим на пример реализации:


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

Важный момент: В 7.7 строковые реквизиты могут содержать лишние пробелы в конце из-за фиксированной длины поля. Обязательно используйте функцию СокрЛП(), иначе в базе 8.3 создастся множество дублей статей затрат, которые визуально выглядят одинаково, но отличаются количеством пробелов.

Шаг 4: Настройка полей поиска в 8.3

Чтобы загрузка в 1С 8.3 прошла корректно, в созданном ПКО СтатьиЗатрат в обработчике «Поля поиска» можно добавить дополнительную логику, если стандартного поиска по наименованию недостаточно:


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

Обработка «минусовых» документов (Корректировок)

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

В обработчике «Перед выгрузкой» самого ПКО документа добавьте условие:


// Если сумма документа отрицательная, отменяем выгрузку по текущему ПКО
Если Источник.СуммаВзаиморасчетов < 0 Тогда
    Отказ = 1;
    // Здесь можно инициировать выгрузку по другому ПКО через ВыгрузитьПоПравилу
КонецЕсли;

Таким образом, для документов с разными знаками суммы будут применяться разные ПКО, что обеспечит чистоту данных в приемнике.

Полезные советы по отладке

Проанализируем типичные ошибки, возникающие при такой конвертации:

  1. Ошибка «Номер за пределами значения»: Обычно означает, что вы указали ИмяПКО, которого не существует в файле правил, или допустили опечатку (например, СтатьяЗатрат вместо СтатьиЗатрат). Проверьте соответствие имен во вкладке ПКО.
  2. Объекты не создаются: Проверьте, стоит ли в ПКО галочка «Генерировать новый номер или код». В 8.3 справочник статей затрат часто требует заполнения реквизита «Вид расхода» (для налогового учета). Если его не заполнить, объект может не записаться. Используйте обработчик «Перед загрузкой» в 8.3, чтобы установить значения по умолчанию.
  3. Обновление модуля выгрузки: После любых изменений правил в КД 2.0 для 7.7, не забывайте заново выгружать и подключать файл правил в обработке V77Exp.ert.

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

← На главную