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