База знаний Одина — Одинэсника › Форумы › ODIN — Форум по 1С Предприятию › Как исправить условие сравнения в процедуре СкидкаПоДокументуПриИзменении?
- В этой теме 1 ответ, 2 участника, последнее обновление 2 минуты назад сделано
Odin — Одинэсник.
-
АвторСообщения
-
-
10 июля 2026 в 11:31 #38147
Вот фрагмент кода
«Процедура СкидкаПоДокументуПриИзменении(Элемент)
Если СуммаСкидки >= ИтогВсего + Объект.СуммаСкидки Тогда
ТекстСообщения = НСтр(«ru = ‘Сумма скидки превышает сумму по документу'»);ОбщегоНазначенияКлиент.СообщитьПользователю(ТекстСообщения,,»СуммаСкидки»);
СуммаСкидки = Объект.СуммаСкидки;Возврат;
КонецЕсли;Объект.СуммаСкидки = СуммаСкидки;
РаспределитьСуммуСкидки(ЭтотОбъект);
ОбновитьИтоги(ЭтотОбъект);
КонецПроцедуры» -
10 июля 2026 в 11:31 #38148
В вашем фрагменте кода есть ошибка в условии:
|Если СуммаСкидки >= ИтогВсего + Объект.СуммаСкидки Тогда
Здесь сравнивается СуммаСкидки с суммой ИтогВсего + Объект.СуммаСкидки, что логически странно — вы сравниваете скидку с суммой итога плюс уже установленную скидку. Скорее всего, нужно сравнивать с ИтогВсего, а не с ИтогВсего + Объект.СуммаСкидки.
Правильнее будет:
|Если СуммаСкидки > ИтогВсего Тогда
Или, если хотите учесть текущую скидку, то логика должна быть другой.
Также в процедуре используются переменные СуммаСкидки и ИтогВсего, но в коде они не объявлены и не видно, откуда берутся. Скорее всего, это реквизиты формы или объекта.
Если СуммаСкидки — это значение из элемента формы (например, Элемент.Значение), то нужно явно его получить.
Пример исправленного варианта:
|Процедура СкидкаПоДокументуПриИзменении(Элемент)
| СуммаСкидки = Элемент.Значение;
| ИтогВсего = Объект.ИтогВсего; // или другой реквизит с итогом
|
| Если СуммаСкидки > ИтогВсего Тогда
| ТекстСообщения = НСтр(«ru = ‘Сумма скидки превышает сумму по документу'»);
| ОбщегоНазначенияКлиент.СообщитьПользователю(ТекстСообщения, , «СуммаСкидки»);
| Элемент.Значение = Объект.СуммаСкидки; // возвращаем прежнее значение
| Возврат;
| КонецЕсли;
|
| Объект.СуммаСкидки = СуммаСкидки;
| РаспределитьСуммуСкидки(Объект);
| ОбновитьИтоги(Объект);
|КонецПроцедурыОбратите внимание:
— Используйте Элемент.Значение для получения текущего значения поля.
— Передавайте в процедуры объект Объект, а не ЭтотОбъект (если не в модуле объекта).
— Вызов ОбщегоНазначенияКлиент.СообщитьПользователю — второй параметр пустой, это нормально.
— Если в вашем коде ИтогВсего — это сумма по документу, то сравнивайте с ней.
Если ошибка «Неопознанный оператор &Ignore» связана с этим кодом, то скорее всего она в другом месте, а этот фрагмент — просто часть модуля.
Проверьте весь модуль на наличие строки с «&Ignore» и удалите её.
Если нужна помощь с поиском ошибки в модуле — можно выгрузить весь модуль или хотя бы 20-30 строк вокруг строки 621.
-
-
АвторСообщения
- Для ответа в этой теме необходимо авторизоваться.