|
Необходимо перенести значения реквизитов справочника в ТЧ | ☑ | ||
---|---|---|---|---|
0
Amriil
19.05.22
✎
09:45
|
Необходимо в модуле менеджера справочника создать экспортную процедуру, которая перенесет значения реквизитов справочника в ТЧ. Справочник получила, тч открыла, как записать воображения не хватает.
Процедура ЗаполнитьТабличнуюЧастьКонтактнаяИнформация()Экспорт Выборка = Справочники.Контрагенты.Выбрать(); Пока Выборка.Следующий() Цикл КонтактнаяИнформация = Выборка.ПолучитьОбъект().КонтактнаяИнформация; КонтактнаяИнформация.Очистить(); Строка1 = КонтактнаяИнформация.Добавить(); Строка1.Вид = Справочники.ВидыКонтактнойИнформации.EMailКонтрагента; Строка1.Значение = Выборка.УдалитьEMail; Строка2 = КонтактнаяИнформация.Добавить(); Строка2.Вид = Справочники.ВидыКонтактнойИнформации.ТелефонКонтрагента; Строка2.Значение = Выборка.УдалитьТелефон; КонецЦикла; |
|||
1
Dmitrii
гуру
19.05.22
✎
09:52
|
(0) >> Справочник получила, тч открыла.
Получи объект отдельно. Ведь записывать то ты будешь именно объект. Записать табличную часть отдельно от объекта платформа не позволяет. А то ты сразу ломанулась к табличной части.
|
|||
2
SuperMario
19.05.22
✎
09:52
|
Процедура ЗаполнитьТабличнуюЧастьКонтактнаяИнформация()Экспорт
Выборка = Справочники.Контрагенты.Выбрать(); Пока Выборка.Следующий() Цикл КонтрагентОбъект = Выборка.ПолучитьОбъект(); КонтактнаяИнформация = КонтрагентОбъект.КонтактнаяИнформация; КонтактнаяИнформация.Очистить(); Строка1 = КонтактнаяИнформация.Добавить(); Строка1.Вид = Справочники.ВидыКонтактнойИнформации.EMailКонтрагента; Строка1.Значение = Выборка.УдалитьEMail; Строка2 = КонтактнаяИнформация.Добавить(); Строка2.Вид = Справочники.ВидыКонтактнойИнформации.ТелефонКонтрагента; Строка2.Значение = Выборка.УдалитьТелефон; КонтрагентОбъект.Записать(); КонецЦикла; |
|||
3
Amra
19.05.22
✎
09:53
|
Выборка = Справочники.Контрагенты.Выбрать();
Пока Выборка.Следующий() Цикл Об = Выборка.ПолучитьОбъект(); КонтактнаяИнформация = Об.КонтактнаяИнформация; КонтактнаяИнформация.Очистить(); Строка1 = КонтактнаяИнформация.Добавить(); Строка1.Вид = Справочники.ВидыКонтактнойИнформации.EMailКонтрагента; Строка1.Значение = Выборка.УдалитьEMail; Строка2 = КонтактнаяИнформация.Добавить(); Строка2.Вид = Справочники.ВидыКонтактнойИнформации.ТелефонКонтрагента; Строка2.Значение = Выборка.УдалитьТелефон; Об.Записать(); КонецЦикла; |
|||
4
Amra
19.05.22
✎
09:53
|
(2) Опередил)
|
|||
5
Kassern
19.05.22
✎
10:05
|
а вас никого не удивил вот этот кусок? "Выборка = Справочники.Контрагенты.Выбрать();" - ТС пытается экспортной процедурой каждый раз изменять контактную информацию для ВСЕХ контрагентов?)
|
|||
6
Amriil
19.05.22
✎
10:06
|
Спасибо огромное! Вы - Герои
|
|||
7
Amriil
19.05.22
✎
10:07
|
Не каждый раз. Я в эту процедуру попаду один раз при обновлении.
|
|||
8
Kassern
19.05.22
✎
10:08
|
(7) тогда зачем эта процедура нужно в модуле менеджера справочника, если она одноразовая?
|
|||
9
Kassern
19.05.22
✎
10:09
|
Что мешало сделать обычную внешнюю обработку и 1 раз запустить?
|
|||
10
Amriil
19.05.22
✎
10:11
|
Поставленная задача
|
|||
11
Dmitrii
гуру
19.05.22
✎
11:31
|
(5) (8) Это технология применяется в БСП в подсистеме обновления конфигурации.
Обработчики обновления (неважно монопольно выполняемые или для отложенного обновления) помещаются в модуль менеджера. Другой вопрос, что тот вариант, который нарисовала автор ветки, крайне корявый сам по себе. Использовать его в таком виде можно только с рядом оговорок. Например, если табличная часть КонтактнаяИнформация добавлена в справочник только с этим обновлением и раньше её не было. В противном случае КонтактнаяИнформация.Очистить() приведёт к удалению всей прочей ранее введённой пользователями контактной информации. Так же зачем-то обрабатывается весь справочник. Хотя наверняка контактная информация в реквизитах УдалитьEMail и УдалитьТелефон заведена далеко не у всех контрагентов. По-хорошему должен быть выполнен запрос к справочнику для получения только тех элементов, которые необходимо обработать (где заполнены реквизиты УдалитьEMail и УдалитьТелефон, но ими ещё не заполнена ТЧ КонтанктнаяИнформация). В-третьих, 1С рекомендует делать подобные обработки порциями по 500-1000 элементов. Т.е. получать элементы справочника запросом "ВЫБРАТЬ ПЕРВЫЕ 1000..." и повторять этот запрос в цикле пока запрос не вернёт пустой результат (не останется элементов для обработки). Ну и мелочи типа обработки ошибок, выполнение в транзакции и контроль блокировок, если обработка обновления выполняется в отложенном режиме, а не в монопольном. |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |