Конвертация данных 2.0 вывод сообщения о не найденном элементе в приемнике

1. Azzkijhacker 10.07.19 16:21 Сейчас в теме
Делаю конвертацию документов ПТУ. Как и в каких обработчиках правильно реализовать следующее:
1. Если в приемнике не найдена номенклатура, то вывести сообщение с кодом и наименованием проблемной номенклатуры с источника. Не могу понять как уже на стороне приемника достучатся до данных источника.
2. Как отменить всю загрузку всех ПТУ в случае п.1, а не только проблемного ПТУ?
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. tusv 211 10.07.19 16:45 Сейчас в теме
(1)1.Достучаться можно В обработчике Поля поиска, через СвойстваПоиска, Затем передавать в параметр
Если не Параметры.Свойство("СведенияОбОбъекте")  Тогда
   Параметры.Вставить(Новый Структура("Номер,Дата"));
КонецЕсли;
Параметры.СведенияОбОбъекте.Номер =СвойстваПоиска["Номер"];
Параметры.СведенияОбОбъекте.Дата=СвойстваПоиска["Дата"]; 

2.Опять же Параметры. Тип, Ну например Массив. В Обработчике После загрузки Отказ = Истина и Записывать в этот параметр.
Если все в порядке. В После загрузки данных Обходим Параметр и записываем.
Если плохо и Это Обмен по правилам БСП Удаляем Объекты ПТУ из таблицы полученной функцией ДокументыДляОтложенногоПроведения();
6. Azzkijhacker 10.07.19 18:13 Сейчас в теме
(2) Можна подробнее. Что за чем и где добавить/прописать?

Как я понял:
1. Добавляем не типизированный глобальный параметр СведенияОбОбъекте.
2.В ПКО Номенклатура -> в список свойств добавляем наш параметр СведенияОбОбъекте.
3.В ПКО в обработчике Поля поиска пишем:

Если не Параметры.Свойство("СведенияОбОбъекте") Тогда
Параметры.Вставить(Новый Структура("Код,Наименование"));
КонецЕсли;
Параметры.СведенияОбОбъекте.Номер =СвойстваПоиска["Код"];
Параметры.СведенияОбОбъекте.Дата=СвойстваПоиска["Наименование"];


4. А от дальше не пойму где именно мне отлавливать не найденную номенклатуру, выводить сообщение с параметра СведенияОбОбъекте и самое важное - делать отказ на загрузку ПТУ, в котором не найдена Номенклатура.
7. tusv 211 10.07.19 18:34 Сейчас в теме
(6)Параметр можно добавлять когда угодно. Главное, чтоб он не переопределялся в других ПКО, а работал только в рамках определенного типа. Второй. Да. Глобальный. В нем Мы определяем список объектов к записи
9. Azzkijhacker 10.07.19 18:54 Сейчас в теме
(7)
Параметр можно добавлять когда угодно


