#Область ОбработчикиСобытийФормы
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
Если Параметры.Свойство("АвтоТест") Тогда
Возврат;
КонецЕсли;
КассаККМ = Параметры.КассаККМ;
Организация = Параметры.Организация;
Параметры.Свойство("Кассир", Кассир);
Период = Новый СтандартныйПериод(ВариантСтандартногоПериода.Сегодня);
ПараметрыКассыККМ = Справочники.КассыККМ.ПараметрыКассыККМ(КассаККМ);
КассаККМИспользуетсяБезПодключенияОборудования = ПараметрыКассыККМ.ИспользоватьБезПодключенияОборудования;
СтруктураСостояниеКассовойСмены = РозничныеПродажи.ПолучитьСостояниеКассовойСмены(КассаККМ);
КассоваяСмена = СтруктураСостояниеКассовойСмены.КассоваяСмена;
Если ЗначениеЗаполнено(КассоваяСмена) Тогда
ИспользуетсяККТФЗ54 = РозничныеПродажиВызовСервера.ИспользуетсяККТФЗ54(КассоваяСмена);
Иначе
ИспользуетсяККТФЗ54 = Ложь;
КонецЕсли;
ЗаполнитьТаблицуТоваров();
Элементы.Период.Видимость = (ИспользуетсяККТФЗ54 Или КассаККМИспользуетсяБезПодключенияОборудования);
ЗаполнитьПредставленияЗаголовкаКнопкиОформитьВозвратНаСервере();
Элементы.ФормаОформитьВозврат.Заголовок = ПредставленияЗаголовкаКнопкиОформитьВозврат.ОформитьВозврат;
СобытияФорм.ПриСозданииНаСервере(ЭтотОбъект, Отказ, СтандартнаяОбработка);
Если КлиентскоеПриложение.ТекущийВариантИнтерфейса() = ВариантИнтерфейсаКлиентскогоПриложения.Версия8_2 Тогда
Элементы.ГруппаИтого.ЦветФона = Новый Цвет();
КонецЕсли;
КонецПроцедуры
#КонецОбласти
#Область ОбработчикиСобытийЭлементовТаблицыФормыТаблицаСертификатов
&НаКлиенте
Процедура ТаблицаСертификатовВыбранПриИзменении(Элемент)
ТаблицаСертификатовВыбранПриИзмененииНаСервере();
КонецПроцедуры
#КонецОбласти
#Область ОбработчикиКомандФормы
&НаКлиенте
Процедура ОформитьВозврат(Команда)
ОчиститьСообщения();
Если ПодобраноПозиций = 0 Тогда
ТекстСообщения = НСтр("ru = 'Необходимо выбрать чек для оформления возврата по чеку.'", ОбщегоНазначенияКлиент.КодОсновногоЯзыка());
ОбщегоНазначенияКлиент.СообщитьПользователю(ТекстСообщения);
Возврат;
Иначе
ВыбранныеСтроки = ТаблицаСертификатов.НайтиСтроки(Новый Структура("Выбран", Истина));
ДополнительныеПараметры = Новый Структура("ВыбранныеСтроки", ВыбранныеСтроки);
ОписаниеОповещенияОЗавершении = Новый ОписаниеОповещения("ОткрытьФормуРМКДляОформленияЧекаККМВозврат", ЭтотОбъект, ДополнительныеПараметры);
Если Не ЗапроситьПодтверждениеВыбораЧекаДляВозврата(ОписаниеОповещенияОЗавершении) Тогда
ВыполнитьОбработкуОповещения(ОписаниеОповещенияОЗавершении, КодВозвратаДиалога.Да);
КонецЕсли;
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура НайтиСертификаты(Команда)
ЗаполнитьТаблицуТоваров();
КонецПроцедуры
&НаКлиенте
Процедура Подключаемый_ВыполнитьПереопределяемуюКоманду(Команда)
СобытияФормКлиент.ВыполнитьПереопределяемуюКоманду(ЭтотОбъект, Команда);
КонецПроцедуры
#КонецОбласти
#Область СлужебныеПроцедурыИФункции
#Область Прочее
&НаКлиенте
Процедура ОткрытьФормуРМКДляОформленияЧекаККМВозврат(Результат, ДополнительныеПараметры) Экспорт
Если Результат = КодВозвратаДиалога.Да Тогда
ПараметрыФормы = Новый Структура;
Строки = ДополнительныеПараметры.ВыбранныеСтроки;
ПодобранныйЧек = Строки[0].ЧекККМ;
ПараметрыОткрытия = Новый Структура;
ПараметрыОткрытия.Вставить("Товары", АдресВоВременномХранилище(ВладелецФормы.УникальныйИдентификатор));
ПараметрыОткрытия.Вставить("ЧекККМ", ПодобранныйЧек);
ПараметрыОткрытия.Вставить("Кассир", Кассир);
ПараметрыФормы.Вставить("Основание", ПараметрыОткрытия);
ОткрытьФорму("Документ.ВозвратПодарочныхСертификатов.Форма.ФормаДокументаРМК", ПараметрыФормы, ВладелецФормы);
Закрыть();
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Функция ЗапроситьПодтверждениеВыбораЧекаДляВозврата(ОповещениеОЗавершении)
Результат = Ложь;
ЧекККМКассоваяСменаОткрыта = ОповещениеОЗавершении.ДополнительныеПараметры.ВыбранныеСтроки[0].ЧекККМКассоваяСменаОткрыта;
Если ЧекККМКассоваяСменаОткрыта = Истина Тогда
Результат = Истина;
ТекстВопроса = НСтр("ru = 'Кассовая смена выбранного чека продажи отличается от текущей и ещё не закрыта.
|Если текущая кассовая смена будет закрыта раньше, это может привести к неправильному отражению в учете данных о возврате. Продолжить?'");
ПоказатьВопрос(ОповещениеОЗавершении, ТекстВопроса, РежимДиалогаВопрос.ДаНет);
КонецЕсли;
Возврат Результат;
КонецФункции
&НаСервере
Процедура ЗаполнитьПредставленияЗаголовкаКнопкиОформитьВозвратНаСервере()
ПредставленияЗаголовкаКнопкиОформитьВозврат = Новый Структура;
ПредставленияЗаголовкаКнопкиОформитьВозврат.Вставить("ОформитьВозврат", Команды.Найти(Элементы.ФормаОформитьВозврат.ИмяКоманды).Заголовок);
ПредставленияЗаголовкаКнопкиОформитьВозврат.Вставить("ОткрытьОтложенныйВозврат", НСтр("ru = 'Открыть отложенный возврат'"));
КонецПроцедуры
&НаСервере
Функция АдресВоВременномХранилище(УникальныйИдентификатор)
ПодарочныеСертификаты = ТаблицаСертификатов.Выгрузить(Новый Массив);
Для Каждого СтрокаТЧ Из ТаблицаСертификатов Цикл
Если СтрокаТЧ.Выбран Тогда
ЗаполнитьЗначенияСвойств(ПодарочныеСертификаты.Добавить(), СтрокаТЧ);
КонецЕсли;
КонецЦикла;
Возврат ПоместитьВоВременноеХранилище(ПодарочныеСертификаты, УникальныйИдентификатор);
КонецФункции
&НаСервере
Процедура ЗаполнитьТаблицуТоваров()
ТаблицаСертификатов.Очистить();
ТекстУсловияИспользуетсяККТФЗ54 = "И Т.Дата >= &ДатаНачала И Т.Дата <= &ДатаОкончания";
ТекстУсловияИспользуетсяККТФЗ54Возврат = "И Т.Дата >= &ДатаНачала";
ТекстУсловияНеИспользуетсяККТФЗ54 = "И Т.КассоваяСмена = &КассоваяСмена";
ТекстУсловияНомерЧека = "И ФискальныеОперации.НомерЧекаККМ = &НомерЧекаККМ";
ТекстУсловияВидПодарочногоСертификата =
"И Т.Ссылка В (
| ВЫБРАТЬ Т.Ссылка
|ИЗ
| Документ.РеализацияПодарочныхСертификатов.ПодарочныеСертификаты КАК Т
|ГДЕ
| Т.Ссылка.КассоваяСмена = &КассоваяСмена И Т.ПодарочныйСертификат.Владелец = &ВидПодарочногоСертификата)
|";
ТекстУсловияОрганизация = "И Т.Организация = &Организация";
ТекстЗапроса =
"ВЫБРАТЬ
| Т.Ссылка КАК Ссылка,
| Т.НомерЧекаККМ КАК НомерЧекаККМ,
| Т.КассоваяСмена КАК КассоваяСмена
|ПОМЕСТИТЬ ЧекиККМ
|ИЗ
| Документ.РеализацияПодарочныхСертификатов КАК Т
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ФискальныеОперации КАК ФискальныеОперации
| ПО Т.Ссылка = ФискальныеОперации.ДокументОснование
|ГДЕ
| Т.Статус = ЗНАЧЕНИЕ(Перечисление.СтатусыЧековККМ.Пробит)
| " + ?(ЗначениеЗаполнено(Организация), ТекстУсловияОрганизация, "") + "
| " + ?(ИспользуетсяККТФЗ54, ТекстУсловияИспользуетсяККТФЗ54, ТекстУсловияНеИспользуетсяККТФЗ54) + "
| " + ?(ЗначениеЗаполнено(НомерЧекаККМ), ТекстУсловияНомерЧека, "") + "
| " + ?(ЗначениеЗаполнено(ВидПодарочногоСертификата), ТекстУсловияВидПодарочногоСертификата, "") + "
|
|ОБЪЕДИНИТЬ ВСЕ
|
|ВЫБРАТЬ
| Т.Ссылка КАК Ссылка,
| Т.НомерЧекаККМ КАК НомерЧекаККМ,
| Т.КассоваяСмена КАК КассоваяСмена
|ИЗ
| Документ.ВозвратПодарочныхСертификатов КАК Т
|ГДЕ
| Т.Статус = ЗНАЧЕНИЕ(Перечисление.СтатусыЧековККМ.Пробит)
| " + ?(ЗначениеЗаполнено(Организация), ТекстУсловияОрганизация, "") + "
| " + ?(ИспользуетсяККТФЗ54, ТекстУсловияИспользуетсяККТФЗ54Возврат, ТекстУсловияНеИспользуетсяККТФЗ54) + "
|;
|
|///////////////////////////////////////////////////////////////////////
|";
ТекстЗапроса = ТекстЗапроса +
"ВЫБРАТЬ РАЗЛИЧНЫЕ
| ОплатаПлатежнымиКартами.Ссылка,
| ИСТИНА КАК ОплаченКартой
|ПОМЕСТИТЬ ЧекиККМОплаченныеКартами
|ИЗ
| Документ.РеализацияПодарочныхСертификатов.ОплатаПлатежнымиКартами КАК ОплатаПлатежнымиКартами
|ГДЕ
| ОплатаПлатежнымиКартами.Ссылка В (Выбрать Т.Ссылка ИЗ ЧекиККМ КАК Т)
|;
|
|
|ВЫБРАТЬ
| ПодарочныеСертификаты.Ссылка КАК ЧекККМ,
|
| ПодарочныеСертификаты.ПодарочныйСертификат КАК ПодарочныйСертификат,
| 1 КАК Количество,
| ПодарочныеСертификаты.Сумма КАК Сумма
|
|ПОМЕСТИТЬ врПодарочныеСертификаты
|ИЗ
| Документ.РеализацияПодарочныхСертификатов.ПодарочныеСертификаты КАК ПодарочныеСертификаты
|ГДЕ
| ПодарочныеСертификаты.Ссылка В (Выбрать Т.Ссылка ИЗ ЧекиККМ КАК Т)
|
|ОБЪЕДИНИТЬ ВСЕ
|
|ВЫБРАТЬ
| ПодарочныеСертификаты.Ссылка.РеализацияПодарочныхСертификатов КАК ЧекККМ,
|
| ПодарочныеСертификаты.ПодарочныйСертификат КАК ПодарочныйСертификат,
| -1 КАК Количество,
| -ПодарочныеСертификаты.Сумма КАК Сумма
|ИЗ
| Документ.ВозвратПодарочныхСертификатов.ПодарочныеСертификаты КАК ПодарочныеСертификаты
|ГДЕ
| ПодарочныеСертификаты.Ссылка В (Выбрать Т.Ссылка ИЗ ЧекиККМ КАК Т)
|;
|
|
|ВЫБРАТЬ
| ПодарочныеСертификаты.ЧекККМ КАК ЧекККМ,
| ПодарочныеСертификаты.ПодарочныйСертификат КАК ПодарочныйСертификат,
| СУММА(ПодарочныеСертификаты.Количество) КАК Количество,
| СУММА(ПодарочныеСертификаты.Сумма) КАК Сумма
|ПОМЕСТИТЬ Результат
|ИЗ
| врПодарочныеСертификаты КАК ПодарочныеСертификаты
|СГРУППИРОВАТЬ ПО
| ПодарочныеСертификаты.ЧекККМ,
| ПодарочныеСертификаты.ПодарочныйСертификат
|ИМЕЮЩИЕ
| СУММА(ПодарочныеСертификаты.Количество) > 0
|;
|
|
|ВЫБРАТЬ
| ПодарочныеСертификаты.ЧекККМ КАК ЧекККМ,
| ЕСТЬNULL(ЧекиККМ.НомерЧекаККМ, 0) КАК НомерЧекаККМ,
| ЕСТЬNULL(ЧекиККМОплаченныеКартами.ОплаченКартой, ЛОЖЬ) КАК ОплаченКартой,
|
| ПодарочныеСертификаты.ПодарочныйСертификат КАК ПодарочныйСертификат,
| ПодарочныеСертификаты.Сумма КАК Сумма,
| ВЫБОР КОГДА ЧекиККМ.КассоваяСмена <> &КассоваяСмена
| И НЕ ЧекККМКассоваяСмена.Статус = ЗНАЧЕНИЕ(Перечисление.СтатусыКассовойСмены.Закрыта)
| ТОГДА ИСТИНА
| ИНАЧЕ ЛОЖЬ
| КОНЕЦ КАК ЧекККМКассоваяСменаОткрыта
|ИЗ
| Результат КАК ПодарочныеСертификаты
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ФискальныеОперации КАК ФискальныеОперации
| ПО ПодарочныеСертификаты.ЧекККМ = ФискальныеОперации.ДокументОснование
| ЛЕВОЕ СОЕДИНЕНИЕ ЧекиККМОплаченныеКартами ПО ПодарочныеСертификаты.ЧекККМ = ЧекиККМОплаченныеКартами.Ссылка
| ЛЕВОЕ СОЕДИНЕНИЕ ЧекиККМ КАК ЧекиККМ ПО ЧекиККМ.Ссылка = ПодарочныеСертификаты.ЧекККМ
| ЛЕВОЕ СОЕДИНЕНИЕ Документ.КассоваяСмена КАК ЧекККМКассоваяСмена ПО ЧекККМКассоваяСмена.Ссылка = ЧекиККМ.КассоваяСмена
|";
Запрос = Новый Запрос(ТекстЗапроса);
Запрос.Параметры.Вставить("КассоваяСмена", КассоваяСмена);
Если ЗначениеЗаполнено(НомерЧекаККМ) Тогда
Запрос.Параметры.Вставить("НомерЧекаККМ", НомерЧекаККМ);
КонецЕсли;
Если ЗначениеЗаполнено(ВидПодарочногоСертификата) Тогда
Запрос.Параметры.Вставить("ВидПодарочногоСертификата", ВидПодарочногоСертификата);
КонецЕсли;
Если ИспользуетсяККТФЗ54 Тогда
Запрос.Параметры.Вставить("ДатаНачала", Период.ДатаНачала);
Запрос.Параметры.Вставить("ДатаОкончания", Период.ДатаОкончания);
КонецЕсли;
Если ЗначениеЗаполнено(Организация) Тогда
Запрос.Параметры.Вставить("Организация", Организация);
КонецЕсли;
ТекущаяДатаСеанса = ТекущаяДатаСеанса();
ПодобраноПозиций = 0;
Всего = 0;
ТаблицаЗначений = Запрос.Выполнить().Выгрузить();
ДанныеПодарочныхСертификатов = ПодарочныеСертификатыВызовСервера.ПолучитьДанныеПодарочныхСертификатов(ТаблицаЗначений.ВыгрузитьКолонку("ПодарочныйСертификат"));
Для Каждого Строка Из ТаблицаЗначений Цикл
ДанныеПодарочногоСертификата = ДанныеПодарочныхСертификатов[Строка.ПодарочныйСертификат];
Если Не ДанныеПодарочногоСертификата = Неопределено Тогда
Если ПодарочныеСертификатыКлиентСервер.ПодарочныйСертификатМожноВернуть(ДанныеПодарочногоСертификата, ТекущаяДатаСеанса) Тогда
СтрокаТЧ = ТаблицаСертификатов.Добавить();
ЗаполнитьЗначенияСвойств(СтрокаТЧ, Строка);
КонецЕсли;
Иначе
Продолжить;
КонецЕсли;
КонецЦикла;
КонецПроцедуры
&НаСервере
Процедура ПересчитатьНаСервере()
ПодобраноПозиций = 0;
Всего = 0;
Для Каждого СтрокаТЧ Из ТаблицаСертификатов Цикл
Если НЕ СтрокаТЧ.Выбран Тогда
Продолжить;
КонецЕсли;
ПодобраноПозиций = ПодобраноПозиций + 1;
Всего = Всего + СтрокаТЧ.Сумма;
КонецЦикла;
КонецПроцедуры
&НаСервере
Процедура ТаблицаСертификатовВыбранПриИзмененииНаСервере()
ТекущиеДанные = ТаблицаСертификатов.НайтиПоИдентификатору(Элементы.ТаблицаСертификатов.ТекущаяСтрока);
ЧекККМ = ТекущиеДанные.ЧекККМ;
ОплаченКартой = ТекущиеДанные.ОплаченКартой;
Для Каждого СтрокаТЧ Из ТаблицаСертификатов Цикл
Если СтрокаТЧ.ЧекККМ = ЧекККМ И ОплаченКартой Тогда
СтрокаТЧ.Выбран = ТекущиеДанные.Выбран;
КонецЕсли;
Если НЕ СтрокаТЧ.ЧекККМ = ЧекККМ Тогда
СтрокаТЧ.Выбран = Ложь;
КонецЕсли;
КонецЦикла;
ПересчитатьНаСервере();
КонецПроцедуры
#КонецОбласти
#КонецОбласти