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