gifts2017

Акции и праздники в ЧекККМ

Опубликовал Дмитрий Шарнин (xdim) в раздел Обработки - Обработка документов

Для Розницы 1.0 при записи чека просматривается регистр сведений на предмет акций, и вписывается в комментарий чека.

Добрый день, кого заинтересовало.

Накопилось конечно много за годы работы, но вот решил начать с простого.

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

Добавил регистр сведений периодический в день с измерением магазин(справочник.магазин) и ресурсом текстовым(Праздник).

Еще реквизит создатель(справочник.пользователи) для удобства разбора полетов.

 

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

На форме добавил кнопочку акция для вызова формы, которое облегчает занесение данных в регистр. Не руками ж нам все это вбивать

вбиваем период вручную, или с помощью кнопки период.

Текст акции. и список магазинов. Можно через подбор наколотить.

Затем жмакаем на кнопку создать акцию и проставляются строки в регистре.

Вообщемто реализован пакетный ввод, то есть можно открыть форму и нажать создать акцию, система сама предложит заполнить нужную информацию.

КОД:

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


Процедура ПериодНажатие()
НастройкаПериода = новый НастройкаПериода;
НастройкаПериода.УстановитьПериод(НачалоАкции, ?(КонецАкции='0001-01-01', КонецАкции, КонецДня(КонецАкции)));
НастройкаПериода.РедактироватьКакИнтервал = Истина;
НастройкаПериода.РедактироватьКакПериод = Истина;
НастройкаПериода.ВариантНастройки = ВариантНастройкиПериода.Период;
Если НастройкаПериода.Редактировать() Тогда
НачалоАкции = НастройкаПериода.ПолучитьДатуНачала();
КонецАкции = НастройкаПериода.ПолучитьДатуОкончания();
КонецЕсли;
КонецПроцедуры

Процедура НачалоАкцииПриИзменении(Элемент)
Если КонецАкции = '00010101' или КонецАкции
НачалоАкции = НачалоДня(НачалоАкции);
КонецАкции = НачалоДня(НачалоАкции);

Иначе
НачалоАкции = НачалоДня(НачалоАкции);

КонецЕсли;
КонецПроцедуры

Процедура СоздатьАкциюЕКНажатие(Элемент)
создаем = Ложь;
Если Стрдлина(сокрлп(праздник))=0 тогда
Предупреждение("Текст АКЦИИ не введен!");

иначе
если Магазины.Количество()=0 тогда
Ответ = КодВозвратаДиалога.Да;
Режим = РежимДиалогаВопрос.ДаНет;

пока Ответ = КодВозвратаДиалога.да цикл
формамагазинов = Справочники.Магазины.ПолучитьФормуВыбора();
ВыбралиМагазин = формамагазинов.ОткрытьМодально();
Если ВыбралиМагазин = Неопределено Тогда
Текст = "ru = ""Нажмите на магазин два раза для выбора! Попробуете еще раз?"";"
+ " en = ""Do you want to continue?""";
Иначе
Магазины.Добавить(ВыбралиМагазин);
Текст = "ru = ""добавить еще магазин?"";"
+ " en = ""Do you want to continue?""";
КонецЕсли;
Ответ = Вопрос(НСтр(Текст), Режим, 0);
конецЦикла;
создаем=?(Магазины.Количество()=0,Ложь,Истина);
Иначе
создаем = Истина;
конецесли;

Если НачалоАкции<>'00010101' и КонецАкции <> '00010101' then

else
Сообщить("Выберите период!");
ПериодНажатие();
КонецЕсли;
Если НачалоАкции<>'00010101' и КонецАкции <> '00010101' then

else
Сообщить("Период не выбран!");
создаем=Ложь;
КонецЕсли;

Если создаем Тогда
Если год(КонецАкции)>Год(НачалоАкции) Тогда
ДнейВАкции = ДеньГода(КонецАкции)-ДеньГода(НачалоАкции)+(ДеньГода(КонецГода(КонецАкции)));
Иначе
ДнейВАкции = ДеньГода(КонецАкции)-ДеньГода(НачалоАкции);
КонецЕСли;

//Для Строка=1 по магазины.количество() Цикл
Для каждого Магазин из магазины.ВыгрузитьЗначения() Цикл
Для ДатаАкции=0 по ДнейВАкции Цикл
ДеньАкции = НачалоАкции + ДатаАкции*24*60*60;
Акции = РегистрыСведений.ПраздниковИАкций;
НаборЗнач = Акции.СоздатьНаборЗаписей();
НаборЗнач.Отбор.Период.Установить(ДеньАкции, Истина);
НаборЗнач.Отбор.Магазин.Установить(Магазин, Истина);
НаборЗнач.Прочитать();
Если НаборЗнач.Количество()=0 Тогда

Запись = НаборЗнач.Добавить();
запись.Магазин = Магазин;
запись.Праздник = Праздник;
запись.Период = ДеньАкции;
запись.Создатель = ПараметрыСеанса.ТекущийПользователь;
ИначеЕсли НаборЗнач.Количество()=1 Тогда
//Запись = НаборЗнач[0];
//запись.Праздник = Праздник;
//запись.Создатель = ПараметрыСеанса.ТекущийПользователь;
НаборЗнач[0].Праздник = Праздник;
НаборЗнач[0].Создатель = ПараметрыСеанса.ТекущийПользователь;
КонецЕсли;
НаборЗнач.Записать(Истина);
НаборЗнач.Очистить();
КонецЦикла;
КонецЦикла;
Иначе
Сообщить("Не все так гладко, проверьте данные.");
КонецЕсли;
КонецЕсли;

КонецПроцедуры

Процедура УдалитьНажатие(Элемент)
создаем = Ложь;
Если сокрлп(праздник)=0 тогда
сообщить("Поле АКЦИЯ пусто!");
иначе
если Магазины.Количество()=0 тогда
Ответ = КодВозвратаДиалога.Да;
Режим = РежимДиалогаВопрос.ДаНет;

пока Ответ = КодВозвратаДиалога.да цикл
формамагазинов = Справочники.Магазины.ПолучитьФормуВыбора();
ВыбралиМагазин = формамагазинов.ОткрытьМодально();
Если ВыбралиМагазин = Неопределено Тогда
Текст = "ru = ""Нажмите на магазин два раза для выбора! Попробуете еще раз?"";"
+ " en = ""Do you want to continue?""";
Иначе
Магазины.Добавить(ВыбралиМагазин);
Текст = "ru = ""добавить еще магазин?"";"
+ " en = ""Do you want to continue?""";
КонецЕсли;
Ответ = Вопрос(НСтр(Текст), Режим, 0);
конецЦикла;
создаем=?(Магазины.Количество()=0,Ложь,Истина);
Иначе
создаем = Истина;
конецесли;
КонецЕсли;
Если НачалоАкции<>'00010101' и КонецАкции <> '00010101' then

else
Сообщить("Выберите период!");
ПериодНажатие();
КонецЕсли;
Если НачалоАкции<>'00010101' и КонецАкции <> '00010101' then

else
Сообщить("Период не выбран!");
создаем=Ложь;
КонецЕсли;
Если создаем Тогда
Если КонецАкции ДнейВАкции = ДеньГода(КонецАкции)-ДеньГода(НачалоАкции)+(ДеньГода(КонецГода(КонецАкции)));
Иначе
ДнейВАкции = ДеньГода(КонецАкции)-ДеньГода(НачалоАкции);
КонецЕСли;

//Для Строка=1 по магазины.количество() Цикл
Для каждого Магазин из магазины.ВыгрузитьЗначения() Цикл
Для ДатаАкции=0 по ДнейВАкции Цикл
ДеньАкции = НачалоАкции + ДатаАкции*24*60*60;
Акции = РегистрыСведений.ПраздниковИАкций;
НаборЗнач = Акции.СоздатьНаборЗаписей();
НаборЗнач.Отбор.Период.Установить(ДеньАкции, Истина);
НаборЗнач.Отбор.Магазин.Установить(Магазин, Истина);
НаборЗнач.Прочитать();
Если НаборЗнач.Количество()=1 Тогда
НаборЗнач.Удалить(0);
НаборЗнач.Записать(истина);
ИначеЕсли НаборЗнач.Количество()>1 Тогда
Для индекс=0 по НаборЗнач.Количество() Цикл
НаборЗнач.Удалить(индекс);
КонецЦикла;
НаборЗнач.Записать(истина);
КонецЕсли;
НаборЗнач.Очистить();
КонецЦикла;
КонецЦикла;
Иначе
Сообщить("Не все так гладко, проверьте данные.");
КонецЕсли;
КонецПроцедуры

 

"

Также реализовано удаление записей по магазину и периоду.

Для перезаписи достаточно указать новое наименование акции период/магазин и нажать создать.

Затем в ЧекККМ при записи создаем код смотрим новый ли это документ и заносим отталкиваясь от даты документа его строчку.

"

Если не этотобъект.проведен Тогда
   Акции = РегистрыСведений.ПраздниковИАкций;
   НаборЗнач = Акции.СоздатьНаборЗаписей();
   НаборЗнач.Отбор.Период.Установить(НачалоДня(этотобъект.дата), Истина);
   НаборЗнач.Отбор.Магазин.Установить(этотобъект.Магазин, Истина);
   НаборЗнач.Прочитать();
   Если НаборЗнач.Количество()=1 Тогда
      этотобъект.Комментарий = НаборЗнач[0].праздник;
   КонецЕсли;
КонецЕсли;

"

Скачать файлы

Наименование Файл Версия Размер
конфа с изменениями 9
.cf 24,06Mb
29.10.12
9
.cf 24,06Mb Скачать
архив с файлами конфигурации(только модуль чека и регистр) 2
.rar 26,31Kb
29.10.12
2
.rar 26,31Kb Скачать

См. также

Подписаться Добавить вознаграждение

Комментарии

1. Дмитрий Шарнин (xdim) 29.10.12 18:44
Конечно есть вариант решения через СрезПоследних, но что-то в голову сразу так все нарисовалось, да и отвечает всем требованиям. :idea:
Для написания сообщения необходимо авторизоваться
Прикрепить файл
Дополнительные параметры ответа