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

Конвертация из ТЧ в Реквизит

Я
   ilyayakimets

26.03.19 — 12:02

Добрый день!

Необходимо сделать выгрузку дополнительных реквизитов справочника Номенклатура (В КД видит как ТЧ «ДополнительныеРеквизиты») одной базы в реквизит справочника Номенклатура другой базы.

Нужно перенести значение одного из дополнительных реквизитов (КлассТМЦ) в реквизит справочника Номенклатура — «КлассТМЦ».

Как правильно это сделать?

  

Партнерская программа EFSOL Oblako

   ilyayakimets

1 — 26.03.19 — 14:51

Ап

   Йохохо

2 — 26.03.19 — 14:55

Значение = МойКодПолучающийЗначениеДополнительногоРеквизитаКлассТМЦИзТЧОбъектаИсточник;

   ilyayakimets

3 — 26.03.19 — 15:09

(2) Именно пример этого кода мне и нужен

   ilyayakimets

4 — 26.03.19 — 17:09

Дело в том, что физически на форме это не ТабЧасть, а несколько дополнительных реквизитов, поэтому просто обойти ТЧ и получить значение не получается.

Как в таких случаях обработать значение дополнительного реквизита и передать его в обычный реквизит?

   dezss

5 — 26.03.19 — 17:28

(4) А в базе как, в ТЧ?

Выгрузка же идет не из формы, а из базы.

   Garykom

6 — 26.03.19 — 17:28

Там обычно в типовых в БСП есть для этого какие то функции типа «свойство»

   ilyayakimets

7 — 27.03.19 — 09:13

(5) Да, в КД видит как ТЧ, однако почему-то не получается к ней обратиться, мол не видит нужный мне столбец.

Вот как в КД:

http://prntscr.com/n3goto

Вот ошибка:

http://prntscr.com/n3gq7y

   Йохохо

8 — 27.03.19 — 09:25

(7) из ПКГС заполнять как то криво будет. Напиши свой код в внешней обработке через запрос или как умеешь и перенеси в конвертацию. Не пользуйся ПКГС

   Йохохо

9 — 27.03.19 — 09:33

ошибка не относится к тч источника, она ищет твой реквизит не как реквизит объекта приемника, а реквизит тч приемника. Вроде

   ilyayakimets

10 — 27.03.19 — 09:33

(8) Где-то нашёл похожий пример:

Если ЗначениеЗаполнено(Источник.ДополнительныеРеквизиты) Тогда

    ТЧ = Источник.ДополнительныеРеквизиты;

    ВходящиеДанные = Новый Структура;

    ВходящиеДанные.Вставить(«КодВоВнешнейИБ», ТЧ.Значение[0]);    

КонецЕсли

У ТЧ с доп. реквезитами есть колонка «Значение».

Может я уже совсем на ровном месте туплю?

И при выгрузке:

http://prntscr.com/n3gwi1

   Йохохо

11 — 27.03.19 — 09:50

(10) напиши обработку которая выводит этот твой реквизит, не в кд, в источнике похоже объект

   hhhh

12 — 27.03.19 — 10:01

(10) вообще-то это наоборот пишется

ТЧ[0].Значение

   ilyayakimets

13 — 27.03.19 — 10:14

(12) Да, верно, просто пробовал кучу вариантов)

   Йохохо

14 — 27.03.19 — 10:18

(12) кек, я и не заметил

  

ilyayakimets

15 — 27.03.19 — 12:47

Закрыто.

Если кому пригодится решение — Конвертация данных 2.1

Показывать по
10
20
40
сообщений

Новая тема

Ответить

Алексей Великий

Дата регистрации: 24.07.2012
Сообщений: 226

«Добрый день. Помогите, пожалуйста, разобраться в следующей проблеме. <br><br>У меня есть самописная конфигурация — источник, из справочника «Контрагенты» которой необходимо выгрузить данные в аналогичный справочник конфигурации «Управление торговлей ред. 11». Все бы ничего, но часть данных должна выгружаться в дополнительные реквизиты конфигурации-приемника (т.е. используется стандартный типовой механизм дополнительных реквизитов и сведений). <br><br>Как я пишу правила конвертации для переноса данных в дополнительные реквизиты: <br><br>Т.к. доп. реквизиты в конфигурации УТ 11 хранятся в табличных частях справочников, то для ПКО «Контрагенты» я делаю сначала ПКГС (Правило конвертации группы свойств) без указания источника, но с указанием приемника — ДополнительныеРеквизиты. В событии ПКГС «ПередОбработкой» пишу следующий код: <br><br>КоллекцияОбъектов = Новый ТаблицаЗначений;<br>КоллекцияОбъектов.Колонки.Добавить(«Свойство»);<br>КоллекцияОбъектов.Колонки.Добавить(«Значение»);<br>Строка = КоллекцияОбъектов.Добавить(); <br><br>Далее в самих ПКГС для кадого реквизитов «Свойство» и «Значение» табличной части «ДополнительныеРеквизиты» делаю соответствующие ПКС (правила конвертации свойств) без указания источника, но с указанием приемника и для каждого приемника программно указываю, какие значения они должны принимать. Значения реквизитов указываю правильно. <br><br>После выгрузки-загрузки проверяю, все ли загрузилось в конфигурацию-приемник и вижу, что в форме элемента справочника «Контрагенты» дополнительные реквизиты не заполнены, хотя в табличную часть «ДополнительныеРеквизиты» этого справочника они добавились (посмотрел с помощью консоли запросов). В чем моя ошибка?»

ZhAmAn

Дата регистрации: 23.12.2010
Сообщений: 1333

А в УТ включены доп.реквизиты?Состав настроен?

Алексей Великий

Дата регистрации: 24.07.2012
Сообщений: 226

Доп. реквизиты включены, состав настроен — на форме элемента справочника «Контрагенты» элементы форм для заполнения доп. реквизитов есть, но они ничем не заполнены, хотя в табличной части «ДополнительныеРеквизиты» они заполнены.

Денис (САМАРА)

Дата регистрации: 09.04.2008
Сообщений: 8351

«Копайте» в направлении заполнения поля «Свойство» доп.реквизитов — возможно определены для справочника «Контрагенты» одни свойства, а в ТЧ заполняются другие. Во вложении пример заполнения доп.сведений и доп.реквизитов для справочника «Номенклатура» (я делал выгрузку из «самописки» 7.7 в УТ 11 версии 1.4). Там обработчиках для «Правил конвертации» выполняется алгоритм, который корректирует какие-либо ошибки если произошла путаница при заполнении (как подстраховка).

Показывать по
10
20
40
сообщений

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

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

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

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

(скрин 1)

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

(скрин 2)

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

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

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

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

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

Готово.

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

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

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

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

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

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

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

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

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

Для Каждого ТипСтрокой Из МассивТиповСтрокой Цикл

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

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

Готово.

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

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

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

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

В данной заметке хотелось бы рассмотреть вопрос: Как загрузить дополнительные реквизиты номенклатуры при помощи обработки с диска ИТС «Загрузка данных из табличного документа (управляемые формы)»?

В качестве примера, будем использовать конфигурацию 1С:ERP Управление предприятием 2, аналогичным смособом можно будет загрузить в Управление торговлей 11 или любую другую, подобную конфигурацию.

Дополнительные реквизиты хранятся в табличной части «ДополнительныеРеквизиты» справочника «Номенклатура». Из обработки «Загрузка данных из табличного документа» можно добраться только к табличной части одной, выбранной номенклатуре, через тип данных «Позиция номенклатуры».

Позиция номенклатуры

Но такой способ нам не подходит, т.к. мы будем загружать дополнительные реквизиты для списка номенклатуры. Для примера загрузим одну номенклатуру и два ее дополнительных реквизита: «Формат» и «Толщина».

Загрузка из табличного документа

Настроим поиск номенклатуры по наименованию из колонки с номером один.

Настройка загрузки реквизитов

Теперь немного займемся программированием. Откроем событие «При записи объекта» и добавим туда следующий программный код:

Объект.ДополнительныеРеквизиты.Очистить(); // Предварительно удаляем все доп. реквизиты. Если не нужно — закомментировать.ДопСвойства = Новый Соответствие;
ДопСвойства.Вставить(«11», 91); // Наименование свойства, номер ячейки
ДопСвойства.Вставить(«АКЦИЯ», 92);
ДопСвойства.Вставить(«Размер,мм», 93);
ДопСвойства.Вставить(«Формат», 94);
ДопСвойства.Вставить(«Номер цвета», 95);
ДопСвойства.Вставить(«Цвет», 96);
ДопСвойства.Вставить(«шт./м2», 97);
ДопСвойства.Вставить(«шт. / палетта», 98);
ДопСвойства.Вставить(«вес, кг/шт.», 99);

Для Каждого

ЭлементДопСвойства Из ДопСвойства ЦиклТекСвойство = ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.НайтиПоНаименованию(ЭлементДопСвойства.Ключ + » (» + Объект.ВидНоменклатуры + «)», Ложь);
   
ТекЗначение = Справочники.ЗначенияСвойствОбъектов.НайтиПоНаименованию(ТекстыЯчеек[ЭлементДопСвойства.Значение], Ложь);
    Если Не
ЗначениеЗаполнено(ТекСвойство) Тогда
       
Сообщить(«Не удалось найти свойство: «»» + ЭлементДопСвойства.Ключ + » (» + Объект.ВидНоменклатуры + «)»»»);
        Продолжить;
    КонецЕсли;
    Если Не
ЗначениеЗаполнено(ТекЗначение) Тогда
       
Сообщить(«Создаем новое значение «»» + ТекстыЯчеек[ЭлементДопСвойства.Значение] + «»» для свойства «»» + ТекСвойство + «»»»);
       
НовоеЗначение = Справочники.ЗначенияСвойствОбъектов.СоздатьЭлемент();
       
НовоеЗначение.Владелец = ТекСвойство;
       
НовоеЗначение.Наименование = ТекстыЯчеек[ЭлементДопСвойства.Значение];
       
НовоеЗначение.Записать();
       
ТекЗначение = НовоеЗначение.Ссылка;
    КонецЕсли;
МассивСтрок = Объект.ДополнительныеРеквизиты.НайтиСтроки(Новый Структура(«Свойство», ТекСвойство));
    Если
МассивСтрок.Количество() = 0 Тогда
       
ДопРеквизит = Объект.ДополнительныеРеквизиты.Добавить();
    Иначе
       
ДопРеквизит = МассивСтрок[0];
    КонецЕсли;
   
ДопРеквизит.Свойство = ТекСвойство;
   
ДопРеквизит.Значение = ТекЗначение;

КонецЦикла;

Объект.Записать();

В соответствие «ДопСвойста» нужно вставить столько записей, сколько требуется загрузить дополнительных реквизитов. В качестве ключа указываем текстовое наименование дополнительного реквизита, а в качестве значения — номе строки табличного документа, где это значение храниться.

Всем здрасте. Пишу правило обмена для переноса некоторых данных из УПП 1.2 в УТ 11.1. Проблема возникла при написании правила конвертации справочника Контрагенты (УПП) в справочник Партнеры (УТ). Нужно один реквизит из справочника Контрагенты сконвертировать в дополнительный реквизит справочника Партнеры. Не могу разобраться, как это сделать? Подскажите плиз. Может у кого есть рабочий пример?

Что такое «дополнительный реквизит»?

Это такой реквизит, только дополнительный…

Наверное имеется ввиду дополнительные свойства…

а смысл это при обменах? оно долго не живёт, доп свойство то

что то у меня сегодня модуль телепат отключен

Ты прав, я думаю уже пора домой идти…

нефиг вообще из дома выходить ) Эх, поработать что ли?

хватит уже хвастаться ) в отпуске ремонт делаешь?

Дополнительные реквизиты в УТ — это табличная часть, в данном случае у спр. «Партнеры», с реквизитами Свойство, Значение. А в чем проблема? У тебя есть ПКО в нем ПГКС «ДополнительныеРеквизиты», в нем ПКС «Свойство», ПКС «Значение». Для свойство нужно создать ПКО, которое ищет в ПланеВидовХарактеристик ДопРевизитыИСведения элемент (по наименованию например) источник не указываешь. Для «значения» тоже создаешь ПКО, а в качестве источника будет реквизит справочника Контрагенты (УПП)

удаленка. Н работе появлюсь, только когда начальство очень скучать начинает )

Сделал немного по другому, но подсказка помогла. Спасибо!

Тэги: 1С 8

Комментарии доступны только авторизированным пользователям

  1. Здравствуйте!

    Стоит задача конвертировать хранящиеся в регистре сведений ОбластиДействияСертификатовНоменклатуры данные из ERP в дополнительные реквизиты одноименной номенклатуры конфигурации БП3.

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

    ВходящиеДанные = Новый Структура(«ДополнительныеРеквизиты»);
    ВходящиеДанные.ДополнительныеРеквизиты = Новый ТаблицаЗначений;
    ВходящиеДанные.ДополнительныеРеквизиты.Колонки.Добавить(«Свойство»);
    ВходящиеДанные.ДополнительныеРеквизиты.Колонки.Добавить(«Значение»);
    ВходящиеДанные.ДополнительныеРеквизиты = РезультатЗапроса.Выгрузить().Скопировать(,»Свойство,Значение»);

    Соответсвенно данные для ПКГС ДополнительныеРеквизиты справочника Номенклатура получаю из входящих данных.

    Свойство в ОбъектКоллекции.Свойство лежит в виде строки. Наименования свойств в регистре ERP и названия допреквизитов в БП3 не совпадают, потому и приходится «порождать» одноименные свойства в запросе…

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

    Ошибка при вызове метода контекста (ЗаполнитьЗначенияСвойств): Недопустимое значение параметра (параметр номер ‘2’).

    Оно понятно, при конвертации ожидается объект, а у меня строка и объекта нет и не будет на стороне ERP в принципе. Как можно обмануть обмен и таки пропихнуть строковое содержимое реквизита Свойство в ПланВидовХарактеристикСсылка.ДополнительныеРеквизитыИСведения не изобретая велосипеда. Данные ПВХ есть только на стороне БП3!


1C-pro.ru - форум по 1С:Предприятию 7.7, 8.0, 8.1, 8.2, 8.3

Понравилась статья? Поделить с друзьями:
  • Кондратьевский рынок животных в санкт петербурге часы работы
  • Какие реквизиты нужны для перевода денег на банковскую карту
  • Конкурсы для веселой компании взрослых прикольные на природе
  • Какие реквизиты работодателя указываются в трудовом договоре
  • Конкурсы на праздник для веселой компании взрослых за столом