При переносе данных между конфигурациями 1С, например, из Комплексной автоматизации 2.4 в Бухгалтерию предприятия 3.0 (БП 3.0), разработчики часто сталкиваются с проблемой: на форме документа Расходный кассовый ордер (РКО) присутствует поле Получатель, но при попытке найти одноименный реквизит в метаданных объекта выясняется, что его не существует. Это вызывает путаницу, особенно когда поле должно заполняться ссылкой на справочник Физические лица.
В этой статье мы подробно разберем внутреннее устройство документа РКО, выясним, куда на самом деле сохраняются данные из поля «Получатель», и как правильно настроить правила обмена или программный код для корректного заполнения документа.
Для начала проанализируем ситуацию, которая вводит в заблуждение многих начинающих разработчиков. В управляемых формах 1С:Предприятие 8.3 существует жесткое разделение между данными объекта (которые хранятся в базе данных) и реквизитами формы (которые нужны только для отображения и логики интерфейса).
Поле Получатель в РКО — это типичный пример динамического интерфейсного решения. Проанализируем путь к данным этого поля. Как правило, оно связано с реквизитом формы, а не с реквизитом самого документа. В 1С:БП 3.0 за отображение получателя могут отвечать разные механизмы в зависимости от значения реквизита ВидОперации.
Важный вывод: при программном заполнении или переносе данных через КД (Конвертация данных) нам нужно работать исключительно с реквизитами объекта. Реквизиты формы заполнятся автоматически логикой самой программы при открытии документа пользователем.
Основным реквизитом в РКО для хранения информации о том, кому выданы денежные средства, является Контрагент. Рассмотрим его особенности:
Контрагент имеет составной тип, который включает в себя справочники Контрагенты и Физические лица.Контрагент. Если в объекте заполнено поле Контрагент ссылкой на физлицо, форма при открытии поймет это и отобразит данные в нужном поле.В процессе анализа формы вы можете встретить реквизит КонтрагентЮрФизЛицо. Рассмотрим, для чего он нужен. Это перечисление (ЮрЛицо или ФизЛицо), которое также является реквизитом формы. Оно управляет тем, какой именно справочник откроется у пользователя при нажатии кнопки выбора в поле получателя.
При переносе данных заполнять этот реквизит формы не требуется. Программная логика модуля формы БП 3.0 самостоятельно определит его значение при инициализации документа на основании типа ссылки, хранящейся в Контрагент.
Проанализируем еще один важный реквизит, о котором часто забывают при миграции данных — строковый реквизит Выплачено. В отличие от Контрагент, который хранит ссылку на объект базы данных, реквизит Выплачено хранит текстовое представление (ФИО в дательном падеже), которое выводится в печатную форму РКО.
Если вы заполните только Контрагент, но оставите Выплачено пустым, то в списке документов поле «Получатель» может выглядеть заполненным, но при печати ордера графа «Выдать» окажется пустой. Поэтому при загрузке документа рекомендуется программно формировать эту строку.
Пример кода для заполнения документа:
// Устанавливаем вид операции
НовыйДокумент.ВидОперации = Перечисления.ВидыОперацийРКО.ВыдачаПодотчетномуЛицу;
// Заполняем получателя (физическое лицо)
НовыйДокумент.Контрагент = СсылкаНаФизЛицо;
// Обязательно заполняем текстовое поле для печатных форм
НовыйДокумент.Выплачено = СсылкаНаФизЛицо.Наименование; // Желательно в дательном падеже
НовыйДокумент.Записать();
Если вы используете правила конвертации данных, разберем по шагам, как настроить ПКС (Правила конвертации свойств) для корректного заполнения получателя:
СправочникСсылка.Контрагенты, другое для СправочникСсылка.ФизическиеЛица.Выплачено в БП 3.0.Стоит отметить, что в зависимости от релиза конфигурации, для специфических операций, таких как «Выплата заработной платы работнику» или «Выплата по ведомостям», в документе могут использоваться другие реквизиты (например, ФизическоеЛицо или табличные части). Выясним причину: это связано с необходимостью детализации расчетов по зарплате.
Однако для 90% случаев (оплата поставщику, подотчет, прочий расход) схема остается единой: работаем с реквизитом Контрагент. Если вы видите на форме поле, которое ведет себя странно, всегда проверяйте ПутьКДанным в свойствах элемента формы в Конфигураторе. Если там не указано Объект.ИмяРеквизита, значит, перед вами виртуальное поле, и искать «правду» нужно в коде модуля формы, в процедурах ПриЧтенииНаСервере или ПриСозданииНаСервере.
Чтобы успешно заполнить поле «Получатель» в Расходном кассовом ордере при переносе в 1С:Бухгалтерия 3.0, придерживайтесь следующих правил:
ТипКонтрагента или динамические поля выбора.Контрагент.ВидОперации: от него зависит, как программа будет интерпретировать данные в Контрагент.Выплачено для корректной работы печатных форм.Таким образом, понимание того, что Получатель на форме — это всего лишь визуальное представление Контрагента в объекте, позволяет избежать ошибок при миграции данных и обеспечить корректный учет в целевой базе.