() Решил переделать. Не нравиться мне в этом коде то что, проверка идет уже после создания чека и нет обработки возврата оплаты по карте.
Тут проверка идет до создания чека. И можно контролировать не только алкогольную продукцию я любую указанную в сегменте.
&НаСервере
Функция ПроверитьЗапрет()
СтрокаОшибки = "";
ТекущаяДатаСеанса = ТекущаяДатаСеанса();
ЗапретУстановлен = Ложь;
СкидкиНаценкиСерверПереопределяемый.ПроверитьЗапретРозничнойПродажиТаблицыТоваров(Объект, "Товары", ЗапретУстановлен, СтрокаОшибки, ТекущаяДатаСеанса, Ложь);
Возврат ЗапретУстановлен;
КонецФункции
&НаКлиенте
&ИзменениеИКонтроль("СоздатьЧеки")
Процедура ЗП_СоздатьЧеки(Отказ, Печать)
Перем Ответ;
Ответ = "";
#Вставка
Если ПроверитьЗапрет() Тогда
Отказ = Истина;
ОбработатьОтказОтОплаты();
ТекстЗапретаПродаж = "Время продаж указанной продукции истекло!";
ОбщегоНазначенияРТКлиент.ВывестиИнформациюДляРМКУправляемой(НСтр("ru = 'Запрет продаж.'"), ТекстЗапретаПродаж);
Если ДанныеОтправленыВБанк Тогда
ОбработатьОшибочноеПробитиеЧека();
КонецЕсли;
Возврат;
КонецЕсли;
#КонецВставки
Если Объект.ВидОперации = ПредопределенноеЗначение("Перечисление.ВидыОперацийЧекККМ.Возврат") Тогда
ПроверитьЧтоНетОплатыПодарочнымСертификатом("Оплата", Отказ, Ответ, Истина);
Если Отказ Тогда
ОбработатьОтказОтОплаты();
ОбщегоНазначенияРТКлиент.ВывестиИнформациюДляРМКУправляемой(НСтр("ru = 'Ошибка возврат товара'"), Ответ);
Возврат;
КонецЕсли;
Иначе
ПроверитьДвиженияСерийныхНомеровДляПогашения(Отказ, Ответ, ОбщегоНазначенияКлиент.ДатаСеанса());
Если Отказ Тогда
ОбработатьОтказОтОплаты();
ОбщегоНазначенияРТКлиент.ВывестиИнформациюДляРМКУправляемой(
НСтр("ru = 'Ошибки погашения подарочных сертификатов'"), Ответ);
Если ДанныеОтправленыВБанк Тогда
ОбработатьОшибочноеПробитиеЧека();
КонецЕсли;
Возврат;
КонецЕсли;
КонецЕсли;
ПечатьПакетаДокументовВозврат = (Объект.ВидОперации = ПредопределенноеЗначение("Перечисление.ВидыОперацийЧекККМ.Возврат")
И ИспользоватьНастройкуРМК И НаборПравИНастроек.ПриВозвратеРаспечатыватьПакетДокументов);
МассивСсылокЧеков = Новый Массив;
Если ТабличноеПолеЧеков.Количество() > 1 Тогда
ПараметрыОперации = Новый Структура();
ПараметрыОперации.Вставить("ПечатьПакетаДокументовВозврат", ПечатьПакетаДокументовВозврат);
ПараметрыОперации.Вставить("Отказ", Отказ);
ПараметрыОперации.Вставить("Печать", Печать);
ПараметрыОперации.Вставить("МассивСсылокЧеков", МассивСсылокЧеков);
ПараметрыОперации.Вставить("ПерваяОрганизация", Истина);
ПараметрыОперации.Вставить("ЧекККМСсылка", Неопределено);
ПараметрыОперации.Вставить("ТабличноеПолеЧеков", ТабличноеПолеЧеков);
ПараметрыОперации.Вставить("КоличествоЧеков", ТабличноеПолеЧеков.Количество());
ПараметрыОперации.Вставить("ТекущийЧек", 0);
ЭтотОбъект.Доступность = Ложь;
ПробитьЧекККМСложныйСлучайЗавершение(Неопределено, ПараметрыОперации);
Иначе
// Простой случай
ПараметрыОперации = Новый Структура();
ПараметрыОперации.Вставить("ПечатьПакетаДокументовВозврат", ПечатьПакетаДокументовВозврат);
ПараметрыОперации.Вставить("Отказ", Отказ);
ПараметрыОперации.Вставить("Печать", Печать);
ПараметрыИнформации = ОбщегоНазначенияРТКлиентСервер.ВыводимаяВРМКИнформация();
ЧекККМСсылка = ЗаписатьЧекККМПоВсемДанным(ТабличноеПолеЧеков[0].Организация, ПараметрыОперации, ПараметрыИнформации);
ТабличноеПолеЧеков[0].ЧекККМСсылка = ЧекККМСсылка;
Если ПараметрыОперации.Отказ Тогда
Отказ = ПараметрыОперации.Отказ;
ОбщегоНазначенияРТКлиент.ОткрытьФормуИнформацииДляРМКУправляемой(ПараметрыИнформации);
Если ДанныеОтправленыВБанк Тогда
ОбработатьОшибочноеПробитиеЧека();
КонецЕсли;
Возврат;
КонецЕсли;
СтатусЧекаККМ = ПредопределенноеЗначение("Перечисление.СтатусыЧековККМ.ПустаяСсылка");
ПараметрыЗаполненияЧекаККМ = Новый Структура;
ПараметрыОперации.Вставить("ЧекККМСсылка", ЧекККМСсылка);
ПараметрыОперации.Вставить("МассивСсылокЧеков", МассивСсылокЧеков);
ЭтотОбъект.Доступность = Ложь;
Оповещение = Новый ОписаниеОповещения("ПробитьЧекККМПростойСлучайЗавершение", ЭтотОбъект, ПараметрыОперации);
ПробитьЧекККМ(Оповещение, ЧекККМСсылка, ТабличноеПолеЧеков[0].КассаККМ, ПараметрыЗаполненияЧекаККМ);
КонецЕсли;
Отказ = ПараметрыОперации.Отказ;
КонецПроцедуры
Показать