Перенести данные в ячейку "Скидка" табличной части "Расходная накладная"

1. user2059325 17.03.24 18:49 Сейчас в теме
Здравствуйте! Хочу подкорректировать программу, чтобы процент скидки появлялся в ячейке "Скидки" (В настоящий момент данный процент появляется в пользовательском режиме 1С с помощью "Сообщить").

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


В файле визуально показана работа конфигурации в пользовательском режиме на данный момент.



&НаСервере
Функция ПродажаТоваровСуммаПриИзмененииНаСервере(Покупатель,Дата)

ПроцСкидки = 0;

Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ
| ПродажиОбороты.Покупатель КАК Покупатель,
| ПродажиОбороты.СуммаПродажиОборот КАК СуммаПродажиОборот
|ИЗ
| РегистрНакопления.Продажи.Обороты(&НачДата, &КонДата, Месяц, Покупатель = &Покупатель) КАК ПродажиОбороты";

Запрос.УстановитьПараметр("НачДата",ДобавитьМесяц(НачалоМесяца(Дата),-1));
Запрос.УстановитьПараметр("КонДата",ДобавитьМесяц(КонецМесяца(Дата),-1));
Запрос.УстановитьПараметр("Покупатель",Покупатель);

Результат = Запрос.Выполнить();
Выборка = Результат.Выбрать();

//СтрокаТабличнойЧасти = Элементы.ПродажаТоваров.ТекущиеДанные;

Пока Выборка.Следующий() Цикл
Если Выборка.СуммаПродажиОборот>=1000 и Выборка.СуммаПродажиОборот<3000 Тогда
Сообщить("2%");
ПроцСкидки = 2;
ИначеЕсли Выборка.СуммаПродажиОборот>=3000 и Выборка.СуммаПродажиОборот<5000 Тогда
Сообщить("5%");
ПроцСкидки = 5;
ИначеЕсли Выборка.СуммаПродажиОборот>=5000 и Выборка.СуммаПродажиОборот<10000 Тогда
Сообщить("10%");
ПроцСкидки = 10;
Иначе
Сообщить("15%");
ПроцСкидки = 15;
КонецЕсли;
КонецЦикла;
Возврат ПроцСкидки;
КонецФункции


&НаКлиенте
Процедура ПродажаТоваровСуммаПриИзменении(Элемент)
ПродажаТоваровСуммаПриИзмененииНаСервере(Объект.Покупатель,Объект.Дата);
КонецПроцедуры
Прикрепленные файлы:
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. user1880116 17.03.24 20:05 Сейчас в теме
СтрокаТабличнойЧасти = Элементы.ПродажаТоваров.ТекущиеДанные;
СтрокаТабличнойЧасти.Скидка = ПроцСкидки;
3. user2059325 17.03.24 20:19 Сейчас в теме
(2)
СтрокаТабличнойЧасти = Элементы.ПродажаТоваров.ТекущиеДанные;
СтрокаТабличнойЧасти.Скидка = ПроцСкидки;


Внедрила ваш код следующим образом:

Пока Выборка.Следующий() Цикл
Если Выборка.СуммаПродажиОборот>=1000 и Выборка.СуммаПродажиОборот<3000 Тогда
СтрокаТабличнойЧасти = Элементы.ПродажаТоваров.ТекущиеДанные;
ПроцСкидки = 2;
СтрокаТабличнойЧасти.Скидка = ПроцСкидки;
ИначеЕсли Выборка.СуммаПродажиОборот>=3000 и Выборка.СуммаПродажиОборот<5000 Тогда
СтрокаТабличнойЧасти = Элементы.ПродажаТоваров.ТекущиеДанные;
ПроцСкидки = 5;
СтрокаТабличнойЧасти.Скидка = ПроцСкидки;
ИначеЕсли Выборка.СуммаПродажиОборот>=5000 и Выборка.СуммаПродажиОборот<10000 Тогда
СтрокаТабличнойЧасти = Элементы.ПродажаТоваров.ТекущиеДанные;
ПроцСкидки = 10;
СтрокаТабличнойЧасти.Скидка = ПроцСкидки;
Иначе
СтрокаТабличнойЧасти = Элементы.ПродажаТоваров.ТекущиеДанные;
ПроцСкидки = 15;
СтрокаТабличнойЧасти.Скидка = ПроцСкидки;
КонецЕсли;
КонецЦикла;



Выдает ошибку "текущие данные таблицы недоступны на сервере", так как функция имеет "&НаСервере".
4. user1880116 18.03.24 08:52 Сейчас в теме
(3)
недоступны на сервере
И что ты теперь планируешь сделать?
5. Boneman 302 18.03.24 17:34 Сейчас в теме
(3) вы вызываете функцию как процедуру..
Функция должна просто вам с сервера вернуть на клиента число со скидкой..
а в клиентской процедуре вы уже это значение присваивайте своим элементам.
Архитектурно это должно примерно так выглядеть

&НаКлиенте
Процедура СобытиеПриИзменении()
      Скидка = ПолучитьСкидкуКлиента(Объект.Покупатель,Объект.Дата);
      //далее присваиваем значение из переменной скидка вашим реквизитам формы.
      //по идее должен вообще пересчет срабатывать строк
      Сообщить(Скидка); //Сообщаем тоже тут
КонецПроцедуры

&НаСервереБезКонтекста
Функция ПолучитьСкидкуКлиента(Клиент,Период)
//ваши алгоритмы, запроса, которые определят скидку на дату по клиенту
ПолученнаяСкидка = РезультатАлгоритма; 

Возврат ПолученнаяСкидка; //возвращаем это число
КонецФункции
Показать

и сообщать по хорошему надо на клиенте, а не в функции расчета скидки
6. nomad_irk 81 19.03.24 08:26 Сейчас в теме
(5)
вы вызываете функцию как процедуру..

Лехко:

&НаКлиенте
Процедура СобытиеПриИзменении()
      Скидка = 0
      ПолучитьСкидкуКлиента(Объект.Покупатель,Объект.Дата, Скидка);
      //далее присваиваем значение из переменной скидка вашим реквизитам формы.
      //по идее должен вообще пересчет срабатывать строк
      Сообщить(Скидка); //Сообщаем тоже тут
КонецПроцедуры

&НаСервереБезКонтекста
Процедура ПолучитьСкидкуКлиента(Клиент,Период, Скидка = 0)
       //ваши алгоритмы, запроса, которые определят скидку на дату по клиенту
       Скидка = РезультатАлгоритма; 
КонецПроцедуры
Показать
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот