Конвертация данных 2.0 вывод сообщения о не найденном элементе в приемнике
Делаю конвертацию документов ПТУ. Как и в каких обработчиках правильно реализовать следующее:
1. Если в приемнике не найдена номенклатура, то вывести сообщение с кодом и наименованием проблемной номенклатуры с источника. Не могу понять как уже на стороне приемника достучатся до данных источника.
2. Как отменить всю загрузку всех ПТУ в случае п.1, а не только проблемного ПТУ?
1. Если в приемнике не найдена номенклатура, то вывести сообщение с кодом и наименованием проблемной номенклатуры с источника. Не могу понять как уже на стороне приемника достучатся до данных источника.
2. Как отменить всю загрузку всех ПТУ в случае п.1, а не только проблемного ПТУ?
По теме из базы знаний
Ответы
В избранное
Подписаться на ответы
Сортировка:
Древо развёрнутое
Свернуть все
(1)1.Достучаться можно В обработчике Поля поиска, через СвойстваПоиска, Затем передавать в параметр
2.Опять же Параметры. Тип, Ну например Массив. В Обработчике После загрузки Отказ = Истина и Записывать в этот параметр.
Если все в порядке. В После загрузки данных Обходим Параметр и записываем.
Если плохо и Это Обмен по правилам БСП Удаляем Объекты ПТУ из таблицы полученной функцией ДокументыДляОтложенногоПроведения();
Если не Параметры.Свойство("СведенияОбОбъекте") Тогда
Параметры.Вставить(Новый Структура("Номер,Дата"));
КонецЕсли;
Параметры.СведенияОбОбъекте.Номер =СвойстваПоиска["Номер"];
Параметры.СведенияОбОбъекте.Дата=СвойстваПоиска["Дата"];
2.Опять же Параметры. Тип, Ну например Массив. В Обработчике После загрузки Отказ = Истина и Записывать в этот параметр.
Если все в порядке. В После загрузки данных Обходим Параметр и записываем.
Если плохо и Это Обмен по правилам БСП Удаляем Объекты ПТУ из таблицы полученной функцией ДокументыДляОтложенногоПроведения();
(2) Можна подробнее. Что за чем и где добавить/прописать?
Как я понял:
1. Добавляем не типизированный глобальный параметр СведенияОбОбъекте.
2.В ПКО Номенклатура -> в список свойств добавляем наш параметр СведенияОбОбъекте.
3.В ПКО в обработчике Поля поиска пишем:
4. А от дальше не пойму где именно мне отлавливать не найденную номенклатуру, выводить сообщение с параметра СведенияОбОбъекте и самое важное - делать отказ на загрузку ПТУ, в котором не найдена Номенклатура.
Как я понял:
1. Добавляем не типизированный глобальный параметр СведенияОбОбъекте.
2.В ПКО Номенклатура -> в список свойств добавляем наш параметр СведенияОбОбъекте.
3.В ПКО в обработчике Поля поиска пишем:
Если не Параметры.Свойство("СведенияОбОбъекте") Тогда
Параметры.Вставить(Новый Структура("Код,Наименование"));
КонецЕсли;
Параметры.СведенияОбОбъекте.Номер =СвойстваПоиска["Код"];
Параметры.СведенияОбОбъекте.Дата=СвойстваПоиска["Наименование"];
Параметры.Вставить(Новый Структура("Код,Наименование"));
КонецЕсли;
Параметры.СведенияОбОбъекте.Номер =СвойстваПоиска["Код"];
Параметры.СведенияОбОбъекте.Дата=СвойстваПоиска["Наименование"];
4. А от дальше не пойму где именно мне отлавливать не найденную номенклатуру, выводить сообщение с параметра СведенияОбОбъекте и самое важное - делать отказ на загрузку ПТУ, в котором не найдена Номенклатура.
(11)Глобальный Обработчик Перед загрузкой данных
ПКО Номенклатура
Обработчик Поля поиска
Обработчик При загрузке
ПКО ПТУ
Обработчик Перед загрузкой
Обработчик После загрузки
Логика понятна?
Параметры.Вставить("НеНайденнаяНомеклатура", Неопределено);
ПКО Номенклатура
Обработчик Поля поиска
Если не Параметры.Свойство("СведенияОбОбъекте") Тогда
Параметры.Вставить(Новый Структура("Код,Наименование"));
КонецЕсли;
Параметры.СведенияОбОбъекте.Номер =СвойстваПоиска["Код"];
Параметры.СведенияОбОбъекте.Дата=СвойстваПоиска["Наименование"];
Обработчик При загрузке
Если не ОбъектНайден и не Параметры.НеНайденнаяНомеклатура = Неопределено Тогда
НоваяСтрока = Параметры.НеНайденнаяНомеклатура.Добавить();
НоваяСтрока.Код = Параметры.СведенияОбОбъекте.Код;
НоваяСтрока.Наименование = Параметры.СведенияОбОбъекте.Наименование;
КонецЕсли;
ПКО ПТУ
Обработчик Перед загрузкой
Параметры.Вставить("НеНайденнаяНомеклатура",Новый ТаблицаЗначений);
Параметры.НеНайденнаяНомеклатура.Колонки.Добавить("Код");
Параметры.НеНайденнаяНомеклатура.Колонки.Добавить("Наименование");
Обработчик После загрузки
Для Каждого ТекСтр Из Параметры.НеНайденнаяНомеклатура Цикл
Сообщить(СтрШаблон("Не найденная номеклатура. Код: %1, Наименование %2", ТекСтр.Код, ТекСтр.Наименование);
КонецЦикла;
Параметры.НеНайденнаяНомеклатура = Неопределено;
Логика понятна?
(12)
1. Печаль в том, что если номенклатура не найдена, она не попадает в этот обработчик. У меня в тестовом ПТУ 4 строчки номенклатуры, первой нету в приемнике. В результате если прописать
ПКО Номенклатура
Обработчик При загрузке
То получаем только 3 сообщения:
ДА : ДА
Кроме того, почему Параметры.НеНайденнаяНомеклатура = Неопределено возвращает ДА???
Обработчик При загрузке
Если не ОбъектНайден и не Параметры.НеНайденнаяНомеклатура = Неопределено Тогда
НоваяСтрока = Параметры.НеНайденнаяНомеклатура.Добавить();
НоваяСтрока.Код = Параметры.СведенияОбОбъекте.Код;
НоваяСтрока.Наименование = Параметры.СведенияОбОбъекте.Наименование;
КонецЕсли;
Если не ОбъектНайден и не Параметры.НеНайденнаяНомеклатура = Неопределено Тогда
НоваяСтрока = Параметры.НеНайденнаяНомеклатура.Добавить();
НоваяСтрока.Код = Параметры.СведенияОбОбъекте.Код;
НоваяСтрока.Наименование = Параметры.СведенияОбОбъекте.Наименование;
КонецЕсли;
1. Печаль в том, что если номенклатура не найдена, она не попадает в этот обработчик. У меня в тестовом ПТУ 4 строчки номенклатуры, первой нету в приемнике. В результате если прописать
ПКО Номенклатура
Обработчик При загрузке
Сообщить(Строка(ОбъектНайден ) + " : " + Строка(Параметры.НеНайденнаяНомеклатура = Неопределено))
То получаем только 3 сообщения:
ДА : ДА
Кроме того, почему Параметры.НеНайденнаяНомеклатура = Неопределено возвращает ДА???
(13)Ну пропишите поиск в Полях поиска.
Пример. Вариант поиска по Уникальному идентификатору, затем по Коду и Наименованию
Ну и Вывод сообщений надо в После Загрузки
Пример. Вариант поиска по Уникальному идентификатору, затем по Коду и Наименованию
Если не Параметры.НеНайденнаяНомеклатура = Неопределено Тогда
СсылкаНаОбъект = Справочники.Номенклатура.ПолучитьСсылку(Новый УникальныйИдентификатор(СвойстваПоиска["{УникальныйИдентификатор}"]);
Если СсылкаНаОбъект.ПолучитьОбъект()=Неопределено Тогда
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| Номенклатура.Ссылка КАК Ссылка
|ИЗ
| Справочник.Номенклатура КАК Номенклатура
|ГДЕ
| Номенклатура.Код = &Код
| И Номенклатура.Наименование = &Наименование";
Запрос.УстановитьПараметр("Код", СвойстваПоиска["Код"]);
Запрос.УстановитьПараметр("Наименование", СвойстваПоиска["Наименование"]);
Выборка = Запрос.Выполнить().Выбрать();
Если Выборка.Следующий() Тогда
СсылкаНаОбъект = Выборка.Ссылка;
Иначе
НоваяСтрока = Параметры.НеНайденнаяНомеклатура.Добавить();
НоваяСтрока.Код = СвойстваПоиска["Код"];
НоваяСтрока.Наименование = СвойстваПоиска["Наименование"];
КонецЕсли;
КонецЕсли;
ПрекратитьПоиск = Истина;
КонецЕсли;
ПоказатьНу и Вывод сообщений надо в После Загрузки
(14) Ну печаль в том еще, что Поиск у меня по одним полям, а вывести инфо нада по другим полям Номенклатуры. Поиск у меня не идет по Коду и Номенклатуре, а по отдельному реквизиту. Как мне тогда например в обработчике Поля поиска получить Код и Наименование, если они не входят в СвойстваПоиска?
(21)С одной галкой При загрузке не работает - просто не видит этот параметр в обработчике Поля поиска. Видит только, когда все 3 галки проставить При выгрузке, Диалог.
А вторая проблема - не видит метод Добавить(). Мы же в Параметрах тип не указали для НеНайденнаяНомеклатура. Это ТЗ как-бы должно быть, но где это указать?
А вторая проблема - не видит метод Добавить(). Мы же в Параметрах тип не указали для НеНайденнаяНомеклатура. Это ТЗ как-бы должно быть, но где это указать?
НоваяСтрока = Параметры.НеНайденнаяНомеклатура.Добавить();
Вакансии
Аналитик 1С / Бизнес-аналитик
Нижний Новгород
зарплата от 100 000 руб. до 250 000 руб.
Временный (на проект)
Нижний Новгород
зарплата от 100 000 руб. до 250 000 руб.
Временный (на проект)