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

Распределение скидки по чеку

Автор Алекс Витальевич, 22 мая 2017, 14:10

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

Алекс Витальевич

Доброго времени суток всем! Помогите пожалуйста с реализацией алгоритма распределения скидки. На бумажке то все написано, не хватает мозгов реализовать программно...
На входе:
•Структура чека: номер позиции, код товара, количество товара, стоимость товара;
•Сумма скидки списания бонусов r1, которую нужно распределить по позициям чека;
•Максимальная скидка по позициям чека в кассе x1...xn;
На выходе:
•Распределение скидки по позициям чека - z1...zn;

Описание алгоритма:
1.В x1...xn заполняется суммами из входных данных;
2.Выполняется вычисление значений z1...zn, как показано в таблице ниже:
http://s019.radikal.ru/i617/1705/ed/746f51d276fc.jpg

Пытался что-то сделать, но ничего не получается..
Перем СПАСИБО;
Док    = СоздатьОбъект("Документ");
ТЗ.НоваяКолонка("ФлВкл1","Число",1,0,"ФлВкл1",2,,1);
ТЗ.НоваяКолонка("Номенклатура","Строка",20,,"Номенклатура");
ТЗ.НоваяКолонка("МаксСкидка","Число",8,2,"МаксСкидка");
ТЗ.НоваяКолонка("СкидкаОст","Число",8,2,"СкидкаОст");
ТЗ.НоваяКолонка("МаксСкидкаОст","Число",8,2,"МаксСкидкаОст");
ТЗ.ВыводитьПиктограммы("ФлВкл1",2);
ОбщСкидка=ВвестиЧисло(СПАСИБО,"Введите количество списываемых бонусов",5,2,0);
Если Док.НайтиДокумент(ДокТек) = 1 Тогда 
Док.ВыбратьСтроки();
Пока Док.ПолучитьСтроку() =1 Цикл
ТЗ.НоваяСтрока();
ТЗ.Номенклатура = Док.Номенклатура.Наименование;   
ТЗ.МаксСкидка  = Док.Сумма;
КонецЦикла;       
КонецЕсли;

Ост=0;
Остаток=ТЗ.Итог("МаксСкидка");
Для стр=1 по ТЗ.КоличествоСтрок() цикл
Если стр=1 тогда
ТЗ.УстановитьЗначение(стр,"СкидкаОст",Остаток);
иначе
Ост=Ост+ТЗ.ПолучитьЗначение(стр,"МаксСкидка");
Остаток=ТЗ.Итог("МаксСкидка")-ТЗ.ПолучитьЗначение(стр-1,"МаксСкидка");//ТЗ.ПолучитьЗначение(стр,"МаксСкидка");
ТЗ.УстановитьЗначение(стр,"СкидкаОст",Остаток);//ТЗ.Итог("МаксСкидка")-Остаток);
КонецЕсли;
КонецЦикла;


помогите пожалуйста, уже всю голову сломал(((

wise

(0)
Цитата: Алекс Витальевич от 22 мая 2017, 14:10ОбщСкидка=ВвестиЧисло(СПАСИБО,"Введите количество списываемых бонусов",5,2,0);

а ГДЕ это используется ??
Представьте себе, какая была бы тишина, если бы люди говорили только то, что знают

Алекс Витальевич

Цитата: wise от 22 мая 2017, 14:57
(0)
Цитата: Алекс Витальевич от 22 мая 2017, 14:10ОбщСкидка=ВвестиЧисло(СПАСИБО,"Введите количество списываемых бонусов",5,2,0);

а ГДЕ это используется ??
это сумма введенной скидки, с нее все и начинается...

Функция ЗагрузитьЧек()                 
Перем СПАСИБО;
Док    = СоздатьОбъект("Документ");
ТЗ.НоваяКолонка("ФлВкл1","Число",1,0,"ФлВкл1",2,,1);
ТЗ.НоваяКолонка("Номенклатура","Строка",20,,"Номенклатура");
ТЗ.НоваяКолонка("МаксСкидка","Число",8,2,"МаксСкидка");
ТЗ.НоваяКолонка("СкидкаОст","Число",8,2,"СкидкаОст");
ТЗ.НоваяКолонка("МаксСкидкаОст","Число",8,2,"МаксСкидкаОст");
ТЗ.НоваяКолонка("Скидка","Число",8,2,"Скидка");
ТЗ.ВыводитьПиктограммы("ФлВкл1",2);
ОбщСкидка=ВвестиЧисло(СПАСИБО,"Введите количество списываемых бонусов",5,2,0);
Если Док.НайтиДокумент(ДокТек) = 1 Тогда 
Док.ВыбратьСтроки();
Пока Док.ПолучитьСтроку() =1 Цикл
ТЗ.НоваяСтрока();
ТЗ.Номенклатура = Док.Номенклатура.Наименование;   
ТЗ.МаксСкидка  = Док.Сумма;
КонецЦикла;       
КонецЕсли;


Остаток=ТЗ.Итог("МаксСкидка");
СуммаСтрок=0;
ТЗ.ВыбратьСтроки();
Пока ТЗ.ПолучитьСтроку()=1 цикл
МаксСкидкаОст=Остаток-СуммаСтрок;
СуммаСтрок=СуммаСтрок+ТЗ.МаксСкидка;
ТЗ.МаксСкидкаОст=МаксСкидкаОст;
ТЗ.Скидка=(Спасибо*ТЗ.МаксСкидка)/ТЗ.МаксСкидкаОст;
ТЗ.СкидкаОст=Спасибо;
Спасибо=Спасибо-ТЗ.Скидка;
КонецЦикла;

КонецФункции
вроде бы все верно,или я что-то путаю?

Теги:
Рейтинг@Mail.ru Rambler's Top100

Поиск