Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
20 фев 2025, 22:23

Кнопка пересчета табличной части с учетом скидки

Автор Port13ego, 21 янв 2025, 21:36

0 Пользователей и 1 гость просматривают эту тему.

Port13ego

Есть вот такая форма (Во вложении). Помогите реализовать работу кнопки пересчитать таблицу с учетом скидки. При изменении поля пользователю должен задаваться вопрос о необходимости пересчёта табличной части

alexandr_ll

Port13ego, Что не получается-то?
В конфигураторе в форме документа создаете команду "пересчитать" к ней в действии указываем процедуры на клиенте и на сервере. Команду выводим в диалог формы. В модуле описываем код пересчета с предварительным подтверждением.
Пишите, что вы сделали и что не получается.

Port13ego

alexandr_ll,


&НаКлиенте
&ИзменениеИКонтроль("РассчитатьСуммуСтроки")
Процедура ДКЛ_РассчитатьСуммуСтроки(ТекущиеДанные)
   
   #Удаление
   ТекущиеДанные.Сумма = ТекущиеДанные.Цена * ТекущиеДанные.Количество;
   #КонецУдаления
   
   #Вставка
   ТекущиеДанные.Сумма = ТекущиеДанные.Количество * (ТекущиеДанные.Цена - ТекущиеДанные.Цена * Объект.ДКЛ_СогласованнаяСкидка/100);      
   # КонецВставки
   РассчитатьСуммуДокумента();
   
КонецПроцедуры

&НаКлиенте
Процедура ДКЛ_ПересчитатьТаблицуПосле(Команда)
   
   Ответ = Вопрос("Вы хотите пересчитать сумму с учетом скидки?", РежимДиалогаВопрос.ДаНет);
   
   Если Ответ = КодВозвратаДиалога.Да Тогда
      
      ПересчитатьТаблицу();
      
   КонецЕсли;
   
КонецПроцедуры

&НаКлиенте
Процедура ПересчитатьТаблицу()
   
   Скидка = Объект.ДКЛ_СогласованнаяСкидка;
   
   Для каждого Строка Из Объект.Товары Цикл
      
      Цена = Строка.Цена;
      Количество = Строка.Количество;
      
      Объект.СуммаДокумента = Строка.Сумма - Строка.Сумма * Скидка/100;
      
      Строка.Сумма = Объект.СуммаДокумента;
      
   КонецЦикла;
   
КонецПроцедуры

Я реализовал так. Но мне надо еще сделать, чтобы при неизмененной скидки, не отрабатывала кнопка.

alexandr_ll

Port13ego, Ну так пересчитывайте не от суммы, а от цены, как в первой процедуре.

Port13ego

alexandr_ll, Не подскажешь, как реализовать, если скидка текущая установлена, при нажатии кнопки, не выскакивало уведомление ?

&НаКлиенте
Асинх Процедура ДКЛ_ПересчитатьТаблицуПосле(Команда, ТекущиеДанные)
   
   Если ЗначениеЗаполнено(Объект.Товары) = Ложь И ЗначениеЗаполнено(Объект.Услуги) = Ложь Тогда
      Возврат;
   Иначе
      Режим = РежимДиалогаВопрос.ДаНет;
      Ответ = Ждать ВопросАсинх(НСтр("ru = 'Вы хотите пересчитать сумму с учетом скидки?'"), Режим, 0);
      
      Если Ответ = КодВозвратаДиалога.Да Тогда
         ПересчитатьТаблицу();
      КонецЕсли;   
   КонецЕсли;
   
   Если Объект.ДКЛ_СогласованнаяСкидка = ?????  Тогда
      Возврат;
   КонецЕсли;
   
КонецПроцедуры

alexandr_ll

Port13ego, О каком уведомлении идет речь? Что означает последнее условие?

Port13ego


Теги:

Похожие темы (5)

Рейтинг@Mail.ru

Поиск