КД2 ПРО или правила регистрации объекта
Добрый вечер, коллеги!
Переписываю правила обмена УПП 1.3 - УТ 11.4
Стал вопрос регистрации документа установка цен номенклатуры по типу цен.
Добавил в план обмена табличную часть с заполнением типа цен.
Добавил реквизит "ИспользоватьОтборПоТипамЦенНоменклатуры".
Далее мне нужно проверку сделать, что если есть в документе подходящий тип цен, то документ регистрируется для обмена.
Стандартным условием доступ к ТЧ отсутствует.
Но есть обработчик "Перед обработкой"
Справка говорит, что есть следующие параметры:
Из объекта я вытяну ТЧ или напишу запрос, используя отбор ссылки через "Объект.Ссылка". Как мне взять параметры по типам цен из узла обмена?
Переписываю правила обмена УПП 1.3 - УТ 11.4
Стал вопрос регистрации документа установка цен номенклатуры по типу цен.
Добавил в план обмена табличную часть с заполнением типа цен.
Добавил реквизит "ИспользоватьОтборПоТипамЦенНоменклатуры".
Далее мне нужно проверку сделать, что если есть в документе подходящий тип цен, то документ регистрируется для обмена.
Стандартным условием доступ к ТЧ отсутствует.
Но есть обработчик "Перед обработкой"
Справка говорит, что есть следующие параметры:
Параметры:
Отказ – Булево – флаг отказа от выполнения правила регистрации. Отказ от выполнения правила означает, что объект не будет зарегистрирован на узлах плана обмена, для которого создано это правило.
Объект – объект для которого выполняется правило регистрации
ОбъектМетаданных – объект метаданных, соответствующий параметру Объект.
Выгрузка (только чтение) – Булево – параметр определяет контекст выполнения правила регистрации. Истина – правило регистрации выполняется в контексте выгрузки объекта. Ложь – правило регистрации выполняется в контексте перед записью объекта.
ПРО – СтрокаТаблицыЗначений – ссылка на правило регистрации объектов «Формат правила регистрации объектов»
См. также «Процедуры и функции обработчиков правил регистрации»
ПоказатьОтказ – Булево – флаг отказа от выполнения правила регистрации. Отказ от выполнения правила означает, что объект не будет зарегистрирован на узлах плана обмена, для которого создано это правило.
Объект – объект для которого выполняется правило регистрации
ОбъектМетаданных – объект метаданных, соответствующий параметру Объект.
Выгрузка (только чтение) – Булево – параметр определяет контекст выполнения правила регистрации. Истина – правило регистрации выполняется в контексте выгрузки объекта. Ложь – правило регистрации выполняется в контексте перед записью объекта.
ПРО – СтрокаТаблицыЗначений – ссылка на правило регистрации объектов «Формат правила регистрации объектов»
См. также «Процедуры и функции обработчиков правил регистрации»
Из объекта я вытяну ТЧ или напишу запрос, используя отбор ссылки через "Объект.Ссылка". Как мне взять параметры по типам цен из узла обмена?
По теме из базы знаний
- [ED] Обмен для предыдущих версий - УТ 11.0, УТ 11.1, УТ 11.2, УТ 11.3, УТ 11.4, УТ 11.5 с EnterpriseData (универсальный формат обмена), правила обмена
- Переход с 1С:УПП на1C:ERP: Перенос остатков и затянувшееся начало работы в ЕРП
- [ED] Обмен для предыдущих версий - УНФ 1.6, УНФ 3.0 с EnterpriseData (универсальный формат обмена), правила обмена
- [ED] Обмен для предыдущих версий - Розница 2.3 с EnterpriseData (универсальный формат обмена), правила обмена
- Тюнинг планов обмена
Найденные решения
В итоге все получилось:
ТекстЗапроса =
"ВЫБРАТЬ РАЗЛИЧНЫЕ
| ОбменУППТипЦеныНоменклатуры.ТипЦеныНоменклатуры
|ИЗ
| ПланОбмена.[ИмяПланаОбмена].ТипыЦенНоменклатуры КАК ОбменУППТипЦеныНоменклатуры
|ГДЕ
| ОбменУППТипЦеныНоменклатуры.Ссылка.ИспользоватьОтборПоТипамЦенНоменклатуры
| И ОбменУППТипЦеныНоменклатуры.Ссылка <> &ЭтотУзел";
ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "[ИмяПланаОбмена]", ПРО.ИмяПланаОбмена);
Запрос = Новый Запрос;
Запрос.Текст = ТекстЗапроса;
Запрос.УстановитьПараметр("ЭтотУзел", ОбменДаннымиПовтИсп.ПолучитьЭтотУзелПланаОбмена(ПРО.ИмяПланаОбмена));
РезультатЗапроса = Запрос.Выполнить();
ТаблицаТиповЦен = РезультатЗапроса.Выгрузить();
Если ТаблицаТиповЦен.Количество() > 0 Тогда
Отказ = Истина;
Для Каждого Строка Из ТаблицаТиповЦен Цикл
НайденнаяСтрока = Объект.ТипыЦен.Найти(Строка.ТипЦеныНоменклатуры);
Если НайденнаяСтрока <> Неопределено Тогда
Отказ = Ложь;
КонецЕсли;
КонецЦикла;
КонецЕсли;
ПоказатьОстальные ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
Правда дате с типовыми настройками не происходит регистрация:
Запрос возвращает пустой результат. Потому что в регистре СоответствияОбъектовИнформационныхБаз пусто. Как понять почему регистрация не происходит?
ВЫБРАТЬ РАЗЛИЧНЫЕ
ШапкаПланаОбмена.Ссылка КАК Узел
ИЗ
ПланОбмена.ОбменУправлениеТорговлейУправлениеПроизводственнымПредприяти ем КАК ШапкаПланаОбмена
ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.СоответствияОбъектовИнформационныхБаз КАК СоответствияОбъектовИнформационныхБаз
ПО ШапкаПланаОбмена.Ссылка = СоответствияОбъектовИнформационныхБаз.УзелИнформационнойБазы
И (СоответствияОбъектовИнформационныхБаз.УникальныйИдентификаторИсточника = &Объект)
ГДЕ
ШапкаПланаОбмена.Ссылка <> &ЭтотУзел
И ШапкаПланаОбмена.РежимВыгрузкиПриНеобходимости = ЗНАЧЕНИЕ(Перечисление.РежимыВыгрузкиОбъектовОбмена.ВыгружатьПриНеобходимости)
И НЕ ШапкаПланаОбмена.ПометкаУдаления
И СоответствияОбъектовИнформационныхБаз.УникальныйИдентификаторИсточника = &Объект
ПоказатьЗапрос возвращает пустой результат. Потому что в регистре СоответствияОбъектовИнформационныхБаз пусто. Как понять почему регистрация не происходит?
В общем то Процедура ВыполнитьОбработчикПРОПередОбработкой(ПРО, Отказ, Объект, ОбъектМетаданных, Знач Выгрузка)
Не содержит УЗЛА обмена, поэтому получить реквизиты не получится. Выходит если и писать код, то он будет для всех планов обмена данного типа.
Не содержит УЗЛА обмена, поэтому получить реквизиты не получится. Выходит если и писать код, то он будет для всех планов обмена данного типа.
В итоге все получилось:
ТекстЗапроса =
"ВЫБРАТЬ РАЗЛИЧНЫЕ
| ОбменУППТипЦеныНоменклатуры.ТипЦеныНоменклатуры
|ИЗ
| ПланОбмена.[ИмяПланаОбмена].ТипыЦенНоменклатуры КАК ОбменУППТипЦеныНоменклатуры
|ГДЕ
| ОбменУППТипЦеныНоменклатуры.Ссылка.ИспользоватьОтборПоТипамЦенНоменклатуры
| И ОбменУППТипЦеныНоменклатуры.Ссылка <> &ЭтотУзел";
ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "[ИмяПланаОбмена]", ПРО.ИмяПланаОбмена);
Запрос = Новый Запрос;
Запрос.Текст = ТекстЗапроса;
Запрос.УстановитьПараметр("ЭтотУзел", ОбменДаннымиПовтИсп.ПолучитьЭтотУзелПланаОбмена(ПРО.ИмяПланаОбмена));
РезультатЗапроса = Запрос.Выполнить();
ТаблицаТиповЦен = РезультатЗапроса.Выгрузить();
Если ТаблицаТиповЦен.Количество() > 0 Тогда
Отказ = Истина;
Для Каждого Строка Из ТаблицаТиповЦен Цикл
НайденнаяСтрока = Объект.ТипыЦен.Найти(Строка.ТипЦеныНоменклатуры);
Если НайденнаяСтрока <> Неопределено Тогда
Отказ = Ложь;
КонецЕсли;
КонецЦикла;
КонецЕсли;
Показать
Как порой полезно бывает пообщаться с самим собой... только маленькая погрешность будет в этом решении, если настроено несколько узлов обмена и в каждом прописаны свои значения отбора - в запрос залетать будет первый попавшийся. Правильнее, как мне кажется, отбрасывать документы не на этапе регистрации, а на этапе уже конвертации в ПВД.
Лирическое отступление. Между делом когда-то изменял типовые правила (дело вроде было в УНФ), чтобы после загрузки объекта выполнялись дополнительные манипуляции. Правила поправил загрузил, а результат - нулевой. Код ни в какую не выполнялся. Оказывается, какой-то гений 1С решил плюнуть на то, что в правилах прописано и в отдельной обработке переписать обработчики объектов после загрузки. Да ешё и страшные надписи вывел, что модули обработчиков изменять категорически запрещено! Хорошо, хоть расширения есть - решил задачу без снятия конфигурации с поддержки. К чему это все. Во времена УТ 10.3 механизм обмена и конвертации был прост, прозрачен и понятен. Зачем придумывать что-то, что заведомо усложняет разработку - не понятно.
Лирическое отступление. Между делом когда-то изменял типовые правила (дело вроде было в УНФ), чтобы после загрузки объекта выполнялись дополнительные манипуляции. Правила поправил загрузил, а результат - нулевой. Код ни в какую не выполнялся. Оказывается, какой-то гений 1С решил плюнуть на то, что в правилах прописано и в отдельной обработке переписать обработчики объектов после загрузки. Да ешё и страшные надписи вывел, что модули обработчиков изменять категорически запрещено! Хорошо, хоть расширения есть - решил задачу без снятия конфигурации с поддержки. К чему это все. Во времена УТ 10.3 механизм обмена и конвертации был прост, прозрачен и понятен. Зачем придумывать что-то, что заведомо усложняет разработку - не понятно.
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот