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