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