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