diff --git a/CommonModules/ЗагрузкаДанныхИзExcel_ЗаписьВРегистры.xml b/CommonModules/ЗагрузкаДанныхИзExcel_ЗаписьВРегистры.xml
new file mode 100644
index 0000000..ebed7d2
--- /dev/null
+++ b/CommonModules/ЗагрузкаДанныхИзExcel_ЗаписьВРегистры.xml
@@ -0,0 +1,17 @@
+
+
+
+
+ ЗагрузкаДанныхИзExcel_ЗаписьВРегистры
+
+
+ ru
+ Запись в регистры
+
+
+
+ false
+ true
+
+
+
\ No newline at end of file
diff --git a/CommonModules/ЗагрузкаДанныхИзExcel_ЗаписьВРегистры/Ext/Module.bsl b/CommonModules/ЗагрузкаДанныхИзExcel_ЗаписьВРегистры/Ext/Module.bsl
new file mode 100644
index 0000000..ce88d80
--- /dev/null
+++ b/CommonModules/ЗагрузкаДанныхИзExcel_ЗаписьВРегистры/Ext/Module.bsl
@@ -0,0 +1,285 @@
+// Запись данных в регистры 1С
+// Серверный модуль для записи движений через документ ПереносДанных
+
+&НаСервереБезКонтекста
+Функция РазрешитьОрганизацию(Наименование)
+ Если Не ЗначениеЗаполнено(Наименование) Тогда
+ Возврат Неопределено;
+ КонецЕсли;
+ Возврат Справочники.Организации.НайтиПоНаименованию(СокрЛП(Наименование), Истина);
+КонецФункции
+
+&НаСервереБезКонтекста
+Функция РазрешитьСтатьюФинансирования(Наименование)
+ Если Не ЗначениеЗаполнено(Наименование) Тогда
+ Возврат Неопределено;
+ КонецЕсли;
+ Возврат Справочники.СтатьиФинансированияЗарплата.НайтиПоНаименованию(СокрЛП(Наименование), Истина);
+КонецФункции
+
+&НаСервереБезКонтекста
+Функция РазрешитьСтатьюРасходов(Код)
+ Если Не ЗначениеЗаполнено(Код) Тогда
+ Возврат Неопределено;
+ КонецЕсли;
+ Возврат Справочники.СтатьиРасходовЗарплата.НайтиПоКоду(СокрЛП(Код));
+КонецФункции
+
+&НаСервереБезКонтекста
+Процедура ПостроитьКэшСотрудников(ТЧСотрудники, КэшСотрудников)
+ КэшСотрудников = Новый Соответствие;
+ Для Каждого Эл Из ТЧСотрудники Цикл
+ СотрСсылка = Неопределено;
+ Если ЗначениеЗаполнено(Эл.ИНН) Тогда
+ СотрСсылка = Справочники.Сотрудники.НайтиПоРеквизиту("ИНН", СокрЛП(Эл.ИНН));
+ КонецЕсли;
+ Если Не ЗначениеЗаполнено(СотрСсылка) И ЗначениеЗаполнено(Эл.СНИЛС) Тогда
+ ФЛ = Справочники.ФизическиеЛица.НайтиПоРеквизиту("СтраховойНомерПФР", СокрЛП(Эл.СНИЛС));
+ Если ЗначениеЗаполнено(ФЛ) Тогда
+ СотрСсылка = Справочники.Сотрудники.НайтиПоРеквизиту("ФизическоеЛицо", ФЛ, Истина);
+ КонецЕсли;
+ КонецЕсли;
+ Если Не ЗначениеЗаполнено(СотрСсылка) И ЗначениеЗаполнено(Эл.ФИО) Тогда
+ СотрСсылка = Справочники.Сотрудники.НайтиПоНаименованию(СокрЛП(Эл.ФИО), Истина);
+ КонецЕсли;
+ Если ЗначениеЗаполнено(СотрСсылка) Тогда
+ КэшСотрудников.Вставить(Эл.Идентификатор, Новый Структура("Сотрудник, ФизическоеЛицо", СотрСсылка, СотрСсылка.ФизическоеЛицо));
+ КонецЕсли;
+ КонецЦикла;
+КонецПроцедуры
+
+&НаСервереБезКонтекста
+Процедура ЗаполнитьТЧ(МассивДанных, МассивВзносов, МассивНДФЛ, МассивСотрудников, ТЧЗП, ТЧВзносы, ТЧНДФЛ, ТЧСотрудники)
+ ТЧЗП.Очистить();
+ ТЧВзносы.Очистить();
+ ТЧНДФЛ.Очистить();
+ ТЧСотрудники.Очистить();
+ Для Каждого Строка Из МассивДанных Цикл
+ НоваяСтрока = ТЧЗП.Добавить();
+ ЗаполнитьЗначенияСвойств(НоваяСтрока, Строка);
+ КонецЦикла;
+ Для Каждого Строка Из МассивВзносов Цикл
+ НоваяСтрока = ТЧВзносы.Добавить();
+ ЗаполнитьЗначенияСвойств(НоваяСтрока, Строка);
+ КонецЦикла;
+ Для Каждого Строка Из МассивНДФЛ Цикл
+ НоваяСтрока = ТЧНДФЛ.Добавить();
+ ЗаполнитьЗначенияСвойств(НоваяСтрока, Строка);
+ КонецЦикла;
+ Для Каждого Строка Из МассивСотрудников Цикл
+ НоваяСтрока = ТЧСотрудники.Добавить();
+ ЗаполнитьЗначенияСвойств(НоваяСтрока, Строка);
+ КонецЦикла;
+КонецПроцедуры
+
+&НаСервере
+Процедура ЗаписатьДанные(ГодЗагрузкиПараметр, ОрганизацияНаименование, СтатьяФинансированияНаименование, СтатьяРасходовКод)
+ ГодЧисло = Число(ГодЗагрузкиПараметр);
+ МесяцЧисло = Цел(Объект.МесяцЗагрузки);
+ Если ГодЧисло = 0 Тогда ГодЧисло = Год(ТекущаяДата()); КонецЕсли;
+ Если МесяцЧисло < 1 Или МесяцЧисло > 12 Тогда
+ Сообщить("Ошибка: месяц = " + МесяцЧисло + ", год = " + ГодЧисло);
+ Возврат;
+ КонецЕсли;
+ Период = Дата(ГодЧисло, МесяцЧисло, 1);
+
+ Организация = РазрешитьОрганизацию(ОрганизацияНаименование);
+ Если Не ЗначениеЗаполнено(Организация) Тогда
+ Сообщить("Не найдена организация: """ + ОрганизацияНаименование + """");
+ Возврат;
+ КонецЕсли;
+ СтатьяФинансирования = РазрешитьСтатьюФинансирования(СтатьяФинансированияНаименование);
+ СтатьяРасходов = РазрешитьСтатьюРасходов(СтатьяРасходовКод);
+
+ КэшСотрудников = Новый Соответствие;
+ ПостроитьКэшСотрудников(Объект.Сотрудники, КэшСотрудников);
+
+ ДокПеренос = Документы.ПереносДанных.СоздатьДокумент();
+ ДокПеренос.Дата = Период;
+
+ ВидРасчётаОклад = ПланыВидовРасчета.Начисления.НайтиПоНаименованию("Оклад", Истина);
+
+ // Регистр 1: НачисленияУдержанияПоСотрудникам
+ Для Каждого Строка Из Объект.ДанныеРасчетаЗП Цикл
+ ДанныеСотр = КэшСотрудников.Получить(Строка.ИдентификаторСотрудника);
+ Если ДанныеСотр = Неопределено Тогда Продолжить; КонецЕсли;
+ ФизЛицо = ДанныеСотр.ФизическоеЛицо;
+ СотрудникСсылка = ДанныеСотр.Сотрудник;
+
+ // Начисления
+ ЗаписатьНачисление(ДокПеренос, Строка, "Оклад", Строка.Оклад, Перечисления.ГруппыНачисленияУдержанияВыплаты.Начислено, Период, Организация, СтатьяФинансирования, СтатьяРасходов, ФизЛицо, СотрудникСсылка);
+ ЗаписатьНачисление(ДокПеренос, Строка, "ДоплатаСовместительство", Строка.ДоплатаСовместительство, Перечисления.ГруппыНачисленияУдержанияВыплаты.Начислено, Период, Организация, СтатьяФинансирования, СтатьяРасходов, ФизЛицо, СотрудникСсылка);
+ ЗаписатьНачисление(ДокПеренос, Строка, "ДоплатаНочные", Строка.ДоплатаНочные, Перечисления.ГруппыНачисленияУдержанияВыплаты.Начислено, Период, Организация, СтатьяФинансирования, СтатьяРасходов, ФизЛицо, СотрудникСсылка);
+ ЗаписатьНачисление(ДокПеренос, Строка, "ДоплатаПраздничные", Строка.ДоплатаПраздничные, Перечисления.ГруппыНачисленияУдержанияВыплаты.Начислено, Период, Организация, СтатьяФинансирования, СтатьяРасходов, ФизЛицо, СотрудникСсылка);
+ ЗаписатьНачисление(ДокПеренос, Строка, "НадбавкаЗаКатегорию", Строка.НадбавкаЗаКатегорию, Перечисления.ГруппыНачисленияУдержанияВыплаты.Начислено, Период, Организация, СтатьяФинансирования, СтатьяРасходов, ФизЛицо, СотрудникСсылка);
+ ЗаписатьНачисление(ДокПеренос, Строка, "НадбавкаЗаВредность", Строка.НадбавкаЗаВредность, Перечисления.ГруппыНачисленияУдержанияВыплаты.Начислено, Период, Организация, СтатьяФинансирования, СтатьяРасходов, ФизЛицо, СотрудникСсылка);
+ ЗаписатьНачисление(ДокПеренос, Строка, "ПовышающийКоэффициент", Строка.ПовышающийКоэффициент, Перечисления.ГруппыНачисленияУдержанияВыплаты.Начислено, Период, Организация, СтатьяФинансирования, СтатьяРасходов, ФизЛицо, СотрудникСсылка);
+ ЗаписатьНачисление(ДокПеренос, Строка, "СтимулирующаяВыплата", Строка.СтимулирующиеВыплаты, Перечисления.ГруппыНачисленияУдержанияВыплаты.Начислено, Период, Организация, СтатьяФинансирования, СтатьяРасходов, ФизЛицо, СотрудникСсылка);
+ ЗаписатьНачисление(ДокПеренос, Строка, "РайонныйКоэффициент", Строка.РайонныйКоэффициент, Перечисления.ГруппыНачисленияУдержанияВыплаты.Начислено, Период, Организация, СтатьяФинансирования, СтатьяРасходов, ФизЛицо, СотрудникСсылка);
+ ЗаписатьНачисление(ДокПеренос, Строка, "ПремияРазовая", Строка.ПремияРазовая, Перечисления.ГруппыНачисленияУдержанияВыплаты.Начислено, Период, Организация, СтатьяФинансирования, СтатьяРасходов, ФизЛицо, СотрудникСсылка);
+ ЗаписатьНачисление(ДокПеренос, Строка, "Отпуск", Строка.Отпуск, Перечисления.ГруппыНачисленияУдержанияВыплаты.Начислено, Период, Организация, СтатьяФинансирования, СтатьяРасходов, ФизЛицо, СотрудникСсылка);
+ ЗаписатьНачисление(ДокПеренос, Строка, "КомпенсацияЗаНеиспользованныйОтпуск", Строка.КомпенсацияЗаОтпуск, Перечисления.ГруппыНачисленияУдержанияВыплаты.Начислено, Период, Организация, СтатьяФинансирования, СтатьяРасходов, ФизЛицо, СотрудникСсылка);
+ ЗаписатьНачисление(ДокПеренос, Строка, "ВыходноеПособие", Строка.ВыходноеПособие, Перечисления.ГруппыНачисленияУдержанияВыплаты.Начислено, Период, Организация, СтатьяФинансирования, СтатьяРасходов, ФизЛицо, СотрудникСсылка);
+ ЗаписатьНачисление(ДокПеренос, Строка, "Родовые", Строка.Родовые, Перечисления.ГруппыНачисленияУдержанияВыплаты.Начислено, Период, Организация, СтатьяФинансирования, СтатьяРасходов, ФизЛицо, СотрудникСсылка);
+
+ // Удержания
+ ЗаписатьНачисление(ДокПеренос, Строка, "НДФЛ", Строка.НДФЛ, Перечисления.ГруппыНачисленияУдержанияВыплаты.Удержано, Период, Организация, СтатьяФинансирования, СтатьяРасходов, ФизЛицо, СотрудникСсылка);
+ ЗаписатьНачисление(ДокПеренос, Строка, "ПрофВзнос", Строка.ПрофВзнос, Перечисления.ГруппыНачисленияУдержанияВыплаты.Удержано, Период, Организация, СтатьяФинансирования, СтатьяРасходов, ФизЛицо, СотрудникСсылка);
+ ЗаписатьНачисление(ДокПеренос, Строка, "ИсполнительныйДокумент", Строка.ИсполнительныеДокументы, Перечисления.ГруппыНачисленияУдержанияВыплаты.Удержано, Период, Организация, СтатьяФинансирования, СтатьяРасходов, ФизЛицо, СотрудникСсылка);
+
+ // Выплаты
+ ЗаписатьНачисление(ДокПеренос, Строка, "Оклад", Строка.Аванс, Перечисления.ГруппыНачисленияУдержанияВыплаты.Выплачено, Период, Организация, СтатьяФинансирования, СтатьяРасходов, ФизЛицо, СотрудникСсылка);
+ ЗаписатьНачисление(ДокПеренос, Строка, "Оклад", Строка.ЗарплатаЗаПервуюПоловину, Перечисления.ГруппыНачисленияУдержанияВыплаты.Выплачено, Период, Организация, СтатьяФинансирования, СтатьяРасходов, ФизЛицо, СотрудникСсылка);
+ ЗаписатьНачисление(ДокПеренос, Строка, "Касса1", Строка.Касса1, Перечисления.ГруппыНачисленияУдержанияВыплаты.Выплачено, Период, Организация, СтатьяФинансирования, СтатьяРасходов, ФизЛицо, СотрудникСсылка);
+ ЗаписатьНачисление(ДокПеренос, Строка, "БезналичноеПеречисление", Строка.БезналичныеПеречисления, Перечисления.ГруппыНачисленияУдержанияВыплаты.Выплачено, Период, Организация, СтатьяФинансирования, СтатьяРасходов, ФизЛицо, СотрудникСсылка);
+ ЗаписатьНачисление(ДокПеренос, Строка, "ПремияАванс", Строка.ПремияАванс, Перечисления.ГруппыНачисленияУдержанияВыплаты.Выплачено, Период, Организация, СтатьяФинансирования, СтатьяРасходов, ФизЛицо, СотрудникСсылка);
+ ЗаписатьНачисление(ДокПеренос, Строка, "ВыплатыВМежрасчетный", Строка.ВыплатыВМежрасчетный, Перечисления.ГруппыНачисленияУдержанияВыплаты.Выплачено, Период, Организация, СтатьяФинансирования, СтатьяРасходов, ФизЛицо, СотрудникСсылка);
+ КонецЦикла;
+
+ // Регистр 2: ОтработанноеВремяПоСотрудникам
+ Для Каждого Строка Из Объект.ДанныеРасчетаЗП Цикл
+ ДанныеСотр = КэшСотрудников.Получить(Строка.ИдентификаторСотрудника);
+ Если ДанныеСотр = Неопределено Тогда Продолжить; КонецЕсли;
+ Если Строка.ОтработаноДней > 0 Или Строка.РабочиеЧасыПоТабелю > 0 Тогда
+ Движение = ДокПеренос.Движения.ОтработанноеВремяПоСотрудникам.Добавить();
+ Движение.Период = Период;
+ Движение.Организация = Организация;
+ Движение.ФизическоеЛицо = ДанныеСотр.ФизическоеЛицо;
+ Движение.Сотрудник = ДанныеСотр.Сотрудник;
+ Движение.Начисление = ВидРасчётаОклад;
+ Движение.ОтработаноДней = Строка.ОтработаноДней;
+ Движение.ОтработаноЧасов = Строка.РабочиеЧасыПоТабелю;
+ Движение.ОплаченоДней = Строка.ОтработаноДней;
+ Движение.ОплаченоЧасов = Строка.РабочиеЧасыПоТабелю;
+ КонецЕсли;
+ КонецЦикла;
+
+ // Регистр 3: СведенияОДоходахНДФЛ
+ Для Каждого Строка Из Объект.ДанныеНДФЛ Цикл
+ ДанныеСотр = КэшСотрудников.Получить(Строка.ИдентификаторСотрудника);
+ Если ДанныеСотр = Неопределено Тогда Продолжить; КонецЕсли;
+ Движение = ДокПеренос.Движения.СведенияОДоходахНДФЛ.Добавить();
+ Движение.Период = Период;
+ Движение.ГоловнаяОрганизация = Организация;
+ Движение.Организация = Организация;
+ Движение.ФизическоеЛицо = ДанныеСотр.ФизическоеЛицо;
+ Движение.МесяцНалоговогоПериода = Период;
+ Движение.СуммаДохода = Строка.СуммаВаловогоДохода;
+ Движение.СуммаВычета = Строка.СкидкаДляНДФЛЗаМесяц + Строка.ВычетНаРаботникаЗаМесяц + Строка.ВычетНаИждивенцевЗаМесяц;
+ КонецЦикла;
+
+ // Регистр 4: СтраховыеВзносыПоФизическимЛицам
+ Для Каждого Строка Из Объект.ДанныеСтраховыхВзносов Цикл
+ ДанныеСотр = КэшСотрудников.Получить(Строка.ИдентификаторСотрудника);
+ Если ДанныеСотр = Неопределено Тогда Продолжить; КонецЕсли;
+ Движение = ДокПеренос.Движения.СтраховыеВзносыПоФизическимЛицам.Добавить();
+ Движение.Период = Период;
+ Движение.Организация = Организация;
+ Движение.ФизическоеЛицо = ДанныеСотр.ФизическоеЛицо;
+ Движение.Сотрудник = ДанныеСотр.Сотрудник;
+ Движение.ПФРДоПредельнойВеличины = Строка.ДТ6Процент;
+ Движение.ПФРСтраховая = Строка.ПФСтраховая;
+ Движение.ФФОМС = Строка.ФССФОМС;
+ Движение.ФССНесчастныеСлучаи = Строка.НСПЗ;
+ КонецЦикла;
+
+ // Регистр 6: ВзаиморасчетыССотрудниками
+ ДвиженияВзаиморасчеты = ДокПеренос.Движения.ВзаиморасчетыССотрудниками;
+ Для Каждого Строка Из Объект.ДанныеРасчетаЗП Цикл
+ ДанныеСотр = КэшСотрудников.Получить(Строка.ИдентификаторСотрудника);
+ Если ДанныеСотр = Неопределено Тогда Продолжить; КонецЕсли;
+ Если Строка.ВсегоНаРуки <> 0 Тогда
+ Движение = ДвиженияВзаиморасчеты.Добавить();
+ Движение.Период = Период;
+ Движение.Организация = Организация;
+ Движение.ФизическоеЛицо = ДанныеСотр.ФизическоеЛицо;
+ Движение.Сотрудник = ДанныеСотр.Сотрудник;
+ Движение.СтатьяФинансирования = СтатьяФинансирования;
+ Движение.СтатьяРасходов = СтатьяРасходов;
+ Движение.СуммаВзаиморасчетов = Строка.ВсегоНаРуки;
+ КонецЕсли;
+ КонецЦикла;
+
+ // Регистр 7: БухгалтерскиеВзаиморасчетыССотрудниками
+ ДвиженияБухВзаиморасчеты = ДокПеренос.Движения.БухгалтерскиеВзаиморасчетыССотрудниками;
+ Для Каждого Строка Из Объект.ДанныеРасчетаЗП Цикл
+ ДанныеСотр = КэшСотрудников.Получить(Строка.ИдентификаторСотрудника);
+ Если ДанныеСотр = Неопределено Тогда Продолжить; КонецЕсли;
+ Если Строка.ВсегоНаРуки <> 0 Тогда
+ Движение = ДвиженияБухВзаиморасчеты.Добавить();
+ Движение.Период = Период;
+ Движение.Организация = Организация;
+ Движение.ФизическоеЛицо = ДанныеСотр.ФизическоеЛицо;
+ Движение.Сотрудник = ДанныеСотр.Сотрудник;
+ Движение.СтатьяФинансирования = СтатьяФинансирования;
+ Движение.СтатьяРасходов = СтатьяРасходов;
+ Движение.СуммаВзаиморасчетов = Строка.ВсегоНаРуки;
+ КонецЕсли;
+ КонецЦикла;
+
+ // Регистр 8: ДанныеОВремениДляРасчетаСреднегоОбщий
+ ДвиженияСреднего = ДокПеренос.Движения.ДанныеОВремениДляРасчетаСреднегоОбщий;
+ Для Каждого Строка Из Объект.ДанныеРасчетаЗП Цикл
+ ДанныеСотр = КэшСотрудников.Получить(Строка.ИдентификаторСотрудника);
+ Если ДанныеСотр = Неопределено Тогда Продолжить; КонецЕсли;
+ Если Строка.ОтработаноДней <> 0 Тогда
+ Движение = ДвиженияСреднего.Добавить();
+ Движение.Период = Период;
+ Движение.Сотрудник = ДанныеСотр.Сотрудник;
+ Движение.ОтработаноДней = Строка.ОтработаноДней;
+ Движение.ОтработаноЧасов = Строка.РабочиеЧасыПоТабелю;
+ Движение.ОтработаноДнейКалендарных = Строка.ОтработаноДнейКалендарных;
+ КонецЕсли;
+ КонецЦикла;
+
+ ДокПеренос.Записать();
+ Сообщить("Данные записаны. Документ: " + ДокПеренос.Ссылка);
+КонецПроцедуры
+
+&НаСервере
+Процедура ЗаписатьНачисление(ДокПеренос, Строка, ВидРасчета, Сумма, Группа, Период, Организация, СтатьяФинансирования, СтатьяРасходов, ФизЛицо, СотрудникСсылка)
+ Если Сумма = 0 Тогда Возврат; КонецЕсли;
+
+ ГруппаНаименование = "";
+ Если Группа = Перечисления.ГруппыНачисленияУдержанияВыплаты.Начислено Тогда
+ ГруппаНаименование = "";
+ ИначеЕсли Группа = Перечисления.ГруппыНачисленияУдержанияВыплаты.Удержано Тогда
+ ГруппаНаименование = "Удержание";
+ ИначеЕсли Группа = Перечисления.ГруппыНачисленияУдержанияВыплаты.Выплачено Тогда
+ ГруппаНаименование = "Выплата";
+ КонецЕсли;
+
+ Суффикс = "";
+ Если ЗначениеЗаполнено(СтатьяФинансирования) Тогда
+ НаименованиеСтатьи = СокрЛП(СтатьяФинансирования.Наименование);
+ Если СтрНайти(НаименованиеСтатьи, "ОМС") > 0 Тогда
+ Суффикс = " (ОМС)";
+ ИначеЕсли СтрНайти(НаименованиеСтатьи, "ПД") > 0 Тогда
+ Суффикс = " (ПД)";
+ КонецЕсли;
+ КонецЕсли;
+
+ ВидРасчёта = Неопределено;
+ Если ЗначениеЗаполнено(Суффикс) Тогда
+ ВидРасчёта = ПланыВидовРасчета.Начисления.НайтиПоНаименованию(ВидРасчета + Суффикс, Истина);
+ КонецЕсли;
+ Если ВидРасчёта = Неопределено Тогда
+ ВидРасчёта = ПланыВидовРасчета.Начисления.НайтиПоНаименованию(ВидРасчета, Истина);
+ КонецЕсли;
+ Если ВидРасчёта = Неопределено Тогда
+ Сообщить("Не найден ПВР: " + ВидРасчета + Суффикс);
+ Возврат;
+ КонецЕсли;
+
+ Движение = ДокПеренос.Движения.НачисленияУдержанияПоСотрудникам.Добавить();
+ Движение.Период = Период;
+ Движение.Организация = Организация;
+ Движение.ФизическоеЛицо = ФизЛицо;
+ Движение.Сотрудник = СотрудникСсылка;
+ Движение.НачислениеУдержание = ВидРасчёта;
+ Движение.Сумма = Сумма;
+ Движение.ГруппаНачисленияУдержанияВыплаты = Группа;
+ Движение.СтатьяФинансирования = СтатьяФинансирования;
+ Движение.СтатьяРасходов = СтатьяРасходов;
+ Движение.Сторно = Ложь;
+КонецПроцедуры
diff --git a/CommonModules/ЗагрузкаДанныхИзExcel_МаппингДанных.xml b/CommonModules/ЗагрузкаДанныхИзExcel_МаппингДанных.xml
new file mode 100644
index 0000000..6b18e96
--- /dev/null
+++ b/CommonModules/ЗагрузкаДанныхИзExcel_МаппингДанных.xml
@@ -0,0 +1,17 @@
+
+
+
+
+ ЗагрузкаДанныхИзExcel_МаппингДанных
+
+
+ ru
+ Маппинг данных
+
+
+
+ false
+ false
+
+
+
\ No newline at end of file
diff --git a/CommonModules/ЗагрузкаДанныхИзExcel_МаппингДанных/Ext/Module.bsl b/CommonModules/ЗагрузкаДанныхИзExcel_МаппингДанных/Ext/Module.bsl
new file mode 100644
index 0000000..fde63f8
--- /dev/null
+++ b/CommonModules/ЗагрузкаДанныхИзExcel_МаппингДанных/Ext/Module.bsl
@@ -0,0 +1,187 @@
+// Маппинг данных
+// Парсинг Excel-листов, маппинг колонок на ПВР
+// Зависит от: ЗагрузкаДанныхИзExcel_ЧтениеЭксель
+
+&НаКлиенте
+Функция НомерМесяцаВТекст(НомерМесяца)
+ Массив = Новый Массив;
+ Массив.Добавить("Январь"); Массив.Добавить("Февраль");
+ Массив.Добавить("Март"); Массив.Добавить("Апрель");
+ Массив.Добавить("Май"); Массив.Добавить("Июнь");
+ Массив.Добавить("Июль"); Массив.Добавить("Август");
+ Массив.Добавить("Сентябрь"); Массив.Добавить("Октябрь");
+ Массив.Добавить("Ноябрь"); Массив.Добавить("Декабрь");
+ Если НомерМесяца >= 1 И НомерМесяца <= 12 Тогда
+ Возврат Массив[НомерМесяца - 1];
+ КонецЕсли;
+ Возврат "";
+КонецФункции
+
+&НаКлиенте
+Функция СтрокаМесяцаНаЛистеСотрудника()
+ Смещение = Объект.МесяцЗагрузки;
+ Если Не ЗначениеЗаполнено(Смещение) Тогда Смещение = 1; КонецЕсли;
+ Возврат 35 + Смещение;
+КонецФункции
+
+&НаКлиенте
+Функция НайтиЛистСотрудника(Книга, ЛистРасчет, НомерСтроки)
+ Формула = ЛистРасчет.Cells(НомерСтроки, 1).Formula;
+ Если ЗначениеЗаполнено(Формула) Тогда
+ ИмяЛиста = ЗагрузкаДанныхИзExcel_ЧтениеЭксель.ИзвлечьИмяЛистаИзФормулы(Формула);
+ Если ЗначениеЗаполнено(ИмяЛиста) Тогда
+ Возврат ЗагрузкаДанныхИзExcel_ЧтениеЭксель.НайтиЛист(Книга, ИмяЛиста);
+ КонецЕсли;
+ КонецЕсли;
+ ФИО = ЗагрузкаДанныхИзExcel_ЧтениеЭксель.ПрочитатьЯчейкуСтрока(ЛистРасчет, НомерСтроки, 1);
+ Если ЗначениеЗаполнено(ФИО) Тогда
+ Возврат ЗагрузкаДанныхИзExcel_ЧтениеЭксель.НайтиЛист(Книга, ФИО);
+ КонецЕсли;
+ Возврат Неопределено;
+КонецФункции
+
+&НаКлиенте
+Функция ПрочитатьКарточкуСотрудника(ЛистСотрудника)
+ Данные = Новый Структура;
+ Данные.Вставить("ФИО", ЗагрузкаДанныхИзExcel_ЧтениеЭксель.ПрочитатьЯчейкуСтрока(ЛистСотрудника, 2, 3));
+ Данные.Вставить("ИНН", "");
+ Данные.Вставить("СНИЛС", "");
+ Данные.Вставить("ЛицевойСчетВБанке", ЗагрузкаДанныхИзExcel_ЧтениеЭксель.ПрочитатьЯчейкуСтрока(ЛистСотрудника, 3, 4));
+ Данные.Вставить("ВидЗанятости", ЗагрузкаДанныхИзExcel_ЧтениеЭксель.ПрочитатьЯчейкуСтрока(ЛистСотрудника, 5, 1));
+ Данные.Вставить("АдресРегистрации", "");
+ Возврат Данные;
+КонецФункции
+
+&НаКлиенте
+Функция ПрочитатьРасчетныеДанные(ЛистРасчет, Ном, ФИО)
+ Ч = ЗагрузкаДанныхИзExcel_ЧтениеЭксель;
+ С = Новый Структура;
+ С.Вставить("ФИО", ФИО);
+ С.Вставить("Должность", Ч.ПрочитатьЯчейкуСтрока(ЛистРасчет, Ном, 2));
+ С.Вставить("СчетБК", Ч.ПрочитатьЯчейкуСтрока(ЛистРасчет, Ном, 3));
+ С.Вставить("ВидЗанятости", Ч.ПрочитатьЯчейкуСтрока(ЛистРасчет, Ном, 4));
+ С.Вставить("Оклад", Ч.ПрочитатьЯчейкуЧисло(ЛистРасчет, Ном, 8, ФИО));
+ С.Вставить("КоличествоСтавок", Ч.ПрочитатьЯчейкуЧисло(ЛистРасчет, Ном, 7, ФИО));
+ С.Вставить("ОтработаноДней", Ч.ПрочитатьЯчейкуЧисло(ЛистРасчет, Ном, 6, ФИО));
+ С.Вставить("ЧасыДежурства", Ч.ПрочитатьЯчейкуЧисло(ЛистРасчет, Ном, 9, ФИО));
+ С.Вставить("ЧасыНочные", Ч.ПрочитатьЯчейкуЧисло(ЛистРасчет, Ном, 10, ФИО));
+ С.Вставить("ЧасыПраздничные", Ч.ПрочитатьЯчейкуЧисло(ЛистРасчет, Ном, 11, ФИО));
+ С.Вставить("РабочиеЧасыПоТабелю", Ч.ПрочитатьЯчейкуЧисло(ЛистРасчет, Ном, 12, ФИО));
+ С.Вставить("ИзРасчетаМесячногоОкладаДни", Ч.ПрочитатьЯчейкуЧисло(ЛистРасчет, Ном, 13, ФИО));
+ С.Вставить("ДоплатаСовместительство", Ч.ПрочитатьЯчейкуЧисло(ЛистРасчет, Ном, 14, ФИО));
+ С.Вставить("ДоплатаСовмещениеПроцент", Ч.ПрочитатьЯчейкуЧисло(ЛистРасчет, Ном, 15, ФИО));
+ С.Вставить("ДоплатаИнтенсивность", Ч.ПрочитатьЯчейкуЧисло(ЛистРасчет, Ном, 16, ФИО));
+ С.Вставить("ИзРасчетаМесячногоОкладаЧасы", Ч.ПрочитатьЯчейкуЧисло(ЛистРасчет, Ном, 17, ФИО));
+ С.Вставить("ДоплатаНочные", Ч.ПрочитатьЯчейкуЧисло(ЛистРасчет, Ном, 18, ФИО));
+ С.Вставить("ДоплатаПраздничные", Ч.ПрочитатьЯчейкуЧисло(ЛистРасчет, Ном, 19, ФИО));
+ С.Вставить("ЗаСтаж", Ч.ПрочитатьЯчейкуЧисло(ЛистРасчет, Ном, 20, ФИО));
+ С.Вставить("НадбавкаЗаКатегорию", Ч.ПрочитатьЯчейкуЧисло(ЛистРасчет, Ном, 21, ФИО));
+ С.Вставить("НадбавкаЗаВредность", Ч.ПрочитатьЯчейкуЧисло(ЛистРасчет, Ном, 22, ФИО));
+ С.Вставить("ПовышающийКоэффициент", Ч.ПрочитатьЯчейкуЧисло(ЛистРасчет, Ном, 23, ФИО));
+ С.Вставить("СтимулирующиеВыплаты", Ч.ПрочитатьЯчейкуЧисло(ЛистРасчет, Ном, 24, ФИО));
+ С.Вставить("СтимулирующаяНадбавка", Ч.ПрочитатьЯчейкуЧисло(ЛистРасчет, Ном, 25, ФИО));
+ С.Вставить("РайонныйКоэффициент", Ч.ПрочитатьЯчейкуЧисло(ЛистРасчет, Ном, 26, ФИО));
+ С.Вставить("ВыплатыПоУказу597", Ч.ПрочитатьЯчейкуЧисло(ЛистРасчет, Ном, 27, ФИО));
+ С.Вставить("ПремияРазовая", Ч.ПрочитатьЯчейкуЧисло(ЛистРасчет, Ном, 28, ФИО));
+ С.Вставить("БольничныйЛистЗаСчетПредприятия", Ч.ПрочитатьЯчейкуЧисло(ЛистРасчет, Ном, 29, ФИО));
+ С.Вставить("ДоплатаПрофактиву", Ч.ПрочитатьЯчейкуЧисло(ЛистРасчет, Ном, 30, ФИО));
+ С.Вставить("ПусковыеОбсервация", Ч.ПрочитатьЯчейкуЧисло(ЛистРасчет, Ном, 31, ФИО));
+ С.Вставить("Отпуск", Ч.ПрочитатьЯчейкуЧисло(ЛистРасчет, Ном, 32, ФИО));
+ С.Вставить("КомпенсацияЗаОтпуск", Ч.ПрочитатьЯчейкуЧисло(ЛистРасчет, Ном, 33, ФИО));
+ С.Вставить("ПрочиеКомандировочныйУчебныйОтпуск", Ч.ПрочитатьЯчейкуЧисло(ЛистРасчет, Ном, 34, ФИО));
+ С.Вставить("ВыходноеПособие", Ч.ПрочитатьЯчейкуЧисло(ЛистРасчет, Ном, 35, ФИО));
+ С.Вставить("ПоУходуЗаРебенкомИнвалидом", Ч.ПрочитатьЯчейкуЧисло(ЛистРасчет, Ном, 36, ФИО));
+ С.Вставить("ДоплатаДоМРОТ", Ч.ПрочитатьЯчейкуЧисло(ЛистРасчет, Ном, 37, ФИО));
+ С.Вставить("Родовые", Ч.ПрочитатьЯчейкуЧисло(ЛистРасчет, Ном, 38, ФИО));
+ С.Вставить("ИтогоНачислено", Ч.ПрочитатьЯчейкуЧисло(ЛистРасчет, Ном, 39, ФИО));
+ С.Вставить("НДФЛ", Ч.ПрочитатьЯчейкуЧисло(ЛистРасчет, Ном, 40, ФИО));
+ С.Вставить("ПрофВзнос", Ч.ПрочитатьЯчейкуЧисло(ЛистРасчет, Ном, 41, ФИО));
+ С.Вставить("ИсполнительныеДокументы", Ч.ПрочитатьЯчейкуЧисло(ЛистРасчет, Ном, 42, ФИО));
+ С.Вставить("Аванс", Ч.ПрочитатьЯчейкуЧисло(ЛистРасчет, Ном, 43, ФИО));
+ С.Вставить("ПФСофинансирование", Ч.ПрочитатьЯчейкуЧисло(ЛистРасчет, Ном, 44, ФИО));
+ С.Вставить("ПремияУдержание", Ч.ПрочитатьЯчейкуЧисло(ЛистРасчет, Ном, 45, ФИО));
+ С.Вставить("Касса1", Ч.ПрочитатьЯчейкуЧисло(ЛистРасчет, Ном, 46, ФИО));
+ С.Вставить("Касса2", Ч.ПрочитатьЯчейкуЧисло(ЛистРасчет, Ном, 47, ФИО));
+ С.Вставить("Касса3", Ч.ПрочитатьЯчейкуЧисло(ЛистРасчет, Ном, 48, ФИО));
+ С.Вставить("ПособиеДо3ЛетУдержание", Ч.ПрочитатьЯчейкуЧисло(ЛистРасчет, Ном, 49, ФИО));
+ С.Вставить("БезналичныеПеречисления", Ч.ПрочитатьЯчейкуЧисло(ЛистРасчет, Ном, 50, ФИО));
+ С.Вставить("ВозвратВКассу", Ч.ПрочитатьЯчейкуЧисло(ЛистРасчет, Ном, 51, ФИО));
+ С.Вставить("Депонент", Ч.ПрочитатьЯчейкуЧисло(ЛистРасчет, Ном, 52, ФИО));
+ С.Вставить("ОстатокНаНачало", Ч.ПрочитатьЯчейкуЧисло(ЛистРасчет, Ном, 54, ФИО));
+ С.Вставить("ВсегоНаРуки", Ч.ПрочитатьЯчейкуЧисло(ЛистРасчет, Ном, 55, ФИО));
+ С.Вставить("ЗарплатаЗаПервуюПоловину", 0); // TODO: определить колонку
+ С.Вставить("ПремияАванс", 0); // TODO: определить колонку
+ С.Вставить("ВыплатыВМежрасчетный", 0); // TODO: определить колонку
+ С.Вставить("ИтогоУдержано",
+ С.НДФЛ + С.ПрофВзнос + С.ИсполнительныеДокументы + С.ПФСофинансирование
+ + С.ПремияУдержание + С.ПособиеДо3ЛетУдержание + С.Депонент);
+ С.Вставить("ИтогоВыплачено",
+ С.Аванс + С.Касса1 + С.Касса2 + С.Касса3
+ + С.БезналичныеПеречисления + С.ВозвратВКассу);
+ Возврат С;
+КонецФункции
+
+&НаКлиенте
+Функция ПрочитатьНДФЛСоЛиста(ЛистСотрудника, ФИО)
+ Ч = ЗагрузкаДанныхИзExcel_ЧтениеЭксель;
+ СД = СтрокаМесяцаНаЛистеСотрудника();
+ Если СД = 0 Тогда Возврат Неопределено; КонецЕсли;
+ Если Не ЗначениеЗаполнено(ФИО) Тогда Возврат Неопределено; КонецЕсли;
+ С = Новый Структура;
+ С.Вставить("ФИО", ФИО);
+ С.Вставить("МесяцРасчета", Ч.ПрочитатьЯчейкуСтрока(ЛистСотрудника, СД, 1));
+ С.Вставить("СуммаВаловогоДохода", Ч.ПрочитатьЯчейкуЧисло(ЛистСотрудника, СД, 4, ФИО));
+ С.Вставить("СуммаВаловогоДоходаСНачалаГода", Ч.ПрочитатьЯчейкуЧисло(ЛистСотрудника, СД, 6, ФИО));
+ С.Вставить("СкидкаДляНДФЛЗаМесяц", Ч.ПрочитатьЯчейкуЧисло(ЛистСотрудника, СД, 8, ФИО));
+ С.Вставить("СкидкаДляНДФЛЗаГод", Ч.ПрочитатьЯчейкуЧисло(ЛистСотрудника, СД, 9, ФИО));
+ С.Вставить("СкидкаДляСВЗаМесяц", Ч.ПрочитатьЯчейкуЧисло(ЛистСотрудника, СД, 10, ФИО));
+ С.Вставить("ВычетНаРаботникаЗаМесяц", Ч.ПрочитатьЯчейкуЧисло(ЛистСотрудника, СД, 12, ФИО));
+ С.Вставить("ВычетНаИждивенцевЗаМесяц", Ч.ПрочитатьЯчейкуЧисло(ЛистСотрудника, СД, 13, ФИО));
+ С.Вставить("ВсегоВычетовЗаМесяц", Ч.ПрочитатьЯчейкуЧисло(ЛистСотрудника, СД, 14, ФИО));
+ С.Вставить("ОблагаемыйДоходЗаМесяц", Ч.ПрочитатьЯчейкуЧисло(ЛистСотрудника, СД, 15, ФИО));
+ С.Вставить("ОблагаемыйДоходЗаГод", Ч.ПрочитатьЯчейкуЧисло(ЛистСотрудника, СД, 16, ФИО));
+ С.Вставить("НачисленныйНДФЛЗаГод", Ч.ПрочитатьЯчейкуЧисло(ЛистСотрудника, СД, 17, ФИО));
+ С.Вставить("ИтогоНДФЛЗаМесяц", Ч.ПрочитатьЯчейкуЧисло(ЛистСотрудника, СД, 18, ФИО));
+ С.Вставить("НалоговаяБазаПоСВЗаМесяц", Ч.ПрочитатьЯчейкуЧисло(ЛистСотрудника, СД, 23, ФИО));
+ С.Вставить("ИтогоФСС", Ч.ПрочитатьЯчейкуЧисло(ЛистСотрудника, СД, 37, ФИО));
+ Возврат С;
+КонецФункции
+
+&НаКлиенте
+Функция ПрочитатьВзносыИзРасчета(ЛистРасчет, Ном, ФИО)
+ Ч = ЗагрузкаДанныхИзExcel_ЧтениеЭксель;
+ С = Новый Структура;
+ С.Вставить("ФИО", ФИО);
+ С.Вставить("ДТ6Процент", Ч.ПрочитатьЯчейкуЧисло(ЛистРасчет, Ном, 58, ФИО));
+ С.Вставить("ДТ4Процент", Ч.ПрочитатьЯчейкуЧисло(ЛистРасчет, Ном, 59, ФИО));
+ С.Вставить("ПФСтраховая", Ч.ПрочитатьЯчейкуЧисло(ЛистРасчет, Ном, 60, ФИО));
+ С.Вставить("ФССФОМС", Ч.ПрочитатьЯчейкуЧисло(ЛистРасчет, Ном, 61, ФИО));
+ С.Вставить("НСПЗ", Ч.ПрочитатьЯчейкуЧисло(ЛистРасчет, Ном, 62, ФИО));
+ С.Вставить("Итого", Ч.ПрочитатьЯчейкуЧисло(ЛистРасчет, Ном, 63, ФИО));
+ С.Вставить("НалоговаяБазаПоСВЗаМесяц", 0);
+ С.Вставить("ИтогоФСС", 0);
+ Возврат С;
+КонецФункции
+
+&НаКлиенте
+Функция ОределитьГодЗагрузки(ЛистРасчет)
+ ГодЗначение = ЗагрузкаДанныхИзExcel_ЧтениеЭксель.ПрочитатьЯчейкуЧисло(ЛистРасчет, 3, 1, "");
+ Если ГодЗначение > 0 Тогда
+ Возврат Цел(ГодЗначение);
+ КонецЕсли;
+ ГодЗначение = ЗагрузкаДанныхИзExcel_ЧтениеЭксель.ПрочитатьЯчейкуЧисло(ЛистРасчет, 4, 1, "");
+ Если ГодЗначение > 2000 Тогда
+ Возврат Цел(ГодЗначение);
+ КонецЕсли;
+ Возврат 0;
+КонецФункции
+
+&НаКлиенте
+Функция ОпределитьОрганизацию(ЛистРасчет)
+ Возврат СокрЛП(Строка(ЛистРасчет.Cells(4, 20).Value));
+КонецФункции
+
+&НаКлиенте
+Функция ОпределитьСтатьюФинансирования(ЛистРасчет)
+ Возврат СокрЛП(Строка(ЛистРасчет.Cells(8, 20).Value));
+КонецФункции
diff --git a/CommonModules/ЗагрузкаДанныхИзExcel_ЧтениеЭксель.xml b/CommonModules/ЗагрузкаДанныхИзExcel_ЧтениеЭксель.xml
new file mode 100644
index 0000000..403323b
--- /dev/null
+++ b/CommonModules/ЗагрузкаДанныхИзExcel_ЧтениеЭксель.xml
@@ -0,0 +1,17 @@
+
+
+
+
+ ЗагрузкаДанныхИзExcel_ЧтениеЭксель
+
+
+ ru
+ Чтение Excel (Клиент)
+
+
+
+ false
+ false
+
+
+
\ No newline at end of file
diff --git a/CommonModules/ЗагрузкаДанныхИзExcel_ЧтениеЭксель/Ext/Module.bsl b/CommonModules/ЗагрузкаДанныхИзExcel_ЧтениеЭксель/Ext/Module.bsl
new file mode 100644
index 0000000..b2f8155
--- /dev/null
+++ b/CommonModules/ЗагрузкаДанныхИзExcel_ЧтениеЭксель/Ext/Module.bsl
@@ -0,0 +1,68 @@
+// Клиентский модуль для COM-взаимодействия с Excel
+// Содержит только COM-вызовы
+
+&НаКлиенте
+Функция ОткрытьФайлExcel(ПутьКФайлу)
+ Попытка
+ Excel = Новый COMОбъект("Excel.Application");
+ Excel.Visible = Ложь;
+ Excel.DisplayAlerts = Ложь;
+ Книга = Excel.Workbooks.Open(ПутьКФайлу);
+ Возврат Новый Структура("Книга, Excel", Книга, Excel);
+ Исключение
+ Сообщить("Не удалось открыть Excel: " + ОписаниеОшибки());
+ Возврат Неопределено;
+ КонецПопытки;
+КонецФункции
+
+&НаКлиенте
+Процедура ЗакрытьExcel(КонтекстExcel, ВременныйФайл)
+ Если КонтекстExcel = Неопределено Тогда Возврат; КонецЕсли;
+ Попытка
+ КонтекстExcel.Книга.Close(Ложь);
+ КонтекстExcel.Excel.Quit();
+ Исключение
+ КонецПопытки;
+ Если ЗначениеЗаполнено(ВременныйФайл) Тогда УдалитьФайлы(ВременныйФайл); КонецЕсли;
+КонецПроцедуры
+
+&НаКлиенте
+Функция ПрочитатьЯчейкуЧисло(Лист, Строка, Колонка, КонтекстОшибки)
+ Попытка
+ Значение = Лист.Cells(Строка, Колонка).Value;
+ Если Значение = Неопределено ИЛИ Значение = "" Тогда Возврат 0; КонецЕсли;
+ Возврат Число(Значение);
+ Исключение
+ Сообщить("Ошибка чтения числа: " + КонтекстОшибки + " | строка " + Строка + " колонка " + Колонка);
+ Возврат 0;
+ КонецПопытки;
+КонецФункции
+
+&НаКлиенте
+Функция ПрочитатьЯчейкуСтрока(Лист, Строка, Колонка)
+ Попытка
+ Значение = Лист.Cells(Строка, Колонка).Value;
+ Если Значение = Неопределено Тогда Возврат ""; КонецЕсли;
+ Возврат СокрЛП("" + Значение);
+ Исключение
+ Возврат "";
+ КонецПопытки;
+КонецФункции
+
+&НаКлиенте
+Функция ИзвлечьИмяЛистаИзФормулы(Формула)
+ Если Формула = Неопределено Тогда Возврат ""; КонецЕсли;
+ Текст = СокрЛП("" + Формула);
+ Если Не СтрНачинаетсяС(Текст, "='") Тогда Возврат ""; КонецЕсли;
+ Поз = СтрНайти(Текст, "'!");
+ Если Поз = 0 Тогда Возврат ""; КонецЕсли;
+ Возврат Сред(Текст, 3, Поз - 3);
+КонецФункции
+
+&НаКлиенте
+Функция НайтиЛист(Книга, ИмяЛиста)
+ Для Каждого Лист Из Книга.Sheets Цикл
+ Если ВРег(Лист.Name) = ВРег(ИмяЛиста) Тогда Возврат Лист; КонецЕсли;
+ КонецЦикла;
+ Возврат Неопределено;
+КонецФункции
diff --git a/ConfigDumpInfo.xml b/ConfigDumpInfo.xml
index 81c8986..cd113bc 100755
--- a/ConfigDumpInfo.xml
+++ b/ConfigDumpInfo.xml
@@ -1,134 +1,137 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Configuration.xml b/Configuration.xml
index 2929a15..bfacaf6 100755
--- a/Configuration.xml
+++ b/Configuration.xml
@@ -56,7 +56,7 @@
Russian
ООО "Профи-Софт", код партнера 42575-13, г.Байконур.
- 3.0.0.71
+ 3.0.0.75
Language.Русский
@@ -95,6 +95,9 @@
СтатьиРасходовЗарплата
СтатьиФинансированияЗарплата
ЗагрузкаДанныхИзExcel
-
+ ЗагрузкаДанныхИзExcel_ЧтениеЭксель
+ ЗагрузкаДанныхИзExcel_МаппингДанных
+ ЗагрузкаДанныхИзExcel_ЗаписьВРегистры
+
\ No newline at end of file
diff --git a/DataProcessors/ЗагрузкаДанныхИзExcel/Forms/Форма/Ext/Form/Module.bsl b/DataProcessors/ЗагрузкаДанныхИзExcel/Forms/Форма/Ext/Form/Module.bsl
index 14e956f..0c6b563 100644
--- a/DataProcessors/ЗагрузкаДанныхИзExcel/Forms/Форма/Ext/Form/Module.bsl
+++ b/DataProcessors/ЗагрузкаДанныхИзExcel/Forms/Форма/Ext/Form/Module.bsl
@@ -26,7 +26,6 @@
Возврат;
КонецЕсли;
Состояние("Инициализация...", 0);
- Прогресс = 0;
СтатусЗагрузки = "Подготовка...";
ПрочитатьExcelНаКлиенте();
КонецПроцедуры
@@ -37,304 +36,37 @@
Сообщить("Нет данных для записи!");
Возврат;
КонецЕсли;
- ЗаписатьДанныеНаСервере(Объект._ГодЗагрузки, Объект._ОрганизацияНаименование, Объект._СтатьяФинансированияНаименование, Объект._СтатьяРасходовКод);
+ ЗагрузкаДанныхИзExcel_ЗаписьВРегистры.ЗаписатьДанные(Объект._ГодЗагрузки, Объект._ОрганизацияНаименование, Объект._СтатьяФинансированияНаименование, Объект._СтатьяРасходовКод);
Сообщить("Данные записаны!");
КонецПроцедуры
#КонецОбласти
-#Область ЧтениеExcel_Домен
-
-&НаКлиенте
-Функция ОткрытьФайлExcel(ПутьКФайлу)
- Попытка
- Excel = Новый COMОбъект("Excel.Application");
- Excel.Visible = Ложь;
- Excel.DisplayAlerts = Ложь;
- Книга = Excel.Workbooks.Open(ПутьКФайлу);
- Возврат Новый Структура("Книга, Excel", Книга, Excel);
- Исключение
- Сообщить("Не удалось открыть Excel: " + ОписаниеОшибки());
- Возврат Неопределено;
- КонецПопытки;
-КонецФункции
-
-&НаКлиенте
-Процедура ЗакрытьExcel(КонтекстExcel, ВременныйФайл)
- Если КонтекстExcel = Неопределено Тогда Возврат; КонецЕсли;
- Попытка
- КонтекстExcel.Книга.Close(Ложь);
- КонтекстExcel.Excel.Quit();
- Исключение
- КонецПопытки;
- Если ЗначениеЗаполнено(ВременныйФайл) Тогда УдалитьФайлы(ВременныйФайл); КонецЕсли;
-КонецПроцедуры
-
-&НаКлиенте
-Функция ПрочитатьЯчейкуЧисло(Лист, Строка, Колонка, КонтекстОшибки)
- Попытка
- Значение = Лист.Cells(Строка, Колонка).Value;
- Если Значение = Неопределено ИЛИ Значение = "" Тогда Возврат 0; КонецЕсли;
- Возврат Число(Значение);
- Исключение
- Сообщить("Ошибка чтения числа: " + КонтекстОшибки + " | строка " + Строка + " колонка " + Колонка);
- Возврат 0;
- КонецПопытки;
-КонецФункции
-
-&НаКлиенте
-Функция ПрочитатьЯчейкуСтрока(Лист, Строка, Колонка)
- Попытка
- Значение = Лист.Cells(Строка, Колонка).Value;
- Если Значение = Неопределено Тогда Возврат ""; КонецЕсли;
- Возврат СокрЛП("" + Значение);
- Исключение
- Возврат "";
- КонецПопытки;
-КонецФункции
-
-// Извлекает имя листа из формулы вида ='ИмяЛиста'!C2
-&НаКлиенте
-Функция ИзвлечьИмяЛистаИзФормулы(Формула)
- Если Формула = Неопределено Тогда Возврат ""; КонецЕсли;
- Текст = СокрЛП("" + Формула);
- Если Не СтрНачинаетсяС(Текст, "='") Тогда Возврат ""; КонецЕсли;
- Поз = СтрНайти(Текст, "'!");
- Если Поз = 0 Тогда Возврат ""; КонецЕсли;
- Возврат Сред(Текст, 3, Поз - 3);
-КонецФункции
-
-&НаКлиенте
-Функция НайтиЛист(Книга, ИмяЛиста)
- Для Каждого Лист Из Книга.Sheets Цикл
- Если ВРег(Лист.Name) = ВРег(ИмяЛиста) Тогда Возврат Лист; КонецЕсли;
- КонецЦикла;
- Возврат Неопределено;
-КонецФункции
-
-&НаКлиенте
-Функция НомерМесяцаВТекст(НомерМесяца)
- Массив = Новый Массив;
- Массив.Добавить("Январь"); Массив.Добавить("Февраль");
- Массив.Добавить("Март"); Массив.Добавить("Апрель");
- Массив.Добавить("Май"); Массив.Добавить("Июнь");
- Массив.Добавить("Июль"); Массив.Добавить("Август");
- Массив.Добавить("Сентябрь"); Массив.Добавить("Октябрь");
- Массив.Добавить("Ноябрь"); Массив.Добавить("Декабрь");
- Если НомерМесяца >= 1 И НомерМесяца <= 12 Тогда
- Возврат Массив[НомерМесяца - 1];
- КонецЕсли;
- Возврат "";
-КонецФункции
-
-#КонецОбласти
-
-#Область ЧтениеДанныхСотрудника_Домен
-
-&НаКлиенте
-Функция НайтиЛистСотрудника(Книга, ЛистРасчет, НомерСтроки)
- Формула = ЛистРасчет.Cells(НомерСтроки, 1).Formula;
- Если ЗначениеЗаполнено(Формула) Тогда
- ИмяЛиста = ИзвлечьИмяЛистаИзФормулы(Формула);
- Если ЗначениеЗаполнено(ИмяЛиста) Тогда
- Возврат НайтиЛист(Книга, ИмяЛиста);
- КонецЕсли;
- КонецЕсли;
- ФИО = ПрочитатьЯчейкуСтрока(ЛистРасчет, НомерСтроки, 1);
- Если ЗначениеЗаполнено(ФИО) Тогда
- Возврат НайтиЛист(Книга, ФИО);
- КонецЕсли;
- Возврат Неопределено;
-КонецФункции
-
-&НаКлиенте
-Функция СтрокаМесяцаНаЛистеСотрудника()
- Смещение = Объект.МесяцЗагрузки;
- Если Не ЗначениеЗаполнено(Смещение) Тогда Смещение = 1; КонецЕсли;
- Возврат 35 + Смещение;
-КонецФункции
-
-&НаКлиенте
-Функция ПрочитатьКарточкуСотрудника(ЛистСотрудника)
- Данные = Новый Структура;
- Данные.Вставить("ФИО", ПрочитатьЯчейкуСтрока(ЛистСотрудника, 2, 3));
- Данные.Вставить("ИНН", "");
- Данные.Вставить("СНИЛС", "");
- Данные.Вставить("ЛицевойСчетВБанке", ПрочитатьЯчейкуСтрока(ЛистСотрудника, 3, 4));
- Данные.Вставить("ВидЗанятости", ПрочитатьЯчейкуСтрока(ЛистСотрудника, 5, 1));
- Данные.Вставить("АдресРегистрации", "");
- Возврат Данные;
-КонецФункции
-
-&НаКлиенте
-Функция ПрочитатьРасчетныеДанныеИзРасчета(ЛистРасчет, Ном, ФИО)
- С = Новый Структура;
- С.Вставить("ФИО", ФИО);
- С.Вставить("Должность", ПрочитатьЯчейкуСтрока(ЛистРасчет, Ном, 2));
- С.Вставить("СчетБК", ПрочитатьЯчейкуСтрока(ЛистРасчет, Ном, 3));
- С.Вставить("ВидЗанятости", ПрочитатьЯчейкуСтрока(ЛистРасчет, Ном, 4));
- С.Вставить("Оклад", ПрочитатьЯчейкуЧисло(ЛистРасчет, Ном, 8, ФИО));
- С.Вставить("КоличествоСтавок", ПрочитатьЯчейкуЧисло(ЛистРасчет, Ном, 7, ФИО));
- С.Вставить("ОтработаноДней", ПрочитатьЯчейкуЧисло(ЛистРасчет, Ном, 6, ФИО));
- С.Вставить("ЧасыДежурства", ПрочитатьЯчейкуЧисло(ЛистРасчет, Ном, 9, ФИО));
- С.Вставить("ЧасыНочные", ПрочитатьЯчейкуЧисло(ЛистРасчет, Ном, 10, ФИО));
- С.Вставить("ЧасыПраздничные", ПрочитатьЯчейкуЧисло(ЛистРасчет, Ном, 11, ФИО));
- С.Вставить("РабочиеЧасыПоТабелю", ПрочитатьЯчейкуЧисло(ЛистРасчет, Ном, 12, ФИО));
- С.Вставить("ИзРасчетаМесячногоОкладаДни", ПрочитатьЯчейкуЧисло(ЛистРасчет, Ном, 13, ФИО));
- С.Вставить("ДоплатаСовместительство", ПрочитатьЯчейкуЧисло(ЛистРасчет, Ном, 14, ФИО));
- С.Вставить("ДоплатаСовмещениеПроцент", ПрочитатьЯчейкуЧисло(ЛистРасчет, Ном, 15, ФИО));
- С.Вставить("ДоплатаИнтенсивность", ПрочитатьЯчейкуЧисло(ЛистРасчет, Ном, 16, ФИО));
- С.Вставить("ИзРасчетаМесячногоОкладаЧасы", ПрочитатьЯчейкуЧисло(ЛистРасчет, Ном, 17, ФИО));
- С.Вставить("ДоплатаНочные", ПрочитатьЯчейкуЧисло(ЛистРасчет, Ном, 18, ФИО));
- С.Вставить("ДоплатаПраздничные", ПрочитатьЯчейкуЧисло(ЛистРасчет, Ном, 19, ФИО));
- С.Вставить("ЗаСтаж", ПрочитатьЯчейкуЧисло(ЛистРасчет, Ном, 20, ФИО));
- С.Вставить("НадбавкаЗаКатегорию", ПрочитатьЯчейкуЧисло(ЛистРасчет, Ном, 21, ФИО));
- С.Вставить("НадбавкаЗаВредность", ПрочитатьЯчейкуЧисло(ЛистРасчет, Ном, 22, ФИО));
- С.Вставить("ПовышающийКоэффициент", ПрочитатьЯчейкуЧисло(ЛистРасчет, Ном, 23, ФИО));
- С.Вставить("СтимулирующиеВыплаты", ПрочитатьЯчейкуЧисло(ЛистРасчет, Ном, 24, ФИО));
- С.Вставить("СтимулирующаяНадбавка", ПрочитатьЯчейкуЧисло(ЛистРасчет, Ном, 25, ФИО));
- С.Вставить("РайонныйКоэффициент", ПрочитатьЯчейкуЧисло(ЛистРасчет, Ном, 26, ФИО));
- С.Вставить("ВыплатыПоУказу597", ПрочитатьЯчейкуЧисло(ЛистРасчет, Ном, 27, ФИО));
- С.Вставить("ПремияРазовая", ПрочитатьЯчейкуЧисло(ЛистРасчет, Ном, 28, ФИО));
- С.Вставить("БольничныйЛистЗаСчетПредприятия", ПрочитатьЯчейкуЧисло(ЛистРасчет, Ном, 29, ФИО));
- С.Вставить("ДоплатаПрофактиву", ПрочитатьЯчейкуЧисло(ЛистРасчет, Ном, 30, ФИО));
- С.Вставить("ПусковыеОбсервация", ПрочитатьЯчейкуЧисло(ЛистРасчет, Ном, 31, ФИО));
- С.Вставить("Отпуск", ПрочитатьЯчейкуЧисло(ЛистРасчет, Ном, 32, ФИО));
- С.Вставить("КомпенсацияЗаОтпуск", ПрочитатьЯчейкуЧисло(ЛистРасчет, Ном, 33, ФИО));
- С.Вставить("ПрочиеКомандировочныйУчебныйОтпуск", ПрочитатьЯчейкуЧисло(ЛистРасчет, Ном, 34, ФИО));
- С.Вставить("ВыходноеПособие", ПрочитатьЯчейкуЧисло(ЛистРасчет, Ном, 35, ФИО));
- С.Вставить("ПоУходуЗаРебенкомИнвалидом", ПрочитатьЯчейкуЧисло(ЛистРасчет, Ном, 36, ФИО));
- С.Вставить("ДоплатаДоМРОТ", ПрочитатьЯчейкуЧисло(ЛистРасчет, Ном, 37, ФИО));
- С.Вставить("Родовые", ПрочитатьЯчейкуЧисло(ЛистРасчет, Ном, 38, ФИО));
- // Итоги
- С.Вставить("ИтогоНачислено", ПрочитатьЯчейкуЧисло(ЛистРасчет, Ном, 39, ФИО));
- С.Вставить("НДФЛ", ПрочитатьЯчейкуЧисло(ЛистРасчет, Ном, 40, ФИО));
- С.Вставить("ПрофВзнос", ПрочитатьЯчейкуЧисло(ЛистРасчет, Ном, 41, ФИО));
- С.Вставить("ИсполнительныеДокументы", ПрочитатьЯчейкуЧисло(ЛистРасчет, Ном, 42, ФИО));
- С.Вставить("Аванс", ПрочитатьЯчейкуЧисло(ЛистРасчет, Ном, 43, ФИО));
- С.Вставить("ПФСофинансирование", ПрочитатьЯчейкуЧисло(ЛистРасчет, Ном, 44, ФИО));
- С.Вставить("ПремияУдержание", ПрочитатьЯчейкуЧисло(ЛистРасчет, Ном, 45, ФИО));
- С.Вставить("Касса1", ПрочитатьЯчейкуЧисло(ЛистРасчет, Ном, 46, ФИО));
- С.Вставить("Касса2", ПрочитатьЯчейкуЧисло(ЛистРасчет, Ном, 47, ФИО));
- С.Вставить("Касса3", ПрочитатьЯчейкуЧисло(ЛистРасчет, Ном, 48, ФИО));
- С.Вставить("ПособиеДо3ЛетУдержание", ПрочитатьЯчейкуЧисло(ЛистРасчет, Ном, 49, ФИО));
- С.Вставить("БезналичныеПеречисления", ПрочитатьЯчейкуЧисло(ЛистРасчет, Ном, 50, ФИО));
- С.Вставить("ВозвратВКассу", ПрочитатьЯчейкуЧисло(ЛистРасчет, Ном, 51, ФИО));
- С.Вставить("Депонент", ПрочитатьЯчейкуЧисло(ЛистРасчет, Ном, 52, ФИО));
- С.Вставить("ОстатокНаНачало", ПрочитатьЯчейкуЧисло(ЛистРасчет, Ном, 54, ФИО));
- С.Вставить("ВсегоНаРуки", ПрочитатьЯчейкуЧисло(ЛистРасчет, Ном, 55, ФИО));
- // TODO: ЗарплатаЗаПервуюПоловину, ПремияАванс, ВыплатыВМежрасчетный — колонки не определены
- // Сейчас перезаписывают ПФСофинансирование/ПремияУдержание/Касса1 (кол. 44/45/46)
- С.Вставить("ЗарплатаЗаПервуюПоловину", 0);
- С.Вставить("ПремияАванс", 0);
- С.Вставить("ВыплатыВМежрасчетный", 0);
- // Расчёт итогов
- С.Вставить("ИтогоУдержано",
- С.НДФЛ + С.ПрофВзнос + С.ИсполнительныеДокументы + С.ПФСофинансирование
- + С.ПремияУдержание + С.ПособиеДо3ЛетУдержание + С.Депонент);
- С.Вставить("ИтогоВыплачено",
- С.Аванс + С.Касса1 + С.Касса2 + С.Касса3
- + С.БезналичныеПеречисления + С.ВозвратВКассу);
- Возврат С;
-КонецФункции
-
-&НаКлиенте
-Функция ПрочитатьНДФЛСоЛиста(ЛистСотрудника, ФИО)
- Если ЛистСотрудника = Неопределено Тогда Возврат Неопределено; КонецЕсли;
- ЕстьБлок = Ложь;
- Для Стр = 30 По 32 Цикл
- Текст = НРег(ПрочитатьЯчейкуСтрока(ЛистСотрудника, Стр, 1));
- Если СтрНайти(Текст, "ндфл") > 0 ИЛИ СтрНайти(Текст, "взнос") > 0 Тогда
- ЕстьБлок = Истина; Прервать;
- КонецЕсли;
- КонецЦикла;
- Если Не ЕстьБлок Тогда
- Если СтрНайти(НРег(ПрочитатьЯчейкуСтрока(ЛистСотрудника, 36, 1)), "январь") = 0 Тогда
- Возврат Неопределено;
- КонецЕсли;
- КонецЕсли;
- СД = СтрокаМесяцаНаЛистеСотрудника();
- НДФЛ = Новый Структура;
- НДФЛ.Вставить("ФИО", ФИО);
- НДФЛ.Вставить("МесяцРасчета", ПрочитатьЯчейкуСтрока(ЛистСотрудника, СД, 1));
- НДФЛ.Вставить("СуммаВаловогоДохода", ПрочитатьЯчейкуЧисло(ЛистСотрудника, СД, 4, ФИО));
- НДФЛ.Вставить("СуммаВаловогоДоходаСНачалаГода", ПрочитатьЯчейкуЧисло(ЛистСотрудника, СД, 6, ФИО));
- НДФЛ.Вставить("СкидкаДляНДФЛЗаМесяц", ПрочитатьЯчейкуЧисло(ЛистСотрудника, СД, 8, ФИО));
- НДФЛ.Вставить("СкидкаДляНДФЛЗаГод", ПрочитатьЯчейкуЧисло(ЛистСотрудника, СД, 9, ФИО));
- НДФЛ.Вставить("СкидкаДляСВЗаМесяц", ПрочитатьЯчейкуЧисло(ЛистСотрудника, СД, 10, ФИО));
- НДФЛ.Вставить("ВычетНаРаботникаЗаМесяц", ПрочитатьЯчейкуЧисло(ЛистСотрудника, СД, 12, ФИО));
- НДФЛ.Вставить("ВычетНаРаботникаЗаГод", 0);
- НДФЛ.Вставить("ВычетНаИждивенцевЗаМесяц", ПрочитатьЯчейкуЧисло(ЛистСотрудника, СД, 13, ФИО));
- НДФЛ.Вставить("ВсегоВычетовЗаМесяц", ПрочитатьЯчейкуЧисло(ЛистСотрудника, СД, 14, ФИО));
- НДФЛ.Вставить("ОблагаемыйДоходЗаМесяц", 0);
- НДФЛ.Вставить("ОблагаемыйДоходЗаГод", ПрочитатьЯчейкуЧисло(ЛистСотрудника, СД, 15, ФИО));
- НДФЛ.Вставить("НачисленныйНДФЛЗаГод", ПрочитатьЯчейкуЧисло(ЛистСотрудника, СД, 16, ФИО));
- НДФЛ.Вставить("ИтогоНДФЛЗаМесяц", ПрочитатьЯчейкуЧисло(ЛистСотрудника, СД, 18, ФИО));
- Возврат НДФЛ;
-КонецФункции
-
-&НаКлиенте
-Функция ПрочитатьВзносыИзРасчета(ЛистРасчет, Ном, ФИО)
- СВ = ПрочитатьЯчейкуЧисло(ЛистРасчет, Ном, 63, ФИО);
- Если СВ <= 0 Тогда Возврат Неопределено; КонецЕсли;
- Стр = Новый Структура;
- Стр.Вставить("ФИО", ФИО);
- Стр.Вставить("ДТ6Процент", ПрочитатьЯчейкуЧисло(ЛистРасчет, Ном, 58, ФИО));
- Стр.Вставить("ДТ4Процент", ПрочитатьЯчейкуЧисло(ЛистРасчет, Ном, 59, ФИО));
- Стр.Вставить("ПФСтраховая", ПрочитатьЯчейкуЧисло(ЛистРасчет, Ном, 60, ФИО));
- Стр.Вставить("ФССФОМС", ПрочитатьЯчейкуЧисло(ЛистРасчет, Ном, 61, ФИО));
- Стр.Вставить("НСПЗ", ПрочитатьЯчейкуЧисло(ЛистРасчет, Ном, 62, ФИО));
- Стр.Вставить("Итого", СВ);
- Возврат Стр;
-КонецФункции
-
-#КонецОбласти
-
-#Область ОсновнаяПроцедура_Домен
+#Область ОсновнаяПроцедура
&НаКлиенте
Процедура ПрочитатьExcelНаКлиенте()
- Состояние("Копирование файла...", 5);
- ВременныйФайл = КаталогВременныхФайлов() + "temp_" + Формат(ТекущаяДата(), "ДФ=yyyyMMddHHmmss") + ".xls";
- КопироватьФайл(Объект.ПутьКФайлу, ВременныйФайл);
- КонтекстExcel = ОткрытьФайлExcel(ВременныйФайл);
- Если КонтекстExcel = Неопределено Тогда УдалитьФайлы(ВременныйФайл); Возврат; КонецЕсли;
+ КонтекстExcel = ЗагрузкаДанныхИзExcel_ЧтениеЭксель.ОткрытьФайлExcel(Объект.ПутьКФайлу);
+ Если КонтекстExcel = Неопределено Тогда Возврат; КонецЕсли;
- ЛистРасчет = НайтиЛист(КонтекстExcel.Книга, "Расчет");
+ ЛистРасчет = ЗагрузкаДанныхИзExcel_ЧтениеЭксель.НайтиЛист(КонтекстExcel.Книга, "Расчет");
Если ЛистРасчет = Неопределено Тогда
- Сообщить("Лист Расчет не найден!");
- ЗакрытьExcel(КонтекстExcel, ВременныйФайл);
+ Сообщить("Лист 'Расчет' не найден!");
+ ЗагрузкаДанныхИзExcel_ЧтениеЭксель.ЗакрытьExcel(КонтекстExcel, Неопределено);
Возврат;
КонецЕсли;
- // Месяц и год
- МесяцЗначение = ЛистРасчет.Cells(4, 1).Value;
- Если ЗначениеЗаполнено(МесяцЗначение) Тогда
- Попытка
- Объект.МесяцЗагрузки = Число(МесяцЗначение);
- Исключение
- Объект.МесяцЗагрузки = 0;
- КонецПопытки;
- КонецЕсли;
- ГодЗначение = ЛистРасчет.Cells(3, 1).Value;
- Если ЗначениеЗаполнено(ГодЗначение) Тогда
- Попытка
- Объект._ГодЗагрузки = Число(ГодЗначение);
- Исключение
- Объект._ГодЗагрузки = 0;
- КонецПопытки;
- Иначе
- Объект._ГодЗагрузки = 0;
- КонецЕсли;
- МесяцТекст = НомерМесяцаВТекст(Объект.МесяцЗагрузки) + " " + Объект._ГодЗагрузки;
- Организация = СокрЛП(Строка(ЛистРасчет.Cells(4, 20).Value));
- СтатьяФинансирования = СокрЛП(Строка(ЛистРасчет.Cells(8, 20).Value));
- СтатьяРасходов = "211";
- // Сохраняем строковые значения для передачи на сервер
- Объект._ОрганизацияНаименование = Организация;
- Объект._СтатьяФинансированияНаименование = СтатьяФинансирования;
- Объект._СтатьяРасходовКод = СтатьяРасходов;
- // Строка начала данных
+ // Определяем параметры из Excel
+ Объект._ГодЗагрузки = Строка(ЗагрузкаДанныхИзExcel_МаппингДанных.ОпределитьГодЗагрузки(ЛистРасчет));
+ Объект._ОрганизацияНаименование = ЗагрузкаДанныхИзExcel_МаппингДанных.ОпределитьОрганизацию(ЛистРасчет);
+ Объект._СтатьяФинансированияНаименование = ЗагрузкаДанныхИзExcel_МаппингДанных.ОпределитьСтатьюФинансирования(ЛистРасчет);
+ Объект._СтатьяРасходовКод = "211";
+ Объект.МесяцЗагрузки = Число(ЛистРасчет.Cells(4, 1).Value);
+
+ ГодЗагрузки = Объект._ГодЗагрузки;
+ МесяцТекст = ЗагрузкаДанныхИзExcel_МаппингДанных.НомерМесяцаВТекст(Объект.МесяцЗагрузки) + " " + ГодЗагрузки;
+
+ // Определяем начальную строку данных
НачальнаяСтрока = 0;
Для Ном = 17 По 30 Цикл
Формула = ЛистРасчет.Cells(Ном, 1).Formula;
@@ -354,7 +86,7 @@
КонецЕсли;
Если НачальнаяСтрока = 0 Тогда
Сообщить("Данные не найдены!");
- ЗакрытьExcel(КонтекстExcel, ВременныйФайл);
+ ЗагрузкаДанныхИзExcel_ЧтениеЭксель.ЗакрытьExcel(КонтекстExcel, Неопределено);
Возврат;
КонецЕсли;
@@ -376,23 +108,22 @@
Если СтрНачинаетсяС(ВРег(ФИОТекст), "ИТОГО") Тогда Прервать; КонецЕсли;
Если СтрНачинаетсяС(ВРег(ФИОТекст), "СОТРУДНИК") ИЛИ СтрНачинаетсяС(ВРег(ФИОТекст), "ФАМИЛИЯ") Тогда Продолжить; КонецЕсли;
- ЛистСотрудника = НайтиЛистСотрудника(КонтекстExcel.Книга, ЛистРасчет, Ном);
+ ЛистСотрудника = ЗагрузкаДанныхИзExcel_МаппингДанных.НайтиЛистСотрудника(КонтекстExcel.Книга, ЛистРасчет, Ном);
Если ЛистСотрудника = Неопределено Тогда Продолжить; КонецЕсли;
- ФИО = ПрочитатьЯчейкуСтрока(ЛистСотрудника, 2, 3);
+ ФИО = ЗагрузкаДанныхИзExcel_ЧтениеЭксель.ПрочитатьЯчейкуСтрока(ЛистСотрудника, 2, 3);
Если Не ЗначениеЗаполнено(ФИО) Тогда ФИО = ФИОТекст; КонецЕсли;
Если Не ЗначениеЗаполнено(ФИО) Тогда Продолжить; КонецЕсли;
Счетчик = Счетчик + 1;
Состояние("Загрузка: " + ФИО, 20 + 70 * Счетчик / 50);
- Строка = ПрочитатьРасчетныеДанныеИзРасчета(ЛистРасчет, Ном, ФИО);
+ Строка = ЗагрузкаДанныхИзExcel_МаппингДанных.ПрочитатьРасчетныеДанные(ЛистРасчет, Ном, ФИО);
Строка.Вставить("ИдентификаторСотрудника", Счетчик);
+ Строка.Вставить("ОтработаноДнейКалендарных", ЗагрузкаДанныхИзExcel_ЧтениеЭксель.ПрочитатьЯчейкуЧисло(ЛистСотрудника, ЗагрузкаДанныхИзExcel_МаппингДанных.СтрокаМесяцаНаЛистеСотрудника(), 4, ФИО));
Если ЛистСотрудника <> Неопределено Тогда
- СтрокаМесяца = СтрокаМесяцаНаЛистеСотрудника();
- Строка.Вставить("ОтработаноДнейКалендарных", ПрочитатьЯчейкуЧисло(ЛистСотрудника, СтрокаМесяца, 4, ФИО));
- Карточка = ПрочитатьКарточкуСотрудника(ЛистСотрудника);
+ Карточка = ЗагрузкаДанныхИзExcel_МаппингДанных.ПрочитатьКарточкуСотрудника(ЛистСотрудника);
Если ЗначениеЗаполнено(Карточка.ФИО) Тогда Строка.Вставить("ФИО", Карточка.ФИО); КонецЕсли;
КонецЕсли;
@@ -400,17 +131,16 @@
// Сотрудники
Если ЛистСотрудника <> Неопределено Тогда
- ДанныеСотр = ПрочитатьКарточкуСотрудника(ЛистСотрудника);
+ ДанныеСотр = ЗагрузкаДанныхИзExcel_МаппингДанных.ПрочитатьКарточкуСотрудника(ЛистСотрудника);
Иначе
- ДанныеСотр = Новый Структура("ФИО, ИНН, СНИЛС, ЛицевойСчетВБанке, ВидЗанятости, АдресРегистрации",
- ФИО, "", "", "", "", "");
+ ДанныеСотр = Новый Структура("ФИО, ИНН, СНИЛС, ЛицевойСчетВБанке, ВидЗанятости, АдресРегистрации", ФИО, "", "", "", "", "");
КонецЕсли;
ДанныеСотр.Вставить("Идентификатор", Счетчик);
МассивСотрудников.Добавить(ДанныеСотр);
// НДФЛ
Если ЛистСотрудника <> Неопределено Тогда
- ДанныеНДФЛ = ПрочитатьНДФЛСоЛиста(ЛистСотрудника, ФИО);
+ ДанныеНДФЛ = ЗагрузкаДанныхИзExcel_МаппингДанных.ПрочитатьНДФЛСоЛиста(ЛистСотрудника, ФИО);
Если ДанныеНДФЛ <> Неопределено Тогда
ДанныеНДФЛ.Вставить("ИдентификаторСотрудника", Счетчик);
МассивНДФЛ.Добавить(ДанныеНДФЛ);
@@ -418,18 +148,21 @@
КонецЕсли;
// Страховые взносы
- СтрВзносов = ПрочитатьВзносыИзРасчета(ЛистРасчет, Ном, ФИО);
+ СтрВзносов = ЗагрузкаДанныхИзExcel_МаппингДанных.ПрочитатьВзносыИзРасчета(ЛистРасчет, Ном, ФИО);
Если СтрВзносов <> Неопределено Тогда
СтрВзносов.Вставить("ИдентификаторСотрудника", Счетчик);
МассивВзносов.Добавить(СтрВзносов);
КонецЕсли;
+
КонецЦикла;
- ЗакрытьExcel(КонтекстExcel, ВременныйФайл);
+ ЗагрузкаДанныхИзExcel_ЧтениеЭксель.ЗакрытьExcel(КонтекстExcel, Неопределено);
+ Состояние("Заполнение таблиц...", 95);
+
ЗаполнитьТаблицыНаСервере(МассивДанных, МассивВзносов, МассивНДФЛ, МассивСотрудников);
- СтатусЗагрузки = "Готово! " + МассивДанных.Количество() + " сотр., " + МассивНДФЛ.Количество() + " записей НДФЛ";
- Сообщить(СтатусЗагрузки);
- ОбновитьОтображениеДанных();
+
+ СтатусЗагрузки = "Загружено: " + Счетчик + " сотрудников";
+ Состояние("Готово", 100);
КонецПроцедуры
#КонецОбласти
@@ -438,263 +171,7 @@
&НаСервере
Процедура ЗаполнитьТаблицыНаСервере(МассивДанных, МассивВзносов, МассивНДФЛ, МассивСотрудников)
- Объект.ДанныеРасчетаЗП.Очистить();
- Для Каждого Эл Из МассивДанных Цикл
- Строка = Объект.ДанныеРасчетаЗП.Добавить();
- ЗаполнитьЗначенияСвойств(Строка, Эл);
- КонецЦикла;
- Объект.ДанныеСтраховыхВзносов.Очистить();
- Для Каждого Эл Из МассивВзносов Цикл
- Строка = Объект.ДанныеСтраховыхВзносов.Добавить();
- ЗаполнитьЗначенияСвойств(Строка, Эл);
- КонецЦикла;
- Объект.ДанныеНДФЛ.Очистить();
- Для Каждого Эл Из МассивНДФЛ Цикл
- Строка = Объект.ДанныеНДФЛ.Добавить();
- ЗаполнитьЗначенияСвойств(Строка, Эл);
- КонецЦикла;
- Объект.Сотрудники.Очистить();
- Для Каждого Эл Из МассивСотрудников Цикл
- Строка = Объект.Сотрудники.Добавить();
- ЗаполнитьЗначенияСвойств(Строка, Эл);
- КонецЦикла;
-КонецПроцедуры
-
-&НаСервере
-Процедура ЗаписатьДанныеНаСервере(Знач ГодЗагрузкиПараметр, ОрганизацияНаименование, СтатьяФинансированияНаименование, СтатьяРасходовКод)
- // Определяем период
- ГодЧисло = Число(ГодЗагрузкиПараметр);
- МесяцЧисло = Цел(Объект.МесяцЗагрузки);
- Если ГодЧисло = 0 Тогда ГодЧисло = Год(ТекущаяДата()); КонецЕсли;
- Если МесяцЧисло < 1 Или МесяцЧисло > 12 Тогда
- Сообщить("Ошибка: месяц загрузки = " + МесяцЧисло + ", год = " + ГодЧисло);
- Возврат;
- КонецЕсли;
- Период = Дата(ГодЧисло, МесяцЧисло, 1);
-
- // Разрешаем ссылки из строковых значений
- Организация = Справочники.Организации.НайтиПоНаименованию(СокрЛП(ОрганизацияНаименование), Истина);
- Если Не ЗначениеЗаполнено(Организация) Тогда
- Сообщить("Не найдена организация: """ + ОрганизацияНаименование + """");
- Возврат;
- КонецЕсли;
-
- СтатьяФинансирования = Неопределено;
- Если ЗначениеЗаполнено(СтатьяФинансированияНаименование) Тогда
- СтатьяФинансирования = Справочники.СтатьиФинансированияЗарплата.НайтиПоНаименованию(СокрЛП(СтатьяФинансированияНаименование), Истина);
- КонецЕсли;
-
- СтатьяРасходов = Неопределено;
- Если ЗначениеЗаполнено(СтатьяРасходовКод) Тогда
- СтатьяРасходов = Справочники.СтатьиРасходовЗарплата.НайтиПоКоду(СокрЛП(СтатьяРасходовКод));
- КонецЕсли;
-
- // Создаём документ ПереносДанных
- ДокПеренос = Документы.ПереносДанных.СоздатьДокумент();
- ДокПеренос.Дата = Период;
-
- // Сопоставление сотрудников
- СоответствиеСотрудников = Новый Соответствие;
- Для Каждого Эл Из Объект.Сотрудники Цикл
- СоответствиеСотрудников.Вставить(Эл.Идентификатор, Эл.ФИО);
- КонецЦикла;
-
- // Кэш сотрудников: Идентификатор -> (Сотрудник, ФизическоеЛицо)
- // Приоритет поиска: ИНН → СНИЛС → ФИО
- КэшСотрудников = Новый Соответствие;
- Для Каждого Эл Из Объект.Сотрудники Цикл
- СотрСсылка = Неопределено;
-
- // 1. Поиск по ИНН (уникальный идентификатор)
- Если ЗначениеЗаполнено(Эл.ИНН) Тогда
- СотрСсылка = Справочники.Сотрудники.НайтиПоРеквизиту("ИНН", СокрЛП(Эл.ИНН));
- КонецЕсли;
-
- // 2. Поиск по СНИЛС
- Если Не ЗначениеЗаполнено(СотрСсылка) И ЗначениеЗаполнено(Эл.СНИЛС) Тогда
- ФЛ = Справочники.ФизическиеЛица.НайтиПоРеквизиту("СтраховойНомерПФР", СокрЛП(Эл.СНИЛС));
- Если ЗначениеЗаполнено(ФЛ) Тогда
- СотрСсылка = Справочники.Сотрудники.НайтиПоРеквизиту("ФизическоеЛицо", ФЛ, Истина);
- КонецЕсли;
- КонецЕсли;
-
- // 3. Поиск по ФИО (fallback)
- Если Не ЗначениеЗаполнено(СотрСсылка) И ЗначениеЗаполнено(Эл.ФИО) Тогда
- СотрСсылка = Справочники.Сотрудники.НайтиПоНаименованию(СокрЛП(Эл.ФИО), Истина);
- КонецЕсли;
-
- Если ЗначениеЗаполнено(СотрСсылка) Тогда
- КэшСотрудников.Вставить(Эл.Идентификатор, Новый Структура("Сотрудник, ФизическоеЛицо", СотрСсылка, СотрСсылка.ФизическоеЛицо));
- КонецЕсли;
- КонецЦикла;
-
- // Сопоставление организаций и статей
- // ============================================
- // Регистр 1: НачисленияУдержанияПоСотрудникам
- // ============================================
- Для Каждого Строка Из Объект.ДанныеРасчетаЗП Цикл
- ИД = Строка.ИдентификаторСотрудника;
- ДанныеСотр = КэшСотрудников.Получить(ИД);
- Если ДанныеСотр = Неопределено Тогда Продолжить; КонецЕсли;
- ФизЛицо = ДанныеСотр.ФизическоеЛицо;
- СотрудникСсылка = ДанныеСотр.Сотрудник;
-
- // Начисления (Оклад, доплаты, надбавки и т.д.)
- ЗаписатьНачисление(ДокПеренос, Строка, "Оклад", Строка.Оклад, Перечисления.ГруппыНачисленияУдержанияВыплаты.Начислено, Период, Организация, СтатьяФинансирования, СтатьяРасходов, ФизЛицо, СотрудникСсылка);
- ЗаписатьНачисление(ДокПеренос, Строка, "ДоплатаСовместительство", Строка.ДоплатаСовместительство, Перечисления.ГруппыНачисленияУдержанияВыплаты.Начислено, Период, Организация, СтатьяФинансирования, СтатьяРасходов, ФизЛицо, СотрудникСсылка);
- ЗаписатьНачисление(ДокПеренос, Строка, "ДоплатаНочные", Строка.ДоплатаНочные, Перечисления.ГруппыНачисленияУдержанияВыплаты.Начислено, Период, Организация, СтатьяФинансирования, СтатьяРасходов, ФизЛицо, СотрудникСсылка);
- ЗаписатьНачисление(ДокПеренос, Строка, "ДоплатаПраздничные", Строка.ДоплатаПраздничные, Перечисления.ГруппыНачисленияУдержанияВыплаты.Начислено, Период, Организация, СтатьяФинансирования, СтатьяРасходов, ФизЛицо, СотрудникСсылка);
- ЗаписатьНачисление(ДокПеренос, Строка, "НадбавкаЗаКатегорию", Строка.НадбавкаЗаКатегорию, Перечисления.ГруппыНачисленияУдержанияВыплаты.Начислено, Период, Организация, СтатьяФинансирования, СтатьяРасходов, ФизЛицо, СотрудникСсылка);
- ЗаписатьНачисление(ДокПеренос, Строка, "НадбавкаЗаВредность", Строка.НадбавкаЗаВредность, Перечисления.ГруппыНачисленияУдержанияВыплаты.Начислено, Период, Организация, СтатьяФинансирования, СтатьяРасходов, ФизЛицо, СотрудникСсылка);
- ЗаписатьНачисление(ДокПеренос, Строка, "ПовышающийКоэффициент", Строка.ПовышающийКоэффициент, Перечисления.ГруппыНачисленияУдержанияВыплаты.Начислено, Период, Организация, СтатьяФинансирования, СтатьяРасходов, ФизЛицо, СотрудникСсылка);
- ЗаписатьНачисление(ДокПеренос, Строка, "СтимулирующаяВыплата", Строка.СтимулирующиеВыплаты, Перечисления.ГруппыНачисленияУдержанияВыплаты.Начислено, Период, Организация, СтатьяФинансирования, СтатьяРасходов, ФизЛицо, СотрудникСсылка);
- ЗаписатьНачисление(ДокПеренос, Строка, "РайонныйКоэффициент", Строка.РайонныйКоэффициент, Перечисления.ГруппыНачисленияУдержанияВыплаты.Начислено, Период, Организация, СтатьяФинансирования, СтатьяРасходов, ФизЛицо, СотрудникСсылка);
- ЗаписатьНачисление(ДокПеренос, Строка, "ПремияРазовая", Строка.ПремияРазовая, Перечисления.ГруппыНачисленияУдержанияВыплаты.Начислено, Период, Организация, СтатьяФинансирования, СтатьяРасходов, ФизЛицо, СотрудникСсылка);
- ЗаписатьНачисление(ДокПеренос, Строка, "Отпуск", Строка.Отпуск, Перечисления.ГруппыНачисленияУдержанияВыплаты.Начислено, Период, Организация, СтатьяФинансирования, СтатьяРасходов, ФизЛицо, СотрудникСсылка);
- ЗаписатьНачисление(ДокПеренос, Строка, "КомпенсацияЗаНеиспользованныйОтпуск", Строка.КомпенсацияЗаОтпуск, Перечисления.ГруппыНачисленияУдержанияВыплаты.Начислено, Период, Организация, СтатьяФинансирования, СтатьяРасходов, ФизЛицо, СотрудникСсылка);
- ЗаписатьНачисление(ДокПеренос, Строка, "ВыходноеПособие", Строка.ВыходноеПособие, Перечисления.ГруппыНачисленияУдержанияВыплаты.Начислено, Период, Организация, СтатьяФинансирования, СтатьяРасходов, ФизЛицо, СотрудникСсылка);
- ЗаписатьНачисление(ДокПеренос, Строка, "Родовые", Строка.Родовые, Перечисления.ГруппыНачисленияУдержанияВыплаты.Начислено, Период, Организация, СтатьяФинансирования, СтатьяРасходов, ФизЛицо, СотрудникСсылка);
-
- // Удержания
- ЗаписатьНачисление(ДокПеренос, Строка, "НДФЛ", Строка.НДФЛ, Перечисления.ГруппыНачисленияУдержанияВыплаты.Удержано, Период, Организация, СтатьяФинансирования, СтатьяРасходов, ФизЛицо, СотрудникСсылка);
- ЗаписатьНачисление(ДокПеренос, Строка, "ПрофВзнос", Строка.ПрофВзнос, Перечисления.ГруппыНачисленияУдержанияВыплаты.Удержано, Период, Организация, СтатьяФинансирования, СтатьяРасходов, ФизЛицо, СотрудникСсылка);
- ЗаписатьНачисление(ДокПеренос, Строка, "ИсполнительныйДокумент", Строка.ИсполнительныеДокументы, Перечисления.ГруппыНачисленияУдержанияВыплаты.Удержано, Период, Организация, СтатьяФинансирования, СтатьяРасходов, ФизЛицо, СотрудникСсылка);
-
- // Выплаты
- ЗаписатьНачисление(ДокПеренос, Строка, "Оклад", Строка.Аванс, Перечисления.ГруппыНачисленияУдержанияВыплаты.Выплачено, Период, Организация, СтатьяФинансирования, СтатьяРасходов, ФизЛицо, СотрудникСсылка);
- ЗаписатьНачисление(ДокПеренос, Строка, "Оклад", Строка.ЗарплатаЗаПервуюПоловину, Перечисления.ГруппыНачисленияУдержанияВыплаты.Выплачено, Период, Организация, СтатьяФинансирования, СтатьяРасходов, ФизЛицо, СотрудникСсылка);
- ЗаписатьНачисление(ДокПеренос, Строка, "Касса1", Строка.Касса1, Перечисления.ГруппыНачисленияУдержанияВыплаты.Выплачено, Период, Организация, СтатьяФинансирования, СтатьяРасходов, ФизЛицо, СотрудникСсылка);
- ЗаписатьНачисление(ДокПеренос, Строка, "БезналичноеПеречисление", Строка.БезналичныеПеречисления, Перечисления.ГруппыНачисленияУдержанияВыплаты.Выплачено, Период, Организация, СтатьяФинансирования, СтатьяРасходов, ФизЛицо, СотрудникСсылка);
- ЗаписатьНачисление(ДокПеренос, Строка, "ПремияАванс", Строка.ПремияАванс, Перечисления.ГруппыНачисленияУдержанияВыплаты.Выплачено, Период, Организация, СтатьяФинансирования, СтатьяРасходов, ФизЛицо, СотрудникСсылка);
- ЗаписатьНачисление(ДокПеренос, Строка, "ВыплатыВМежрасчетный", Строка.ВыплатыВМежрасчетный, Перечисления.ГруппыНачисленияУдержанияВыплаты.Выплачено, Период, Организация, СтатьяФинансирования, СтатьяРасходов, ФизЛицо, СотрудникСсылка);
- КонецЦикла;
-
- // Регистр 2: ОтработанноеВремяПоСотрудникам
- // ============================================
- ВидРасчётаОклад = ПланыВидовРасчета.Начисления.НайтиПоНаименованию("Оклад", Истина);
- Для Каждого Строка Из Объект.ДанныеРасчетаЗП Цикл
- ДанныеСотр = КэшСотрудников.Получить(Строка.ИдентификаторСотрудника);
- Если ДанныеСотр = Неопределено Тогда Продолжить; КонецЕсли;
- Если Строка.ОтработаноДней > 0 Или Строка.РабочиеЧасыПоТабелю > 0 Тогда
- Движение = ДокПеренос.Движения.ОтработанноеВремяПоСотрудникам.Добавить();
- Движение.Период = Период;
- Движение.Организация = Организация;
- Движение.ФизическоеЛицо = ДанныеСотр.ФизическоеЛицо;
- Движение.Сотрудник = ДанныеСотр.Сотрудник;
- Движение.Начисление = ВидРасчётаОклад;
- Движение.ОтработаноДней = Строка.ОтработаноДней;
- Движение.ОтработаноЧасов = Строка.РабочиеЧасыПоТабелю;
- Движение.ОплаченоДней = Строка.ОтработаноДней;
- Движение.ОплаченоЧасов = Строка.РабочиеЧасыПоТабелю;
- КонецЕсли;
- КонецЦикла;
-
- // ============================================
- // Регистр 3: СведенияОДоходахНДФЛ
- // ============================================
- Для Каждого Строка Из Объект.ДанныеНДФЛ Цикл
- ДанныеСотр = КэшСотрудников.Получить(Строка.ИдентификаторСотрудника);
- Если ДанныеСотр = Неопределено Тогда Продолжить; КонецЕсли;
- Движение = ДокПеренос.Движения.СведенияОДоходахНДФЛ.Добавить();
- Движение.Период = Период;
- Движение.ГоловнаяОрганизация = Организация;
- Движение.Организация = Организация;
- Движение.ФизическоеЛицо = ДанныеСотр.ФизическоеЛицо;
- Движение.МесяцНалоговогоПериода = Период;
- Движение.СуммаДохода = Строка.СуммаВаловогоДохода;
- Движение.СуммаВычета = Строка.СкидкаДляНДФЛЗаМесяц + Строка.ВычетНаРаботникаЗаМесяц + Строка.ВычетНаИждивенцевЗаМесяц;
- КонецЦикла;
-
- // ============================================
- // Регистр 4: СтраховыеВзносыПоФизическимЛицам
- // ============================================
- Для Каждого Строка Из Объект.ДанныеСтраховыхВзносов Цикл
- ДанныеСотр = КэшСотрудников.Получить(Строка.ИдентификаторСотрудника);
- Если ДанныеСотр = Неопределено Тогда Продолжить; КонецЕсли;
- Движение = ДокПеренос.Движения.СтраховыеВзносыПоФизическимЛицам.Добавить();
- Движение.Период = Период;
- Движение.Организация = Организация;
- Движение.ФизическоеЛицо = ДанныеСотр.ФизическоеЛицо;
- Движение.Сотрудник = ДанныеСотр.Сотрудник;
- Движение.ПФРДоПредельнойВеличины = Строка.ДТ6Процент;
- Движение.ПФРСтраховая = Строка.ПФСтраховая;
- Движение.ФФОМС = Строка.ФССФОМС;
- Движение.ФССНесчастныеСлучаи = Строка.НСПЗ;
- КонецЦикла;
-
- // ============================================
- // Регистр 5: ПредоставленныеСтандартныеИСоциальныеВычетыНДФЛ
- // Вычеты на детей (стандартные и социальные)
- // Пока нет данных в ТЧ для этого регистра - пропускаем
- // ============================================
-
- // ============================================
- // Регистр 8: ДанныеОВремениДляРасчетаСреднегоОбщий
- // Dimensions: Сотрудник, ПорядокРасчета
- // Resources: ОтработаноДней, ОтработаноЧасов, ОтработаноДнейКалендарных
- // ============================================
- ДвиженияСреднего = ДокПеренос.Движения.ДанныеОВремениДляРасчетаСреднегоОбщий;
- Для Каждого Строка Из Объект.ДанныеРасчетаЗП Цикл
- ДанныеСотр = КэшСотрудников.Получить(Строка.ИдентификаторСотрудника);
- Если ДанныеСотр = Неопределено Тогда Продолжить; КонецЕсли;
- Если Строка.ОтработаноДней <> 0 Или Строка.ОтработаноДнейКалендарных <> 0 Тогда
- Движение = ДвиженияСреднего.Добавить();
- Движение.Период = Период;
- Движение.Сотрудник = ДанныеСотр.Сотрудник;
- Движение.ОтработаноДней = Строка.ОтработаноДней;
- Движение.ОтработаноЧасов = Строка.РабочиеЧасыПоТабелю;
- Движение.ОтработаноДнейКалендарных = Строка.ОтработаноДнейКалендарных;
- КонецЕсли;
- КонецЦикла;
-
- ДокПеренос.Записать();
-
- Сообщить("Данные записаны. Документ: " + ДокПеренос.Ссылка);
-КонецПроцедуры
-
-// Вспомогательная процедура для записи начисления/удержания/выплаты
-&НаСервере
-Процедура ЗаписатьНачисление(ДокПеренос, Строка, ВидРасчета, Сумма, Группа, Период, Организация, СтатьяФинансирования, СтатьяРасходов, ФизЛицо, СотрудникСсылка)
- Если Сумма = 0 Тогда Возврат; КонецЕсли;
-
- // Определяем суффикс ПВР по статье финансирования
- Суффикс = "";
- Если СтатьяФинансирования <> Неопределено Тогда
- НаименованиеСтатьи = СокрЛП(СтатьяФинансирования.Наименование);
- Если СтрНайти(НаименованиеСтатьи, "\u041e\u041c\u0421") > 0 Тогда
- Суффикс = " (\u041e\u041c\u0421)";
- ИначеЕсли СтрНайти(НаименованиеСтатьи, "\u041f\u0414") > 0 Тогда
- Суффикс = " (\u041f\u0414)";
- ИначеЕсли СтрНайти(НаименованиеСтатьи, "\u0411\u044e\u0434\u0436\u0435\u0442") > 0 Или СтрНайти(НаименованиеСтатьи, "\u0441\u0443\u0431") > 0 Тогда
- Суффикс = "";
- КонецЕсли;
- КонецЕсли;
-
- // Ищем ПВР сначала с суффиксом, потом без
- ВидРасчёта = Неопределено;
- Если ЗначениеЗаполнено(Суффикс) Тогда
- ВидРасчёта = ПланыВидовРасчета.Начисления.НайтиПоНаименованию(ВидРасчета + Суффикс, Истина);
- КонецЕсли;
- Если ВидРасчёта = Неопределено Тогда
- ВидРасчёта = ПланыВидовРасчета.Начисления.НайтиПоНаименованию(ВидРасчета, Истина);
- КонецЕсли;
-
- Если ВидРасчёта = Неопределено Тогда
- Сообщить("Не найден ПВР: " + ВидРасчета + Суффикс);
- Возврат;
- КонецЕсли;
-
- Движение = ДокПеренос.Движения.НачисленияУдержанияПоСотрудникам.Добавить();
- Движение.Период = Период;
- Движение.Организация = Организация;
- Движение.ФизическоеЛицо = ФизЛицо;
- Движение.Сотрудник = СотрудникСсылка;
- Движение.НачислениеУдержание = ВидРасчёта;
- Движение.Сумма = Сумма;
- Движение.ГруппаНачисленияУдержанияВыплаты = Группа;
- Движение.СтатьяФинансирования = СтатьяФинансирования;
- Движение.СтатьяРасходов = СтатьяРасходов;
- Движение.Сторно = Ложь;
+ ЗагрузкаДанныхИзExcel_ЗаписьВРегистры.ЗаполнитьТЧ(МассивДанных, МассивВзносов, МассивНДФЛ, МассивСотрудников, Объект.ДанныеРасчетаЗП, Объект.ДанныеСтраховыхВзносов, Объект.ДанныеНДФЛ, Объект.Сотрудники);
КонецПроцедуры
#КонецОбласти