|
КД2: Поля поиска | ☑ | ||
---|---|---|---|---|
0
Demasiado
16.11.22
✎
13:22
|
Коллеги, всем привет. Подскажите, знающие люди, по КД2.
Перегоняю из УТ11 заказ поставщику в Бух3 счет поставщика, из УТ11 нужно выгружать номенклатуру поставщика и конвертировать ее в просто Номенклатуру Бух3. Поиск номенклатуру нужно реализовать так – 1) ищем по идентификатору; 2) ищем по артикулу номенклатуры поставщика, если заполнено; 3) ищем по нахождению артикула номенклатуры поставщика в названии номенклатуры; 4) ищем по названию. Сам документ конвертировать в ПКО сложностей не возникло, а вот с номенклатурой уперся в странность. Было создано ПКО «НоменклатураПоставщиков_Номенклатура», в настройках стоят галки 1) Искать по внутреннему идентификатору, 3) Не замещать существующие объекты при загрузке, а только создавать новые и заполнять их. Для реализации такой стратегии поиска в обработчике «Поля поиска» у ПКО, прописан такой код Если НомерВариантаПоиска = 1 тогда //ищем по артикулу если есть //Сообщить("Описание структуры " + СвойстваПоиска.Получить("Наименование")); Попытка ЗначениеАртикул = СвойстваПоиска.Получить("Артикул"); Исключение ЗначениеАртикул = ""; КонецПопытки; Попытка ЗначениеНаименование = СвойстваПоиска.Получить("Наименование"); Исключение ЗначениеНаименование = ""; КонецПопытки; Сообщить("Сообщить вариант 1 " + ЗначениеНаименование +" арт "+ ЗначениеАртикул); Если ЗначениеЗаполнено(ЗначениеАртикул) Тогда //Сообщить("Свойство поиска"); Номенклатура = Справочники.Номенклатура.ПустаяСсылка(); Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ РАЗРЕШЕННЫЕ ПЕРВЫЕ 1 | Номенклатура.Ссылка |ИЗ | Справочник.Номенклатура КАК Номенклатура |ГДЕ | Номенклатура.Артикул = &Артикул"; Запрос.УстановитьПараметр("Артикул", ЗначениеАртикул); РезультатЗапроса = Запрос.Выполнить().Выгрузить(); Для каждого ТекСтрока из РезультатЗапроса Цикл Номенклатура = ТекСтрока.Ссылка; КонецЦикла; Если ЗначениеЗаполнено(Номенклатура) Тогда СсылкаНаОбъект = Номенклатура; ПрекратитьПоиск = Истина; Сообщить("Номенклатура "+ ЗначениеНаименование+ " найдено по артикулу"); Иначе СтрокаИменСвойствПоиска = "1"; КонецЕсли; КонецЕсли; УстанавливатьУОбъектаВсеСвойстваПоиска = Ложь; ИначеЕсли НомерВариантаПоиска = 2 Тогда//ищем по артикулу в названии Попытка ЗначениеАртикул = СвойстваПоиска.Получить("Артикул"); Исключение ЗначениеАртикул = ""; КонецПопытки; Попытка ЗначениеНаименование = СвойстваПоиска.Получить("Наименование"); Исключение ЗначениеНаименование = ""; КонецПопытки; Сообщить("Сообщить вариант 2 " + ЗначениеНаименование +" арт "+ ЗначениеАртикул); Если ЗначениеЗаполнено(ЗначениеАртикул) Тогда Номенклатура = Справочники.Номенклатура.ПустаяСсылка(); Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ РАЗРЕШЕННЫЕ ПЕРВЫЕ 1 | Номенклатура.Ссылка |ИЗ | Справочник.Номенклатура КАК Номенклатура |ГДЕ | Номенклатура.Наименование = &Артикул"; Запрос.УстановитьПараметр("Артикул", "%"+ЗначениеАртикул+"%"); РезультатЗапроса = Запрос.Выполнить().Выгрузить(); Для каждого ТекСтрока из РезультатЗапроса Цикл Номенклатура = ТекСтрока.Ссылка; КонецЦикла; //СсылкаНаОбъект = Справочники.Номенклатура.НайтиПоНаименованию(ЗначениеАртикул); Если ЗначениеЗаполнено(Номенклатура) Тогда СсылкаНаОбъект = Номенклатура; ПрекратитьПоиск = Истина; Сообщить("Номенклатура "+ ЗначениеНаименование+ " найдено по наименованию"); Иначе СтрокаИменСвойствПоиска = "2"; КонецЕсли; КонецЕсли; УстанавливатьУОбъектаВсеСвойстваПоиска = Ложь; ИначеЕсли НомерВариантаПоиска = 3 Тогда//Вариант для ЭтоГруппа Сообщить("Сообщить вариант 3"); //Если СвойстваПоиска.Получить("ЭтоГруппа") Тогда СтрокаИменСвойствПоиска = "Наименование, ЭтоГруппа"; //КонецЕсли; УстанавливатьУОбъектаВсеСвойстваПоиска = Ложь; КонецЕсли; //УстанавливатьУОбъектаВсеСвойстваПоиска = Ложь; В ПКС у ПКО настроенная передача реквизитов: Артикул (галка Поле поиска), Наименование (галка Поле поиска), Наименование -> Наименование (галка Поле поиска), Наименование -> НаименованиеПолное и еще ряд реквизитов. При выгрузке Номенклатуры из УТ, в XML файле, все реквизиты элементы справочника выгружаются. При загрузке – если элемент новый (не был найден по условиям поиска), создается новый элемент на стороне бухгалтерии, но реквизиты, которые в КД2 помечены галками «Поле поиска» - не заполняются (напомню, в выгрузке они есть); реквизиты которые без полей поиска – заполняются корректно. Если в КД2 поля поиска убираем (например, у реквизитов Артикул и Наименование), то они даже в XML не выгружаются и обработчик «Поля поиска» отрабатывает некорректно. Подскажите, что нужно еще настроить в ПКС и ПКО, чтобы у нового элемента в бухгалтерии все было настроено? |
|||
1
Demasiado
16.11.22
✎
13:22
|
Поправка В ПКС у ПКО настроенная передача реквизитов: Артикул (галка Поле поиска), Наименование -> Наименование (галка Поле поиска), Наименование -> НаименованиеПолное и еще ряд реквизитов.
|
|||
2
mistеr
16.11.22
✎
13:27
|
Наверное в этом дело:
УстанавливатьУОбъектаВсеСвойстваПоиска = Ложь; |
|||
3
Demasiado
16.11.22
✎
13:36
|
(2) сейчас попробую, проблема была что затирались реквизиты у найденного элемента, реквизитами из УТ (хотя возможно в тот момент не стояла галка "не замещать, а создавать только новые и заполнять")
|
|||
4
Demasiado
16.11.22
✎
13:37
|
+ (3), в смысле когда я так пробовал сделать
|
|||
5
Demasiado
16.11.22
✎
14:22
|
(2) Спасибо, помогло) Видимо у меня глаз замылился и я эту комбинацию не пробовал (убрать ключевое слово + галку "не замещать а создавать") и меня постоянно все затирало. Можешь еще подсказать - если объект не найден и создается новый, в каком обработчике можно отлавить, чтобы программно еще какие - реквизиты заполнить? Или эти реквизиты прописываем в новых ПКС, источник не указываем, а в обработчике "При выгрузке" прописываем свой код. Но это при выгрузке, а при загрузке, чтобы значения заполнения дергать из базы приемника? (хотя я понимаю что можно например прописывать Значение = xmlid; из базы приемника и поиск будет по идентификатору уже из базы приемника)
|
|||
6
boozin
16.11.22
✎
14:23
|
А галку "Продолжить поиск по полям поиска.." поставил?
|
|||
7
Demasiado
16.11.22
✎
14:25
|
(6) (2) помогло, "Продолжить по полям поиска не ставил", в инете в примерах говорят что если поставить то будет искать по галкам в ПКС, а обработчик "Поля поиска" - игнорируется
|
|||
8
boozin
16.11.22
✎
14:27
|
Если хочешь после идентификатора искать по полям поиска галку надо обязательно ставить
|
|||
9
Demasiado
16.11.22
✎
14:30
|
(8) понял, я думал она не совместима с обработчиком. Спасибо
|
|||
10
mistеr
16.11.22
✎
14:36
|
(5) При загрузке
|
|||
11
mistеr
16.11.22
✎
14:40
|
(10) После загрузки, ошибся.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |