Перенести данные в ячейку "Скидка" табличной части "Расходная накладная"
Здравствуйте! Хочу подкорректировать программу, чтобы процент скидки появлялся в ячейке "Скидки" (В настоящий момент данный процент появляется в пользовательском режиме 1С с помощью "Сообщить").
Проверила работоспособность программы. Она полностью рабочая. Выводит данные, согласно моему заданию, только нужно процент внести в ячейку, а не выводить сообщением. Код программы находится ниже.
В файле визуально показана работа конфигурации в пользовательском режиме на данный момент.
&НаСервере
Функция ПродажаТоваровСуммаПриИзмененииНаСервере(Покупатель,Дата)
ПроцСкидки = 0;
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ
| ПродажиОбороты.Покупатель КАК Покупатель,
| ПродажиОбороты.СуммаПродажиОборот КАК СуммаПродажиОборот
|ИЗ
| РегистрНакопления.Продажи.Обороты(&НачДата, &КонДата, Месяц, Покупатель = &Покупатель) КАК ПродажиОбороты";
Запрос.УстановитьПараметр("НачДата",ДобавитьМесяц(НачалоМесяца(Дата),-1));
Запрос.УстановитьПараметр("КонДата",ДобавитьМесяц(КонецМесяца(Дата),-1));
Запрос.УстановитьПараметр("Покупатель",Покупатель);
Результат = Запрос.Выполнить();
Выборка = Результат.Выбрать();
//СтрокаТабличнойЧасти = Элементы.ПродажаТоваров.ТекущиеДанные;
Пока Выборка.Следующий() Цикл
Если Выборка.СуммаПродажиОборот>=1000 и Выборка.СуммаПродажиОборот<3000 Тогда
Сообщить("2%");
ПроцСкидки = 2;
ИначеЕсли Выборка.СуммаПродажиОборот>=3000 и Выборка.СуммаПродажиОборот<5000 Тогда
Сообщить("5%");
ПроцСкидки = 5;
ИначеЕсли Выборка.СуммаПродажиОборот>=5000 и Выборка.СуммаПродажиОборот<10000 Тогда
Сообщить("10%");
ПроцСкидки = 10;
Иначе
Сообщить("15%");
ПроцСкидки = 15;
КонецЕсли;
КонецЦикла;
Возврат ПроцСкидки;
КонецФункции
&НаКлиенте
Процедура ПродажаТоваровСуммаПриИзменении(Элемент)
ПродажаТоваровСуммаПриИзмененииНаСервере(Объект.Покупатель,Объект.Дата);
КонецПроцедуры
Проверила работоспособность программы. Она полностью рабочая. Выводит данные, согласно моему заданию, только нужно процент внести в ячейку, а не выводить сообщением. Код программы находится ниже.
В файле визуально показана работа конфигурации в пользовательском режиме на данный момент.
&НаСервере
Функция ПродажаТоваровСуммаПриИзмененииНаСервере(Покупатель,Дата)
ПроцСкидки = 0;
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ
| ПродажиОбороты.Покупатель КАК Покупатель,
| ПродажиОбороты.СуммаПродажиОборот КАК СуммаПродажиОборот
|ИЗ
| РегистрНакопления.Продажи.Обороты(&НачДата, &КонДата, Месяц, Покупатель = &Покупатель) КАК ПродажиОбороты";
Запрос.УстановитьПараметр("НачДата",ДобавитьМесяц(НачалоМесяца(Дата),-1));
Запрос.УстановитьПараметр("КонДата",ДобавитьМесяц(КонецМесяца(Дата),-1));
Запрос.УстановитьПараметр("Покупатель",Покупатель);
Результат = Запрос.Выполнить();
Выборка = Результат.Выбрать();
//СтрокаТабличнойЧасти = Элементы.ПродажаТоваров.ТекущиеДанные;
Пока Выборка.Следующий() Цикл
Если Выборка.СуммаПродажиОборот>=1000 и Выборка.СуммаПродажиОборот<3000 Тогда
Сообщить("2%");
ПроцСкидки = 2;
ИначеЕсли Выборка.СуммаПродажиОборот>=3000 и Выборка.СуммаПродажиОборот<5000 Тогда
Сообщить("5%");
ПроцСкидки = 5;
ИначеЕсли Выборка.СуммаПродажиОборот>=5000 и Выборка.СуммаПродажиОборот<10000 Тогда
Сообщить("10%");
ПроцСкидки = 10;
Иначе
Сообщить("15%");
ПроцСкидки = 15;
КонецЕсли;
КонецЦикла;
Возврат ПроцСкидки;
КонецФункции
&НаКлиенте
Процедура ПродажаТоваровСуммаПриИзменении(Элемент)
ПродажаТоваровСуммаПриИзмененииНаСервере(Объект.Покупатель,Объект.Дата);
КонецПроцедуры
Прикрепленные файлы:

Ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
(2)
Внедрила ваш код следующим образом:
Пока Выборка.Следующий() Цикл
Если Выборка.СуммаПродажиОборот>=1000 и Выборка.СуммаПродажиОборот<3000 Тогда
СтрокаТабличнойЧасти = Элементы.ПродажаТоваров.ТекущиеДанные;
ПроцСкидки = 2;
СтрокаТабличнойЧасти.Скидка = ПроцСкидки;
ИначеЕсли Выборка.СуммаПродажиОборот>=3000 и Выборка.СуммаПродажиОборот<5000 Тогда
СтрокаТабличнойЧасти = Элементы.ПродажаТоваров.ТекущиеДанные;
ПроцСкидки = 5;
СтрокаТабличнойЧасти.Скидка = ПроцСкидки;
ИначеЕсли Выборка.СуммаПродажиОборот>=5000 и Выборка.СуммаПродажиОборот<10000 Тогда
СтрокаТабличнойЧасти = Элементы.ПродажаТоваров.ТекущиеДанные;
ПроцСкидки = 10;
СтрокаТабличнойЧасти.Скидка = ПроцСкидки;
Иначе
СтрокаТабличнойЧасти = Элементы.ПродажаТоваров.ТекущиеДанные;
ПроцСкидки = 15;
СтрокаТабличнойЧасти.Скидка = ПроцСкидки;
КонецЕсли;
КонецЦикла;
Выдает ошибку "текущие данные таблицы недоступны на сервере", так как функция имеет "&НаСервере".
СтрокаТабличнойЧасти = Элементы.ПродажаТоваров.ТекущиеДанные;
СтрокаТабличнойЧасти.Скидка = ПроцСкидки;
СтрокаТабличнойЧасти.Скидка = ПроцСкидки;
Внедрила ваш код следующим образом:
Пока Выборка.Следующий() Цикл
Если Выборка.СуммаПродажиОборот>=1000 и Выборка.СуммаПродажиОборот<3000 Тогда
СтрокаТабличнойЧасти = Элементы.ПродажаТоваров.ТекущиеДанные;
ПроцСкидки = 2;
СтрокаТабличнойЧасти.Скидка = ПроцСкидки;
ИначеЕсли Выборка.СуммаПродажиОборот>=3000 и Выборка.СуммаПродажиОборот<5000 Тогда
СтрокаТабличнойЧасти = Элементы.ПродажаТоваров.ТекущиеДанные;
ПроцСкидки = 5;
СтрокаТабличнойЧасти.Скидка = ПроцСкидки;
ИначеЕсли Выборка.СуммаПродажиОборот>=5000 и Выборка.СуммаПродажиОборот<10000 Тогда
СтрокаТабличнойЧасти = Элементы.ПродажаТоваров.ТекущиеДанные;
ПроцСкидки = 10;
СтрокаТабличнойЧасти.Скидка = ПроцСкидки;
Иначе
СтрокаТабличнойЧасти = Элементы.ПродажаТоваров.ТекущиеДанные;
ПроцСкидки = 15;
СтрокаТабличнойЧасти.Скидка = ПроцСкидки;
КонецЕсли;
КонецЦикла;
Выдает ошибку "текущие данные таблицы недоступны на сервере", так как функция имеет "&НаСервере".
(3) вы вызываете функцию как процедуру..
Функция должна просто вам с сервера вернуть на клиента число со скидкой..
а в клиентской процедуре вы уже это значение присваивайте своим элементам.
Архитектурно это должно примерно так выглядеть
и сообщать по хорошему надо на клиенте, а не в функции расчета скидки
Функция должна просто вам с сервера вернуть на клиента число со скидкой..
а в клиентской процедуре вы уже это значение присваивайте своим элементам.
Архитектурно это должно примерно так выглядеть
&НаКлиенте
Процедура СобытиеПриИзменении()
Скидка = ПолучитьСкидкуКлиента(Объект.Покупатель,Объект.Дата);
//далее присваиваем значение из переменной скидка вашим реквизитам формы.
//по идее должен вообще пересчет срабатывать строк
Сообщить(Скидка); //Сообщаем тоже тут
КонецПроцедуры
&НаСервереБезКонтекста
Функция ПолучитьСкидкуКлиента(Клиент,Период)
//ваши алгоритмы, запроса, которые определят скидку на дату по клиенту
ПолученнаяСкидка = РезультатАлгоритма;
Возврат ПолученнаяСкидка; //возвращаем это число
КонецФункции
Показатьи сообщать по хорошему надо на клиенте, а не в функции расчета скидки
(5)
Лехко:
вы вызываете функцию как процедуру..
Лехко:
&НаКлиенте
Процедура СобытиеПриИзменении()
Скидка = 0
ПолучитьСкидкуКлиента(Объект.Покупатель,Объект.Дата, Скидка);
//далее присваиваем значение из переменной скидка вашим реквизитам формы.
//по идее должен вообще пересчет срабатывать строк
Сообщить(Скидка); //Сообщаем тоже тут
КонецПроцедуры
&НаСервереБезКонтекста
Процедура ПолучитьСкидкуКлиента(Клиент,Период, Скидка = 0)
//ваши алгоритмы, запроса, которые определят скидку на дату по клиенту
Скидка = РезультатАлгоритма;
КонецПроцедуры
Показать
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот