Вопрос по конвертации данных
Доброго времени. У меня пока мало опыта в разработке правил на КД. Пишу всего лишь свои третьи правила и вот что не могу понять. Правила пишу для унф 1.6 и бп 2.0. Есть такой документ, как авансовый отчет, так вот в УНФ в этом документе есть реквизит сотрудник с типом СправочникСсылкаСотрудники, а в бп в этом документе реквизит Физ. лицо с типом СправочникСсылкаФизическиеЛица, если настраиваю между ними соответствие, то почему не то не переносится реквизит. Как поступают в таких случаях?
По теме из базы знаний
- 1С: Конвертация данных 3. Инструкции и примеры. EnterpriseData (универсальный формат обмена)
- Механизмы и транспорт обмена данными. Пример создания в КД 2.1 правил обмена данными ЗУП 2.5 -> БП 3.0. Выгрузка ведомостей и банковских счетов. Передача параметров обмена из Источника в Приемник. ВыгрузитьПоПравилу(). ПередатьОдинПараметрВПриемник().
- Пример создания в КД 2.1 правил выгрузки данных регистра «Лицевые счета работников» из ЗУП 2.5 в справочник «Банковские счета» БП 3.0. Подробно, ясно и просто.
- Универсальный обмен XML (КД 2) + RabbitMQ – простая и комфортная работа вместе
- Заметки по Конвертации данных 2.1
Найденные решения
Для таких случаев нужно создавать правило конвертации объекта СотрудникВФизЛицо, где в источнике будет СправочникСсылкаСотрудники, в приемнике СправочникСсылкаФизическиеЛица, в этом правиле настраивать соответствия полей и далее в ПКО документа АвансовыйОтчет при конвертации свойства использовать созданное правило.
В общем, после почти суток попыток и блуждания по интернету, у меня получилось. Нашел на одном форуме ответ разработчиков 1С и подогнал их решения под себя.
В итоге надо так:
Создать правило для конвертации.
Затем в обработчике "ПередВыгрузкой" пишем код:
Это нужно для того, чтобы не создавалась ссылка на элемента справочника. У правила должен быть включен флажок "Не запоминать выгруженные объекты".
Далее в обработчике "После выгрузки" написал код:
Переменная Источник предоставляет доступ к выгружаемому объекту, в данном сулчае к справочнику. В переменную УзелСсылки пишем значение перечисления, так как оно должно быть записано в выходной файл. Строка "Отказ = ИСТИНА;" обязательна. По ней мы прерываем штатную выгрузку справочника и возвращаем значение переменной УзелСсылки, которое будет записано в значение соответсвующего реквизита.
Вот как то так. Спасибо всем за помощь.
В итоге надо так:
Создать правило для конвертации.
Затем в обработчике "ПередВыгрузкой" пишем код:
Приемник = Источник;
Это нужно для того, чтобы не создавалась ссылка на элемента справочника. У правила должен быть включен флажок "Не запоминать выгруженные объекты".
Далее в обработчике "После выгрузки" написал код:
Если Источник.Ставка = 10 Тогда
УзелСсылки = "НДС10";
ИначеЕсли Источник.Ставка = 18 Тогда
УзелСсылки = "НДС18";
Иначе УзелСсылки = "БезНДС";
КонецЕсли;
Отказ = Истина;
Переменная Источник предоставляет доступ к выгружаемому объекту, в данном сулчае к справочнику. В переменную УзелСсылки пишем значение перечисления, так как оно должно быть записано в выходной файл. Строка "Отказ = ИСТИНА;" обязательна. По ней мы прерываем штатную выгрузку справочника и возвращаем значение переменной УзелСсылки, которое будет записано в значение соответсвующего реквизита.
Вот как то так. Спасибо всем за помощь.
Остальные ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
Для таких случаев нужно создавать правило конвертации объекта СотрудникВФизЛицо, где в источнике будет СправочникСсылкаСотрудники, в приемнике СправочникСсылкаФизическиеЛица, в этом правиле настраивать соответствия полей и далее в ПКО документа АвансовыйОтчет при конвертации свойства использовать созданное правило.
(4)Спасибо. Сотрудников и ФизЛиц получилось сопоставить. Но пытаюсь применить этот же метод со ставкой НДС(Проблема в том, что в УНФ СтавкаНДС - Это справочник, а в БП - перечисление) не работает. Я так же добавил свойство, в нем прописал в ПередВыгрузкой такой код:
Выгружает нормально, а при загрузке в бп ругается, что метод объекта не обнаружен "ПолучитьСсылку".
В чем может быть причина?
Если Источник.Ставка = 0 Тогда
Значение = "НДС0";
ИначеЕсли Источник.Ставка = 10 Тогда
Значение = "НДС10";
ИначеЕсли Источник.Ставка = 18 Тогда
Значение = "НДС18";
Иначе Значение = "БезНДС";
КонецЕсли;
Выгружает нормально, а при загрузке в бп ругается, что метод объекта не обнаружен "ПолучитьСсылку".
В чем может быть причина?
Если я этот код вставляю просто соответствие, то при выгрузке дает ошибку, что не видит "Ставка", хотя это реквизит справочника. Поэтому я по примеру из сотрудников и физ.лиц создал правило, где указал, что источник - это справочник и приемник - перечисление и вставил этот код туда.
в типовой есть алгоритм ЗаполнитьСтавкуНДСТабличнойЧасти
// Алгоритм предназначен для заполнения ставки НДС в типовой табличной части
// Вызывается в обработчике "перед выгрузкой" ПКС
Если ОбъектКоллекции.СтавкаНДС.НеОблагается Тогда
Выражение = "Перечисления.СтавкиНДС.БезНДС";
ИначеЕсли ОбъектКоллекции.СтавкаНДС.Ставка = 18
И НЕ ОбъектКоллекции.СтавкаНДС.Расчетная Тогда
Выражение = "Перечисления.СтавкиНДС.НДС18";
ИначеЕсли ОбъектКоллекции.СтавкаНДС.Ставка = 18
И ОбъектКоллекции.СтавкаНДС.Расчетная Тогда
Выражение = "Перечисления.СтавкиНДС.НДС18_118";
ИначеЕсли ОбъектКоллекции.СтавкаНДС.Ставка = 10
И НЕ ОбъектКоллекции.СтавкаНДС.Расчетная Тогда
Выражение = "Перечисления.СтавкиНДС.НДС10";
ИначеЕсли ОбъектКоллекции.СтавкаНДС.Ставка = 10
И ОбъектКоллекции.СтавкаНДС.Расчетная Тогда
Выражение = "Перечисления.СтавкиНДС.НДС10_110";
ИначеЕсли ОбъектКоллекции.СтавкаНДС.Ставка = 0 Тогда
Выражение = "Перечисления.СтавкиНДС.НДС0";
ИначеЕсли ОбъектКоллекции.СтавкаНДС.Ставка = 20
И НЕ ОбъектКоллекции.СтавкаНДС.Расчетная Тогда
Выражение = "Перечисления.СтавкиНДС.НДС20";
ИначеЕсли ОбъектКоллекции.СтавкаНДС.Ставка = 20
И ОбъектКоллекции.СтавкаНДС.Расчетная Тогда
Выражение = "Перечисления.СтавкиНДС.НДС20_120";
Иначе
Выражение = "Перечисления.СтавкиНДС.НДС18";
КонецЕсли;
Показать
Правило сделал. В обработчике ПриВыгрузке написал так:
Если БезНДС, то срабатывает.
Если Источник.Ставка = 10 Тогда
УзелСсылки = "НДС10";
ИначеЕсли Источник.Ставка = 18 Тогда
УзелСсылки = "НДС18";
Иначе УзелСсылки = "БезНДС";
КонецЕсли;
Если БезНДС, то срабатывает.
В общем, после почти суток попыток и блуждания по интернету, у меня получилось. Нашел на одном форуме ответ разработчиков 1С и подогнал их решения под себя.
В итоге надо так:
Создать правило для конвертации.
Затем в обработчике "ПередВыгрузкой" пишем код:
Это нужно для того, чтобы не создавалась ссылка на элемента справочника. У правила должен быть включен флажок "Не запоминать выгруженные объекты".
Далее в обработчике "После выгрузки" написал код:
Переменная Источник предоставляет доступ к выгружаемому объекту, в данном сулчае к справочнику. В переменную УзелСсылки пишем значение перечисления, так как оно должно быть записано в выходной файл. Строка "Отказ = ИСТИНА;" обязательна. По ней мы прерываем штатную выгрузку справочника и возвращаем значение переменной УзелСсылки, которое будет записано в значение соответсвующего реквизита.
Вот как то так. Спасибо всем за помощь.
В итоге надо так:
Создать правило для конвертации.
Затем в обработчике "ПередВыгрузкой" пишем код:
Приемник = Источник;
Это нужно для того, чтобы не создавалась ссылка на элемента справочника. У правила должен быть включен флажок "Не запоминать выгруженные объекты".
Далее в обработчике "После выгрузки" написал код:
Если Источник.Ставка = 10 Тогда
УзелСсылки = "НДС10";
ИначеЕсли Источник.Ставка = 18 Тогда
УзелСсылки = "НДС18";
Иначе УзелСсылки = "БезНДС";
КонецЕсли;
Отказ = Истина;
Переменная Источник предоставляет доступ к выгружаемому объекту, в данном сулчае к справочнику. В переменную УзелСсылки пишем значение перечисления, так как оно должно быть записано в выходной файл. Строка "Отказ = ИСТИНА;" обязательна. По ней мы прерываем штатную выгрузку справочника и возвращаем значение переменной УзелСсылки, которое будет записано в значение соответсвующего реквизита.
Вот как то так. Спасибо всем за помощь.
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот