Имя: Пароль:
1C
1С v8
Перенос ПКГС "из одного - в многие", ТиС 7.7 - УТ 11.
0 DenYuliya
 
17.01.18
15:16
Добрый день!
Эх, игнор в мою прежнюю тему, видимо сильно далеко она уползла. Открою новую...

Дано: Переход с ТиС 7.7 на УТ 11.
В 1С ТиС 7.7 есть справочник "Контрагенты". У него есть реквизиты строкового типа:
1)
- ФИО руководителя
- должность руководителя
- тел руководителя
- почта руководителя

2)
1)
- ФИО менеджера
- должность менеджера
- тел менеджера
- почта менеджера

и т.д., 1) и 2) - это 8 реквизитов спр. Контрагенты строкового типа.

Я часть реквизитов (ФИО, должность) конвертировала в элементы справочника "Контактные лица партнера".
Сделала ПКО "Контрагенты_КонтактныеЛица", в обработчике "после выгрузки в файл" код:

+ Code
СЗ = СоздатьОбъект("СписокЗначений");

Если ПустоеЗначение(Источник.ФИОРуководителя) = 0 Тогда          //рукль

    
  СЗ.Установить("Наименование", Источник.ФИОРуководителя);
  СЗ.Установить("ДолжностьПоВизитке",  Источник.ДолжностьРуководителя);
  СЗ.Установить("ДатаРождения", Источник.ДатаРуководителя);
  СЗ.Установить("Комментарий", Источник.ПочтаРуководителя + Источник.Телефон1);
  СЗ.Установить("Автор", Источник.Проект);
  СЗ.Установить("Владелец", Источник);
  
  ВыгрузитьПоПравилу(СЗ,,,,"Контакты");
  
КонецЕсли;

Если ПустоеЗначение(Источник.ФИОРукПродаж) = 0 Тогда    //Рукль продаж

  СЗ.Установить("Наименование", Источник.ФИОРукПродаж);
  СЗ.Установить("ДолжностьПоВизитке",  Источник.ДолжностьРукПродаж);
  СЗ.Установить("ДатаРождения", Источник.ДатаРукПродаж);
  СЗ.Установить("Комментарий", Источник.ПочтаРукПродаж + Источник.Телефон2);
  СЗ.Установить("Автор", Источник.Проект);
  СЗ.Установить("Владелец", Источник);
  
  ВыгрузитьПоПравилу(СЗ,,,,"Контакты");  
  
КонецЕсли;

КонецЕсли;

Есть ПКО "Контакты", с пустым источником, приемником "КонтактныеЛицаПартнеров", и ПКС на каждый из реквизитов по подобному принципу в обработчике "Перед выгрузкой":

Значение = Источник.Получить("ДолжностьПоВизитке");

Все работает, элементы создаются.
Теперь собсна сам вопрос:

надо же теперь еще как-то "контактную информацию" для "Контактных лиц партнера" заполнить...

А вот тут я не могу понять.. С учетом идиотской схемы хранения КИ в Доп.реквизитах, как лучше поступить?

Заполнять КИ через "Выгрузить по правилу", в тех же ПКО, по аналогии с реквизитами "ФИО" и "Должность", как бы в том же цикле (пробовала - не получается...)?
или сделать новое ПКО для заполнения КИ, и выгружать по аналогии типовых правил для выгрузки КИ, например тех же партнеров?
1 DenYuliya
 
17.01.18
15:17
В продолжение (0).

Добавляю в ПКО "Контакты" (которое вызывается из основного ПКО через "выгрузить по правилу") ПКГС "Контактная информация".

Если смотреть типовые ПКГС для "Контактной информации" (например в ПКО "Контрагенты_Партнеры"), то сокращенно (на примере только "телефона") в ПКГС создается ТЗ:

Если ТипЗначенияСтр(ВходящиеДанные) <> "СписокЗначений" Тогда
    ВходящиеДанные = СоздатьОбъект("СписокЗначений");
КонецЕсли;

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

Если ПустаяСтрока(Источник.ЮрФизЛицо.Телефоны) = 0 Тогда
    ВходящиеДанные.Установить("Телефон",  Источник.ЮрФизЛицо.Телефоны);
    ВходящиеДанные.Установить("Родитель", "СправочникПартнеры");
    ВыгрузитьТелефоны();
КонецЕсли;

а потом вызывается Алгоритм "ВыгрузитьТелефоны();, в котором создается СЗ и устанавливается соответствие реквизитов Источника элементам СЗ:

СписокТелефонов = глРазложить(ВходящиеДанные.Получить("Телефон"), Параметры.РазделительТелефонов);
Для Номер = 1 По СписокТелефонов.РазмерСписка() Цикл
    
    Телефон     = СокрЛП(СписокТелефонов.ПолучитьЗначение(Номер));
    Родитель = ВходящиеДанные.Получить("Родитель");
                
Если Родитель = "СправочникКонтрагенты" Тогда
        
        Вид = "ТелефонКонтрагента";
        Если Номер > 1 Тогда
            Вид = СоздатьОбъект("СписокЗначений");
            Вид.Установить("Наименование",    "Телефон " + (Номер - 1));
        КонецЕсли;
        
КонецЕсли;
    
    КоллекцияОбъектов.НоваяСтрока();
    КоллекцияОбъектов.Вид = Вид;
    КоллекцияОбъектов.Тип = "Телефон";
    КоллекцияОбъектов.Представление = Телефон;
    КоллекцияОбъектов.ЗначенияПолей = "НомерТелефона=" + Телефон + Симв(10);
    КоллекцияОбъектов.НомерТелефона = Телефон;
    
КонецЦикла;

В самом же ПКО такие ПКС, как "Телефон", остаются пустыми (в том плане, что не указан приемник, источник, никакого кода нет).

А у меня, как я переносила предыдущие реквизиты в (0) (ФИО и Должность), Список значений, и установка соответствий реквизитов Источника элементам СЗ происходит в ПКО "Контрагенты_КонтактныеЛица", а потом этот СЗ "передается" через ВыгрузитьПоПравилу() в ПКО "Контакты"...

В общем я запуталась, как мне это объединить, или что делать-то?
Мне в вызываемом из ПКГС алгоритме новый СЗ создавать, или использовать ранее созданный?
Или может можно вообще сразу из ПКО "Контрагенты_КонтактныеЛица" передавать в ПКГС ПКО "Контакты" созданный СЗ, и никакой Алгоритм не использовать?