В моем конкретном случае это как добавить и описать этот параметр СведенияОбОбъекте??? Это не глобальный должен быть? Я просто имел дело только с глобальными параметрами конвертации :(
10. tusv 211 10.07.19 19:00 Сейчас в теме
(9)Параметры это глобальная переменная тип Структура. Свойства можно добавлять в любом обработчике
11. Azzkijhacker 11.07.19 10:14 Сейчас в теме
(10) Что-то запутался.
Присваивать значение этому параметру мне нада где? В ПКО справочника Номенклатура или этот параметр добавлять в список табличной части ПКО ПТУ и там назначать значение?
12. tusv 211 11.07.19 11:39 Сейчас в теме
(11)Глобальный Обработчик Перед загрузкой данных
Параметры.Вставить("НеНайденнаяНомеклатура", Неопределено); 

ПКО Номенклатура
Обработчик Поля поиска
Если не Параметры.Свойство("СведенияОбОбъекте") Тогда 
	Параметры.Вставить(Новый Структура("Код,Наименование")); 
КонецЕсли; 
Параметры.СведенияОбОбъекте.Номер =СвойстваПоиска["Код"]; 
Параметры.СведенияОбОбъекте.Дата=СвойстваПоиска["Наименование"];

Обработчик При загрузке
Если не ОбъектНайден и не Параметры.НеНайденнаяНомеклатура = Неопределено Тогда
	НоваяСтрока = Параметры.НеНайденнаяНомеклатура.Добавить();
	НоваяСтрока.Код = Параметры.СведенияОбОбъекте.Код;
	НоваяСтрока.Наименование = Параметры.СведенияОбОбъекте.Наименование;
КонецЕсли;

ПКО ПТУ
Обработчик Перед загрузкой
Параметры.Вставить("НеНайденнаяНомеклатура",Новый ТаблицаЗначений);
Параметры.НеНайденнаяНомеклатура.Колонки.Добавить("Код");
Параметры.НеНайденнаяНомеклатура.Колонки.Добавить("Наименование");

Обработчик После загрузки
Для Каждого ТекСтр Из Параметры.НеНайденнаяНомеклатура Цикл
	Сообщить(СтрШаблон("Не найденная номеклатура. Код: %1, Наименование %2", ТекСтр.Код, ТекСтр.Наименование);
КонецЦикла;	
Параметры.НеНайденнаяНомеклатура = Неопределено;

Логика понятна?
13. Azzkijhacker 11.07.19 13:11 Сейчас в теме
(12)
Обработчик При загрузке
Если не ОбъектНайден и не Параметры.НеНайденнаяНомеклатура = Неопределено Тогда
НоваяСтрока = Параметры.НеНайденнаяНомеклатура.Добавить();
НоваяСтрока.Код = Параметры.СведенияОбОбъекте.Код;
НоваяСтрока.Наименование = Параметры.СведенияОбОбъекте.Наименование;
КонецЕсли;


1. Печаль в том, что если номенклатура не найдена, она не попадает в этот обработчик. У меня в тестовом ПТУ 4 строчки номенклатуры, первой нету в приемнике. В результате если прописать
ПКО Номенклатура
Обработчик При загрузке
Сообщить(Строка(ОбъектНайден ) + " : " + Строка(Параметры.НеНайденнаяНомеклатура = Неопределено))


То получаем только 3 сообщения:
ДА : ДА

Кроме того, почему Параметры.НеНайденнаяНомеклатура = Неопределено возвращает ДА???
14. tusv 211 11.07.19 13:34 Сейчас в теме
(13)Ну пропишите поиск в Полях поиска.
Пример. Вариант поиска по Уникальному идентификатору, затем по Коду и Наименованию
Если не Параметры.НеНайденнаяНомеклатура = Неопределено Тогда
	СсылкаНаОбъект = Справочники.Номенклатура.ПолучитьСсылку(Новый УникальныйИдентификатор(СвойстваПоиска["{УникальныйИдентификатор}"]);
	Если СсылкаНаОбъект.ПолучитьОбъект()=Неопределено Тогда
		Запрос = Новый Запрос;
		Запрос.Текст = 
		"ВЫБРАТЬ
		|	Номенклатура.Ссылка КАК Ссылка
		|ИЗ
		|	Справочник.Номенклатура КАК Номенклатура
		|ГДЕ
		|	Номенклатура.Код = &Код
		|	И Номенклатура.Наименование = &Наименование";
		
		Запрос.УстановитьПараметр("Код", СвойстваПоиска["Код"]);
		Запрос.УстановитьПараметр("Наименование", СвойстваПоиска["Наименование"]);
		
		Выборка = Запрос.Выполнить().Выбрать();
		Если  Выборка.Следующий() Тогда
			СсылкаНаОбъект = Выборка.Ссылка;
		Иначе
			НоваяСтрока = Параметры.НеНайденнаяНомеклатура.Добавить();
			НоваяСтрока.Код = СвойстваПоиска["Код"];
			НоваяСтрока.Наименование = СвойстваПоиска["Наименование"];
		КонецЕсли;	
	КонецЕсли;
	ПрекратитьПоиск = Истина;
КонецЕсли;
Показать

Ну и Вывод сообщений надо в После Загрузки
15. Azzkijhacker 11.07.19 13:48 Сейчас в теме
(14) Ну печаль в том еще, что Поиск у меня по одним полям, а вывести инфо нада по другим полям Номенклатуры. Поиск у меня не идет по Коду и Номенклатуре, а по отдельному реквизиту. Как мне тогда например в обработчике Поля поиска получить Код и Наименование, если они не входят в СвойстваПоиска?
16. Azzkijhacker 11.07.19 13:55 Сейчас в теме
(15) Может есть ссылка толковая, где разжеван механизм работы параметров в КД с примерами использования?
17. tusv 211 11.07.19 14:03 Сейчас в теме
(15)Это не печалька. Так мелкое препятствие. Поставьте поиск и на Код и Наименование, а в обработчике Поля поиска ограничиваем только по Вашему параметру. Например по Артикулу
СтрокаИменСвойствПоиска = "Артикул";
18. Azzkijhacker 11.07.19 14:12 Сейчас в теме
(17)
Глобальный Обработчик Перед загрузкой данных
Параметры.Вставить("НеНайденнаяНомеклатура", Неопределено);

А в чем разница этой строчки в глоб обработчике от того, чтоб добавить Параметр во вкладке Параметры?
19. tusv 211 11.07.19 14:15 Сейчас в теме
(18)Вкладка Параметры. Доступна сразу после загрузки правил обмена. Можно изменять до выгрузки
20. Azzkijhacker 11.07.19 14:19 Сейчас в теме
(19)Не совсем понял. То-есть по факту, я могу не прописывать кодом добавление параметра, а в закладке параметры добавить его и просто не указывать тип значения его?
21. tusv 211 11.07.19 14:30 Сейчас в теме
(20)Да. Но в Вашем случае надо еще поставить галку При загрузке
22. Azzkijhacker 11.07.19 15:38 Сейчас в теме
(21)С одной галкой При загрузке не работает - просто не видит этот параметр в обработчике Поля поиска. Видит только, когда все 3 галки проставить При выгрузке, Диалог.
А вторая проблема - не видит метод Добавить(). Мы же в Параметрах тип не указали для НеНайденнаяНомеклатура. Это ТЗ как-бы должно быть, но где это указать?
 НоваяСтрока = Параметры.НеНайденнаяНомеклатура.Добавить();
23. Azzkijhacker 11.07.19 19:00 Сейчас в теме
(17)А если у меня поля поиска ПКО Номенклатура такого вида:

Источник Приемник
НомерБУ Код
ЭтоГруппа ЭтоГруппа

То какая должна быть СтрокаИменСвойствПоиска?

"НомерБУ, ЭтоГруппа" или "Код, ЭтоГруппа"?
24. tusv 211 11.07.19 19:12 Сейчас в теме
8. tusv 211 10.07.19 18:36 Сейчас в теме
(6)4. Список Объектов делаем Таблицей значений. Там записываем Объект и все коллизии, которые Вам необходимы для сообщений пользователю
3. Fox-trot 157 10.07.19 17:03 Сейчас в теме
(1) выводить сообщения об ошибка не надо, их просто читать некому будет. имхо правильнее засорить журнал регистрации сообщениями
4. Azzkijhacker 10.07.19 17:07 Сейчас в теме
(3) У нас выгрузка и загрузка делается вручную самописными обработками, поэтому читать есть кому.
5. Fox-trot 157 10.07.19 17:21 Сейчас в теме
(4) когда засунете это безобразие в регламент, чтоб сервер автоматом делал без участия человеческого внимания, тогда и переделаете ;-)
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот