gifts2017

Подбор подарков в табличную часть документа Чек ККМ для УТ 11.0.9.14

Опубликовал Игорь (VIA_1C) в раздел Обработки - Ценообразование, прайсы

Разбираясь с функционалом УТ 11 в части скидок и наценок с удивлением обнаружил, что при использовании скидок с типом Подарок, номенклатуру из сегмента подарков, необходимо добавлять в Чек ККМ вручную и никаких предупреждений и сообщений пользователю, об этом факте, не выводится.

 

Итак, релиз УТ 11.0.9.14, необходимо в документе Чек ККМ автоматически показать окно выбора номенклатуры для подарков, если «сработала» скидка такого типа. Для этого необходимо выполнить следующие действия:

1)      Создаем общий модуль my_СкидкиНаценки, в свойствах устанавливаем Клиент, Сервер. Текст модуля:

 

&НаКлиенте

Процедура my_ОткрытьПодборПодарков(СегментПодарков, ФормаВладелец) Экспорт

               

                //вызываем форму подбора номенклатуры с отбором по сегменту, в котором находятся подарки

                Для каждого Строка Из СегментПодарков Цикл

                               Форма = ПолучитьФорму("Справочник.Номенклатура.Форма.ФормаВыбора", , ФормаВладелец);

                               Форма.СегментНоменклатуры = Строка.Значение;

                               ОбщегоНазначенияКлиентСервер.УстановитьПараметрДинамическогоСписка(Форма.Список, "СегментНоменклатуры", Строка.Значение, ЗначениеЗаполнено(Форма.СегментНоменклатуры));

                               Форма.Открыть();

                КонецЦикла;  

               

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

 

 

&НаСервере

Функция my_ОбработкаСкидокТипаПодарок(ТаблицаСкидок) Экспорт

               

              //формируем структуру, в которой запоминаем сегменты номенклатуры, из которых будут выбираться подарки 

               СписокСегментовПодарков = Новый Структура;

               

                Для каждого Строка Из ТаблицаСкидок Цикл

                               Если Строка.СкидкаНаценка.СпособПредоставления = Перечисления.СпособыПредоставленияСкидокНаценок.Подарок Тогда

                                               СписокСегментовПодарков.Вставить("Сегмент", Строка.СкидкаНаценка.СегментПодарков);

                               КонецЕсли;

                КонецЦикла;

               

                Возврат СписокСегментовПодарков;

КонецФункции

 

 

2)      В модуле формы ФормаДокументаМастер документа ЧекККМ добавляем следующий код:

//my begin

&НаКлиенте

Перем my_флПодаркиДобавлены;  //Истина - подраки уже добавлены в табличную часть документа ЧекККМ

//my end

 

&НаКлиенте

Процедура ПриОткрытии(Отказ)

 

….

                //my begin

                //необходимо добавить подарки, в табличную часть документа, если сработает скидка с типом "Подарок"

                my_флПодаркиДобавлены = Ложь;

                //my end

               

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

 

&НаКлиенте

Процедура Расчет(Команда)

 

….

 

                       Если (ИспользоватьАвтоматическиеСкидкиВПродажах

                               И ПараметрыПримененияСкидок.НазначеныСкидки)

                               ИЛИ (Не КонтрольНаСкладеОтключен) Тогда

                              

                               Результат = ВыполнитьЧастьРасчетаНаСервере(ВозвращенноеЗначениеУправляемыеСкидки);

                               Если Не Результат.РасчетВыполненУспешно Тогда

                                               Возврат;

                               КонецЕсли;

                              

                               //my begin

                              //если подарки еще не добавлены в ТЧ и заполнена структура со списком сегментов, из которых необходимо выбирать подарки, то

                             //открываем форму подбора номенклатуры с отбором по сегменту, из которого будут выбираться подарки 

                               Если (НЕ my_флПодаркиДобавлены) И (Результат.СтруктураСообщений.СписокСегментовПодарков.Количество() > 0) Тогда

                                              my_СкидкиНаценки.my_ОткрытьПодборПодарков(Результат.СтруктураСообщений.СписокСегментовПодарков, ЭтаФорма);

                               КонецЕсли;

                               //my end

                              

                               Если Результат.СтруктураСообщений <> Неопределено И Результат.СтруктураСообщений.Сообщения.Количество() > 0 И Результат.СтруктураСообщений.АвтоматическиОткрывать Тогда

                                               ОткрытьФорму("ОбщаяФорма.СообщенияСкидокНаценок", Результат.СтруктураСообщений, ЭтаФорма, УникальныйИдентификатор);

                               КонецЕсли;

                              

                КонецЕсли;

 

…

 

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

 

&НаСервере

Функция РассчитатьСкидкиНаценкиНаСервере(СтруктураПараметры)

 

….

 

              //my begin

              //после штатного расчета скидок, проверяем применяется ли к данному документу скидка с типом "Подарок", если применяется, то

             //формируем структуру, в которой запоминаем сегменту из которых будут выбираться подарки 

               СписокСегментовПодарков = my_СкидкиНаценки.my_ОбработкаСкидокТипаПодарок(ПримененныеСкидки.ТаблицаСкидкиНаценки);

               Если СписокСегментовПодарков.Количество() > 0 Тогда

                               СтруктураСообщений.Вставить("СписокСегментовПодарков", СписокСегментовПодарков);

               КонецЕсли;

               //my end

              

               Возврат СтруктураСообщений;

              

КонецФункции

 

//my begin

&НаКлиенте

Процедура ОбработкаВыбора(ВыбранноеЗначение, ИсточникВыбора)

             

              //обрабатываем результаты подбора из формы подбора номенклатуры для текущего сегмента подарков 

               Если ИсточникВыбора.ИмяФормы = "Справочник.Номенклатура.Форма.ФормаВыбора" Тогда

                               my_ДобавитьТоварВТЧ(ВыбранноеЗначение);

                               ВернутьсяКПодборуТоваров(Команды.Найти("ВернутьсяКПодборуТоваров"));

                               ТоварыНоменклатураПриИзменении(Элементы.ТоварыНоменклатура);

                              

                               //подарки добавлены в ТЧ. Необходимо, чтобы при повторном нажатии на кнопку Расчет, опять не открывалась форма для подбор подарка

                               my_флПодаркиДобавлены = Истина; 

               КонецЕсли;

                              

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

 

&НаСервере

Процедура my_ДобавитьТоварВТЧ(Товар)

              //добавляем выбранный подарок в ТЧ документа

              ТекущаяСтрока = Объект.Товары.Добавить();

               ТекущаяСтрока.Номенклатура = Товар;

               ТекущаяСтрока.Количество = 1;

              

               Элементы.Товары.ТекущаяСтрока = ТекущаяСтрока.ПолучитьИдентификатор();

КонецПроцедуры  //my_ДобавитьТоварВТЧ

//my end

 

 

В итоге получаем в документе ЧекККМ,  если в документе применяется скидка с типом «Подарок», при нажатии кнопки Расчет, появляется окно выбора номенклатуры из сегмента подарков. После выбора подарка, указываем его количество и повторно нажимаем кнопку Расчет, чтобы сработал штатный алгоритм разброса стоимости подарка на остальные строки чека.

 

P.S. Платформу 8.2 только недавно начал осваивать, поэтому просьба сильно не пинать, если кому то код придется не по душе ))

 

 

 

См. также

Подписаться Добавить вознаграждение
Комментарии
1. Роман Морозов (vertkov2010) 11.12.12 15:22
Все супер но в конфе УТ 11.0.9.14 выдает ошибку мне подскажи в чем ошибка
//Если СписокСегментовПодарков.Количество() > 0 Тогда
//СтруктураСообщений.Вставить("СписокСегментовПодарков", СписокСегментовПодарков);
//КонецЕсли;
2. Роман Морозов (vertkov2010) 11.12.12 15:48
и можно ли организовать выбор подарка автоматически из сегмента, а не вручную из сегмента
3. Игорь (VIA_1C) 12.12.12 07:18
Выложил cf измененой конфигурации, скачивай, разбирайся. Мой код помечен комментариями
//my begin
...
//my end

Ссылка на cf конфиги:
http://narod.ru/disk/64430719001.2c6525c7c0970ec4afc0c550df244cc9/%D0%A3%D0%A2_11.0.9.14_%D0%98%D0%B7%D0%BC%D0%9F%D0%BE%D0%B4%D0%B0%D1%80%D0%BA%D0­%B8%D0%92%D0%A7%D0%B5%D0%BA%D0%9A%D0%9A%D0%9C.cf.html
4. Игорь (VIA_1C) 12.12.12 07:19
(2) vertkov2010,

можно, но пока некогда этим заниматься, да и не понятно по каким критериям автоматически выбирать подарок
5. Роман Морозов (vertkov2010) 12.12.12 08:54
Привет. мне начальство сказало срочно
организовать выбор подарка автоматически из сегмента, а не вручную из сегмента , там в условие есть условие подарок 1 шт из сегмента Подарок допустим. Вот и необходимо при открытии подбора выбора подарка смотреть условие и выводит отбор именно по этому сегменту и автоматически выбирать подарок по алфавитному порядку
А с кодом немножко не судьба. вот твой пример достаточно понятен кстати.
Ответь пожалуйста. Отблагодарю
6. Игорь (VIA_1C) 12.12.12 09:27
(5) при открытии подбора подарка устанавливается фильтр по сегменту, из которого выбираются подарки. Автоматический подбор подарков тебе придется самому допиливать, мне пока некогда этим заниматься
7. Роман Морозов (vertkov2010) 12.12.12 10:50
(6) VIA_1C, фильтр по сегменту подарка у тебя там нет . Я самому каким командами все это сделать не могу понять
8. Игорь (VIA_1C) 12.12.12 11:33
(7) фильтр есть, вот этот кусок кода отвечает за его установку

Процедура my_ОткрытьПодборПодарков(СегментПодарков, ФормаВладелец) Экспорт



Для каждого Строка Из СегментПодарков Цикл

Форма = ПолучитьФорму("Справочник.Номенклатура.Форма.ФормаВыбора", , ФормаВладелец);

Форма.СегментНоменклатуры = Строка.Значение;

ОбщегоНазначенияКлиентСервер.УстановитьПараметрДинамическогоСписка(Форма.Список, "СегментНоменклатуры", Строка.Значение, ЗначениеЗаполнено(Форма.СегментНоменклатуры));

Форма.Открыть();

КонецЦикла;



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


скачай cf на который я дал ссылку и накати на свою конфигу...у меня все работает
9. Роман Морозов (vertkov2010) 12.12.12 15:09
(8) VIA_1C, да скачал посмотрю. спасибо
10. Роман Ложкин (webester) 14.12.12 07:38
А задокументировать было слабо? Какая процедура, что делает и за что отвечает. Нормально описать что добавил и зачем. Да хотя бы в коде хоть какие то коменты, тяп ляп, нате кушайте не обляпайтесь, ероры лезут, например такие да не моя проблема, и человек пусть голову ломает, в чем тут проблема и что автор имел ввиду.
11. Игорь (VIA_1C) 14.12.12 07:40
(10) а скачать cf из (3) слабо и самому разобраться? )
12. Роман Ложкин (webester) 14.12.12 07:51
Скачал уже, разбираюсь, если пишешь шарады я как бы думал, что это на другом ресурсе. Здесь по идее должны быть темы типа:
"хочу сделать вот это, для этого добавил модуль туда то, и здесь получил вот это."
Тогда ошибка находится за две минуты и я бы показал где поправить, вместо того, что бы плеваться.
а у тебя:
написал вот это, догадайтесь, где я ошибся и почему?
13. Роман Ложкин (webester) 14.12.12 07:56
Я это к тому, что статью хорошо бы поправить если ты конечно написал ее для людей.
14. Максим Александрович (sadam_max) 21.03.13 14:40
cf-ник пропал надо еще разок выложить)) выложите пожалуйста