Вход | Регистрация

1С:Предприятие :: 1С:Предприятие 8 общая

ТиС- УТ 11: Перенос "Контактной информации контрагентов": через "Выгрузить по правилу

ТиС- УТ 11: Перенос "Контактной информации контрагентов": через "Выгрузить по правилу
Я
   DenYuliya
 
15.01.18 - 14:32
Добрый день.
подскажите пожалуйста, как правильнее/проще реализовать часть задачи?

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

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

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

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

СЗ = СоздатьОбъект("СписокЗначений");
 
Если ПустоеЗначение(Источник.ФИОРуководителя) = 0 Тогда          //рукль

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

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

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

КонецЕсли;

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

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

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

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

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

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

А то я сейчас буду, как баран, пытаться...Мне бы хотя бы понимание - можно ли через "Выгрузить по правилу" тут действовать?
 
 
   mistеr
 
1 - 15.01.18 - 14:55
Доп. реквизиты это ведь ТЧ, если я правильно помню? Нужно сформировать ее как ТЗ и присвоить параметру КоллекцияОбъектов в обработчике ПКГС ПередОбработкой.
   DenYuliya
 
2 - 15.01.18 - 15:46
(1) да, ТЧ.
Вопрос в другом немного... можно ли "сформировать ее как ТЗ и присвоить параметру КоллекцияОбъектов в обработчике ПКГС ПередОбработкой" делать через "выгрузить по правилу",
например как в (0), 

ВыгрузитьПоПравилу(СЗ,,,,"Контакты");

В ПКО "Контакты" делать "все танцы с бубном", и потом результат передавать в исходное ПКО "Контрагенты_КонтактныеЛица".

Или надо ПКГС для КИ создавать непосредственно в исходном ПКО "Контрагенты_КонтактныеЛица", а дальше - обрабатывать по аналогии с типовыми правилами ПКГС для КИ (в типовых это реализовано в алгоритмах).

Не уверена, что понятно формулирую вопрос...
И в том, и в том случае - принцип одинаковый - "сформировать ее как ТЗ и присвоить параметру КоллекцияОбъектов в обработчике ПКГС ПередОбработкой" делать через "выгрузить по правилу", это я понимаю. Вопрос в том, откуда вызывать)).
   mistеr
 
3 - 15.01.18 - 16:04
Заполнять нужно там, где ТЧ, то есть в ПКО с приемником КонтактныеЛицаПартнеров. А как вызывать, думаю разницы нет.
   DenYuliya
 
4 - 15.01.18 - 16:08
(3) и в том, и в том ПКО приемник КонтактныеЛицаПартнеров

В исходном ПКО - источник спр.Контрагенты, в вызываемом из исходного ПКО источник пустой.
   mistеr
 
5 - 15.01.18 - 16:09
Можно заполнить весть объект, включая ТЧ, в ПКО с источником Контрагенты, где есть вся информация, и ВыгрузитьПоПравилу().

Так даже проще будет.
   DenYuliya
 
6 - 15.01.18 - 16:17
(5) Вот))). Я так и хотела, тем более что из одного элемента Источника у меня получается 5 элементов приемника, боялась запутаться в том "кому что раздавать".
Спасибо!
Значит не вышло у меня так сделать из-за криворукости кода, а не потому, что так вообще не делают.
   d4rkmesa
 
7 - 15.01.18 - 20:22
(2) Имхо, я бы лучше в ПКО, к примеру, ФизическиеЛица, Контрагенты или Организация сделал для ПКГС КонтактнаяИнформация обработчик, который все формирует и скопипастил в остальные ПКО с ТЧ КонтактнаяИнформация. К примеру, для V8:

