Смена типа цен в Чеке ККМ в зависимости от суммы документа

1. AlexeyPapanov 468 09.11.14 20:50 Сейчас в теме
Всем привет!

Задача такая - в инт.кассира если сумма чека ККМ больше 2000 руб., то меняем тип цен и пересчитываем чек.
Типа были розничные цены, стали оптовые.
Конечно я в курсе авто-скидок по сумме, но попросили сделать так.

Я сделал вот что:
1. повесил процедуру на событие редактирования количества или номенклатуры
2. выгружаю ТЧ в таблицу значений, приклеиваю запросом колонку с другим типом цен
3. загружаю в ТЧ таблицу с новой ценой, пересчитываю ТЧ.
4. меняю тип цен в чеке.

но если после всего добавить еще строку в ТЧ, цена встает по умолчанию (розничная), а не та, которую я только установил.

см. скриншот.

подскажите как реализовать?


	ПорогСменыТипаЦен = 2000;
	НовыйТипЦен = Справочники.ТипыЦенНоменклатуры.НайтиПоНаименованию("Оптовая");
	
	Если Товары.Итог("Сумма") > ПорогСменыТипаЦен И ТипЦен<>НовыйТипЦен Тогда
		
		ТЗ = Товары.Выгрузить();
		
		ТипЦен = НовыйТипЦен;
		
		Запрос = Новый Запрос;
	
		Запрос.УстановитьПараметр("Таблица",ТЗ);
		Запрос.УстановитьПараметр("Дата",Дата);
		Запрос.УстановитьПараметр("ТипЦен",ТипЦен);

		
		Запрос.Текст = "ВЫБРАТЬ 
			|	Таблица.Номенклатура,
			|	Таблица.Количество,
			|	Таблица.ЕдиницаИзмерения,
			|	Таблица.Коэффициент,
			|	Таблица.Цена,
			|	Таблица.ПроцентСкидкиНаценки,
			|	Таблица.Сумма,
			|	Таблица.ХарактеристикаНоменклатуры,
			|	Таблица.СерияНоменклатуры,
			|	Таблица.ПроцентАвтоматическихСкидок,
			|	Таблица.УсловиеАвтоматическойСкидки,
			|	Таблица.ЗначениеУсловияАвтоматическойСкидки,
			|	Таблица.Артикул,
			|	Таблица.Штрихкод,
			|	Таблица.КлючСвязи,
			|	Таблица.КлючСтроки
			|ПОМЕСТИТЬ ВременнаяТаблица
			|ИЗ 
			|	&Таблица КАК Таблица 
			|; 
			| 
			| //////////////////////////////////////////
			| 
			|ВЫБРАТЬ 
			|	ВременнаяТаблица.Номенклатура,
			|	ВременнаяТаблица.Количество,
			|	ВременнаяТаблица.ЕдиницаИзмерения,
			|	ВременнаяТаблица.Коэффициент,
			|	ВременнаяТаблица.ПроцентСкидкиНаценки,
			|	ВременнаяТаблица.Сумма,
			|	ВременнаяТаблица.ХарактеристикаНоменклатуры,
			|	ВременнаяТаблица.СерияНоменклатуры,
			|	ВременнаяТаблица.ПроцентАвтоматическихСкидок,
			|	ВременнаяТаблица.УсловиеАвтоматическойСкидки,
			|	ВременнаяТаблица.ЗначениеУсловияАвтоматическойСкидки,
			|	ВременнаяТаблица.Артикул,
			|	ВременнаяТаблица.Штрихкод,
			|	ВременнаяТаблица.КлючСвязи,
			|	ВременнаяТаблица.КлючСтроки,
			|	ЕСТЬNULL(ЦеныНоменклатурыСрезПоследних.Цена, 0) КАК Цена
			|ИЗ 
			|	ВременнаяТаблица КАК ВременнаяТаблица
			|	ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры.СрезПоследних(&Дата, ТипЦен = &ТипЦен) КАК ЦеныНоменклатурыСрезПоследних
			|	ПО ВременнаяТаблица.Номенклатура = ЦеныНоменклатурыСрезПоследних.Номенклатура";

		РезультатЗапроса = Запрос.Выполнить().Выгрузить();
		Товары.Загрузить(РезультатЗапроса);
		
		Для каждого СтрокаТабличнойЧасти из Товары Цикл
			ОбработкаТабличныхЧастей.РассчитатьСуммуТабЧасти(СтрокаТабличнойЧасти, ЭтотОбъект);
		КонецЦикла
	КонецЕсли;
Показать
По теме из базы знаний
Вознаграждение за ответ
Показать полностью
Найденные решения
10. CaptainMorgan 12.11.14 22:53 Сейчас в теме
Как бы мы не меняли типы цен в процессе редактирования документа - это все интерактив.
Основные проверки и установки значений надо делать в процедуре ПередЗаписью
Только там можно исключить все намеренные или случайные ошибки ввода.
AlexeyPapanov; +1 Ответить
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
3. Cooler 22 09.11.14 23:03 Сейчас в теме
(1)
подскажите как реализовать?
Подсказать могу только вот что: реализовать надо не только поставленную задачу.

Еще надо подумать над тем, как и по какому критерию возвращать розничные цены при уменьшении сумы чека. Например, из-за удаления позиции или уменьшения количества.

Иначе открывается широкий простор для жульничества продавцов.
5. OPM 352 09.11.14 23:18 Сейчас в теме
(1) добавь процедуру проверки/ подстановки на добавление позиции, при удалении возвращай розничную цену и снова запускай процедуру проверки суммы.
2. Chameleon1980 09.11.14 23:00 Сейчас в теме
только на новую строку цена старая встает?
остальные не пересчитывает?
4. AlexeyPapanov 468 09.11.14 23:14 Сейчас в теме
(2) Chameleon1980, нет, старые строки остаются прежними, разумеется.

(3) Cooler, меня это не волнует. мне нужно решить задачу, а не находить причины, почему ее решать не надо.
об уменьшении суммы я пока не думал, спасибо, это я учту.

но все же. я порылся в модуле формы инт.кассира - не нашел я там, откуда берется цена при вводе новой строки.

конечно, можно пересчет вставить перед закрытием чека или повесить его на отдельную кнопку. но это не совсем здорово.
7. insurgut 208 10.11.14 07:13 Сейчас в теме
(4) El_Loco, если вас это не волнует, то печально :( Вам никто не сказал, что решать задачу не надо. Наоборот - если решать, то сразу предусматривать варианты, которые предупредят мошенничество со стороны кассиров (а они будут всегда).

Каким образом добавляется новая позиция? Руками или при помощи сканера ШК?

Проверяли ли вы саму переменную ТипЦен? Изменяется она? Или при значении "Оптовая" в колонку цены встает "Розничная"? Это факт? Сравнивали цены в регистре? Может оптовая = розничной в каком-то случае?

Проверьте, что у вас со складом? Не является ли он розничным? В этом случае цена будет рассчитываться иначе, а именно:
	Если Склад <> Неопределено И Склад.ВидСклада = Перечисления.ВидыСкладов.Розничный Тогда
		Цена = УправлениеРозничнойТорговлей.ПолучитьПродажнуюЦену(ДатаЦен, Номенклатура,
		   Характеристика, Единица, Склад, УсловиеПродаж);


P.S. Кстати, самый простой способ "возврата" к розничному типу цен - при изменении строк ТЧ или номенклатуры/количества в строке всегда проверять каков итог в розничных ценах (запрос у вас уже есть). Если он становится меньше порога и тип цены <> розничному - откатываемся. Т.е. добавить аналогичную проверку просто.
Правда если сеть большая и рабочих мест много - это не очень красивая проверка будет.
PhoenixAOD; kasper076; AlexeyPapanov; +3 Ответить
8. AlexeyPapanov 468 10.11.14 09:36 Сейчас в теме
(7) insurgut, товар планируется вводить сканером, но у себя я проверяю руками. Тут я понимаю, если сканируем, надо отслеживать событие по колонке ШК.
Для проверки типа цен я вывел на форму элемент управления соответствующим реквизитом. см. скриншот. При пересчете он меняется.
Склад розничный.
Цены я назначил, с ними все ок.
А в каком модуле вы нашли этот код?

Обратную проверку я сделаю - это несложно. Рабочих мест у меня будет одно-два. Ни о какой сети магазинов речи не идет ;)
9. insurgut 208 10.11.14 09:54 Сейчас в теме
(8) El_Loco, в форме регистрации продаж в модуле СШКНоменклатура имеем:
СтруктураПодбора = РаботаСТорговымОборудованием.СформироватьСтруктуруПодбора(Дата, Номенклатура, Характеристика,
	                                                Серия, Качество, Единица,
	                                                Количество, мВалютаРегламентированногоУчета,
	                                                Неопределено, мУказаниеСкладовВТЧ,
	                                                ТипЦен, , , УсловиеПродаж, Склад);


В нем и осуществляется указанная выше проверка.

В любом случае - связано это именно с тем, что склад у вас розничный. И вы хотите изменить типовую схему продаж с этого склада (розничный склад торгует только по цене, указанной в качестве отпускной для этого склада).
6. Chameleon1980 10.11.14 00:33 Сейчас в теме
не вариант - я бы покопался отчего так
10. CaptainMorgan 12.11.14 22:53 Сейчас в теме
Как бы мы не меняли типы цен в процессе редактирования документа - это все интерактив.
Основные проверки и установки значений надо делать в процедуре ПередЗаписью
Только там можно исключить все намеренные или случайные ошибки ввода.
AlexeyPapanov; +1 Ответить
11. AlexeyPapanov 468 12.11.14 23:08 Сейчас в теме
(10) CaptainMorgan, спасибо! это дельный совет.
я сделал по похожей схеме, только пересчет вставил в процедуру закрытия чека, а на форму вывел надпись для отображения текущей суммы в оптовых ценах.
но даже после нажатия на закрытие чека можно отказаться.

одно смущает: если подключен фискальник, что будет сделано первым - печать чека на ФР или запись (проведение чека).
т.е. если мы сделаем пересчет подпиской на событие ПередЗаписью, то может получиться так, что на ФР вылезет чек не в тех ценах, что нужно.
13. insurgut 208 13.11.14 08:13 Сейчас в теме
(11) El_Loco, вначале чек ФР, потом проведение документа. Получается вы делаете пересчет скидок, даже не посмотрев, на каком этапе печатается чек ФР? Вам по сути-то надо было пару строк на форме кассира изменить корректно.
14. AlexeyPapanov 468 13.11.14 09:46 Сейчас в теме
(13) insurgut, вот меня радуют такие комментарии - мол, я то знаю как и где, но вы, батенька, дурень)
(12) вот для этого я и вывел на форму итог в оптовых ценах, чтобы кассир смог всегда знать итог.
пересчет скидок - это вы про смену типа цен или именно про пересчет скидок? потому как там есть одноименная процедура.

склад кстати был у клиента оптовый. я у себя тестил на розничном складе.

как бы там ни было - это не совсем оптимально, загружать/выгружать ТЧ в процессе. достаточно показывать итог, а смену делать в самом конце "перед" закрытием чека и так, чтобы кассир изменить тип цен уже не мог.
нажал "закрыть чек", его спросили "сумма выше порога. можем сменить цены. да/нет?". а дальше уже пересчитываем и закрываем или просто закрываем.
и не нужно никаких обратных пересчетов в случае изменения ТЧ.
15. insurgut 208 13.11.14 10:08 Сейчас в теме
(14) El_Loco, не совсем правильно - я вам выше показал места, где надо копать и ставить проверки. Кассир сам ничего не сможет сменить и так, потому что на форме реквизита ТипЦен доступного для изменения быть не должно (вы его насколько помню выводили только для проверки). Я конечно могу доработать "как надо", но мне за это не заплатят, поэтому я подсказал где смотреть :)
12. insurgut 208 13.11.14 08:11 Сейчас в теме
(10) CaptainMorgan, т.е. покупатель узнает, сколько ему заплатить только после того, как документ будет записан в ИБ? А как-же розница с ее гибкими механизмами акций все это делает на форме у кассира?
Оставьте свое сообщение

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