новое событие
Информационный поток
Задания вакансии материалы разработки сообщения форума
Форум

Доработка механизма "Закрытие кассовой смены" для УТ 10.3

    • #1
    • 18.05.2015 22:11
    0
    Хотелось бы получить совет специалиста, по следующей задаче. Для документа "Чек ККМ" с видом на возврат, сделать флаг типа булево. При закрытии кассовой смены, необходимо, чтобы алгоритм, не брал те документы "Чек ККМ", у которых установлен флаг, как будто бы их и нет. Как можно это реализовать? Большое спасибо за ответы!
    • #2
    • 19.05.2015 06:15
    0
    Здравствуйте!
    С точки зрения реализации Вам потребуется залезть в код обработки и на отладчике найти код закрытия кассовой смены, после чего выполнить его обработку. Если не понятны куски кода, выкладывайте, по факту наличия свободного времени подскажем.
    • #3
    • 19.05.2015 09:42
    0
    Вот нашел обработку чеков ККМ, в ней есть запросы, вот в этих двух идет выборка чеков. Только я не могу понять как правильно поставить условие, чтобы он делал то, что мне нужно.
    Если КонецДня(Дата) = КонецДня(ТекущаяДата()) Тогда
    		РежимПроведения = РежимПроведенияДокумента.Оперативный;
    	Иначе
    		РежимПроведения = РежимПроведенияДокумента.Неоперативный;
    	КонецЕсли;
    
    	МассивДокументовКПроведению = Новый Массив;
    
    	ОтчетОРозничныхПродажах = СоздатьОтчетОРозничныхПродажах();
    	СоответствиеТарифов = УправлениеРозничнойТорговлей.СформироватьСоответствиеТарифовЭквайринг(ОтчетОРозничныхПродажах.ДоговорЭквайринга);
    
    	ОтчетОРозничныхПродажах.Склад = Справочники.Склады.ПустаяСсылка();
    
    	ЗапросПоЧекам = Новый Запрос;
    	ЗапросПоЧекам.УстановитьПараметр("НачДата" , НачалоДня(Дата));
    	ЗапросПоЧекам.УстановитьПараметр("КонДата" , КонецДня(Дата));
    	ЗапросПоЧекам.УстановитьПараметр("КассаККМ", КассаККМ);
    	ЗапросПоЧекам.УстановитьПараметр("СЮВозврат", Истина);
    	
    	ЗапросПоЧекам.Текст ="ВЫБРАТЬ
    	                     |	Док.Ссылка КАК Ссылка,
    	                     |	Док.СЮ_возврат
    	                     |ИЗ
    	                     |	Документ.ЧекККМ КАК Док
    	                     |ГДЕ
    	                     |	Док.Дата МЕЖДУ &НачДата И &КонДата
    	                     |	И Док.КассаККМ = &КассаККМ
    	                     |	И Док.Проведен
    	                     |	И Док.СЮ_возврат <> &СЮВозврат
    	                     |
    	                     |ДЛЯ ИЗМЕНЕНИЯ
    	                     |	Документ.ЧекККМ";
    
    	Запрос = Новый Запрос;
    	Запрос.УстановитьПараметр("НачДата"           , НачалоДня(Дата));
    	Запрос.УстановитьПараметр("КонДата"           , КонецДня(Дата));
    	Запрос.УстановитьПараметр("КассаККМ"          , КассаККМ);
    	Запрос.УстановитьПараметр("ВидОперацииПродажа", Перечисления.ВидыОперацийЧекККМ.Продажа);
    
    
    	Запрос.Текст ="ВЫБРАТЬ
    	              |	СУММА(ВЫБОР
    	              |			КОГДА ДокументЧекККМ.ВидОперации = ЗНАЧЕНИЕ(Перечисление.ВидыОперацийЧекККМ.Продажа)
    	              |				ТОГДА 1
    	              |			ИНАЧЕ -1
    	              |		КОНЕЦ) КАК КоличествоСерийныхНоменров,
    	              |	ДокументЧекККМ.Склад КАК Склад,
    	              |	ЧекККМТовары.Номенклатура КАК Номенклатура,
    	              |	ЧекККМСерийныеНомера.СерийныйНомер КАК СерийныйНомер,
    	              |	ЧекККМТовары.ХарактеристикаНоменклатуры КАК ХарактеристикаНоменклатуры,
    	              |	ЧекККМТовары.СерияНоменклатуры КАК СерияНоменклатуры,
    	              |	ЧекККМТовары.ЕдиницаИзмерения КАК ЕдиницаИзмерения,
    	              |	ЧекККМТовары.Коэффициент КАК Коэффициент,
    	              |	ЧекККМТовары.Цена КАК Цена,
    	              |	ЧекККМТовары.ПроцентСкидкиНаценки КАК ПроцентСкидкиНаценки,
    	              |	ЧекККМТовары.ПроцентАвтоматическихСкидок КАК ПроцентАвтоматическихСкидок,
    	              |	ЧекККМТовары.УсловиеАвтоматическойСкидки КАК УсловиеАвтоматическойСкидки,
    	              |	ЧекККМТовары.ЗначениеУсловияАвтоматическойСкидки КАК ЗначениеУсловияАвтоматическойСкидки,
    	              |	ДокументЧекККМ.СЮ_возврат
    	              |ИЗ
    	              |	Документ.ЧекККМ КАК ДокументЧекККМ
    	              |		ВНУТРЕННЕЕ СОЕДИНЕНИЕ Документ.ЧекККМ.Товары КАК ЧекККМТовары
    	              |		ПО (ЧекККМТовары.Ссылка = ДокументЧекККМ.Ссылка)
    	              |		ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.Номенклатура КАК СправочникНоменклатура
    	              |		ПО (СправочникНоменклатура.Ссылка = ЧекККМТовары.Номенклатура)
    	              |		ВНУТРЕННЕЕ СОЕДИНЕНИЕ Документ.ЧекККМ.СерийныеНомера КАК ЧекККМСерийныеНомера
    	              |		ПО (ЧекККМСерийныеНомера.Ссылка = ДокументЧекККМ.Ссылка)
    	              |			И (ЧекККМСерийныеНомера.КлючСвязи = ЧекККМТовары.КлючСвязи)
    	              |ГДЕ
    	              |	ДокументЧекККМ.Дата МЕЖДУ &НачДата И &КонДата
    	              |	И ДокументЧекККМ.Проведен
    	              |	И ДокументЧекККМ.КассаККМ = &КассаККМ
    	              |	И (НЕ СправочникНоменклатура.Комплект)
    	              |
    	              |СГРУППИРОВАТЬ ПО
    	              |	ДокументЧекККМ.Склад,
    	              |	ЧекККМТовары.Номенклатура,
    	              |	ЧекККМСерийныеНомера.СерийныйНомер,
    	              |	ЧекККМТовары.ХарактеристикаНоменклатуры,
    	              |	ЧекККМТовары.СерияНоменклатуры,
    	              |	ЧекККМТовары.ЕдиницаИзмерения,
    	              |	ЧекККМТовары.Коэффициент,
    	              |	ЧекККМТовары.Цена,
    	              |	ЧекККМТовары.ПроцентСкидкиНаценки,
    	              |	ЧекККМТовары.ПроцентАвтоматическихСкидок,
    	              |	ЧекККМТовары.УсловиеАвтоматическойСкидки,
    	              |	ЧекККМТовары.ЗначениеУсловияАвтоматическойСкидки,
    	              |	ДокументЧекККМ.СЮ_возврат
    	              |
    	              |ИМЕЮЩИЕ
    	              |	СУММА(ВЫБОР
    	              |			КОГДА ДокументЧекККМ.ВидОперации = ЗНАЧЕНИЕ(Перечисление.ВидыОперацийЧекККМ.Продажа)
    	              |				ТОГДА 1
    	              |			ИНАЧЕ -1
    	              |		КОНЕЦ) > 0
    	              |;
    	              |
    	              |////////////////////////////////////////////////////////////////////////////////
    	              |ВЫБРАТЬ
    	              |	ЗНАЧЕНИЕ(Документ.ЧекККМ.ПустаяСсылка) КАК Документ,
    	              |	ТоварыБезКомплектов.Комплект КАК Комплект,
    	              |	ТоварыБезКомплектов.Склад КАК Склад,
    	              |	ТоварыБезКомплектов.Номенклатура КАК Номенклатура,
    	              |	ТоварыБезКомплектов.Количество КАК Количество,
    	              |	ТоварыБезКомплектов.ХарактеристикаНоменклатуры КАК ХарактеристикаНоменклатуры,
    	              |	ТоварыБезКомплектов.СерияНоменклатуры КАК СерияНоменклатуры,
    	              |	ТоварыБезКомплектов.ЕдиницаИзмерения КАК ЕдиницаИзмерения,
    	              |	ТоварыБезКомплектов.Коэффициент КАК Коэффициент,
    	              |	ТоварыБезКомплектов.Цена КАК Цена,
    	              |	ТоварыБезКомплектов.ПроцентСкидкиНаценки КАК ПроцентСкидкиНаценки,
    	              |	ТоварыБезКомплектов.ПроцентАвтоматическихСкидок КАК ПроцентАвтоматическихСкидок,
    	              |	ТоварыБезКомплектов.УсловиеАвтоматическойСкидки КАК УсловиеАвтоматическойСкидки,
    	              |	ТоварыБезКомплектов.ЗначениеУсловияАвтоматическойСкидки КАК ЗначениеУсловияАвтоматическойСкидки,
    	              |	ТоварыБезКомплектов.Сумма КАК Сумма,
    	              |	ПУСТАЯТАБЛИЦА.( КАК КлючСтроки,  КАК КлючСвязи,  КАК Номенклатура,  КАК ХарактеристикаНоменклатуры,  КАК СерияНоменклатуры,  КАК ЕдиницаИзмерения,  КАК Количество,  КАК Цена) КАК СоставНабора,
    	              |	ПУСТАЯТАБЛИЦА.( КАК КлючСвязи,  КАК СерийныйНомер) КАК СерийныеНомераСоставНабора,
    	              |	0 КАК КлючСтроки
    	              |ИЗ
    	              |	(ВЫБРАТЬ
    	              |		Док.Номенклатура.Комплект КАК Комплект,
    	              |		Док.Ссылка.Склад КАК Склад,
    	              |		Док.Номенклатура КАК Номенклатура,
    	              |		СУММА(ВЫБОР
    	              |				КОГДА Док.Ссылка.ВидОперации = &ВидОперацииПродажа
    	              |					ТОГДА Док.Количество
    	              |				ИНАЧЕ -Док.Количество
    	              |			КОНЕЦ) КАК Количество,
    	              |		Док.ХарактеристикаНоменклатуры КАК ХарактеристикаНоменклатуры,
    	              |		Док.СерияНоменклатуры КАК СерияНоменклатуры,
    	              |		Док.ЕдиницаИзмерения КАК ЕдиницаИзмерения,
    	              |		Док.Коэффициент КАК Коэффициент,
    	              |		Док.Цена КАК Цена,
    	              |		Док.ПроцентСкидкиНаценки КАК ПроцентСкидкиНаценки,
    	              |		Док.ПроцентАвтоматическихСкидок КАК ПроцентАвтоматическихСкидок,
    	              |		Док.УсловиеАвтоматическойСкидки КАК УсловиеАвтоматическойСкидки,
    	              |		Док.ЗначениеУсловияАвтоматическойСкидки КАК ЗначениеУсловияАвтоматическойСкидки,
    	              |		СУММА(ВЫБОР
    	              |				КОГДА Док.Ссылка.ВидОперации = &ВидОперацииПродажа
    	              |					ТОГДА Док.Сумма
    	              |				ИНАЧЕ -Док.Сумма
    	              |			КОНЕЦ) КАК Сумма
    	              |	ИЗ
    	              |		Документ.ЧекККМ.Товары КАК Док
    	              |	ГДЕ
    	              |		Док.Ссылка.Дата МЕЖДУ &НачДата И &КонДата
    	              |		И Док.Ссылка.КассаККМ = &КассаККМ
    	              |		И Док.Ссылка.Проведен
    	              |		И (НЕ Док.Номенклатура.Комплект)
    	              |	
    	              |	СГРУППИРОВАТЬ ПО
    	              |		Док.Ссылка.Склад,
    	              |		Док.Номенклатура,
    	              |		Док.ХарактеристикаНоменклатуры,
    	              |		Док.СерияНоменклатуры,
    	              |		Док.ЕдиницаИзмерения,
    	              |		Док.Коэффициент,
    	              |		Док.Цена,
    	              |		Док.ПроцентСкидкиНаценки,
    	              |		Док.ПроцентАвтоматическихСкидок,
    	              |		Док.УсловиеАвтоматическойСкидки,
    	              |		Док.ЗначениеУсловияАвтоматическойСкидки,
    	              |		Док.Номенклатура.Комплект
    	              |	
    	              |	ИМЕЮЩИЕ
    	              |		СУММА(ВЫБОР
    	              |				КОГДА Док.Ссылка.ВидОперации = &ВидОперацииПродажа
    	              |					ТОГДА Док.Количество
    	              |				ИНАЧЕ -Док.Количество
    	              |			КОНЕЦ) <> 0) КАК ТоварыБезКомплектов
    	              |
    	              |ОБЪЕДИНИТЬ ВСЕ
    	              |
    	              |ВЫБРАТЬ
    	              |	Док.Ссылка,
    	              |	Док.Номенклатура.Комплект,
    	              |	Док.Ссылка.Склад,
    	              |	Док.Номенклатура,
    	              |	ВЫБОР
    	              |		КОГДА Док.Ссылка.ВидОперации = &ВидОперацииПродажа
    	              |			ТОГДА Док.Количество
    	              |		ИНАЧЕ -Док.Количество
    	              |	КОНЕЦ,
    	              |	Док.ХарактеристикаНоменклатуры,
    	              |	Док.СерияНоменклатуры,
    	              |	Док.ЕдиницаИзмерения,
    	              |	Док.Коэффициент,
    	              |	Док.Цена,
    	              |	Док.ПроцентСкидкиНаценки,
    	              |	Док.ПроцентАвтоматическихСкидок,
    	              |	Док.УсловиеАвтоматическойСкидки,
    	              |	Док.ЗначениеУсловияАвтоматическойСкидки,
    	              |	ВЫБОР
    	              |		КОГДА Док.Ссылка.ВидОперации = &ВидОперацииПродажа
    	              |			ТОГДА Док.Сумма
    	              |		ИНАЧЕ -Док.Сумма
    	              |	КОНЕЦ,
    	              |	Док.Ссылка.СоставНабора.(
    	              |		КлючСтроки,
    	              |		КлючСвязи,
    	              |		Номенклатура,
    	              |		ХарактеристикаНоменклатуры,
    	              |		СерияНоменклатуры,
    	              |		ЕдиницаИзмерения,
    	              |		Количество,
    	              |		Цена
    	              |	),
    	              |	Док.Ссылка.СерийныеНомераСоставНабора.(
    	              |		КлючСвязи,
    	              |		СерийныйНомер
    	              |	),
    	              |	Док.КлючСтроки
    	              |ИЗ
    	              |	Документ.ЧекККМ.Товары КАК Док
    	              |ГДЕ
    	              |	Док.Ссылка.Дата МЕЖДУ &НачДата И &КонДата
    	              |	И Док.Ссылка.КассаККМ = &КассаККМ
    	              |	И Док.Ссылка.Проведен
    	              |	И Док.Номенклатура.Комплект
    	              |
    	              |УПОРЯДОЧИТЬ ПО
    	              |	Склад";
    
    • #4
    • 19.05.2015 12:39
    0
    И что именно не ясно?

    В первом запросе условие Вы поставили.
    Во втором аналогично. Добавляйте свое условие во все выбоки.
    Грубо говоря, всюду, где есть условие "Дата МЕЖДУ &НачДата И &КонДата" добавляйте еще и свое.

    И удобнее вместо "Док.СЮ_возврат <> &СЮВозврат" писать просто "НЕ Док.СЮ_возврат". Это нагляднее, потом проще разбираться.

    Только не совсем поняла, что именно Вы все-таки хотите потом получить.
    У Вас будут чеки, которые не включены в "Отчет о розничных продажах".
    Но движения то по ним сформированы уже. Т.е. эти чеки в системе все равно отразились.
    Может, логичнее их просто снимать с проведения?
    Тогда они и в отчет не попадут.
    • #5
    • 19.05.2015 13:56
    0
    Лика
    И что именно не ясно?

    В первом запросе условие Вы поставили.
    Во втором аналогично. Добавляйте свое условие во все выбоки.
    Грубо говоря, всюду, где есть условие "Дата МЕЖДУ &НачДата И &КонДата" добавляйте еще и свое.

    И удобнее вместо "Док.СЮ_возврат <> &СЮВозврат" писать просто "НЕ Док.СЮ_возврат". Это нагляднее, потом проще разбираться.

    Только не совсем поняла, что именно Вы все-таки хотите потом получить.
    У Вас будут чеки, которые не включены в "Отчет о розничных продажах".
    Но движения то по ним сформированы уже. Т.е. эти чеки в системе все равно отразились.
    Может, логичнее их просто снимать с проведения?
    Тогда они и в отчет не попадут.


    Вот в идеале что нужно:
    При возврате, в чек на возврат ставим галочку, проводим, касса открывается, выдаем деньги. А при закрытии кассовой смены, нужно чтобы этот чек (с галочкой) не попадал в отчет о розничных продажах и не формировал никаких движений.
    То есть, в любом случае нужно снимать с проведения да?
    • #6
    • 19.05.2015 16:40
    0
    Я подробнее поясню, что нужно сделать. Необходимо реализовать механизм фиктивных возвратов.
    Представим что чек ккм с видом на возврат, у которого установлен флаг, это и есть фиктивный возврат. Нужно, чтобы при продаже, движения по складу выполнялись, при таком фиктивном возврате нет. Деньги выдали, а прихода на склад нет. И чтобы при закрытии кассовой смены сходились сумму в отчете о розничных продажах с реальной суммой в кассе. Вот как такое сделать? Пока даже в голове не представляю алгоритма.
    • #7
    • 20.05.2015 07:53
    • Отредактировано: 20.05.2015 07:54:10
    0
    Чтобы сходились деньги в кассе и отчете, нужно включать в "Отчет о розничных продажах" все ЧекиККМ.
    В Вашем нет смысла менять формирование "Отчета о розничных продажах", иначе деньги не сойдутся.
    Как вариант, ЧекиККМ включать все, но при проведении "Отчета" сторнировать складские движения по возвратным чекамККМ.
    • #8
    • 20.05.2015 07:54
    0
    Следующим образом. Дорабатывает "Отчет о розничных продажах" добавляя новую вкладку, куда с чеков будем кидать товары по фиктивному возврату. Добавляем дополнительную вкладку "Фиктивные возвраты". При закрытии смены собираем чеки в разные табличные части при этом движений по фиктивному возврату ТМЦ не делаем и не включаем в основные итоги документа. А вот "фиктивные возвраты", т.е. денежные средства учитывает в итогах документа стронируя сумму отчета о продажах. Таким образом чеки удаляются (в УТ 10.3 именно удаляются), но все сведения хранятся в документах смены. Такое построение позволит Вам собирать все необходимые Вам отчеты о фиктивных и реальных продажах. Конечно же стоит учесть тот факт что кассовый аппарат у Вас должен быть не фискальным, но это сейчас не проблема.
    • #9
    • 20.05.2015 13:09
    0
    И так, после много численных проб и тестов с чеками и ОПР, я определился что все таки мне нужно. А нужно мне, чтобы фиктивный ЧекККМ на возврат не делал движений по регистрам.
    Делает он их два раза.
    1. Первый это когда мы проводим чек на возврат.
    2. ОРП делает движение этого чека.

    По первому варианту оказалось все просто, при помощи объекта подписка на событие, сделал отмену проведения чеков на возврат с установленным флагом.

    А вот по второму варианту у меня загвоздка, как при проведении ОРП не делать движений по чекам с установленным флагом?
    • #10
    • 20.05.2015 14:58
    0
    Понял что свертка идет в запросе, который большой, я его сверху писал.
    Вот в нем свертка чеков, расчет количества товаров и сумм.
    Как в нем поставить условие, что если чек на возврат с флагом считать по другому.
Для участия в обсуждении Вам необходимо авторизоваться либо   зарегистрироваться