К статье
Практический материал

Разработка и Конфигурация · 12 мин

ПКС в 1С: что такое правила конвертации свойств и как с ними работать

ПКС в 1С — правила конвертации свойств при обмене данными. Разбираем, что это, где настраивается, как работает с ПКО и ПКГС, типовые ошибки и способы отладки.

ПКС в 1С — это правило конвертации свойств, один из базовых элементов механизма обмена данными через «Конвертацию данных» (редакции 2.1 и 3.0). Правило описывает, как значение одного реквизита объекта-источника превращается в значение реквизита объекта-приёмника при выгрузке и загрузке. Без ПКС не работает ни одно правило конвертации объектов (ПКО): именно набор ПКС определяет, какие поля документа или справочника попадут в другую базу и в каком виде.

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

Ниже разобрано, где физически находятся ПКС, как они связаны с ПКО и ПКГС, какие обработчики событий доступны, как отладить проблемное правило и какие ошибки встречаются чаще всего.

Что такое ПКС и где оно находится в структуре правил обмена

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

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

Физически правила хранятся в файле формата XML (для конвертации 2.1) либо формируются программно через обработку с макетом правил (для конвертации 3.0, где правила описываются кодом на встроенном языке в модуле менеджера обмена). В обоих случаях логика одна: при выгрузке механизм проходит по списку ПКС внутри ПКО и для каждого выполняет перенос значения.

Как ПКС связаны с ПКО и ПКГС

ПКО отвечает на вопрос «какой объект куда конвертируется», а ПКС — «какие именно данные внутри объекта переносятся и как». Если ПКО настроено, а ПКС для нужного реквизита нет, значение этого реквизита в приёмник просто не попадёт. Это самая частая причина жалоб «документ перенёсся, но поле пустое».

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

Для табличных частей действует промежуточный уровень — ПКГС. Например, у документа «Реализация товаров и услуг» табличная часть «Товары» конвертируется через ПКГС «Товары», а колонки «Номенклатура», «Количество», «Цена», «Сумма» — через вложенные в него ПКС. Если ПКГС отсутствует, табличная часть в приёмнике останется пустой, даже если шапка перенеслась корректно.

Основные настройки ПКС и что они означают

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

Для ссылочных реквизитов (номенклатура, контрагент, склад, договор) в ПКС указывается ссылка на ПКО соответствующего объекта. Тогда при выгрузке значение сначала прогоняется через это ПКО, а в приёмник записывается уже сконвертированная ссылка. Если забыть указать ПКО, в файл обмена попадёт внутренний идентификатор, который приёмник не сможет разрешить, — итогом будет либо пустое поле, либо ошибка загрузки.

Флаг «Поиск» у свойства означает, что данный реквизит участвует в поиске объекта в приёмнике. Например, справочник контрагентов часто ищется по ИНН и КПП: тогда ПКС для «ИНН» и «КПП» помечаются как свойства поиска. Неверная расстановка флагов поиска приводит к задвоению элементов в базе-приёмнике.

Реквизит пуст в приёмникеНет ПКС или источник пуст

Проверить наличие ПКС внутри нужного ПКО и значение реквизита в источнике

Ошибка при загрузке ссылкиНе указано ПКО для ссылочного реквизита

Открыть ПКС и проверить поле правила конвертации значения

Задваиваются элементыНеверные свойства поиска

Проверить флаги поиска у ПКС ключевых реквизитов

Табличная часть не переноситсяОтсутствует ПКГС

Проверить наличие ПКГС для табличной части и ПКС её колонок

Обработчики событий в ПКС

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

Типовой сценарий — когда значения в источнике и приёмнике различаются по смыслу или формату. Например, в источнике ставка НДС хранится как перечисление, а в приёмнике нужно числовое значение: в обработчике «Перед выгрузкой» формируется нужное значение и присваивается переменной «Значение». Другой частый случай — заполнение реквизита приёмника, которого нет в источнике: ПКС создаётся без источника, а значение вычисляется кодом.

Если обработчик должен отменить перенос свойства, используется переменная «Отказ»: установка «Отказ = 1» в событии «Перед выгрузкой» пропускает данное ПКС. Это удобно для условного переноса — например, не выгружать цену для определённых видов номенклатуры. 1 выполняется во встроенном безопасном режиме обработки выгрузки, и обращения к некоторым объектам метаданных могут быть ограничены.

bsl
// ПКС, обработчик "Перед выгрузкой": перенос ставки НДС числом
Если Источник.СтавкаНДС = Перечисления.СтавкиНДС.НДС20 Тогда
  Значение = 20;
ИначеЕсли Источник.СтавкаНДС = Перечисления.СтавкиНДС.НДС10 Тогда
  Значение = 10;
Иначе
  Значение = 0;
КонецЕсли;

ПКС в конвертации данных 3.0 и EnterpriseData

В конвертации данных 3.0 (формат EnterpriseData) подход изменился: правила описываются не визуально в конфигураторе «Конвертация данных», а программно — в общем модуле менеджера обмена, который создаётся обработкой настройки правил. Тем не менее понятие ПКС сохраняется: при обработке XDTO-пакета для каждого свойства объекта выполняется логика, аналогичная классическому ПКС, — чтение значения, преобразование, запись.

Отличие в том, что соответствия свойств задаются кодом в процедурах вида «ПриКонвертацииДанныхXDTO» и «ПередЗаписьюПолученныхДанных», а не таблицей правил. Поэтому при работе с типовыми обменами через EnterpriseData поиск проблемы ведётся не в файле правил, а в модуле менеджера конкретного плана обмена. Логика диагностики та же: определить, какое свойство теряется, найти участок кода, отвечающий за его конвертацию, и проверить условия.

Как отладить проблемное ПКС

Отладка начинается с локализации: нужно точно установить, какой реквизит какого объекта переносится неверно. Далее в конфигурации «Конвертация данных» открывается соответствующее ПКО, внутри него — нужное ПКС, и проверяются источник, приёмник, правило конвертации значения и обработчики. Часто проблема видна уже на этом этапе: пустой источник, опечатка в имени реквизита, отсутствующее ПКО.

Если настройки выглядят корректно, полезно посмотреть сам файл обмена. В XML-файле выгрузки каждый объект представлен узлом, а свойства — вложенными узлами «Свойство» с именами приёмника. Если свойства в файле нет — проблема на стороне выгрузки (ПКС не сработало или отказ в обработчике). Если свойство есть, но в базе значение не появилось — проблема на стороне загрузки: например, не найдено значение ссылки.

Для глубокой отладки обработки выгрузки и загрузки данных поддерживают режим отладки с подключением к внешней обработке: правила выгружаются во внешние файлы обработчиков, после чего код можно выполнять пошагово в отладчике конфигуратора. Это основной способ разобраться со сложными обработчиками, где значение формируется алгоритмом.

Порядок действий при потере реквизита
  1. 1
    Убедитесь, что реквизит заполнен в объекте-источнике
  2. 2
    Откройте ПКО объекта и проверьте наличие ПКС для нужного реквизита
  3. 3
    Проверьте источник, приёмник и правило конвертации значения в ПКС
  4. 4
    Выгрузите один объект и найдите свойство в XML-файле обмена
  5. 5
    Если свойства нет в файле — проверяйте обработчики и условия выгрузки; если есть — проверяйте загрузку и поиск ссылок

Типичные ошибки и ограничения

Частая ошибка — рассинхронизация правил между источником и приёмником. В конвертации 2.1 файл правил содержит обе стороны, но при доработках легко изменить ПКС только для выгрузки и забыть проверить загрузку. Другая типичная ситуация — перенос ссылочного реквизита без настройки поиска объекта: в приёмнике создаются дубли справочников, потому что объект не находится по существующим ключам.

Ограничение, о котором часто забывают: ПКС работает в рамках одного объекта. Нельзя в одном ПКС «дотянуться» до данных другого документа, если только это не сделать кодом в обработчике через запрос — но такие запросы замедляют выгрузку и усложняют поддержку. Также составные типы (реквизит, который может хранить ссылки разных видов) требуют отдельного внимания: для каждого возможного типа должно существовать соответствующее ПКО.

При доработке правил всегда тестируйте обмен на копии базы. Ошибка в обработчике загрузки может создать некорректные объекты или повредить существующие данные в рабочей базе-приёмнике, а откат таких изменений трудоёмок.

Типичные ошибки
01
Не указано ПКО для ссылочного реквизита — в приёмнике пустое поле или ошибка разбора ссылки
02
Флаги поиска расставлены по неуникальным реквизитам — объекты находятся неправильно и перезаписывают чужие данные
03
ПКС есть, но ПКГС для табличной части отсутствует — табличная часть не переносится целиком
04
Обработчик формирует значение неверного типа — ошибка при записи объекта в приёмнике
05
Изменены правила только на стороне выгрузки — загрузка ведёт себя непредсказуемо

FAQ

Чем ПКС отличается от ПКО?

ПКО (правило конвертации объектов) описывает соответствие целых объектов — например, документа источника документу приёмника. ПКС работает на уровне ниже: оно описывает перенос одного конкретного реквизита внутри этого объекта. Одно ПКО обычно содержит несколько ПКС.

Почему реквизит не переносится, хотя ПКС создано?

Проверьте три момента: заполнен ли реквизит в объекте-источнике, не установлен ли отказ в обработчике «Перед выгрузкой» и совпадает ли имя приёмника с реальным именем реквизита в конфигурации-приёмнике. Также убедитесь, что само ПКО объекта срабатывает — без него ПКС не выполняется.

Можно ли заполнить реквизит приёмника, которого нет в источнике?

Да. Создаётся ПКС без указания источника, а значение формируется в обработчике «Перед выгрузкой» кодом — константой, вычислением или запросом к базе-источнику. Так реализуют, например, подстановку склада или организации по умолчанию.

Что делать, если при загрузке дублируются элементы справочников?

Проблема почти всегда в настройках поиска. Откройте ПКО справочника и проверьте, какие ПКС отмечены флагом поиска: комбинация должна однозначно идентифицировать элемент (например, ИНН + КПП для контрагентов). Уберите поиск по неуникальным реквизитам вроде наименования.

Где искать ПКС в типовом обмене через EnterpriseData?

В конвертации 3.0 визуальной таблицы ПКС нет: соответствия свойств заданы кодом в общем модуле менеджера обмена (например, «МенеджерОбменаЧерезУниверсальныйФормат..»). Ищите процедуры конвертации нужного объекта и логику обработки его свойств внутри них.

Опасно ли менять правила обмена самостоятельно?

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

Итог

Что важно запомнить

ПКС — это правило переноса одного реквизита внутри правила конвертации объектов. Если данные теряются при обмене, проверяйте по цепочке: наличие ПКС, источник и приёмник, ПКО для ссылок, флаги поиска, обработчики. Любые доработки правил тестируйте на копии базы.