КД2 ПРО или правила регистрации объекта

1. Xershi 1557 13.11.18 18:22 Сейчас в теме
Добрый вечер, коллеги!

Переписываю правила обмена УПП 1.3 - УТ 11.4

Стал вопрос регистрации документа установка цен номенклатуры по типу цен.
Добавил в план обмена табличную часть с заполнением типа цен.
Добавил реквизит "ИспользоватьОтборПоТипамЦенНоменклатуры".

Далее мне нужно проверку сделать, что если есть в документе подходящий тип цен, то документ регистрируется для обмена.

Стандартным условием доступ к ТЧ отсутствует.

Но есть обработчик "Перед обработкой"
Справка говорит, что есть следующие параметры:
Параметры:
Отказ – Булево – флаг отказа от выполнения правила регистрации. Отказ от выполнения правила означает, что объект не будет зарегистрирован на узлах плана обмена, для которого создано это правило.

Объект – объект для которого выполняется правило регистрации

ОбъектМетаданных – объект метаданных, соответствующий параметру Объект.

Выгрузка (только чтение) – Булево – параметр определяет контекст выполнения правила регистрации. Истина – правило регистрации выполняется в контексте выгрузки объекта. Ложь – правило регистрации выполняется в контексте перед записью объекта.

ПРО – СтрокаТаблицыЗначений – ссылка на правило регистрации объектов «Формат правила регистрации объектов»

См. также «Процедуры и функции обработчиков правил регистрации»

Показать

Из объекта я вытяну ТЧ или напишу запрос, используя отбор ссылки через "Объект.Ссылка". Как мне взять параметры по типам цен из узла обмена?
По теме из базы знаний
Найденные решения
6. Xershi 1557 13.11.18 20:29 Сейчас в теме
В итоге все получилось:
ТекстЗапроса =
"ВЫБРАТЬ РАЗЛИЧНЫЕ
|	ОбменУППТипЦеныНоменклатуры.ТипЦеныНоменклатуры
|ИЗ
|	ПланОбмена.[ИмяПланаОбмена].ТипыЦенНоменклатуры КАК ОбменУППТипЦеныНоменклатуры
|ГДЕ
|	ОбменУППТипЦеныНоменклатуры.Ссылка.ИспользоватьОтборПоТипамЦенНоменклатуры
|	И ОбменУППТипЦеныНоменклатуры.Ссылка <> &ЭтотУзел";

ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "[ИмяПланаОбмена]", ПРО.ИмяПланаОбмена);

Запрос = Новый Запрос;
Запрос.Текст = ТекстЗапроса;

Запрос.УстановитьПараметр("ЭтотУзел", ОбменДаннымиПовтИсп.ПолучитьЭтотУзелПланаОбмена(ПРО.ИмяПланаОбмена));
	
РезультатЗапроса = Запрос.Выполнить();

ТаблицаТиповЦен = РезультатЗапроса.Выгрузить();

Если ТаблицаТиповЦен.Количество() > 0 Тогда
	
	Отказ = Истина;
	
	Для Каждого Строка Из ТаблицаТиповЦен Цикл
		
		НайденнаяСтрока = Объект.ТипыЦен.Найти(Строка.ТипЦеныНоменклатуры);
		Если НайденнаяСтрока <> Неопределено Тогда
			Отказ = Ложь;
		КонецЕсли;
		
	КонецЦикла;
	
КонецЕсли;
Показать
botokash; +1 Ответить
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. Xershi 1557 13.11.18 19:02 Сейчас в теме
Нашел процедуру ОбменДаннымиСобытия.ВыполнитьОбработчикПРОПриОбработке. Там можно получить весь контекст.
3. Xershi 1557 13.11.18 19:40 Сейчас в теме
Правда дате с типовыми настройками не происходит регистрация:
ВЫБРАТЬ РАЗЛИЧНЫЕ
	ШапкаПланаОбмена.Ссылка КАК Узел
ИЗ
	ПланОбмена.ОбменУправлениеТорговлейУправлениеПроизводственнымПредприяти­ем КАК ШапкаПланаОбмена
		ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.СоответствияОбъектовИнформационныхБаз КАК СоответствияОбъектовИнформационныхБаз
		ПО ШапкаПланаОбмена.Ссылка = СоответствияОбъектовИнформационныхБаз.УзелИнформационнойБазы
			И (СоответствияОбъектовИнформационныхБаз.УникальныйИдентификаторИсточника = &Объект)
ГДЕ
	ШапкаПланаОбмена.Ссылка <> &ЭтотУзел
	И ШапкаПланаОбмена.РежимВыгрузкиПриНеобходимости = ЗНАЧЕНИЕ(Перечисление.РежимыВыгрузкиОбъектовОбмена.ВыгружатьПриНеобходимости)
	И НЕ ШапкаПланаОбмена.ПометкаУдаления
	И СоответствияОбъектовИнформационныхБаз.УникальныйИдентификаторИсточника = &Объект
Показать

Запрос возвращает пустой результат. Потому что в регистре СоответствияОбъектовИнформационныхБаз пусто. Как понять почему регистрация не происходит?
4. Xershi 1557 13.11.18 20:01 Сейчас в теме
(3) не регистрировало, потому что в документах поставил переключатель на "РежимВыгрузкиПриНеобходимости". Когда очистил все пошло!
5. Xershi 1557 13.11.18 20:06 Сейчас в теме
В общем то Процедура ВыполнитьОбработчикПРОПередОбработкой(ПРО, Отказ, Объект, ОбъектМетаданных, Знач Выгрузка)
Не содержит УЗЛА обмена, поэтому получить реквизиты не получится. Выходит если и писать код, то он будет для всех планов обмена данного типа.
6. Xershi 1557 13.11.18 20:29 Сейчас в теме
В итоге все получилось:
ТекстЗапроса =
"ВЫБРАТЬ РАЗЛИЧНЫЕ
|	ОбменУППТипЦеныНоменклатуры.ТипЦеныНоменклатуры
|ИЗ
|	ПланОбмена.[ИмяПланаОбмена].ТипыЦенНоменклатуры КАК ОбменУППТипЦеныНоменклатуры
|ГДЕ
|	ОбменУППТипЦеныНоменклатуры.Ссылка.ИспользоватьОтборПоТипамЦенНоменклатуры
|	И ОбменУППТипЦеныНоменклатуры.Ссылка <> &ЭтотУзел";

ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "[ИмяПланаОбмена]", ПРО.ИмяПланаОбмена);

Запрос = Новый Запрос;
Запрос.Текст = ТекстЗапроса;

Запрос.УстановитьПараметр("ЭтотУзел", ОбменДаннымиПовтИсп.ПолучитьЭтотУзелПланаОбмена(ПРО.ИмяПланаОбмена));
	
РезультатЗапроса = Запрос.Выполнить();

ТаблицаТиповЦен = РезультатЗапроса.Выгрузить();

Если ТаблицаТиповЦен.Количество() > 0 Тогда
	
	Отказ = Истина;
	
	Для Каждого Строка Из ТаблицаТиповЦен Цикл
		
		НайденнаяСтрока = Объект.ТипыЦен.Найти(Строка.ТипЦеныНоменклатуры);
		Если НайденнаяСтрока <> Неопределено Тогда
			Отказ = Ложь;
		КонецЕсли;
		
	КонецЦикла;
	
КонецЕсли;
Показать
botokash; +1 Ответить
7. insurgut 208 14.11.18 06:53 Сейчас в теме
Как порой полезно бывает пообщаться с самим собой... только маленькая погрешность будет в этом решении, если настроено несколько узлов обмена и в каждом прописаны свои значения отбора - в запрос залетать будет первый попавшийся. Правильнее, как мне кажется, отбрасывать документы не на этапе регистрации, а на этапе уже конвертации в ПВД.

Лирическое отступление. Между делом когда-то изменял типовые правила (дело вроде было в УНФ), чтобы после загрузки объекта выполнялись дополнительные манипуляции. Правила поправил загрузил, а результат - нулевой. Код ни в какую не выполнялся. Оказывается, какой-то гений 1С решил плюнуть на то, что в правилах прописано и в отдельной обработке переписать обработчики объектов после загрузки. Да ешё и страшные надписи вывел, что модули обработчиков изменять категорически запрещено! Хорошо, хоть расширения есть - решил задачу без снятия конфигурации с поддержки. К чему это все. Во времена УТ 10.3 механизм обмена и конвертации был прост, прозрачен и понятен. Зачем придумывать что-то, что заведомо усложняет разработку - не понятно.
8. Xershi 1557 16.11.18 18:06 Сейчас в теме
(7) за два часа решения вопроса никто не откликнулся. Увы довольно часто такое бывает...
Так что что есть, то есть.

Про нюанс конечно в курсе, если было бы больше 1 базы, тогда решение бы не пошло.
9. vodorosl 71 30.04.20 01:34 Сейчас в теме
как обратиться в коде ПРО к реквизитам текущего узла, к коду например? надо для разных улов разные условия в коде прописывать......
Оставьте свое сообщение

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