![]() |
|
v7: Расчет скидок + Маркеры | ☑ | ||
---|---|---|---|---|
0
Mafiozaa
28.10.20
✎
08:38
|
Приветствую, в документе ЧекиККМ, при расчете скидок, теряются коды маркировок. Полез в код а там глаза разбегаются и понять ничего не могу, понимаю что там выгружается какое то ТЗ, прошу знатоков о помощи)
Процедура РасчетСкидокПоАкциям() Перем ТЗ; //Если ФС.СуществуетФайл(КаталогИБ()+"ExtForms\ЧекККМ_РасчетСкидокПоАкциям.ert")=1 Тогда // ОткрытьФорму("Отчет",Контекст,КаталогИБ()+"ExtForms\ЧекККМ_РасчетСкидокПоАкциям.ert"); // Возврат; //КонецЕсли; Если ВидОперации=Перечисление.ВидыОперацийЧекККМ.ЧекНаВозврат Тогда ////nuzhno dlya korrektnogo TESTA po vozvratu SBASIBO // ТЗС=СоздатьОбъект("ТаблицаЗначений"); // СпрНовНоменклатураБезСкидок = СоздатьОбъект("Справочник.НовНоменклатураБезСкидок"); // ВыгрузитьТабличнуюЧасть(ТЗС); // Сп=ТЗС.Итог("СкидкаСпасибо"); // Если ПустоеЗначение(Сп)=0 тогда // ТЗС.ВыбратьСтроки(); // Пока ТЗС.ПолучитьСтроку()=1 цикл // ТЗС.Сумма=ТЗС.Сумма-ТЗС.СкидкаСпасибо; // КонецЦикла; // КонецЕсли; // // ТЗС.ВыбратьСтроки(); // Пока ТЗС.ПолучитьСТроку()=1 цикл // Если СпрНовНоменклатураБезСкидок.НайтиПоРеквизиту("Номенклатура",ТЗС.Номенклатура,1)=1 Тогда // ТЗС.Акция=""; // ТЗС.СкидкаПоСтроке=0; // КонецЕсли; // КОнецЦикла; // // ЗагрузитьТабличнуюЧасть(ТЗС); // ////}}MRG[ <-- ] Если ПустоеЗначение(БанкНом)=0 Тогда Если (ПустоеЗначение(Итог("СкидкаСпасибо"))=1) и (Итог("Сумма")>БанкСум) тогда Форма.кнБанк.Доступность(1); иначе БанкСум=Итог("Сумма"); Форма.кнБанк.Доступность(1); КонецЕсли; КонецЕсли; Если Итог("Сумма")<БанкСум тогда БанкСум=Итог("Сумма"); Форма.кнБанк.Доступность(1); КонецЕсли; Возврат; КонецЕсли; Если Константа.ПолучитьАтрибут("Спасибо")=1 тогда Если ВидОперации=Перечисление.ВидыОперацийЧекККМ.Чек тогда Если (Форма.Списание.Доступность()=0) и (ПустоеЗначение(Итог("СкидкаСпасибо"))=0) и (РасчСкидкиКонтрСумма<>Итог("Сумма")+КоличествоСтрок())тогда Предупреждение("Чек изменен! Списание бонусов отменено! Спишите бонусы снова!",0); ОтменаСписания(); Форма.Списание.Доступность(1); РасчСкидкиКонтрСумма=-1; Возврат; ИНачеесли (Форма.Списание.Доступность()=0) и (ПустоеЗначение(Итог("СкидкаСпасибо"))=0) и (РасчСкидкиКонтрСумма=Итог("Сумма")+КоличествоСтрок())тогда Предупреждение("Повторный расчет скидок! Списание бонусов отменено! Спишите бонусы снова!",0); ОтменаСписания(); Форма.Списание.Доступность(1); РасчСкидкиКонтрСумма=-1; Возврат; КонецЕсли; КонецЕсли; КонецЕсли; СообщАкции=""; ВыгрузитьТабличнуюЧасть(ТЗ); ТЗ.НоваяКолонка("Родитель","Справочник.Номенклатура"); ТЗ.ВыбратьСтроки(); Пока ТЗ.ПолучитьСтроку()=1 Цикл ТЗ.Родитель=ТЗ.Номенклатура.Родитель; КонецЦикла; ТЗУ=СоздатьОбъект("ТаблицаЗначений"); ТЗ.Выгрузить(ТЗУ); ТЗУ.УдалитьСтроки(); ТЗ.ВыбратьСтроки(); Пока ТЗ.ПолучитьСтроку()=1 Цикл Если Регистр.УцененныеТовары.Остаток(ТЗ.Номенклатура,Склад,ТЗ.Цена,"Количество")>0 Тогда ТЗУ.НоваяСтрока(); Для ц = 1 По ТЗУ.КоличествоКолонок() Цикл ТЗУ.УстановитьЗначение(ТЗУ.НомерСтроки,ц,ТЗ.ПолучитьЗначение(ТЗ.НомерСтроки,ц)); КонецЦикла; ВрНС=ТЗ.НомерСтроки; ТЗ.УдалитьСтроку(ВрНС); Если ВрНС=1 Тогда ТЗ.ВыбратьСтроки(); Иначе ТЗ.ПолучитьСтрокуПоНомеру(ВрНС-1); КонецЕсли; КонецЕсли; КонецЦикла; ТЗ.НоваяКолонка("ИспКол","Число"); ТЗ.НоваяКолонка("ТАКол","Число"); ТЗ.ВыбратьСтроки(); Пока ТЗ.ПолучитьСтроку()=1 Цикл Если ТЗ.Акция.Выбран()=1 Тогда Если ТЗ.Акция.ВарУсловие<>5 Тогда ТЗ.Акция=""; КонецЕсли; КонецЕсли; ТЗ.СкидкаПоСтроке=0; Если Скидка.Выбран()=1 Тогда Если КартаЛояльности.Выбран()=1 Тогда Если Скидка.Процент<=15 Тогда ТЗ.СкидкаПоСтроке=Скидка.Процент; КонецЕсли; Иначе Если Скидка.Процент<10 Тогда ТЗ.СкидкаПоСтроке=Скидка.Процент; ИначеЕсли Скидка.Процент=10 Тогда СпрДетСерия = СоздатьОбъект("Справочник.ДетСерия"); Номенкл=ТЗ.Номенклатура; Для ц = 1 По ТЗ.Номенклатура.Уровень() Цикл Если СпрДетСерия.НайтиПоРеквизиту("Номенклатура",Номенкл,1)=1 Тогда ТЗ.СкидкаПоСтроке=Скидка.Процент; Прервать; КонецЕсли; КонецЦикла; ИначеЕсли Скидка.Процент=12 Тогда // д.б. строки ТЗ.СкидкаПоСтроке=Скидка.Процент; // д.б. строки ИначеЕсли Скидка.Процент=18 Тогда // д.б. строки ТЗ.СкидкаПоСтроке=Скидка.Процент; // д.б. строки КонецЕсли; // д.б. строки КонецЕсли; КонецЕсли; КонецЦикла; ТЗА.ВыбратьСтроки(); Пока ТЗА.ПолучитьСтроку()=1 Цикл Если ТЗА.Док.ВарУсловие=4 Тогда Продолжить; КонецЕсли; Если ТЗА.Вид>2 Тогда Прервать; КонецЕсли; Если ТЗА.ЕстьВремя=1 Тогда ТекЧас=0; ТекМин=0; ТекСек=0; ТекущееВремя(ТекЧас,ТекМин,ТекСек); Если (ТекЧас<ТЗА.ВремяС) ИЛИ (ТекЧас>=ТЗА.ВремяПо) Тогда Продолжить; КонецЕсли; КонецЕсли; Если ВыполненыУсловияАкции(ТЗА.Док,ТЗА.СпТоваров,ТЗА.СпГрупп2,ТЗ)=1 Тогда СкПоАкции=ТЗА.Док.Скидка; Если ТЗА.Вид=1 Тогда ТЗ.ВыбратьСтроки(); Пока ТЗ.ПолучитьСтроку()=1 Цикл Если ТЗ.Акция.ВарУсловие=5 Тогда Продолжить; КонецЕсли; Если ТЗ.СкидкаПоСтроке<СкПоАкции Тогда ТЗ.СкидкаПоСтроке=СкПоАкции; ТЗ.Акция=ТЗА.Док; КонецЕсли; КонецЦикла; ИначеЕсли ТЗА.Вид=2 Тогда ТЗ.ВыбратьСтроки(); Пока ТЗ.ПолучитьСтроку()=1 Цикл Если ТЗ.Акция.ВарУсловие=5 Тогда Продолжить; КонецЕсли; Если ТоварЕстьВСпискеКАкции(ТЗА.Док,ТЗ.Номенклатура,ТЗ.Количество)=1 Тогда Если ТЗ.СкидкаПоСтроке<СкПоАкции Тогда ТЗ.СкидкаПоСтроке=СкПоАкции; ТЗ.Акция=ТЗА.Док; КонецЕсли; КонецЕсли; КонецЦикла; КонецЕсли; КонецЕсли; КонецЦикла; СпрНовНоменклатураБезСкидок = СоздатьОбъект("Справочник.НовНоменклатураБезСкидок"); ТЗ.ВыбратьСтроки(); Пока ТЗ.ПолучитьСтроку()=1 Цикл Номенкл=ТЗ.Номенклатура; Для ц = 1 По ТЗ.Номенклатура.Уровень() Цикл Если СпрНовНоменклатураБезСкидок.НайтиПоРеквизиту("Номенклатура",Номенкл,1)=1 Тогда ТЗ.СкидкаПоСтроке=0; Если ТЗ.Акция.Выбран()=1 Тогда Если ТЗ.Акция.ВарУсловие<>5 Тогда ТЗ.Акция=""; КонецЕсли; КонецЕсли; Прервать; КонецЕсли; Номенкл=Номенкл.Родитель; КонецЦикла; КонецЦикла; ТЗА.ВыбратьСтроки(); Пока ТЗА.ПолучитьСтроку()=1 Цикл Если ТЗА.Док.ВарУсловие=4 Тогда Продолжить; КонецЕсли; Если НЕ (ТЗА.Вид>2) Тогда Продолжить; КонецЕсли; Если ТЗА.ЕстьВремя=1 Тогда ТекЧас=0; ТекМин=0; ТекСек=0; ТекущееВремя(ТекЧас,ТекМин,ТекСек); Если (ТекЧас<ТЗА.ВремяС) ИЛИ (ТекЧас>=ТЗА.ВремяПо) Тогда Продолжить; КонецЕсли; КонецЕсли; Если ВыполненыУсловияАкции(ТЗА.Док,ТЗА.СпТоваров,ТЗА.СпГрупп2,ТЗ)=1 Тогда СкПоАкции=ТЗА.Док.Скидка; Если (ТЗА.Вид=8) И (ТЗА.Док.ВарУсловие=1) Тогда Вр=ВыполненыУсловияАкции(ТЗА.Док,ТЗА.СпТоваров,ТЗА.СпГрупп2,ТЗ,1); СпВр=глРазложить(ТЗА.Док.Подарки,","); Если СпВр.РазмерСписка()=0 Тогда СкПоАкции=0; Иначе СкПоАкции=Число(СпВр.ПолучитьЗначение(Мин(Вр,СпВр.РазмерСписка()))); КонецЕсли; ТЗ.ВыбратьСтроки(); Пока ТЗ.ПолучитьСтроку()=1 Цикл Если ТЗ.Акция.ВарУсловие=5 Тогда Продолжить; КонецЕсли; Если ТоварЕстьВСпискеКАкции(ТЗА.Док,ТЗ.Номенклатура,ТЗ.Количество)=1 Тогда Если ТЗ.СкидкаПоСтроке<СкПоАкции Тогда ТЗ.СкидкаПоСтроке=СкПоАкции; ТЗ.Акция=ТЗА.Док; КонецЕсли; КонецЕсли; КонецЦикла; ИначеЕсли ТЗА.Вид=3 Тогда ТовПоАкции=ТЗА.Док.ДействиеТовар; КолАкц=ВыполненыУсловияАкции(ТЗА.Док,ТЗА.СпТоваров,ТЗА.СпГрупп2,ТЗ,1); Если КолАкц>0 Тогда СпВр=глРазложить(ТЗА.Док.Подарки,","); Спр=СоздатьОбъект("Справочник.Номенклатура"); СпПодарков=СоздатьОбъект("СписокЗначений"); Для ц = 1 По СпВр.РазмерСписка() Цикл Если Спр.НайтиПоКоду(СпВр.ПолучитьЗначение(ц),0)=1 Тогда СпПодарков.ДобавитьЗначение(Спр.ТекущийЭлемент()); КонецЕсли; КонецЦикла; ТЗ.ВыбратьСтроки(); Пока ТЗ.ПолучитьСтроку()=1 Цикл ДостКол=ТЗ.Количество-ТЗ.ИспКол+ТЗ.ТАКол; Если (СпПодарков.НайтиЗначение(ТЗ.Номенклатура)>0) И (ДостКол>0) И (ТЗ.СкидкаПоСтроке<100) Тогда Возм=Мин(КолАкц,ДостКол); Если Возм=ТЗ.Количество Тогда ТЗ.СкидкаПоСтроке=100; ТЗ.Акция=ТЗА.Док; ТЗ.ИспКол=ТЗ.Количество; Иначе ТЗ.Количество=ТЗ.Количество-Возм; ТЗ.ИспКол=ТЗ.ИспКол-Мин(ТЗ.ТАКол,Возм); ТекСтрНом=ТЗ.НомерСтроки; СкопироватьСтроку(ТЗ,ТекСтрНом); ТЗ.ПолучитьСтрокуПоНомеру(ТекСтрНом+1); ТЗ.Количество=Возм; ТЗ.ИспКол=Возм; ТЗ.СкидкаПоСтроке=100; ТЗ.Акция=ТЗА.Док; КонецЕсли; КолАкц=КолАкц-Возм; Если КолАкц=0 Тогда Прервать; КонецЕсли; КонецЕсли; КонецЦикла; Если КолАкц>0 Тогда Если СпПодарков.РазмерСписка()=1 Тогда СообщАкции=СообщАкции+"Акция ("+СокрЛП(ТЗА.Док.Наименование)+"): "+ТовПоАкции+" "+КолАкц+" "+ТовПоАкции.ОсновнаяЕдиница+" в подарок добавить"; Иначе СообщАкции=СообщАкции+"Акция ("+СокрЛП(ТЗА.Док.Наименование)+"): подарков добавить: "+КолАкц+" "+"шт."; КонецЕсли; КонецЕсли; КонецЕсли; ИначеЕсли ТЗА.Вид=4 Тогда ТовПоАкции=ТЗА.Док.ДействиеТовар; СкПоАкции=ТЗА.Док.Скидка; КолАкц=ВыполненыУсловияАкции(ТЗА.Док,ТЗА.СпТоваров,ТЗА.СпГрупп2,ТЗ,1); ВозмКолАкц=КолАкц; Если КолАкц>0 Тогда ТЗ.ВыбратьСтроки(); Пока ТЗ.ПолучитьСтроку()=1 Цикл ДостКол=ТЗ.Количество-ТЗ.ИспКол+ТЗ.ТАКол; Если (ТЗ.Номенклатура=ТовПоАкции) И (ДостКол>0) И (ТЗ.СкидкаПоСтроке<СкПоАкции) Тогда Возм=Мин(КолАкц,ДостКол); Если Возм=ТЗ.Количество Тогда ТЗ.СкидкаПоСтроке=СкПоАкции; ТЗ.Акция=ТЗА.Док; ТЗ.ИспКол=ТЗ.Количество; Иначе ТЗ.Количество=ТЗ.Количество-Возм; ТЗ.ИспКол=ТЗ.ИспКол-Мин(ТЗ.ТАКол,Возм); ТекСтрНом=ТЗ.НомерСтроки; СкопироватьСтроку(ТЗ,ТекСтрНом); ТЗ.ПолучитьСтрокуПоНомеру(ТекСтрНом+1); ТЗ.Количество=Возм; ТЗ.ИспКол=Возм; ТЗ.СкидкаПоСтроке=СкПоАкции; ТЗ.Акция=ТЗА.Док; КонецЕсли; КолАкц=КолАкц-Возм; Если КолАкц=0 Тогда Прервать; КонецЕсли; КонецЕсли; КонецЦикла; //Сообщить("Было возможно: "+ВозмКолАкц); //Сообщить("Неиспользовано: "+КолАкц); //ТЗ.ВыбратьСтроку(); Если КолАкц>0 Тогда ВыполненыУсловияАкции(ТЗА.Док,ТЗА.СпТоваров,ТЗА.СпГрупп2,ТЗ,1,ВозмКолАкц-КолАкц); //СообщАкции=СообщАкции+"Акция ("+СокрЛП(ТЗА.Док.Наименование)+"): "+ТовПоАкции+" "+КолАкц+" "+ТовПоАкции.ОсновнаяЕдиница+" возможна скидка: "+СкПоАкции+"%"; КонецЕсли; //ТЗ.ВыбратьСтроку(); КонецЕсли; ИначеЕсли ТЗА.Вид=5 Тогда ТовПоАкции=ТЗА.Док.ДействиеТовар; СкПоАкции=ТЗА.Док.Скидка; КолАкц=ВыполненыУсловияАкции(ТЗА.Док,ТЗА.СпТоваров,ТЗА.СпГрупп2,ТЗ,1); Если КолАкц>0 Тогда ТЗ.ВыбратьСтроки(); Пока ТЗ.ПолучитьСтроку()=1 Цикл Если ТЗ.Акция.ВарУсловие=5 Тогда Продолжить; КонецЕсли; Если ТЗ.ТАКол=0 Тогда Продолжить; КонецЕсли; Возм=ТЗ.ТАКол; Если Возм=ТЗ.Количество Тогда ТЗ.СкидкаПоСтроке=СкПоАкции; ТЗ.Акция=ТЗА.Док; Иначе ТЗ.Количество=ТЗ.Количество-Возм; ТЗ.ИспКол=ТЗ.ИспКол-Возм; ТекСтрНом=ТЗ.НомерСтроки; СкопироватьСтроку(ТЗ,ТекСтрНом); ТЗ.ПолучитьСтрокуПоНомеру(ТекСтрНом+1); ТЗ.Количество=Возм; ТЗ.ИспКол=Возм; ТЗ.СкидкаПоСтроке=СкПоАкции; ТЗ.Акция=ТЗА.Док; КонецЕсли; КолАкц=КолАкц-Возм; Если КолАкц=0 Тогда Прервать; КонецЕсли; КонецЦикла; КонецЕсли; ИначеЕсли ТЗА.Вид=7 Тогда //--- 2 в 1 ТовПоАкции=ТЗА.Док.ДействиеТовар; СкПоАкции=ТЗА.Док.Скидка; КолАкц=ВыполненыУсловияАкции(ТЗА.Док,ТЗА.СпТоваров,ТЗА.СпГрупп2,ТЗ,1); Если КолАкц>0 Тогда ТЗ.ВыбратьСтроки(); Пока ТЗ.ПолучитьСтроку()=1 Цикл Если ТЗ.Акция.ВарУсловие=5 Тогда Продолжить; КонецЕсли; Если ТЗ.ТАКол=0 Тогда Продолжить; КонецЕсли; Возм=ТЗ.ТАКол; Если Возм=ТЗ.Количество Тогда ТЗ.СкидкаПоСтроке=СкПоАкции; ТЗ.Акция=ТЗА.Док; Иначе ТЗ.Количество=ТЗ.Количество-Возм; ТЗ.ИспКол=ТЗ.ИспКол-Возм; ТекСтрНом=ТЗ.НомерСтроки; СкопироватьСтроку(ТЗ,ТекСтрНом); ТЗ.ПолучитьСтрокуПоНомеру(ТекСтрНом+1); ТЗ.Количество=Возм; ТЗ.ИспКол=Возм; ТЗ.СкидкаПоСтроке=СкПоАкции; ТЗ.Акция=ТЗА.Док; КонецЕсли; КолАкц=КолАкц-Возм; Если КолАкц=0 Тогда Прервать; КонецЕсли; КонецЦикла; КонецЕсли; ИначеЕсли ТЗА.Вид=6 Тогда //подарок из спец. фонда КолАкц=ВыполненыУсловияАкции(ТЗА.Док,ТЗА.СпТоваров,ТЗА.СпГрупп2,ТЗ,1); Если КолАкц>0 Тогда ТЗ.ВыбратьСтроки(); Пока ТЗ.ПолучитьСтроку()=1 Цикл Если ТЗ.Акция.ВарУсловие=5 Тогда Продолжить; КонецЕсли; ДостКол=ТЗ.Количество-ТЗ.ИспКол+ТЗ.ТАКол; Если (ТЗ.Цена=0) И (ДостКол>0) И (ТЗ.СкидкаПоСтроке<100) Тогда Возм=Мин(КолАкц,ДостКол); Если Возм=ТЗ.Количество Тогда ТЗ.СкидкаПоСтроке=100; ТЗ.Акция=ТЗА.Док; ТЗ.ИспКол=ТЗ.Количество; Иначе ТЗ.Количество=ТЗ.Количество-Возм; ТЗ.ИспКол=ТЗ.ИспКол-Мин(ТЗ.ТАКол,Возм); ТекСтрНом=ТЗ.НомерСтроки; СкопироватьСтроку(ТЗ,ТекСтрНом); ТЗ.ПолучитьСтрокуПоНомеру(ТекСтрНом+1); ТЗ.Количество=Возм; ТЗ.ИспКол=Возм; ТЗ.СкидкаПоСтроке=100; ТЗ.Акция=ТЗА.Док; КонецЕсли; КолАкц=КолАкц-Возм; Если КолАкц=0 Тогда Прервать; КонецЕсли; КонецЕсли; КонецЦикла; ТЗУ.ВыбратьСтроки(); Пока ТЗУ.ПолучитьСтроку()=1 Цикл Если КолАкц=0 Тогда Прервать; КонецЕсли; ДостКол=ТЗУ.Количество; Если (ТЗУ.Цена=0) И (ДостКол>0) Тогда ТЗ.НоваяСтрока(); ТЗ.Родитель=ТЗУ.Родитель; ТЗ.ШтрихКод=ТЗУ.ШтрихКод; ТЗ.Номенклатура=ТЗУ.Номенклатура; ТЗ.Единица=ТЗУ.Единица; ТЗ.Коэффициент=ТЗУ.Коэффициент; ТЗ.Цена=ТЗУ.Цена; ТЗ.СкидкаПоСтроке=100; ТЗ.Акция=ТЗА.Док; Возм=Мин(КолАкц,ДостКол); ТЗ.Количество=Возм; ТЗ.ИспКол=Возм; ТЗУ.Количество=ТЗУ.Количество-Возм; КолАкц=КолАкц-Возм; Если КолАкц=0 Тогда Прервать; КонецЕсли; КонецЕсли; КонецЦикла; Если КолАкц>0 Тогда СообщАкции=СообщАкции+"Акция ("+СокрЛП(ТЗА.Док.Наименование)+"): подарков добавить: "+КолАкц+" "+"шт."; КонецЕсли; КонецЕсли; КонецЕсли; КонецЕсли; КонецЦикла; ТЗА.ВыбратьСтроки(); Пока ТЗА.ПолучитьСтроку()=1 Цикл Если ТЗА.Док.ВарУсловие<>4 Тогда Продолжить; КонецЕсли; Если ТЗА.Вид>2 Тогда Прервать; КонецЕсли; Если ТЗА.ЕстьВремя=1 Тогда ТекЧас=0; ТекМин=0; ТекСек=0; ТекущееВремя(ТекЧас,ТекМин,ТекСек); Если (ТекЧас<ТЗА.ВремяС) ИЛИ (ТекЧас>=ТЗА.ВремяПо) Тогда Продолжить; КонецЕсли; КонецЕсли; Если ВыполненыУсловияАкции(ТЗА.Док,ТЗА.СпТоваров,ТЗА.СпГрупп2,ТЗ)=1 Тогда СкПоАкции=ТЗА.Док.Скидка; Если ТЗА.Вид=1 Тогда ТЗ.ВыбратьСтроки(); Пока ТЗ.ПолучитьСтроку()=1 Цикл Если ТЗ.Акция.ВарУсловие=5 Тогда Продолжить; КонецЕсли; Если ТЗ.СкидкаПоСтроке<СкПоАкции Тогда ТЗ.СкидкаПоСтроке=СкПоАкции; ТЗ.Акция=ТЗА.Док; КонецЕсли; КонецЦикла; ИначеЕсли ТЗА.Вид=2 Тогда ТЗ.ВыбратьСтроки(); Пока ТЗ.ПолучитьСтроку()=1 Цикл Если ТЗ.Акция.ВарУсловие=5 Тогда Продолжить; КонецЕсли; Если ТоварЕстьВСпискеКАкции(ТЗА.Док,ТЗ.Номенклатура,ТЗ.Количество)=1 Тогда Если ТЗ.СкидкаПоСтроке<СкПоАкции Тогда ТЗ.СкидкаПоСтроке=СкПоАкции; ТЗ.Акция=ТЗА.Док; КонецЕсли; КонецЕсли; КонецЦикла; КонецЕсли; КонецЕсли; КонецЦикла; СпрНовНоменклатураБезСкидок = СоздатьОбъект("Справочник.НовНоменклатураБезСкидок"); ТЗ.ВыбратьСтроки(); Пока ТЗ.ПолучитьСтроку()=1 Цикл Номенкл=ТЗ.Номенклатура; Для ц = 1 По ТЗ.Номенклатура.Уровень() Цикл Если СпрНовНоменклатураБезСкидок.НайтиПоРеквизиту("Номенклатура",Номенкл,1)=1 Тогда ТЗ.СкидкаПоСтроке=0; Если ТЗ.Акция.Выбран()=1 Тогда Если ТЗ.Акция.ВарУсловие<>5 Тогда ТЗ.Акция=""; КонецЕсли; КонецЕсли; Прервать; КонецЕсли; Номенкл=Номенкл.Родитель; КонецЦикла; КонецЦикла; ТЗА.ВыбратьСтроки(); Пока ТЗА.ПолучитьСтроку()=1 Цикл Если ТЗА.Док.ВарУсловие<>4 Тогда Продолжить; КонецЕсли; Если НЕ (ТЗА.Вид>2) Тогда Продолжить; КонецЕсли; Если ТЗА.ЕстьВремя=1 Тогда ТекЧас=0; ТекМин=0; ТекСек=0; ТекущееВремя(ТекЧас,ТекМин,ТекСек); Если (ТекЧас<ТЗА.ВремяС) ИЛИ (ТекЧас>=ТЗА.ВремяПо) Тогда Продолжить; КонецЕсли; КонецЕсли; Если ВыполненыУсловияАкции(ТЗА.Док,ТЗА.СпТоваров,ТЗА.СпГрупп2,ТЗ)=1 Тогда СкПоАкции=ТЗА.Док.Скидка; Если ТЗА.Вид=3 Тогда ТовПоАкции=ТЗА.Док.ДействиеТовар; КолАкц=1; Если КолАкц>0 Тогда СпВр=глРазложить(ТЗА.Док.Подарки,","); Спр=СоздатьОбъект("Справочник.Номенклатура"); СпПодарков=СоздатьОбъект("СписокЗначений"); Для ц = 1 По СпВр.РазмерСписка() Цикл Если Спр.НайтиПоКоду(СпВр.ПолучитьЗначение(ц),0)=1 Тогда СпПодарков.ДобавитьЗначение(Спр.ТекущийЭлемент()); КонецЕсли; КонецЦикла; ТЗ.ВыбратьСтроки(); Пока ТЗ.ПолучитьСтроку()=1 Цикл ДостКол=ТЗ.Количество-ТЗ.ИспКол+ТЗ.ТАКол; Если (СпПодарков.НайтиЗначение(ТЗ.Номенклатура)>0) И (ДостКол>0) И (ТЗ.СкидкаПоСтроке<100) Тогда Возм=Мин(КолАкц,ДостКол); Если Возм=ТЗ.Количество Тогда ТЗ.СкидкаПоСтроке=100; ТЗ.Акция=ТЗА.Док; ТЗ.ИспКол=ТЗ.Количество; Иначе ТЗ.Количество=ТЗ.Количество-Возм; ТЗ.ИспКол=ТЗ.ИспКол-Мин(ТЗ.ТАКол,Возм); ТекСтрНом=ТЗ.НомерСтроки; СкопироватьСтроку(ТЗ,ТекСтрНом); ТЗ.ПолучитьСтрокуПоНомеру(ТекСтрНом+1); ТЗ.Количество=Возм; ТЗ.ИспКол=Возм; ТЗ.СкидкаПоСтроке=100; ТЗ.Акция=ТЗА.Док; КонецЕсли; КолАкц=КолАкц-Возм; Если КолАкц=0 Тогда Прервать; КонецЕсли; КонецЕсли; КонецЦикла; Если КолАкц>0 Тогда Если СпПодарков.РазмерСписка()=1 Тогда СообщАкции=СообщАкции+"Акция ("+СокрЛП(ТЗА.Док.Наименование)+"): "+ТовПоАкции+" "+КолАкц+" "+ТовПоАкции.ОсновнаяЕдиница+" в подарок добавить"; Иначе СообщАкции=СообщАкции+"Акция ("+СокрЛП(ТЗА.Док.Наименование)+"): подарков добавить: "+КолАкц+" "+"шт."; КонецЕсли; КонецЕсли; КонецЕсли; ИначеЕсли ТЗА.Вид=4 Тогда ТовПоАкции=ТЗА.Док.ДействиеТовар; СкПоАкции=ТЗА.Док.Скидка; КолАкц=1; Если КолАкц>0 Тогда ТЗ.ВыбратьСтроки(); Пока ТЗ.ПолучитьСтроку()=1 Цикл ДостКол=ТЗ.Количество-ТЗ.ИспКол+ТЗ.ТАКол; Если (ТЗ.Номенклатура=ТовПоАкции) И (ДостКол>0) И (ТЗ.СкидкаПоСтроке<СкПоАкции) Тогда Возм=Мин(КолАкц,ДостКол); Если Возм=ТЗ.Количество Тогда ТЗ.СкидкаПоСтроке=СкПоАкции; ТЗ.Акция=ТЗА.Док; ТЗ.ИспКол=ТЗ.Количество; Иначе ТЗ.Количество=ТЗ.Количество-Возм; ТЗ.ИспКол=ТЗ.ИспКол-Мин(ТЗ.ТАКол,Возм); ТекСтрНом=ТЗ.НомерСтроки; СкопироватьСтроку(ТЗ,ТекСтрНом); ТЗ.ПолучитьСтрокуПоНомеру(ТекСтрНом+1); ТЗ.Количество=Возм; ТЗ.ИспКол=Возм; ТЗ.СкидкаПоСтроке=СкПоАкции; ТЗ.Акция=ТЗА.Док; КонецЕсли; КолАкц=КолАкц-Возм; Если КолАкц=0 Тогда Прервать; КонецЕсли; КонецЕсли; КонецЦикла; Если КолАкц>0 Тогда СообщАкции=СообщАкции+"Акция ("+СокрЛП(ТЗА.Док.Наименование)+"): "+ТовПоАкции+" "+КолАкц+" "+ТовПоАкции.ОсновнаяЕдиница+" возможна скидка: "+СкПоАкции+"%"; КонецЕсли; КонецЕсли; ИначеЕсли ТЗА.Вид=6 Тогда //подарок из спец. фонда КолАкц=1; Если КолАкц>0 Тогда ТЗ.ВыбратьСтроки(); Пока ТЗ.ПолучитьСтроку()=1 Цикл ДостКол=ТЗ.Количество-ТЗ.ИспКол+ТЗ.ТАКол; Если (ТЗ.Цена=0) И (ДостКол>0) И (ТЗ.СкидкаПоСтроке<100) Тогда Возм=Мин(КолАкц,ДостКол); Если Возм=ТЗ.Количество Тогда ТЗ.СкидкаПоСтроке=100; ТЗ.Акция=ТЗА.Док; ТЗ.ИспКол=ТЗ.Количество; Иначе ТЗ.Количество=ТЗ.Количество-Возм; ТЗ.ИспКол=ТЗ.ИспКол-Мин(ТЗ.ТАКол,Возм); ТекСтрНом=ТЗ.НомерСтроки; СкопироватьСтроку(ТЗ,ТекСтрНом); ТЗ.ПолучитьСтрокуПоНомеру(ТекСтрНом+1); ТЗ.Количество=Возм; ТЗ.ИспКол=Возм; ТЗ.СкидкаПоСтроке=100; ТЗ.Акция=ТЗА.Док; КонецЕсли; КолАкц=КолАкц-Возм; Если КолАкц=0 Тогда Прервать; КонецЕсли; КонецЕсли; КонецЦикла; ТЗУ.ВыбратьСтроки(); Пока ТЗУ.ПолучитьСтроку()=1 Цикл Если КолАкц=0 Тогда Прервать; КонецЕсли; ДостКол=ТЗУ.Количество; Если (ТЗУ.Цена=0) И (ДостКол>0) Тогда ТЗ.НоваяСтрока(); ТЗ.Родитель=ТЗУ.Родитель; ТЗ.ШтрихКод=ТЗУ.ШтрихКод; ТЗ.Номенклатура=ТЗУ.Номенклатура; ТЗ.Единица=ТЗУ.Единица; ТЗ.Коэффициент=ТЗУ.Коэффициент; ТЗ.Цена=ТЗУ.Цена; ТЗ.СкидкаПоСтроке=100; ТЗ.Акция=ТЗА.Док; Возм=Мин(КолАкц,ДостКол); ТЗ.Количество=Возм; ТЗ.ИспКол=Возм; ТЗУ.Количество=ТЗУ.Количество-Возм; КолАкц=КолАкц-Возм; Если КолАкц=0 Тогда Прервать; КонецЕсли; КонецЕсли; КонецЦикла; Если КолАкц>0 Тогда СообщАкции=СообщАкции+"Акция ("+СокрЛП(ТЗА.Док.Наименование)+"): подарков добавить: "+КолАкц+" "+"шт."; КонецЕсли; КонецЕсли; КонецЕсли; КонецЕсли; КонецЦикла; //ТЗА.ВыбратьСтроки(); //Пока ТЗА.ПолучитьСтроку()=1 Цикл // Если НЕ (ТЗА.Вид>2) Тогда // Продолжить; // КонецЕсли; // Если ВыполненыУсловияАкции(ТЗА.Док,ТЗА.СпТоваров,ТЗА.СпГрупп2,ТЗ)=1 Тогда // СкПоАкции=ТЗА.Док.Скидка; // Если ТЗА.Вид=3 Тогда // ТовПоАкции=ТЗА.Док.ДействиеТовар; // КолАкц=ВыполненыУсловияАкции(ТЗА.Док,ТЗА.СпТоваров,ТЗА.СпГрупп2,ТЗ,1); // Если КолАкц>0 Тогда // ТЗ.ВыбратьСтроки(); // Пока ТЗ.ПолучитьСтроку()=1 Цикл // ДостКол=ТЗ.Количество-ТЗ.ИспКол+ТЗ.ТАКол; // Если (ТЗ.Номенклатура=ТовПоАкции) // И (ДостКол>0) // И (ТЗ.СкидкаПоСтроке<СкПоАкции) Тогда // Возм=Мин(КолАкц,ДостКол); // // Если Возм=ТЗ.Количество Тогда // ТЗ.СкидкаПоСтроке=СкПоАкции; // ТЗ.Акция=ТЗА.Док; // ТЗ.ИспКол=ТЗ.Количество; // Иначе // ТЗ.Количество=ТЗ.Количество-Возм; // ТЗ.ИспКол=ТЗ.ИспКол-Мин(ТЗ.ТАКол,Возм); // ТекСтрНом=ТЗ.НомерСтроки; // СкопироватьСтроку(ТЗ,ТекСтрНом); // ТЗ.ПолучитьСтрокуПоНомеру(ТекСтрНом+1); // ТЗ.Количество=Возм; // ТЗ.ИспКол=Возм; // ТЗ.СкидкаПоСтроке=СкПоАкции; // ТЗ.Акция=ТЗА.Док; // КонецЕсли; // // КолАкц=КолАкц-Возм; // Если КолАкц=0 Тогда // Прервать; // КонецЕсли; // КонецЕсли; // КонецЦикла; // Если КолАкц>0 Тогда // СообщАкции=СообщАкции+"Акция ("+СокрЛП(ТЗА.Док.Наименование)+"): "+ТовПоАкции+" "+КолАкц+" "+ТовПоАкции.ОсновнаяЕдиница+" скидка: "+СкПоАкции+"%. "; // КонецЕсли; // КонецЕсли; // КонецЕсли; // КонецЕсли; //КонецЦикла; ТЗ.Свернуть("ШтрихКод,Номенклатура,Единица,Коэффициент,Цена,Акция,СкидкаПоСтроке","Количество,Сумма"); ТЗ.ВыбратьСтроки(); Пока ТЗ.ПолучитьСтроку()=1 Цикл Если ТЗ.Акция.Выбран()=1 Тогда Если ТЗ.Акция.ВарУсловие=5 Тогда Стр=""; Если ТЗА.НайтиЗначение(ТЗ.Акция,Стр,"Док")=1 Тогда ТЗА.ПолучитьСтрокуПоНомеру(Стр); п=ТЗА.СпТоваров.НайтиЗначение(ТЗ.Номенклатура); ВрЦена=""; Если п>0 Тогда ТЗА.СпТоваров.ПолучитьЗначение(п,ВрЦена); ВрЦена=Число(ВрЦена); Иначе п=ТЗА.СпГрупп2.НайтиЗначение(ТЗ.Номенклатура.Родитель); Если п>0 Тогда ТЗА.СпГрупп2.ПолучитьЗначение(п,ВрЦена); ВрЦена=Число(ВрЦена); КонецЕсли; КонецЕсли; Если п>0 Тогда ТЗ.Сумма=ТЗ.Количество*ВрЦена; ПСум=ТЗ.Цена*ТЗ.Количество; ТЗ.СкидкаПоСтроке=?(ПСум=0,0,Окр((1-ТЗ.Сумма/ПСум)*100,3)); Продолжить; КонецЕсли; КонецЕсли; КонецЕсли; КонецЕсли; //Округление цены со скидкой: 1 вариант - арифметически, 2 вариант - вниз: до 10 копеек. ТЗ.Сумма=ТЗ.Количество * Окр(ТЗ.Цена*(1-(ТЗ.СкидкаПоСтроке*.01)),1); //ТЗ.Сумма=ТЗ.Количество * (Цел(ТЗ.Цена*(1-(ТЗ.СкидкаПоСтроке*.01))*10)*.1); КонецЦикла; //ТЗ.ВыбратьСтроку(); //ТЗУ.ВыбратьСтроку(); ТЗУ.ВыбратьСтроки(); Пока ТЗУ.ПолучитьСтроку()=1 Цикл Если ТЗУ.Количество=0 Тогда Продолжить; КонецЕсли; ТЗ.НоваяСтрока(); ТЗ.ШтрихКод=ТЗУ.ШтрихКод; ТЗ.Номенклатура=ТЗУ.Номенклатура; ТЗ.Единица=ТЗУ.Единица; ТЗ.Коэффициент=ТЗУ.Коэффициент; ТЗ.Цена=ТЗУ.Цена; ТЗ.Акция=""; ТЗ.СкидкаПоСтроке=0; ТЗ.Количество=ТЗУ.Количество; ТЗ.Сумма=ТЗ.Количество*ТЗ.Цена; КонецЦикла; ЗагрузитьТабличнуюЧасть(ТЗ); РасчСкидкиКонтрСумма=Итог("Сумма")+КоличествоСтрок(); Активизировать("Получено"); Если Константа.ПолучитьАтрибут("Спасибо")=1 тогда Если ВидОперации=Перечисление.ВидыОперацийЧекККМ.Чек тогда Форма.Списание.Видимость(1); КонецЕсли; КонецЕсли;; КонецПроцедуры |
|||
1
Mafiozaa
28.10.20
✎
08:40
|
Черновым способом вставляю коды, но записывается всего один, на все позиции в чеке, не могу найти в какую ТЗ толкнуть дабы записать затем новаястрока
|
|||
2
Kigo_Kigo
28.10.20
✎
08:55
|
(1) ну на вскидку, мне лень в твоей портянке разбираться
Перем ТЗКоды; ВыгрузитьТабличнуюЧасть(ТЗ); ВыгрузитьТабличнуюЧасть(ТЗКоды); ///Бла бла бла Расчет скидок //после ЗагрузитьТабличнуюЧасть(ТЗ); Для А = 1 по ТЗКоды.КоличествоСтрок() Цикл ПолучитьСтрокуПоНомеру(а); ТЗКоды.ПолучитьСтрокуПоНомеру(а); КодМаркировки = ТЗКоды.КодМаркировки; КонецЦикла; |
|||
3
Kigo_Kigo
28.10.20
✎
08:57
|
Это при условии что количество и порядок строк не меняется
|
|||
4
Mafiozaa
28.10.20
✎
09:02
|
(2) Хорошо, буду пробывать, ты разобрался с кодами?
|
|||
5
Kigo_Kigo
28.10.20
✎
09:09
|
(4) да, я в прошлой теме отписал, что все зафурычило, поставил ФНоперцию ДО загона когда в машинку и все взлетело
|
|||
6
Mafiozaa
29.10.20
✎
07:45
|
(3) Не, не выходит, путаница в этих тзшках
|
|||
7
Mafiozaa
29.10.20
✎
07:48
|
(5) И переменная теряется при загрузке
ЗагрузитьТабличнуюЧасть(ТЗ); |
|||
8
Mikeware
29.10.20
✎
07:48
|
"миста - лучший отладчик"©, ага
|
|||
9
Mafiozaa
29.10.20
✎
07:49
|
(8) И тебе привет)
|
|||
10
Ёпрст
гуру
29.10.20
✎
08:29
|
(0) ужасный код, писал явно студент. Многократные повторяющиеся циклы по одной тз. Не знание метода заполнить..избыточный код везде, читать лень
|
|||
11
Ёпрст
гуру
29.10.20
✎
08:36
|
(2) меняется, там везде новая строка, еще и свертка тз потом.
|
|||
12
Mafiozaa
29.10.20
✎
08:36
|
(10) В том и суть, что тут из одной тз в другую скачет, отладчиком сижу пытаюсь поймать)
|
|||
13
Ёпрст
гуру
29.10.20
✎
08:39
|
(12) твой кодмаркиовки, прям в тч дока торчит? Т.е у тебя 1 строка в доке = номенклатура с количеством 1 всегда?
|
|||
14
Mafiozaa
29.10.20
✎
08:42
|
(13) КодМаркировки в тч дока, при перерасчете скидок он теряется, 1 строка в доке может быть по колву хоть сколько, но так как магазин одежды, никто более 1 штучки одной позиции не берет
|
|||
15
Ёпрст
гуру
29.10.20
✎
08:43
|
(14) как это не берет? Чего, 2 пары носков в одном чеке не может быть?)
|
|||
16
Ёпрст
гуру
29.10.20
✎
08:44
|
Я к чему клоню - у одной номенклатуры, может быть несколько кодов маркировки или нет?
|
|||
17
Mafiozaa
29.10.20
✎
08:50
|
(16) У каждой штучки в номенклатуре свой код, 5 пар кросовок = 5 разных кодов
|
|||
18
Mafiozaa
29.10.20
✎
08:55
|
(16) Я помню про что ты говорил, что кол-во>1 привет котенку,
|
|||
19
Mafiozaa
29.10.20
✎
08:56
|
(15) Носков штучных нету, упаковка из 3, все упаковки разные позиции номенклатуры
|
|||
20
Ёпрст
гуру
29.10.20
✎
08:56
|
(17) вот. Следовательно, в документе будет 5 строк с количеством 1 и разными кодами маркировки. А твой г- код в (0) сворачивает это все тебе в 1 строку с количеством 5.
|
|||
21
Mafiozaa
29.10.20
✎
09:00
|
(20) Почему? Если в чеке 5 строк, после расчета скидок в ней так же остается 5 строк, но коды маркировок отлетают
|
|||
22
Kigo_Kigo
29.10.20
✎
09:00
|
Так чем тебе код в (2) то не устроил? Что ты там пытаешь понять, или у тебя кодмаркировки строковая колонка которая не хранится в БД? по этому не выгружается методом выгрузитьтабчать?
|
|||
23
Ёпрст
гуру
29.10.20
✎
09:01
|
Если лень всё переписывать, то втыкаешь такой костылик: в начале г- кода выгружаешь тч в свою тзкоды. В самом конце г-кода, перед загрузитьтабличнуючасть, пробегаешь результирующую тз, ишешь по номенклатуре все строки в твоей тзкоды, если в тз количество>1 то добавляешь стпоуи в эту тз и для каждой проставляешь свой код маркировки из твоей тзкоды. Попутно изменяя сумму в этой строке. Усё
|
|||
24
Ёпрст
гуру
29.10.20
✎
09:02
|
(21) потому, что там сворачивается тз
|
|||
25
Mafiozaa
29.10.20
✎
09:03
|
(22) Код маркировки это реквизит тч, который заполняется сканнером и не хранится в базе нигде, кроме переменной
|
|||
26
Kigo_Kigo
29.10.20
✎
09:04
|
(24) Да ТЗ.Свернуть("ШтрихКод,Номенклатура,Единица,Коэффициент,Цена,Акция,СкидкаПоСтроке","Количество,Сумма"); заремарить надо
|
|||
27
Kigo_Kigo
29.10.20
✎
09:04
|
(25) Очень опрометчивое решение
|
|||
28
Ёпрст
гуру
29.10.20
✎
09:06
|
(25) у тя биполярное расстройство?
>>>>Это реквизит тч >>>>Не хранится нигде |
|||
29
Ёпрст
гуру
29.10.20
✎
09:08
|
(26) ты код то почитай, на ночь. Там не только свертка, там и дрбавление строк по рзным условиям
|
|||
30
Mafiozaa
29.10.20
✎
09:09
|
(29) Да это даже читать не возможно, я хоть и не специалист, но даже мне это не нравится)
|
|||
31
Kigo_Kigo
29.10.20
✎
09:16
|
(29) я ему сразу сказал, что мне его портянку разбирать не охото, да и не надо, пусть сам разбирается, а вот то что он решил не хранить кода в БД, очень опрометчиво, и да совет, в закрытии кассовой смены, переделай ЧекККм.Удалить(1) на ЧекККм.Удалить(0) это в будущем сильно упростит разборы полётов по КТ, да и вообще
|
|||
32
Kigo_Kigo
29.10.20
✎
09:20
|
(31) да и вообще я еще КТ переношу в отчетКассовой смены в отдельную колонку, все товары с КТ в чеке только с количеством = 1
|
|||
33
Mafiozaa
29.10.20
✎
09:21
|
(32) Ну да, я кт переношу и в возврат, и в отчет ккм
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |