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

14.12.12

Разработка - Универсальные функции

Разбираясь с функционалом УТ 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С v8.3 Конфигурации 1cv8 Бесплатно (free)

Благодаря этим пяти строчкам можно больше не заморачиваться с загрузкой из внешних файлов. Пользуюсь везде, всегда и постоянно.

21.05.2024    21803    dimanich70    81    

146

Универсальные функции Программист Платформа 1С v8.3 Конфигурации 1cv8 Абонемент ($m)

Задача: вставить картинку из буфера обмена на форму средствами платформы 1С.

1 стартмани

18.03.2024    4223    3    John_d    11    

57

Универсальные функции Программист Стажер Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

Пришлось помучиться с GUID-ами немного, решил поделиться опытом, мало ли кому пригодится.

12.02.2024    20520    atdonya    25    

58

Инструментарий разработчика БСП (Библиотека стандартных подсистем) Механизмы типовых конфигураций Программист Стажер Платформа 1С v8.3 1С:Бухгалтерия 3.0 Бесплатно (free)

Используются для создания новых объектов в конфигурации, чтобы не забыть, что нужно сделать. Сделано на примере 1С:Бухгалтерия предприятия, в других конфигурациях могут быть другие, а могут быть и похожие объекты.

28.12.2023    6644    mrXoxot    11    

112

Универсальные функции Программист Платформа 1С v8.3 Бесплатно (free)

На заключительных этапах, когда идет отладка или доработка интерфейса, необходимо много раз переоткрыть внешний объект. Вот один из способов автоматизации этого.

30.11.2023    5692    ke.92@mail.ru    17    

65

Механизмы типовых конфигураций Программист Платформа 1С v8.3 1С:ERP Управление предприятием 2 Россия Управленческий учет Бесплатно (free)

Разбираемся, зачем в системе ЕРП созданы справочники: ключи аналитик учета, зачем созданы аналогичные по набору измерений регистры сведений. Какие проблемы они решают, какие создают новые и что с этим делать.

08.11.2023    13343    ids79    25    

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

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

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



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

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

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

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

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

КонецЦикла;



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


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