From 65657932bdd34666ce43d0f01fac913cfa37b5b6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=9F=D1=80=D0=BE=D1=84=D0=B8-=D0=A1=D0=BE=D1=84=D1=82?= Date: Thu, 16 Jul 2026 08:07:43 +0000 Subject: [PATCH] v3.0.0.75 --- .../ЗагрузкаДанныхИзExcel_ЗаписьВРегистры.xml | 17 + .../Ext/Module.bsl | 285 +++++++++ .../ЗагрузкаДанныхИзExcel_МаппингДанных.xml | 17 + .../Ext/Module.bsl | 187 ++++++ .../ЗагрузкаДанныхИзExcel_ЧтениеЭксель.xml | 17 + .../Ext/Module.bsl | 68 ++ ConfigDumpInfo.xml | 269 ++++---- Configuration.xml | 7 +- .../Forms/Форма/Ext/Form/Module.bsl | 595 ++---------------- 9 files changed, 768 insertions(+), 694 deletions(-) create mode 100644 CommonModules/ЗагрузкаДанныхИзExcel_ЗаписьВРегистры.xml create mode 100644 CommonModules/ЗагрузкаДанныхИзExcel_ЗаписьВРегистры/Ext/Module.bsl create mode 100644 CommonModules/ЗагрузкаДанныхИзExcel_МаппингДанных.xml create mode 100644 CommonModules/ЗагрузкаДанныхИзExcel_МаппингДанных/Ext/Module.bsl create mode 100644 CommonModules/ЗагрузкаДанныхИзExcel_ЧтениеЭксель.xml create mode 100644 CommonModules/ЗагрузкаДанныхИзExcel_ЧтениеЭксель/Ext/Module.bsl 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_ЗаписьВРегистры.ЗаполнитьТЧ(МассивДанных, МассивВзносов, МассивНДФЛ, МассивСотрудников, Объект.ДанныеРасчетаЗП, Объект.ДанныеСтраховыхВзносов, Объект.ДанныеНДФЛ, Объект.Сотрудники); КонецПроцедуры #КонецОбласти