![]() |
|
ТиС- УТ 11: Перенос "Контактной информации контрагентов": через "Выгрузить по правилу | ☑ | ||
---|---|---|---|---|
0
DenYuliya
15.01.18
✎
14:32
|
Добрый день.
подскажите пожалуйста, как правильнее/проще реализовать часть задачи? Дано: Переход с ТиС 7.7 на УТ 11. В 1С ТиС 7.7 есть справочник "Контрагенты". У него есть реквизиты строкового типа: 1) - ФИО руководителя - должность руководителя - тел руководителя - почта руководителя 2) 1) - ФИО менеджера - должность менеджера - тел менеджера - почта менеджера и т.д., 1) и 2) - это 8 реквизитов спр. Контрагенты строкового типа. Я часть реквизитов (ФИО, должность) конвертировала в элементы справочника "Контактные лица партнера". Сделала ПКО "Контрагенты_КонтактныеЛица", в обработчике "после выгрузки в файл" код: СЗ = СоздатьОбъект("СписокЗначений"); Если ПустоеЗначение(Источник.ФИОРуководителя) = 0 Тогда //рукль СЗ.Установить("Наименование", Источник.ФИОРуководителя); СЗ.Установить("ДолжностьПоВизитке", Источник.ДолжностьРуководителя); СЗ.Установить("ДатаРождения", Источник.ДатаРуководителя); СЗ.Установить("Комментарий", Источник.ПочтаРуководителя + Источник.Телефон1); СЗ.Установить("Автор", Источник.Проект); СЗ.Установить("Владелец", Источник); ВыгрузитьПоПравилу(СЗ,,,,"Контакты"); КонецЕсли; Если ПустоеЗначение(Источник.ФИОРукПродаж) = 0 Тогда //Рукль продаж СЗ.Установить("Наименование", Источник.ФИОРукПродаж); СЗ.Установить("ДолжностьПоВизитке", Источник.ДолжностьРукПродаж); СЗ.Установить("ДатаРождения", Источник.ДатаРукПродаж); СЗ.Установить("Комментарий", Источник.ПочтаРукПродаж + Источник.Телефон2); СЗ.Установить("Автор", Источник.Проект); СЗ.Установить("Владелец", Источник); ВыгрузитьПоПравилу(СЗ,,,,"Контакты"); КонецЕсли; КонецЕсли; Есть ПКО "Контакты", с пустым источником, приемником "КонтактныеЛицаПартнеров", и ПКС на каждый из реквизитов по подобному принципу в обработчике "Перед выгрузкой": Значение = Источник.Получить("ДолжностьПоВизитке"); Все работает, элементы создаются. Теперь собсна сам вопрос: надо же теперь еще как-то "контактную информацию" для "Контактных лиц партнера" заполнить... А вот тут я не могу понять.. С учетом идиотской схемы хранения КИ в Доп.реквизитах, как лучше поступить? Заполнять КИ через "Выгрузить по правилу", в тех же ПКО, по аналогии с реквизитами "ФИО" и "Должность", как бы в том же цикле (пробовала - не получается...)? или сделать новое ПКО для заполнения КИ, и выгружать по аналогии типовых правил для выгрузки КИ, например тех же партнеров? А то я сейчас буду, как баран, пытаться...Мне бы хотя бы понимание - можно ли через "Выгрузить по правилу" тут действовать? |
|||
1
mistеr
15.01.18
✎
14:55
|
Доп. реквизиты это ведь ТЧ, если я правильно помню? Нужно сформировать ее как ТЗ и присвоить параметру КоллекцияОбъектов в обработчике ПКГС ПередОбработкой.
|
|||
2
DenYuliya
15.01.18
✎
15:46
|
(1) да, ТЧ.
Вопрос в другом немного... можно ли "сформировать ее как ТЗ и присвоить параметру КоллекцияОбъектов в обработчике ПКГС ПередОбработкой" делать через "выгрузить по правилу", например как в (0), ВыгрузитьПоПравилу(СЗ,,,,"Контакты"); В ПКО "Контакты" делать "все танцы с бубном", и потом результат передавать в исходное ПКО "Контрагенты_КонтактныеЛица". Или надо ПКГС для КИ создавать непосредственно в исходном ПКО "Контрагенты_КонтактныеЛица", а дальше - обрабатывать по аналогии с типовыми правилами ПКГС для КИ (в типовых это реализовано в алгоритмах). Не уверена, что понятно формулирую вопрос... И в том, и в том случае - принцип одинаковый - "сформировать ее как ТЗ и присвоить параметру КоллекцияОбъектов в обработчике ПКГС ПередОбработкой" делать через "выгрузить по правилу", это я понимаю. Вопрос в том, откуда вызывать)). |
|||
3
mistеr
15.01.18
✎
16:04
|
Заполнять нужно там, где ТЧ, то есть в ПКО с приемником КонтактныеЛицаПартнеров. А как вызывать, думаю разницы нет.
|
|||
4
DenYuliya
15.01.18
✎
16:08
|
(3) и в том, и в том ПКО приемник КонтактныеЛицаПартнеров
В исходном ПКО - источник спр.Контрагенты, в вызываемом из исходного ПКО источник пустой. |
|||
5
mistеr
15.01.18
✎
16:09
|
Можно заполнить весть объект, включая ТЧ, в ПКО с источником Контрагенты, где есть вся информация, и ВыгрузитьПоПравилу().
Так даже проще будет. |
|||
6
DenYuliya
15.01.18
✎
16:17
|
(5) Вот))). Я так и хотела, тем более что из одного элемента Источника у меня получается 5 элементов приемника, боялась запутаться в том "кому что раздавать".
Спасибо! Значит не вышло у меня так сделать из-за криворукости кода, а не потому, что так вообще не делают. |
|||
7
d4rkmesa
гуру
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; КонецЕсли; КонецЦикла; Иначе Отказ = Истина; КонецЕсли; |
|||
8
DenYuliya
16.01.18
✎
09:39
|
(7) подобное есть в типовых правилах для УТ. Например у спр. Контрагенты, являющегося Источником для ПКО "Контрагенты_КонтактныеЛица", есть еще одно ПКО "Контрагенты_Партнеры". И в нем как раз примерно такая схема, только в самом ПКГС вызывается Алгоритм. Я в (0) упоминала этот момент.
Использовать тот же Алгоритм не выйдет, потому что 1) Разный набор полей у Источников и Приемников 2) В случае с Орг, Контрагенты, Физлица 1 элемент источника = 1 элемент приемника. У меня же 1 элемент источника = 5 элементов приемника. Но сам принцип "в ПКГС источника, без доп. ПКО" - не знаю, как лучше((. Смущает то, что остальные-то реквизиты через "выгрузить по правилу" обходятся, не получится ли расхождений, если часть реквизитов обходить так, другую часть эдак. |
|||
9
DenYuliya
16.01.18
✎
09:48
|
(7) + в УТ 11 КИ перенесли из рег.св в какую-то идиотскую схему хранения в Дополнительных реквизитах, которую я, если честно, так и не освоила толком. Как по мне, так там все намнооогоо запутаннее, чем в рег. св
|
|||
10
DenYuliya
17.01.18
✎
13:04
|
В продолжение (0).
Добавляю в ПКО "Контакты" (которое вызывается из основного ПКО через "выгрузить по правилу") ПКГС "Контактная информация". Если смотреть типовые ПКГС для "Контактной информации" (например в ПКО "Контрагенты_Партнеры"), то сокращенно (на примере только "телефона") в ПКГС создается ТЗ: Если ТипЗначенияСтр(ВходящиеДанные) <> "СписокЗначений" Тогда ВходящиеДанные = СоздатьОбъект("СписокЗначений"); КонецЕсли; КоллекцияОбъектов = СоздатьОбъект("ТаблицаЗначений"); КоллекцияОбъектов.НоваяКолонка("Вид"); КоллекцияОбъектов.НоваяКолонка("Представление"); КоллекцияОбъектов.НоваяКолонка("Тип"); КоллекцияОбъектов.НоваяКолонка("НомерТелефона"); Если ПустаяСтрока(Источник.ЮрФизЛицо.Телефоны) = 0 Тогда ВходящиеДанные.Установить("Телефон", Источник.ЮрФизЛицо.Телефоны); ВходящиеДанные.Установить("Родитель", "СправочникПартнеры"); ВыгрузитьТелефоны(); КонецЕсли; а потом вызывается Алгоритм "ВыгрузитьТелефоны();, в котором создается СЗ и устанавливается соответствие реквизитов Источника элементам СЗ: СписокТелефонов = глРазложить(ВходящиеДанные.Получить("Телефон"), Параметры.РазделительТелефонов); Для Номер = 1 По СписокТелефонов.РазмерСписка() Цикл Телефон = СокрЛП(СписокТелефонов.ПолучитьЗначение(Номер)); Родитель = ВходящиеДанные.Получить("Родитель"); Если Родитель = "СправочникКонтрагенты" Тогда Вид = "ТелефонКонтрагента"; Если Номер > 1 Тогда Вид = СоздатьОбъект("СписокЗначений"); Вид.Установить("Наименование", "Телефон " + (Номер - 1)); КонецЕсли; КонецЕсли; КоллекцияОбъектов.НоваяСтрока(); КоллекцияОбъектов.Вид = Вид; КоллекцияОбъектов.Тип = "Телефон"; КоллекцияОбъектов.Представление = Телефон; КоллекцияОбъектов.ЗначенияПолей = "НомерТелефона=" + Телефон + Симв(10); КоллекцияОбъектов.НомерТелефона = Телефон; КонецЦикла; В самом же ПКО такие ПКС, как "Телефон", остаются пустыми (в том плане, что не указан приемник, источник, никакого кода нет). А у меня, как я переносила предыдущие реквизиты в (0) (ФИО и Должность), Список значений, и установка соответствий реквизитов Источника элементам СЗ происходит в ПКО "Контрагенты_КонтактныеЛица", а потом этот СЗ "передается" через ВыгрузитьПоПравилу() в ПКО "Контакты"... В общем я запуталась, как мне это объединить, или что делать-то? Мне в вызываемом из ПКГС алгоритме новый СЗ создавать, или использовать ранее созданный? Или может можно вообще сразу из ПКО "Контрагенты_КонтактныеЛица" передавать в ПКГС ПКО "Контакты" созданный СЗ, и никакой Алгоритм не использовать? |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |