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

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

Выдает ошибку:

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

Из РМК начисление бонусов работает, но мне-то нужно было проверять в форме чека, там был вопрос по начислению бонусов.

Цепочка вызовов простая:

Проблема в типовом коде. Они настолько увлечены оптимизацией, что пытаются передать данные формы в клиент-серверный модуль. Видимо, не тестировалось.

Сначала хотел заменить так, но 1с плохо переваривает экранирование части составного оператора:

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

Пришлось копировать-вставлять:

#Удаление
	Если РеквизитыБП.НеНачислятьПриОплатеБонусами Тогда
		Если ЕстьОплатаБонусами(Объект.БезналичнаяОплата) Тогда
			Если Не Объект.БонусныеБаллыКНачислению.Количество() = 0 Тогда
				Объект.БонусныеБаллыКНачислению.Очистить();				
			КонецЕсли;
			Возврат;
		КонецЕсли;
	КонецЕсли;
#КонецУдаления 
#Вставка
	Если РеквизитыБП.НеНачислятьПриОплатеБонусами Тогда
		Если дор_ЕстьОплатаБонусамиНаСервере() Тогда
			Если Не Объект.БонусныеБаллыКНачислению.Количество() = 0 Тогда
				Объект.БонусныеБаллыКНачислению.Очистить();				
			КонецЕсли;
			Возврат;
		КонецЕсли;
	КонецЕсли;

После этого заработало.

Среда: УНФ 3.0.13.374. Объем: 0.5 час

image_pdfimage_print

fixin

Программирую на 1С с 1999 года. В 1С просто Гений. В 2020 году ушел из офиса на вольные хлеба фриланса. Принимаю заказы.

Вам может также понравиться...

комментарий 21

  1. rzd:

    «но 1с плохо переваривает экранирование части составного оператора»
    Может всё-таки почитать документацию, а не гнать на 1с?

    • если у вас есть что возразить, пишите целиком. Конечно же, я не побегу читать документацию, пытаясь понять, что вы хотели сказать.

      • Виталий:

        зачем было копировать типовой серверный метод целиком, если проблема, судя по описанию, только в том, что в него не передаётся табличная часть составного оператора?

      • rzd:

        А что непонятного-то? Ты не умеешь пользоваться директивой #Удаление…#КонецУдаления
        Придумал попутно неправильное объяснение своим действиям

        • я не умею делать все, но быстро учусь.
          я лишь намекнул на то, что 1с криво реализовала директиву — как оператор, а не как Inline-директиву.

          • rzd:

            Она реализуется нормально. Сам всё испортил. Ибо не понимаешь как работает

  2. rzd:

    Покажи для полноты картины метод дор_ЕстьОплатаБонусамиНаСервере

    • он полностью копирует типовой, только туда не передается табличная часть.

      • Виталий:

        Именно непередача табличной части и есть ключевое отличие, поэтому фраза «полностью копирует типовой» скорее подтверждает замечание, чем снимает его.

      • rzd:

        зато передается контекст целиком.
        А надо было добавить Знач
        Так передачу по ссылке между клиентом и сервером и не освоил

        • повторюсь — на спичках не экономлю.

          • rzd:

            Ну задним числом все умные. Так-то ты не знал и поэтому сделал максимально глупо — копипасту

          • знал и сделал, как мне проще.
            Более того, я попробовал добавить функцию вместо со Знач, но 1с не переварила такую замену.

  3. rzd:

    «знал и сделал, как мне проще.
    Более того, я попробовал добавить функцию вместо со Знач, но 1с не переварила такую замену.»

    Ну не смог, так не смог

    • я не бьюсь в закрытую стену, а обхожу ее ловким маневром.

      • rzd:

        Красиво сказано, жаль, что в оправдание собственного невежества

        • вы путаете невежество и эрудицию. Эрудиция в нашем деле лишнее, ненужное, пустой расход энергии.

          • Виталий:

            Забавно объявлять эрудицию пустым расходом энергии сразу после того, как незнание механизма пришлось переименовывать в «ловкий манёвр»

          • у каждого свои забавы. но я тут занимаюсь работой, забавляться некогда

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *