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