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

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

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

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

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


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


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

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

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

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

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

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


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


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

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

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

А в чем разница этой строчки в глоб обработчике от того, чтоб добавить Параметр во вкладке Параметры?
19. tusv 210 11.07.19 14:15 Сейчас в теме
(18)Вкладка Параметры. Доступна сразу после загрузки правил обмена. Можно изменять до выгрузки
20. Azzkijhacker 11.07.19 14:19 Сейчас в теме
(19)Не совсем понял. То-есть по факту, я могу не прописывать кодом добавление параметра, а в закладке параметры добавить его и просто не указывать тип значения его?
21. tusv 210 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 210 11.07.19 19:12 Сейчас в теме
8. tusv 210 10.07.19 18:36 Сейчас в теме
(6)4. Список Объектов делаем Таблицей значений. Там записываем Объект и все коллизии, которые Вам необходимы для сообщений пользователю
3. Fox-trot 156 10.07.19 17:03 Сейчас в теме
(1) выводить сообщения об ошибка не надо, их просто читать некому будет. имхо правильнее засорить журнал регистрации сообщениями
4. Azzkijhacker 10.07.19 17:07 Сейчас в теме
(3) У нас выгрузка и загрузка делается вручную самописными обработками, поэтому читать есть кому.
5. Fox-trot 156 10.07.19 17:21 Сейчас в теме
(4) когда засунете это безобразие в регламент, чтоб сервер автоматом делал без участия человеческого внимания, тогда и переделаете ;-)
Оставьте свое сообщение
Вакансии
1С аналитик
Москва
зарплата от 210 000 руб.
Полный день

Руководитель направления 1С
Москва
зарплата от 350 000 руб.
Полный день

1С Программист
Москва
зарплата от 180 000 руб.
Полный день

Программист 1С
Москва
зарплата от 180 000 руб. до 220 000 руб.
Полный день

Аналитик 1С / Бизнес-аналитик
Нижний Новгород
зарплата от 100 000 руб. до 250 000 руб.
Временный (на проект)