База знаний Одина — Одинэсника › Форумы › ODIN — Форум по 1С Предприятию › Как очистить ручные скидки при записи заказа в УНФ?
- В этой теме 1 ответ, 2 участника, последнее обновление 3 часа, 7 минут назад сделано
Odin — Одинэсник.
-
АвторСообщения
-
-
22 апреля 2026 в 11:39 #36749
у меня есть задача в УНФ, надо перед записью заказа чистить ручные скидки в заказе. Мне надо в конфигураторе написать, который проверяет есть ли заказ в регистре сведений ЗаказыТорговыхПлощадок и если есть мы чистим ручные скидки в заказе
-
22 апреля 2026 в 11:39 #36750
В 1С:УНФ для решения вашей задачи нужно доработать обработку записи документа «Заказ покупателя» (или другого документа заказа), чтобы перед записью проверять наличие записи в регистре сведений «ЗаказыТорговыхПлощадок» и при наличии — очищать ручные скидки.
Примерный алгоритм и код для конфигуратора:
1. В модуле объекта документа «Заказ покупателя» (или нужного документа заказа) переопределите процедуру ПередЗаписью(Отказ).
2. В этой процедуре сделайте запрос к регистру сведений «ЗаказыТорговыхПлощадок» с отбором по текущему заказу (например, по ссылке на документ).
3. Если запись найдена — очистите ручные скидки в табличной части заказа.
4. Продолжите запись.
Пример кода (в модуле объекта документа «Заказ покупателя»):
1С (Код)12345678910111213141516171819202122232425262728Процедура ПередЗаписью(Отказ)// Проверяем, есть ли заказ в регистре сведений ЗаказыТорговыхПлощадокЗапрос = Новый Запрос;Запрос.Текст =|ВЫБРАТЬ| ЗаказыТорговыхПлощадок.Ссылка|ИЗ| РегистрСведений.ЗаказыТорговыхПлощадок КАК ЗаказыТорговыхПлощадок|ГДЕ| ЗаказыТорговыхПлощадок.Ссылка = &ТекущийЗаказ";Запрос.УстановитьПараметр("ТекущийЗаказ", ЭтотОбъект.Ссылка);Результат = Запрос.Выполнить();Если Результат.Пустой() = Ложь Тогда// Заказ найден в регистре, очищаем ручные скидкиДля Каждого Строка Из ЭтотОбъект.Товары Цикл// Предположим, что поле ручной скидки называется "РучнаяСкидка" или аналогичноЕсли ЭтотОбъект.Товары.Колонки.Найти("РучнаяСкидка") <> Неопределено ТогдаСтрока.РучнаяСкидка = 0;Иначе// Если поле называется иначе, замените на нужноеКонецЕсли;КонецЦикла;КонецЕсли;КонецПроцедурыОбратите внимание:
— Название табличной части и поля ручной скидки уточните в вашей конфигурации (например, «Товары», «РучнаяСкидка» или «СкидкаРучная»).
— Если скидки хранятся в другом месте, очистите соответствующие реквизиты.
— Если заказ — не документ, а справочник или другой объект, адаптируйте код.
— Если регистр сведений «ЗаказыТорговыхПлощадок» хранит ссылку на заказ в другом поле, замените условие запроса.
— Если скидки нужно очистить не только в табличной части, а и в других местах, добавьте соответствующий код.
Рекомендую проверить работу на тестовой базе, чтобы не потерять данные.
Если нужно, могу помочь с точным кодом по вашей конфигурации, пришлите структуру заказа и названия полей скидок.
-
-
АвторСообщения
- Для ответа в этой теме необходимо авторизоваться.