Предварительный расчет бонусов в УНФ
У клиента перестала работать кнопка «Предварительный расчет бонусов»:

Выдает ошибку:
Ошибка при установке значения атрибута контекста (БезналичнаяОплата)
{Документ.ЧекККМ.Форма.ФормаДокумента.Форма(2796)}: Если ЕстьОплатаБонусами(Объект.БезналичнаяОплата) Тогда
{Документ.ЧекККМ.Форма.ФормаДокумента.Форма(2765)}: РассчитатьБонусыНаКлиенте();
по причине:
Нельзя изменять поле, содержащее объект данных формы
Из РМК начисление бонусов работает, но мне-то нужно было проверять в форме чека, там был вопрос по начислению бонусов.
Цепочка вызовов простая:



Проблема в типовом коде. Они настолько увлечены оптимизацией, что пытаются передать данные формы в клиент-серверный модуль. Видимо, не тестировалось.
Сначала хотел заменить так, но 1с плохо переваривает экранирование части составного оператора:
Если РеквизитыБП.НеНачислятьПриОплатеБонусами Тогда #Удаление //Осипов - делаю вызов корретным Если ЕстьОплатаБонусами(Объект.БезналичнаяОплата) Тогда #КонецУдаления #Вставка Если дор_ЕстьОплатаБонусамиНаСервере() Тогда #КонецВставки Если Не Объект.БонусныеБаллыКНачислению.Количество() = 0 Тогда Объект.БонусныеБаллыКНачислению.Очистить(); КонецЕсли; Возврат; КонецЕсли; КонецЕсли;
Пришлось копировать-вставлять:
#Удаление Если РеквизитыБП.НеНачислятьПриОплатеБонусами Тогда Если ЕстьОплатаБонусами(Объект.БезналичнаяОплата) Тогда Если Не Объект.БонусныеБаллыКНачислению.Количество() = 0 Тогда Объект.БонусныеБаллыКНачислению.Очистить(); КонецЕсли; Возврат; КонецЕсли; КонецЕсли; #КонецУдаления #Вставка Если РеквизитыБП.НеНачислятьПриОплатеБонусами Тогда Если дор_ЕстьОплатаБонусамиНаСервере() Тогда Если Не Объект.БонусныеБаллыКНачислению.Количество() = 0 Тогда Объект.БонусныеБаллыКНачислению.Очистить(); КонецЕсли; Возврат; КонецЕсли; КонецЕсли;
После этого заработало.
Среда: УНФ 3.0.13.374. Объем: 0.5 час




«но 1с плохо переваривает экранирование части составного оператора»
Может всё-таки почитать документацию, а не гнать на 1с?
если у вас есть что возразить, пишите целиком. Конечно же, я не побегу читать документацию, пытаясь понять, что вы хотели сказать.
зачем было копировать типовой серверный метод целиком, если проблема, судя по описанию, только в том, что в него не передаётся табличная часть составного оператора?
там проблема с передачей по значению. обходной маневр как раз убирает эту проблему.
А что непонятного-то? Ты не умеешь пользоваться директивой #Удаление…#КонецУдаления
Придумал попутно неправильное объяснение своим действиям
я не умею делать все, но быстро учусь.
я лишь намекнул на то, что 1с криво реализовала директиву — как оператор, а не как Inline-директиву.
Она реализуется нормально. Сам всё испортил. Ибо не понимаешь как работает
Покажи для полноты картины метод дор_ЕстьОплатаБонусамиНаСервере
он полностью копирует типовой, только туда не передается табличная часть.
Именно непередача табличной части и есть ключевое отличие, поэтому фраза «полностью копирует типовой» скорее подтверждает замечание, чем снимает его.
можно было бы передавать и по значению, но смысл? Я не любитель экономить на спичках
зато передается контекст целиком.
А надо было добавить Знач
Так передачу по ссылке между клиентом и сервером и не освоил
повторюсь — на спичках не экономлю.
Ну задним числом все умные. Так-то ты не знал и поэтому сделал максимально глупо — копипасту
знал и сделал, как мне проще.
Более того, я попробовал добавить функцию вместо со Знач, но 1с не переварила такую замену.
«знал и сделал, как мне проще.
Более того, я попробовал добавить функцию вместо со Знач, но 1с не переварила такую замену.»
Ну не смог, так не смог
я не бьюсь в закрытую стену, а обхожу ее ловким маневром.
Красиво сказано, жаль, что в оправдание собственного невежества
вы путаете невежество и эрудицию. Эрудиция в нашем деле лишнее, ненужное, пустой расход энергии.
Забавно объявлять эрудицию пустым расходом энергии сразу после того, как незнание механизма пришлось переименовывать в «ловкий манёвр»
у каждого свои забавы. но я тут занимаюсь работой, забавляться некогда