Перенос дополнительных реквизитов в Конвертации данных 2.0

13.08.19

Интеграция - Перенос данных 1C

Пример написания правил обмена (КД 2.0) для переноса дополнительных реквизитов справочника "Номенклатура", в том числе перенос ПВХ с разными типами значений.

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

Задача: с помощью правил обмена перенести Дополнительные реквизиты номенклатуры из "старой торговой программы" в УНФ. В обеих конфигурациях дополнительные реквизиты хранятся в табличной части справочника "Номенклатура" и используется план видов характеристик "ДополнительныеРеквизитыИСведения" и справочник "НаборыДополнительныхРеквизитовИСведений". В принципе это все, что для нас важно.

     Шаг 1. Создаем правило обмена для справочника "НаборыДополнительныхРеквизитовИСведений". Он нам понадобится, чтобы потом создать правило обмена для ПВХ.

(скрин 1)

    Шаг 2. Создаем правило обмена для ПВХ "ДополнительныеРеквизитыИСведения". Для каждого элемента пвх нужно указать тип значения. ТипЗначения - это стандартный реквизит ПВХ, но в конвертации он не отображается как реквизит и его нельзя выбрать в качестве приемника. Так что для передачи типа значения будем использовать параметры объекта. Создаем для плана видов характеристик новый ПКС: указываем "Передать данные в параметр", источник - пустой, приемник - "Типы". 

(скрин 2)

Дальше есть два способа - для обмена между идентичными конфигурациями (попроще) и для всех остальных.

Шаг 2 способ №1. Если у вас обмен между двумя одинаковыми конфигурациями, то вы можете использовать функцию ЗначениеВСтрокуВнутр /ЗначениеИзСтрокиВнутр. В созданном ПКС добавляем следующий код "перед загрузкой":

ТипыСвойства = Источник.ТипЗначения.Типы();
Значение = ЗначениеВСтрокуВнутр(ТипыСвойства);




В ПКО плана видов характеристик добавляем процедуру "После выгрузки":

Типы = ЗначениеИзСтрокиВнутр(ПараметрыОбъекта.Получить("Типы"));
Объект.ТипЗначения = Новый ОписаниеТипов(Типы );

 

 

Готово.

Шаг 2 способ №2. Если конфигурации не одинаковые, то предыдущий способ работать не будет. При вызове функции ЗначениеИзСтрокиВнутр тип значения не будет определен (будет Неопределено). Мой вариант - записать типы значений в строку, а затем расшифровать ее на стороне приемника.

ПКС "Типы" "перед загрузкой":

 

ТипыСвойства = Источник.ТипЗначения.Типы();

МассивТиповСтроками = "";

Для Каждого ТипСвойства Из ТипыСвойства Цикл
    МассивТиповСтроками = МассивТиповСтроками+ нрег(СтрЗаменить(Строка(ТипСвойства)," ","")) + ";";
КонецЦикла;

Значение = МассивТиповСтроками;

 


ПКО плана видов характеристик "после выгрузки":

 

ТипыСтрокой = ПараметрыОбъекта.Получить("Типы");

МассивТиповСтрокой = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(ТипыСтрокой, ";");
МассивТипов = Новый Массив;

Для Каждого ТипСтрокой Из МассивТиповСтрокой Цикл
    
    Если ТипСтрокой = "дополнительноезначение" Тогда
        МассивТипов.Добавить(Тип("СправочникСсылка.ЗначенияСвойствОбъектов"));
    ИначеЕсли ТипСтрокой = "контрагент" Тогда
        МассивТипов.Добавить(Тип("СправочникСсылка.Контрагенты"));
    //ИначеЕсли ...
    КонецЕсли;
КонецЦикла;

Объект.ТипЗначения = Новый ОписаниеТипов(МассивТипов);

 


Готово.

    Шаг 3. В ПКО справочника "Номенклатура" создаем стандартным способом ПКС для табличной части "Дополнительные реквизиты" и ее реквизитов (скрин 7)

Для ПКС реквизита "Значение" пишем в "перед выгрузкой":

 

Если ТипЗнч(ОбъектКоллекции.Значение) = Тип("СправочникСсылка.Контрагенты") Тогда
    ИмяПКО = "Контрагенты";
ИначеЕсли ТипЗнч(ОбъектКоллекции.Значение) = Тип("СправочникСсылка.ЗначенияСвойствОбъектов") Тогда
    ИмяПКО = "ЗначенияСвойствОбъектов";
// ИначеЕсли...
КонецЕсли;

 



Теперь все готово. Можно пробовать выгружать.

Вступайте в нашу телеграмм-группу Инфостарт

конвертация перенос пвх правила обмена дополнительные реквизиты типов значений данных 2.0 планов видов характеристик для дополнительных реквизитов

Вы можете заказать платную адаптацию этой статьи под ваши задачи на «Бирже заказов».

  • 0% комиссии — оплата напрямую исполнителю;
  • Исполнители любого масштаба — от отдельных специалистов до команд под проект;
  • Прямой обмен контактами между заказчиком и исполнителем;
  • Безопасная сделка — при необходимости;
  • Рейтинги, кейсы и прозрачная система откликов.

См. также

Перенос данных 1C Программист 1С:Предприятие 8 1С:Управление производственным предприятием 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х Россия Платные (руб)

Перенос документов, начальных остатков и справочной информации из УПП 1.3 в ERP 2 | из УПП 1.3 в УТ 11 | из УПП в КА 2 | Правила конвертации (КД 2) | Более 360 предприятий выполнили переход с использованием этого продукта! | Сэкономьте время - используйте готовое решение для перехода! | Позволяет перенести из УПП 1.3 в ERP / УТ 11 / КА 2 всю возможную информацию | В переносе есть фильтр по организации и множество других опциональных параметров выгрузки | Есть несколько алгоритмов выгрузки остатков на выбор

58000 руб.

04.08.2015    188094    451    305    

456

SALE! 15%

Перенос данных 1C Файловый обмен (TXT, XML, DBF), FTP Системный администратор Программист 1С:Предприятие 8 1С:Розница 2 1С:Управление нашей фирмой 1.6 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х 1С:Управление нашей фирмой 3.0 1С:Розница 3.0 Россия Платные (руб)

Правила в универсальном формате обмена для ERP 2.5, КА 2.5, УТ 11.5, БП 3.0, Розница, УНФ, для последних версий конфигураций. Ссылки на другие конфигурации в описании публикации. Правила совместимы со всеми другими версиями конфигураций новыми и старыми, поддерживающими обмен и синхронизацию в формате EnterpriseData. Не требуется синхронного обновления правил после обновления другой конфигурации, участвующей в обмене. Типовой обмен через планы обмена кнопкой Синхронизация вручную или автоматически по расписанию, или вручную обработкой.

27633 руб.

12.06.2017    161170    970    321    

482

Перенос данных 1C Файловый обмен (TXT, XML, DBF), FTP Системный администратор Программист 1С:Предприятие 8 1С:Комплексная автоматизация 1.х 1С:Управление производственным предприятием 1С:Бухгалтерия 3.0 Россия Бухгалтерский учет Платные (руб)

Перенос данных из 1С:Управление производственным предприятием 1.3 в 1С:Бухгалтерия предприятия 3.0 с помощью правил обмена | Можно выполнить переход с УПП на БП 3 или запускать выгрузку данных за выбранный период времени | Переносятся документы, начальные остатки и вся справочная информация | Есть фильтр по организации и множество других параметров выгрузки | Поддерживается несколько сценариев работы: как первичный полный перенос, так и перенос только новых документов | Перенос данных возможен в "1С: Бухгалтерия 3.0" версии ПРОФ, КОРП или базовую | Переход с "1С: УПП1.3" / "1С:КА 1.1" на "1С:БП3.0" с помощью правил конвертации будет максимально комфортным! | Можно бесплатно проверить перенос на вашем сервере!

50050 руб.

25.02.2015    188532    360    290    

419

SALE! 10%

Перенос данных 1C Файловый обмен (TXT, XML, DBF), FTP Системный администратор Программист 1С:Предприятие 8 1С:Управление производственным предприятием 1С:Бухгалтерия 3.0 Россия Бухгалтерский учет Управленческий учет Платные (руб)

Переносите справочную информацию, остатки и документы из УПП 1.3 в Бухгалтерию 3.0 с помощью готовых правил. Переносится более 50 видов документов. Простой интерфейс и понятные настройки.

42000 37800 руб.

15.12.2021    34419    259    64    

195

Перенос данных 1C Файловый обмен (TXT, XML, DBF), FTP Системный администратор Программист Бухгалтер 1С:Предприятие 8 1С:Бухгалтерия 2.0 1С:Бухгалтерия 3.0 Россия Бухгалтерский учет Налоговый учет Платные (руб)

Перенос данных из БП 2 в БП 3 готовые правила конвертации данных (КД 2), сэкономьте свое время! | Выполнить переход с БП 2 на БП 3 в ситуациях, когда простым обновлением перейти не получается | Переносится вся справочная информация, документы за выбранный период, а также начальные остатки на выбранную дату (то есть можно еще и свертку базы сделать при переносе) | Есть фильтр по организациям при выгрузке данных | Перенос можно проверить перед покупкой прямо на вашем сервере! Обращайтесь за проверкой!

50600 руб.

21.05.2019    58386    81    132    

73

Перенос данных 1C Файловый обмен (TXT, XML, DBF), FTP Программист 1С:Предприятие 8 1С:Комплексная автоматизация 1.х 1С:Управление производственным предприятием 1С:Зарплата и Управление Персоналом 3.x Россия Бухгалтерский учет Платные (руб)

Правила переноса кадровых и расчетных данных и справочной информации из "1С:УПП1.3" или "1С:КА 1.1" в "1С:ЗУП 3.1 | Разработан в формате КД 2 (правила конвертации данных) | При выгрузке есть фильтр по организациям | Обновляется при выходе новых релизов 1С | Развитие алгоритмов | Расчетные документы переносятся в документ "Перенос данных" | Создаются документы "Начальная штатная расстановка" и "Начальная задолженность по зарплате", переносятся кадровые документы

58000 руб.

29.10.2018    62978    82    133    

81

Внешние источники данных Кадровый учет Файловый обмен (TXT, XML, DBF), FTP Перенос данных 1C Программист 1С:Предприятие 8 1С:Зарплата и кадры государственного учреждения 3 Государственные, бюджетные структуры Россия Бухгалтерский учет Бюджетный учет Платные (руб)

Обработка позволяет перенести кадровую информацию и данные по заработной плате, фактическим удержаниям, НДФЛ, вычетам, страховым взносам из базы Парус 10 учреждений (далее Парус) в конфигурацию 1С:Зарплата и кадры государственного учреждения ред. 3 (далее 1С) и начать с ней работать с любого месяца года.

85400 руб.

05.10.2022    13573    15    8    

16
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. el07 1 13.08.19 16:13 Сейчас в теме
Здравствуйте. Благодарю, пока не возникало такой ситуации, но вполне может потом пригодиться.
2. fancy 37 14.08.19 07:30 Сейчас в теме
В ПКО плана видов характеристик добавляем процедуру "После выгрузки":

в двух местах пишите "После выгрузки", должно быть "После загрузки" и на скриншотах вижу, поправьте
3. vikulinamari 79 14.08.19 09:31 Сейчас в теме
4. jaroslav.h 183 05.10.19 14:43 Сейчас в теме
При загрузке правил по сопсоб №1 получаю

Метод объекта не обнаружен (ПКО_ПослеЗагрузки_НазначенияСвойствКатегорийОбъектов)

требуется в результате перенести ТипыЗначений ПВХ
5. vikulinamari 79 09.10.19 15:03 Сейчас в теме
(4)
Расскажите поподробнее. В какой момент возникает ошибка? Какой полный текст?
6. user1310985 18.11.19 15:11 Сейчас в теме
Добрый день!
По способу №2 не выгружает, вылазит ошибка
Прикрепленные файлы:
7. par_62 24.02.20 08:03 Сейчас в теме
А в узлы писать не пробовали? Ведь так гораздо проще и логичнее. И опять же можно записать что угодно. Мы часто забывпем,что конвертация это прежде всего файл формата xml и если мы его формируем,то мы можем писать что угодно,лишь бы правильно разобрали при загрузке
8. isiter 26.11.20 22:49 Сейчас в теме
Спасибо вам огромное. Мучаюсь который день. Очень помогла ваша статья.
9. EnsTaiN 17.03.22 05:12 Сейчас в теме
Шаг 2 способ №1 - тут не выгружаются квалификаторы даты, числа, строки
Но если немного упростить то работает:

Значение = ЗначениеВСтрокуВнутр(Источник.ТипЗначения);

Объект.ТипЗначения = ЗначениеИзСтрокиВнутр(ПараметрыОбъекта.Получить("Типы"));
14. svilsa 14 09.01.24 15:38 Сейчас в теме
(9)
Объект.ТипЗначения = ЗначениеИзСтрокиВнутр(ПараметрыОбъекта.Получить("Типы"));

Спасибо, так перенеслись точности чисел и длины строк
10. vika64 75 26.12.22 18:00 Сейчас в теме
спасибо!! способ 1 - все получилось!!
11. ImHunter 348 14.01.23 13:01 Сейчас в теме
Перенес типы через ОбщегоНазначения.ЗначениеВСтрокуXML / ЗначениеИзСтрокиXML. Т.е., это ближе к 2-му способу, только на БСП.
vovan221980; denmon88; +2 Ответить
13. denmon88 36 14.07.23 11:08 Сейчас в теме
(11)
ОбщегоНазначения.ЗначениеВСтрокуXML / ЗначениеИзСтрокиXML


Спасибо. Код отработал без ошибок

Значение = ОбщегоНазначения.ЗначениеВСтрокуXML(Источник.ТипЗначения);

Объект.ТипЗначения = ОбщегоНазначения.ЗначениеИзСтрокиXML(ПараметрыОбъекта["Типы"]);
12. Ali_q 1 16.05.23 15:09 Сейчас в теме
Спасибо, помог 2 способ
15. vld1973 98 16.12.24 00:01 Сейчас в теме
16. Sintson 414 27.02.25 17:39 Сейчас в теме
Сделал так:

1. ПКС "ПередВыгрузкой"
ТипыСвойства = Источник.ТипЗначения.Типы();
Значение = ЗначениеВСтрокуВнутр(ТипыСвойства);

2. ПКО "ПослеЗагрузки"
Типы = ЗначениеИзСтрокиВнутр(ПараметрыОбъекта.Получить("Типы"));
Если Типы.Количество() > 0 Тогда
Объект.ТипЗначения = Новый ОписаниеТипов(Типы);
КонецЕсли;
17. tirli41 4 18.06.25 12:57 Сейчас в теме
На снимке 7, не хватает еще одного снимка где ПКС для Свойства, т.е. какой там код обработчика, снимок прикрепил. Еще вопрос в справочнике Номенклатура пользователи создали несколько десятков доп. реквизитов. В каком ПКО сделать фильтр на выгрузку определенных доп. реквизитов?
Прикрепленные файлы:
18. Xenin 4 20.10.25 23:49 Сейчас в теме
Спасибо за идею.
Сделал универсальный вариант.

алгоритм: ТипЗначенияПВХ_Выгрузка
//алгоритм ТипЗначенияПВХ_Выгрузка
//Вставить в "ПриВыгрузке" ПКО: Выполнить(Алгоритмы.ТипЗначенияПВХ_Выгрузка);//Источник, Приемник

Если НЕ Источник.ЭтоГруппа Тогда
	лТипы = Источник.ТипЗначения.Типы();
	лМассивТиповСтрокой = Новый Массив;

	Для Каждого сТип Из лТипы Цикл
		Если СтрНайти(СериализаторXDTO.XMLСтрока(сТип), "Ref.") > 0 Тогда
	    	сПравило = ОбщиеПроцедурыФункции.Менеджеры.Получить(сТип).ПКО;
		    Если сПравило = Неопределено Тогда
	    		ВызватьИсключение(СтрШаблон("Для типа: %1 не задано правило конвертации.", одТипЗначенияСтрокой(сТип)));
	    	Иначе
	    		сТипПриемник = сПравило.Приемник;
	    	КонецЕсли;
	    Иначе
	    	сТипПриемник = одТипЗначенияСтрокой(сТип);
	    КонецЕсли;
	    лМассивТиповСтрокой.Добавить(сТипПриемник);
	КонецЦикла;

	лУзелСвойства = СоздатьУзел("ЗначениеПараметра");
	УстановитьАтрибут(лУзелСвойства, "Имя", "ТипЗначения");
	УстановитьАтрибут(лУзелСвойства, "Тип", "ХранилищеЗначения");
	одЗаписатьЭлемент(лУзелСвойства, "Значение", XMLСтрока(Новый ХранилищеЗначения(лМассивТиповСтрокой, Новый СжатиеДанных(9))));
	ДобавитьПодчиненный(Приемник, лУзелСвойства);
КонецЕсли;
Показать


алгоритм: ТипЗначенияПВХ_Загрузка
//алгоритм ТипЗначенияПВХ_Загрузка (Используется при загрузке)
//Вставить в "ПослеЗагрузки" ПКО: Выполнить(Алгоритмы.ТипЗначенияПВХ_Загрузка);//Объект, ПараметрыОбъекта

лПараметр = ПараметрыОбъекта.Получить("ТипЗначения");
Если лПараметр <> Неопределено Тогда 
	лМассивТиповСтрокой = лПараметр.Получить();

	лМассивТипов = Новый Массив;
	Для каждого сТипСтрокой Из лМассивТиповСтрокой Цикл
		лМассивТипов.добавить(Тип(сТипСтрокой));
	КонецЦикла;
	Объект.ТипЗначения = Новый ОписаниеТипов(лМассивТипов);
КонецЕсли;
Показать

Вроде все должно быть понятно.
Надеюсь к НГ запилю статью по лайфхакам КД2.1

И да. Давайте следовать рекомендациям 1С:
Не рекомендуется использовать "ЗначениеВСтрокуВнутр"
Например: Для любой из строк таблицы (дерева) значения функция выгрузит один и тот же GUID:
Пример:
Для отправки сообщения требуется регистрация/авторизация