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