ЗапросКонтактнаяИнформация = Новый Запрос;
ЗапросКонтактнаяИнформация.Текст = "ВЫБРАТЬ
|    КонтактнаяИнформация.Тип,
|    КонтактнаяИнформация.Вид,
|    КонтактнаяИнформация.Вид КАК ВидДляСписка,
|    КонтактнаяИнформация.Представление,
|    ВЫБОР
|        КОГДА КонтактнаяИнформация.Тип = ЗНАЧЕНИЕ(Перечисление.ТипыКонтактнойИнформации.Адрес)
|            ТОГДА КонтактнаяИнформация.Поле4
|    КОНЕЦ КАК Город,
|    ВЫБОР
|        КОГДА КонтактнаяИнформация.Тип = ЗНАЧЕНИЕ(Перечисление.ТипыКонтактнойИнформации.Телефон)
|            ТОГДА КонтактнаяИнформация.Поле1 + КонтактнаяИнформация.Поле2 + КонтактнаяИнформация.Поле3
|    КОНЕЦ КАК НомерТелефона,
|    ВЫБОР
|        КОГДА КонтактнаяИнформация.Тип = ЗНАЧЕНИЕ(Перечисление.ТипыКонтактнойИнформации.Телефон)
|            ТОГДА КонтактнаяИнформация.Поле3
|    КОНЕЦ КАК НомерТелефонаБезКодов,
|    ВЫБОР
|        КОГДА КонтактнаяИнформация.Тип = ЗНАЧЕНИЕ(Перечисление.ТипыКонтактнойИнформации.АдресЭлектроннойПочты)
|            ТОГДА КонтактнаяИнформация.Представление
|    КОНЕЦ КАК АдресЭП,
|    ВЫБОР
|        КОГДА КонтактнаяИнформация.Тип = ЗНАЧЕНИЕ(Перечисление.ТипыКонтактнойИнформации.Адрес)
|            ТОГДА КонтактнаяИнформация.Поле2
|    КОНЕЦ КАК Регион,
|    ВЫБОР
|        КОГДА КонтактнаяИнформация.Тип = ЗНАЧЕНИЕ(Перечисление.ТипыКонтактнойИнформации.Адрес)
|                И НЕ КонтактнаяИнформация.Вид = ЗНАЧЕНИЕ(Справочник.ВидыКонтактнойИнформации.ИнострАдресФизЛица)
|            ТОГДА ""Россия""
|    КОНЕЦ КАК Страна,
|    КонтактнаяИнформация.Поле1,
|    КонтактнаяИнформация.Поле2,
|    КонтактнаяИнформация.Поле3,
|    КонтактнаяИнформация.Поле4,
|    КонтактнаяИнформация.Поле5,
|    КонтактнаяИнформация.Поле6,
|    КонтактнаяИнформация.Поле7,
|    КонтактнаяИнформация.Поле8,
|    КонтактнаяИнформация.Поле9,
|    КонтактнаяИнформация.Поле10,
|    КонтактнаяИнформация.ТипДома,
|    КонтактнаяИнформация.ТипКорпуса,
|    КонтактнаяИнформация.ТипКвартиры
|ИЗ
|    РегистрСведений.КонтактнаяИнформация КАК КонтактнаяИнформация
|ГДЕ
|    КонтактнаяИнформация.Объект = &Объект
|    И КонтактнаяИнформация.Вид.Предопределенный
|    И (ВЫРАЗИТЬ(КонтактнаяИнформация.Представление КАК СТРОКА(1000))) <> """"";

ЗапросКонтактнаяИнформация.УстановитьПараметр("Объект", Источник);
РезультатЗапроса = ЗапросКонтактнаяИнформация.Выполнить();

Если НЕ РезультатЗапроса.Пустой() Тогда
    КоллекцияОбъектов = РезультатЗапроса.Выгрузить();
    КоллекцияОбъектов.Колонки.Добавить("ЗначенияПолей", Новый ОписаниеТипов("Строка"));
    
    Для Каждого СтрокаКоллекции Из КоллекцияОбъектов Цикл
        
        Если СтрокаКоллекции.Тип = Перечисления.ТипыКонтактнойИнформации.Адрес Тогда
            СтрокаКоллекции.ЗначенияПолей = "Индекс=" + СтрокаКоллекции.Поле1 + Символы.ПС
            + "Регион="           + СтрокаКоллекции.Поле2 + Символы.ПС
            + "Район="            + СтрокаКоллекции.Поле3 + Символы.ПС
            + "Город="            + СтрокаКоллекции.Поле4 + Символы.ПС
            + "НаселенныйПункт="  + СтрокаКоллекции.Поле5 + Символы.ПС
            + "Улица="            + СтрокаКоллекции.Поле6 + Символы.ПС
            + "Дом="              + СтрокаКоллекции.Поле7 + Символы.ПС
            + "Корпус="           + СтрокаКоллекции.Поле8 + Символы.ПС
            + "Квартира="         + СтрокаКоллекции.Поле9 + Символы.ПС
            + "ТипДома="        + СтрокаКоллекции.ТипДома + Символы.ПС
            + "ТипКорпуса="        + СтрокаКоллекции.ТипКорпуса + Символы.ПС
            + "ТипКвартиры="    + СтрокаКоллекции.ТипКвартиры;
        ИначеЕсли СтрокаКоллекции.Тип = Перечисления.ТипыКонтактнойИнформации.Телефон Тогда
            СтрокаКоллекции.ЗначенияПолей = "КодСтраны=" + СтрокаКоллекции.Поле1 + Символы.ПС
            + "КодГорода="     + СтрокаКоллекции.Поле2 + Символы.ПС
            + "НомерТелефона=" + СтрокаКоллекции.Поле3 + Символы.ПС
            + "Добавочный="    + СтрокаКоллекции.Поле4;            
        КонецЕсли;        
    КонецЦикла;    
Иначе
    Отказ = Истина;
КонецЕсли;
   DenYuliya
 
8 - 16.01.18 - 09:39
(7) подобное есть в типовых правилах для УТ. Например у спр. Контрагенты, являющегося Источником для ПКО "Контрагенты_КонтактныеЛица", есть еще одно ПКО "Контрагенты_Партнеры". И в нем как раз примерно такая схема, только в самом ПКГС вызывается Алгоритм. Я в (0) упоминала этот момент.

Использовать тот же Алгоритм не выйдет, потому что
1) Разный набор полей у Источников и Приемников
2) В случае с Орг, Контрагенты, Физлица 1 элемент источника = 1 элемент приемника. У меня же 1 элемент источника = 5 элементов приемника.

Но сам принцип "в ПКГС источника, без доп. ПКО" - не знаю, как лучше((.
Смущает то, что остальные-то реквизиты через "выгрузить по правилу" обходятся, не получится ли расхождений, если часть реквизитов обходить так, другую часть эдак.
   DenYuliya
 
9 - 16.01.18 - 09:48
(7) + в УТ 11 КИ перенесли из рег.св в какую-то идиотскую схему хранения в Дополнительных реквизитах, которую я, если честно, так и не освоила толком. Как по мне, так там все намнооогоо запутаннее, чем в рег. св
   DenYuliya
 
10 - 17.01.18 - 13:04
В продолжение (0).

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

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

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

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

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

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

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

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

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

Список тем форума
Рекламное место пустует  Рекламное место пустует
Здесь можно обсудить любую тему при этом оставаясь на форуме для 1Сников, который нужен для работы. Ymryn
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Тема не обновлялась длительное время, и была помечена как архивная. Добавление сообщений невозможно.
Но вы можете создать новую ветку и вам обязательно ответят!
Каждый час на Волшебном форуме бывает более 2000 человек.
Рекламное место пустует