diff --git a/CommonModules/ЗагрузкаДанныхИзExcel_ЗаписьВРегистры.xml b/CommonModules/ЗагрузкаДанныхИзExcel_ЗаписьВРегистры.xml deleted file mode 100644 index ebed7d2..0000000 --- a/CommonModules/ЗагрузкаДанныхИзExcel_ЗаписьВРегистры.xml +++ /dev/null @@ -1,17 +0,0 @@ - - - - - ЗагрузкаДанныхИзExcel_ЗаписьВРегистры - - - ru - Запись в регистры - - - - false - true - - - \ No newline at end of file diff --git a/CommonModules/ЗагрузкаДанныхИзExcel_ЗаписьВРегистры/Ext/Module.bsl b/CommonModules/ЗагрузкаДанныхИзExcel_ЗаписьВРегистры/Ext/Module.bsl deleted file mode 100644 index c4db72a..0000000 --- a/CommonModules/ЗагрузкаДанныхИзExcel_ЗаписьВРегистры/Ext/Module.bsl +++ /dev/null @@ -1,285 +0,0 @@ -// Запись данных в регистры 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 deleted file mode 100644 index b58e4f1..0000000 --- a/CommonModules/ЗагрузкаДанныхИзExcel_МаппингДанных.xml +++ /dev/null @@ -1,17 +0,0 @@ - - - - - ЗагрузкаДанныхИзExcel_МаппингДанных - - - ru - Маппинг данных - - - - true - false - - - \ No newline at end of file diff --git a/CommonModules/ЗагрузкаДанныхИзExcel_МаппингДанных/Ext/Module.bsl b/CommonModules/ЗагрузкаДанныхИзExcel_МаппингДанных/Ext/Module.bsl deleted file mode 100644 index c534882..0000000 --- a/CommonModules/ЗагрузкаДанныхИзExcel_МаппингДанных/Ext/Module.bsl +++ /dev/null @@ -1,187 +0,0 @@ -// Маппинг данных -// Парсинг 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 deleted file mode 100644 index 8ecb97b..0000000 --- a/CommonModules/ЗагрузкаДанныхИзExcel_ЧтениеЭксель.xml +++ /dev/null @@ -1,17 +0,0 @@ - - - - - ЗагрузкаДанныхИзExcel_ЧтениеЭксель - - - ru - Чтение Excel (Клиент) - - - - true - false - - - \ No newline at end of file diff --git a/CommonModules/ЗагрузкаДанныхИзExcel_ЧтениеЭксель/Ext/Module.bsl b/CommonModules/ЗагрузкаДанныхИзExcel_ЧтениеЭксель/Ext/Module.bsl deleted file mode 100644 index 88cf90f..0000000 --- a/CommonModules/ЗагрузкаДанныхИзExcel_ЧтениеЭксель/Ext/Module.bsl +++ /dev/null @@ -1,68 +0,0 @@ -// Клиентский модуль для 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 cd113bc..3225148 100755 --- a/ConfigDumpInfo.xml +++ b/ConfigDumpInfo.xml @@ -130,8 +130,8 @@ - - - + + + \ No newline at end of file diff --git a/Configuration.xml b/Configuration.xml index 40d6a4f..de75fba 100755 --- a/Configuration.xml +++ b/Configuration.xml @@ -56,7 +56,7 @@ Russian ООО "Профи-Софт", код партнера 42575-13, г.Байконур. - 3.0.0.77 + 3.0.0.78 Language.Русский @@ -95,9 +95,6 @@ СтатьиРасходовЗарплата СтатьиФинансированияЗарплата ЗагрузкаДанныхИз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 0c6b563..5c71e9c 100644 --- a/DataProcessors/ЗагрузкаДанныхИзExcel/Forms/Форма/Ext/Form/Module.bsl +++ b/DataProcessors/ЗагрузкаДанныхИзExcel/Forms/Форма/Ext/Form/Module.bsl @@ -1,72 +1,310 @@ -#Область ОбработчикиСобытийФормы - -&НаСервере -Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) - -КонецПроцедуры - -#КонецОбласти +// Форма Обработка.ЗагрузкаДанныхИзExcel.Форма.Форма #Область ОбработчикиКоманд &НаКлиенте -Процедура ВыбратьФайл(Команда) +Процедура ВыбратьФайл(Команда) Экспорт Диалог = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие); Диалог.МножественныйВыбор = Ложь; - Диалог.Фильтр = "Excel файлы (*.xls;*.xlsx;*.xlsm)|*.xls;*.xlsx;*.xlsm"; + Диалог.Фильтр = "Excel (*.xls;*.xlsx;*.xlsm)|*.xls;*.xlsx;*.xlsm"; Если Диалог.Выбрать() Тогда Объект.ПутьКФайлу = Диалог.ПолноеИмяФайла; КонецЕсли; КонецПроцедуры &НаКлиенте -Процедура ЗагрузитьДанные(Команда) +Процедура ЗагрузитьДанные(Команда) Экспорт Если Не ЗначениеЗаполнено(Объект.ПутьКФайлу) Тогда Сообщить("Выберите файл!"); Возврат; КонецЕсли; - Состояние("Инициализация...", 0); + Состояние("Инициализация..."); СтатусЗагрузки = "Подготовка..."; ПрочитатьExcelНаКлиенте(); КонецПроцедуры &НаКлиенте -Процедура ЗаписатьДанные(Команда) +Процедура ЗаписатьДанные(Команда) Экспорт Если Объект.ДанныеРасчетаЗП.Количество() = 0 Тогда Сообщить("Нет данных для записи!"); Возврат; КонецЕсли; - ЗагрузкаДанныхИзExcel_ЗаписьВРегистры.ЗаписатьДанные(Объект._ГодЗагрузки, Объект._ОрганизацияНаименование, Объект._СтатьяФинансированияНаименование, Объект._СтатьяРасходовКод); + ЗаписатьДанныеНаСервере(Объект._ГодЗагрузки, Объект._ОрганизацияНаименование, + Объект._СтатьяФинансированияНаименование, Объект._СтатьяРасходовКод); Сообщить("Данные записаны!"); КонецПроцедуры #КонецОбласти -#Область ОсновнаяПроцедура +#Область ЧтениеЭксель_Клиент &НаКлиенте -Процедура ПрочитатьExcelНаКлиенте() - КонтекстExcel = ЗагрузкаДанныхИз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; + Если Значение = Неопределено Тогда Возврат ""; КонецЕсли; + Возврат СокрЛП("" + Значение); + Исключение + Возврат ""; + КонецПопытки; +КонецФункции + +&НаКлиенте +Функция ИзвлечьИмяЛистаИзФормулы(Формула) Экспорт + Если Формула = Неопределено Тогда Возврат ""; КонецЕсли; + Текст = СокрЛП("" + Формула); + Если Не СтрНачинаетсяС(Текст, "='") Тогда Возврат ""; КонецЕсли; + Поз = СтрНайти(Текст, "'!"); + Если Поз = 0 Тогда Возврат ""; КонецЕсли; + Возврат Сред(Текст, 3, Поз - 3); +КонецФункции + +&НаКлиенте +Функция НайтиЛист(Книга, ИмяЛиста) Экспорт + Для Каждого Лист Из Книга.Sheets Цикл + Если ВРег(Лист.Name) = ВРег(ИмяЛиста) Тогда Возврат Лист; КонецЕсли; + КонецЦикла; + Возврат Неопределено; +КонецФункции + +#КонецОбласти + +#Область МаппингДанных_Клиент + +&НаКлиенте +Функция НомерМесяцаВТекст(НомерМесяца) Экспорт + Массив = Новый Массив; + Массив.Добавить("Январь"); Массив.Добавить("Февраль"); + Массив.Добавить("Март"); Массив.Добавить("Апрель"); + Массив.Добавить("Май"); Массив.Добавить("Июнь"); + Массив.Добавить("Июль"); Массив.Добавить("Август"); + Массив.Добавить("Сентябрь"); Массив.Добавить("Октябрь"); + Массив.Добавить("Ноябрь"); Массив.Добавить("Декабрь"); + Если НомерМесяца >= 1 И НомерМесяца <= 12 Тогда + Возврат Массив[НомерМесяца - 1]; + КонецЕсли; + Возврат ""; +КонецФункции + +&НаКлиенте +Функция СтрокаМесяцаНаЛистеСотрудника() Экспорт + Смещение = Объект.МесяцЗагрузки; + Если Не ЗначениеЗаполнено(Смещение) Тогда Смещение = 1; КонецЕсли; + Возврат 35 + Смещение; +КонецФункции + +&НаКлиенте +Функция НайтиЛистСотрудника(Книга, ЛистРасчет, НомерСтроки) Экспорт + Формула = ЛистРасчет.Cells(НомерСтроки, 1).Formula; + Если ЗначениеЗаполнено(Формула) Тогда + ИмяЛиста = ИзвлечьИмяЛистаИзФормулы(Формула); + Если ЗначениеЗаполнено(ИмяЛиста) Тогда + Возврат НайтиЛист(Книга, ИмяЛиста); + КонецЕсли; + КонецЕсли; + ФИО = ПрочитатьЯчейкуСтрока(ЛистРасчет, НомерСтроки, 1); + Если ЗначениеЗаполнено(ФИО) Тогда + Возврат НайтиЛист(Книга, ФИО); + КонецЕсли; + Возврат Неопределено; +КонецФункции + +&НаКлиенте +Функция ПрочитатьКарточкуСотрудника(ЛистСотрудника) Экспорт + Данные = Новый Структура; + Данные.Вставить("ФИО", ПрочитатьЯчейкуСтрока(ЛистСотрудника, 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, ФИО)); + С.Вставить("ЗарплатаЗаПервуюПоловину", 0); + С.Вставить("ПремияАванс", 0); + С.Вставить("ВыплатыВМежрасчетный", 0); + С.Вставить("ИтогоУдержано", С.НДФЛ + С.ПрофВзнос + С.ИсполнительныеДокументы + С.ПФСофинансирование + С.ПремияУдержание + С.ПособиеДо3ЛетУдержание + С.Депонент); + С.Вставить("ИтогоВыплачено", С.Аванс + С.Касса1 + С.Касса2 + С.Касса3 + С.БезналичныеПеречисления + С.ВозвратВКассу); + Возврат С; +КонецФункции + +&НаКлиенте +Функция ПрочитатьНДФЛСоЛиста(ЛистСотрудника, ФИО) Экспорт + СД = СтрокаМесяцаНаЛистеСотрудника(); + Если СД = 0 Тогда Возврат Неопределено; КонецЕсли; + Если Не ЗначениеЗаполнено(ФИО) Тогда Возврат Неопределено; КонецЕсли; + С = Новый Структура; + С.Вставить("ФИО", ФИО); + С.Вставить("МесяцРасчета", ПрочитатьЯчейкуСтрока(ЛистСотрудника, СД, 1)); + С.Вставить("СуммаВаловогоДохода", ПрочитатьЯчейкуЧисло(ЛистСотрудника, СД, 4, ФИО)); + С.Вставить("СуммаВаловогоДоходаСНачалаГода", ПрочитатьЯчейкуЧисло(ЛистСотрудника, СД, 6, ФИО)); + С.Вставить("СкидкаДляНДФЛЗаМесяц", ПрочитатьЯчейкуЧисло(ЛистСотрудника, СД, 8, ФИО)); + С.Вставить("СкидкаДляНДФЛЗаГод", ПрочитатьЯчейкуЧисло(ЛистСотрудника, СД, 9, ФИО)); + С.Вставить("СкидкаДляСВЗаМесяц", ПрочитатьЯчейкуЧисло(ЛистСотрудника, СД, 10, ФИО)); + С.Вставить("ВычетНаРаботникаЗаМесяц", ПрочитатьЯчейкуЧисло(ЛистСотрудника, СД, 12, ФИО)); + С.Вставить("ВычетНаИждивенцевЗаМесяц", ПрочитатьЯчейкуЧисло(ЛистСотрудника, СД, 13, ФИО)); + С.Вставить("ВсегоВычетовЗаМесяц", ПрочитатьЯчейкуЧисло(ЛистСотрудника, СД, 14, ФИО)); + С.Вставить("ОблагаемыйДоходЗаМесяц", ПрочитатьЯчейкуЧисло(ЛистСотрудника, СД, 15, ФИО)); + С.Вставить("ОблагаемыйДоходЗаГод", ПрочитатьЯчейкуЧисло(ЛистСотрудника, СД, 16, ФИО)); + С.Вставить("НачисленныйНДФЛЗаГод", ПрочитатьЯчейкуЧисло(ЛистСотрудника, СД, 17, ФИО)); + С.Вставить("ИтогоНДФЛЗаМесяц", ПрочитатьЯчейкуЧисло(ЛистСотрудника, СД, 18, ФИО)); + С.Вставить("НалоговаяБазаПоСВЗаМесяц", ПрочитатьЯчейкуЧисло(ЛистСотрудника, СД, 23, ФИО)); + С.Вставить("ИтогоФСС", ПрочитатьЯчейкуЧисло(ЛистСотрудника, СД, 37, ФИО)); + Возврат С; +КонецФункции + +&НаКлиенте +Функция ПрочитатьВзносыИзРасчета(ЛистРасчет, Ном, ФИО) Экспорт + С = Новый Структура; + С.Вставить("ФИО", ФИО); + С.Вставить("ДТ6Процент", ПрочитатьЯчейкуЧисло(ЛистРасчет, Ном, 58, ФИО)); + С.Вставить("ДТ4Процент", ПрочитатьЯчейкуЧисло(ЛистРасчет, Ном, 59, ФИО)); + С.Вставить("ПФСтраховая", ПрочитатьЯчейкуЧисло(ЛистРасчет, Ном, 60, ФИО)); + С.Вставить("ФССФОМС", ПрочитатьЯчейкуЧисло(ЛистРасчет, Ном, 61, ФИО)); + С.Вставить("НСПЗ", ПрочитатьЯчейкуЧисло(ЛистРасчет, Ном, 62, ФИО)); + С.Вставить("Итого", ПрочитатьЯчейкуЧисло(ЛистРасчет, Ном, 63, ФИО)); + С.Вставить("НалоговаяБазаПоСВЗаМесяц", 0); + С.Вставить("ИтогоФСС", 0); + Возврат С; +КонецФункции + +&НаКлиенте +Функция ОпределитьГодЗагрузки(ЛистРасчет) Экспорт + ГодЗначение = ПрочитатьЯчейкуЧисло(ЛистРасчет, 3, 1, ""); + Если ГодЗначение > 0 Тогда Возврат Цел(ГодЗначение); КонецЕсли; + ГодЗначение = ПрочитатьЯчейкуЧисло(ЛистРасчет, 4, 1, ""); + Если ГодЗначение > 2000 Тогда Возврат Цел(ГодЗначение); КонецЕсли; + Возврат 0; +КонецФункции + +&НаКлиенте +Функция ОпределитьОрганизацию(ЛистРасчет) Экспорт + Возврат СокрЛП(Строка(ЛистРасчет.Cells(4, 20).Value)); +КонецФункции + +&НаКлиенте +Функция ОпределитьСтатьюФинансирования(ЛистРасчет) Экспорт + Возврат СокрЛП(Строка(ЛистРасчет.Cells(8, 20).Value)); +КонецФункции + +#КонецОбласти + +#Область ЧтениеДанных + +&НаКлиенте +Процедура ПрочитатьExcelНаКлиенте() Экспорт + КонтекстExcel = ОткрытьФайлExcel(Объект.ПутьКФайлу); Если КонтекстExcel = Неопределено Тогда Возврат; КонецЕсли; - ЛистРасчет = ЗагрузкаДанныхИзExcel_ЧтениеЭксель.НайтиЛист(КонтекстExcel.Книга, "Расчет"); + ЛистРасчет = НайтиЛист(КонтекстExcel.Книга, "Расчет"); Если ЛистРасчет = Неопределено Тогда Сообщить("Лист 'Расчет' не найден!"); - ЗагрузкаДанныхИзExcel_ЧтениеЭксель.ЗакрытьExcel(КонтекстExcel, Неопределено); + ЗакрытьExcel(КонтекстExcel, Неопределено); Возврат; КонецЕсли; - // Определяем параметры из Excel - Объект._ГодЗагрузки = Строка(ЗагрузкаДанныхИзExcel_МаппингДанных.ОпределитьГодЗагрузки(ЛистРасчет)); - Объект._ОрганизацияНаименование = ЗагрузкаДанныхИзExcel_МаппингДанных.ОпределитьОрганизацию(ЛистРасчет); - Объект._СтатьяФинансированияНаименование = ЗагрузкаДанныхИзExcel_МаппингДанных.ОпределитьСтатьюФинансирования(ЛистРасчет); + Объект._ГодЗагрузки = Строка(ОпределитьГодЗагрузки(ЛистРасчет)); + Объект._ОрганизацияНаименование = ОпределитьОрганизацию(ЛистРасчет); + Объект._СтатьяФинансированияНаименование = ОпределитьСтатьюФинансирования(ЛистРасчет); Объект._СтатьяРасходовКод = "211"; Объект.МесяцЗагрузки = Число(ЛистРасчет.Cells(4, 1).Value); - ГодЗагрузки = Объект._ГодЗагрузки; - МесяцТекст = ЗагрузкаДанныхИзExcel_МаппингДанных.НомерМесяцаВТекст(Объект.МесяцЗагрузки) + " " + ГодЗагрузки; + МесяцТекст = НомерМесяцаВТекст(Объект.МесяцЗагрузки) + " " + Объект._ГодЗагрузки; - // Определяем начальную строку данных НачальнаяСтрока = 0; Для Ном = 17 По 30 Цикл Формула = ЛистРасчет.Cells(Ном, 1).Formula; @@ -86,7 +324,7 @@ КонецЕсли; Если НачальнаяСтрока = 0 Тогда Сообщить("Данные не найдены!"); - ЗагрузкаДанныхИзExcel_ЧтениеЭксель.ЗакрытьExcel(КонтекстExcel, Неопределено); + ЗакрытьExcel(КонтекстExcel, Неопределено); Возврат; КонецЕсли; @@ -108,59 +346,53 @@ Если СтрНачинаетсяС(ВРег(ФИОТекст), "ИТОГО") Тогда Прервать; КонецЕсли; Если СтрНачинаетсяС(ВРег(ФИОТекст), "СОТРУДНИК") ИЛИ СтрНачинаетсяС(ВРег(ФИОТекст), "ФАМИЛИЯ") Тогда Продолжить; КонецЕсли; - ЛистСотрудника = ЗагрузкаДанныхИзExcel_МаппингДанных.НайтиЛистСотрудника(КонтекстExcel.Книга, ЛистРасчет, Ном); + ЛистСотрудника = НайтиЛистСотрудника(КонтекстExcel.Книга, ЛистРасчет, Ном); Если ЛистСотрудника = Неопределено Тогда Продолжить; КонецЕсли; - ФИО = ЗагрузкаДанныхИзExcel_ЧтениеЭксель.ПрочитатьЯчейкуСтрока(ЛистСотрудника, 2, 3); + ФИО = ПрочитатьЯчейкуСтрока(ЛистСотрудника, 2, 3); Если Не ЗначениеЗаполнено(ФИО) Тогда ФИО = ФИОТекст; КонецЕсли; Если Не ЗначениеЗаполнено(ФИО) Тогда Продолжить; КонецЕсли; Счетчик = Счетчик + 1; Состояние("Загрузка: " + ФИО, 20 + 70 * Счетчик / 50); - Строка = ЗагрузкаДанныхИзExcel_МаппингДанных.ПрочитатьРасчетныеДанные(ЛистРасчет, Ном, ФИО); + Строка = ПрочитатьРасчетныеДанные(ЛистРасчет, Ном, ФИО); Строка.Вставить("ИдентификаторСотрудника", Счетчик); - Строка.Вставить("ОтработаноДнейКалендарных", ЗагрузкаДанныхИзExcel_ЧтениеЭксель.ПрочитатьЯчейкуЧисло(ЛистСотрудника, ЗагрузкаДанныхИзExcel_МаппингДанных.СтрокаМесяцаНаЛистеСотрудника(), 4, ФИО)); + Строка.Вставить("ОтработаноДнейКалендарных", ПрочитатьЯчейкуЧисло(ЛистСотрудника, СтрокаМесяцаНаЛистеСотрудника(), 4, ФИО)); Если ЛистСотрудника <> Неопределено Тогда - Карточка = ЗагрузкаДанныхИзExcel_МаппингДанных.ПрочитатьКарточкуСотрудника(ЛистСотрудника); + Карточка = ПрочитатьКарточкуСотрудника(ЛистСотрудника); Если ЗначениеЗаполнено(Карточка.ФИО) Тогда Строка.Вставить("ФИО", Карточка.ФИО); КонецЕсли; КонецЕсли; МассивДанных.Добавить(Строка); - // Сотрудники Если ЛистСотрудника <> Неопределено Тогда - ДанныеСотр = ЗагрузкаДанныхИзExcel_МаппингДанных.ПрочитатьКарточкуСотрудника(ЛистСотрудника); + ДанныеСотр = ПрочитатьКарточкуСотрудника(ЛистСотрудника); Иначе ДанныеСотр = Новый Структура("ФИО, ИНН, СНИЛС, ЛицевойСчетВБанке, ВидЗанятости, АдресРегистрации", ФИО, "", "", "", "", ""); КонецЕсли; ДанныеСотр.Вставить("Идентификатор", Счетчик); МассивСотрудников.Добавить(ДанныеСотр); - // НДФЛ Если ЛистСотрудника <> Неопределено Тогда - ДанныеНДФЛ = ЗагрузкаДанныхИзExcel_МаппингДанных.ПрочитатьНДФЛСоЛиста(ЛистСотрудника, ФИО); + ДанныеНДФЛ = ПрочитатьНДФЛСоЛиста(ЛистСотрудника, ФИО); Если ДанныеНДФЛ <> Неопределено Тогда ДанныеНДФЛ.Вставить("ИдентификаторСотрудника", Счетчик); МассивНДФЛ.Добавить(ДанныеНДФЛ); КонецЕсли; КонецЕсли; - // Страховые взносы - СтрВзносов = ЗагрузкаДанныхИзExcel_МаппингДанных.ПрочитатьВзносыИзРасчета(ЛистРасчет, Ном, ФИО); + СтрВзносов = ПрочитатьВзносыИзРасчета(ЛистРасчет, Ном, ФИО); Если СтрВзносов <> Неопределено Тогда СтрВзносов.Вставить("ИдентификаторСотрудника", Счетчик); МассивВзносов.Добавить(СтрВзносов); КонецЕсли; - КонецЦикла; - ЗагрузкаДанныхИзExcel_ЧтениеЭксель.ЗакрытьExcel(КонтекстExcel, Неопределено); + ЗакрытьExcel(КонтекстExcel, Неопределено); Состояние("Заполнение таблиц...", 95); - ЗаполнитьТаблицыНаСервере(МассивДанных, МассивВзносов, МассивНДФЛ, МассивСотрудников); - СтатусЗагрузки = "Загружено: " + Счетчик + " сотрудников"; Состояние("Готово", 100); КонецПроцедуры @@ -170,8 +402,236 @@ #Область СерверныеПроцедуры &НаСервере -Процедура ЗаполнитьТаблицыНаСервере(МассивДанных, МассивВзносов, МассивНДФЛ, МассивСотрудников) - ЗагрузкаДанныхИзExcel_ЗаписьВРегистры.ЗаполнитьТЧ(МассивДанных, МассивВзносов, МассивНДФЛ, МассивСотрудников, Объект.ДанныеРасчетаЗП, Объект.ДанныеСтраховыхВзносов, Объект.ДанныеНДФЛ, Объект.Сотрудники); +Процедура ЗаполнитьТаблицыНаСервере(МассивДанных, МассивВзносов, МассивНДФЛ, МассивСотрудников) Экспорт + ТЧЗП = РеквизитФормыВЗначение("Объект.ДанныеРасчетаЗП"); + ТЧВзносы = РеквизитФормыВЗначение("Объект.ДанныеСтраховыхВзносов"); + ТЧНДФЛ = РеквизитФормыВЗначение("Объект.ДанныеНДФЛ"); + ТЧСотрудники = РеквизитФормыВЗначение("Объект.Сотрудники"); + ТЧЗП.Очистить(); ТЧВзносы.Очистить(); ТЧНДФЛ.Очистить(); ТЧСотрудники.Очистить(); + Для Каждого Строка Из МассивДанных Цикл НоваяСтрока = ТЧЗП.Добавить(); ЗаполнитьЗначенияСвойств(НоваяСтрока, Строка); КонецЦикла; + Для Каждого Строка Из МассивВзносов Цикл НоваяСтрока = ТЧВзносы.Добавить(); ЗаполнитьЗначенияСвойств(НоваяСтрока, Строка); КонецЦикла; + Для Каждого Строка Из МассивНДФЛ Цикл НоваяСтрока = ТЧНДФЛ.Добавить(); ЗаполнитьЗначенияСвойств(НоваяСтрока, Строка); КонецЦикла; + Для Каждого Строка Из МассивСотрудников Цикл НоваяСтрока = ТЧСотрудники.Добавить(); ЗаполнитьЗначенияСвойств(НоваяСтрока, Строка); КонецЦикла; + ЗначениеВРеквизитФормы(ТЧЗП, "Объект.ДанныеРасчетаЗП"); + ЗначениеВРеквизитФормы(ТЧВзносы, "Объект.ДанныеСтраховыхВзносов"); + ЗначениеВРеквизитФормы(ТЧНДФЛ, "Объект.ДанныеНДФЛ"); + ЗначениеВРеквизитФормы(ТЧСотрудники, "Объект.Сотрудники"); +КонецПроцедуры + +&НаСервере +Процедура ЗаписатьДанныеНаСервере(ГодЗагрузкиПараметр, ОрганизацияНаименование, СтатьяФинансированияНаименование, СтатьяРасходовКод) Экспорт + ГодЧисло = Число(ГодЗагрузкиПараметр); + МесяцЧисло = Цел(Объект.МесяцЗагрузки); + Если ГодЧисло = 0 Тогда ГодЧисло = Год(ТекущаяДата()); КонецЕсли; + Если МесяцЧисло < 1 Или МесяцЧисло > 12 Тогда + Сообщить("Ошибка: месяц = " + МесяцЧисло + ", год = " + ГодЧисло); + Возврат; + КонецЕсли; + Период = Дата(ГодЧисло, МесяцЧисло, 1); + + Организация = Справочники.Организации.НайтиПоНаименованию(СокрЛП(ОрганизацияНаименование), Истина); + Если Не ЗначениеЗаполнено(Организация) Тогда + Сообщить("Не найдена организация: """ + ОрганизацияНаименование + """"); + Возврат; + КонецЕсли; + СтатьяФинансирования = Неопределено; + Если ЗначениеЗаполнено(СтатьяФинансированияНаименование) Тогда + СтатьяФинансирования = Справочники.СтатьиФинансированияЗарплата.НайтиПоНаименованию(СокрЛП(СтатьяФинансированияНаименование), Истина); + КонецЕсли; + СтатьяРасходов = Неопределено; + Если ЗначениеЗаполнено(СтатьяРасходовКод) Тогда + СтатьяРасходов = Справочники.СтатьиРасходовЗарплата.НайтиПоКоду(СокрЛП(СтатьяРасходовКод)); + КонецЕсли; + + КэшСотрудников = Новый Соответствие; + Для Каждого Эл Из Объект.Сотрудники Цикл + СотрСсылка = Неопределено; + Если ЗначениеЗаполнено(Эл.ИНН) Тогда + СотрСсылка = Справочники.Сотрудники.НайтиПоРеквизиту("ИНН", СокрЛП(Эл.ИНН)); + КонецЕсли; + Если Не ЗначениеЗаполнено(СотрСсылка) И ЗначениеЗаполнено(Эл.СНИЛС) Тогда + ФЛ = Справочники.ФизическиеЛица.НайтиПоРеквизиту("СтраховойНомерПФР", СокрЛП(Эл.СНИЛС)); + Если ЗначениеЗаполнено(ФЛ) Тогда + СотрСсылка = Справочники.Сотрудники.НайтиПоРеквизиту("ФизическоеЛицо", ФЛ, Истина); + КонецЕсли; + КонецЕсли; + Если Не ЗначениеЗаполнено(СотрСсылка) И ЗначениеЗаполнено(Эл.ФИО) Тогда + СотрСсылка = Справочники.Сотрудники.НайтиПоНаименованию(СокрЛП(Эл.ФИО), Истина); + КонецЕсли; + Если ЗначениеЗаполнено(СотрСсылка) Тогда + КэшСотрудников.Вставить(Эл.Идентификатор, Новый Структура("Сотрудник, ФизическоеЛицо", СотрСсылка, СотрСсылка.ФизическоеЛицо)); + КонецЕсли; + КонецЦикла; + + ДокПеренос = Документы.ПереносДанных.СоздатьДокумент(); + ДокПеренос.Дата = Период; + ВидРасчётаОклад = ПланыВидовРасчета.Начисления.НайтиПоНаименованию("Оклад", Истина); + + // === Регистр 1: НачисленияУдержанияПоСотрудникам === + Для Каждого Строка Из Объект.ДанныеРасчетаЗП Цикл + ДанныеСотр = КэшСотрудников.Получить(Строка.ИдентификаторСотрудника); + Если ДанныеСотр = Неопределено Тогда Продолжить; КонецЕсли; + ФизЛицо = ДанныеСотр.ФизическоеЛицо; + Сотр = ДанныеСотр.Сотрудник; + ЗаписатьНачисление(ДокПеренос, Строка, "Оклад", Строка.Оклад, Перечисления.ГруппыНачисленияУдержанияВыплаты.Начислено, Период, Организация, СтатьяФинансирования, СтатьяРасходов, ФизЛицо, Сотр); + ЗаписатьНачисление(ДокПеренос, Строка, "ДоплатаСовместительство", Строка.ДоплатаСовместительство, Перечисления.ГруппыНачисленияУдержанияВыплаты.Начислено, Период, Организация, СтатьяФинансирования, СтатьяРасходов, ФизЛицо, Сотр); + ЗаписатьНачисление(ДокПеренос, Строка, "ДоплатаНочные", Строка.ДоплатаНочные, Перечисления.ГруппыНачисленияУдержанияВыплаты.Начислено, Период, Организация, СтатьяФинансирования, СтатьяРасходов, ФизЛицо, Сотр); + ЗаписатьНачисление(ДокПеренос, Строка, "ДоплатаПраздничные", Строка.ДоплатаПраздничные, Перечисления.ГруппыНачисленияУдержанияВыплаты.Начислено, Период, Организация, СтатьяФинансирования, СтатьяРасходов, ФизЛицо, Сотр); + ЗаписатьНачисление(ДокПеренос, Строка, "НадбавкаЗаКатегорию", Строка.НадбавкаЗаКатегорию, Перечисления.ГруппыНачисленияУдержанияВыплаты.Начислено, Период, Организация, СтатьяФинансирования, СтатьяРасходов, ФизЛицо, Сотр); + ЗаписатьНачисление(ДокПеренос, Строка, "НадбавкаЗаВредность", Строка.НадбавкаЗаВредность, Перечисления.ГруппыНачисленияУдержанияВыплаты.Начислено, Период, Организация, СтатьяФинансирования, СтатьяРасходов, ФизЛицо, Сотр); + ЗаписатьНачисление(ДокПеренос, Строка, "ПовышающийКоэффициент", Строка.ПовышающийКоэффициент, Перечисления.ГруппыНачисленияУдержанияВыплаты.Начислено, Период, Организация, СтатьяФинансирования, СтатьяРасходов, ФизЛицо, Сотр); + ЗаписатьНачисление(ДокПеренос, Строка, "СтимулирующаяВыплата", Строка.СтимулирующиеВыплаты, Перечисления.ГруппыНачисленияУдержанияВыплаты.Начислено, Период, Организация, СтатьяФинансирования, СтатьяРасходов, ФизЛицо, Сотр); + ЗаписатьНачисление(ДокПеренос, Строка, "РайонныйКоэффициент", Строка.РайонныйКоэффициент, Перечисления.ГруппыНачисленияУдержанияВыплаты.Начислено, Период, Организация, СтатьяФинансирования, СтатьяРасходов, ФизЛицо, Сотр); + ЗаписатьНачисление(ДокПеренос, Строка, "ПремияРазовая", Строка.ПремияРазовая, Перечисления.ГруппыНачисленияУдержанияВыплаты.Начислено, Период, Организация, СтатьяФинансирования, СтатьяРасходов, ФизЛицо, Сотр); + ЗаписатьНачисление(ДокПеренос, Строка, "Отпуск", Строка.Отпуск, Перечисления.ГруппыНачисленияУдержанияВыплаты.Начислено, Период, Организация, СтатьяФинансирования, СтатьяРасходов, ФизЛицо, Сотр); + ЗаписатьНачисление(ДокПеренос, Строка, "КомпенсацияЗаОтпуск", Строка.КомпенсацияЗаОтпуск, Перечисления.ГруппыНачисленияУдержанияВыплаты.Начислено, Период, Организация, СтатьяФинансирования, СтатьяРасходов, ФизЛицо, Сотр); + ЗаписатьНачисление(ДокПеренос, Строка, "ВыходноеПособие", Строка.ВыходноеПособие, Перечисления.ГруппыНачисленияУдержанияВыплаты.Начислено, Период, Организация, СтатьяФинансирования, СтатьяРасходов, ФизЛицо, Сотр); + ЗаписатьНачисление(ДокПеренос, Строка, "Родовые", Строка.Родовые, Перечисления.ГруппыНачисленияУдержанияВыплаты.Начислено, Период, Организация, СтатьяФинансирования, СтатьяРасходов, ФизЛицо, Сотр); + // Удержания + ЗаписатьНачисление(ДокПеренос, Строка, "НДФЛ", Строка.НДФЛ, Перечисления.ГруппыНачисленияУдержанияВыплаты.Удержано, Период, Организация, СтатьяФинансирования, СтатьяРасходов, ФизЛицо, Сотр); + ЗаписатьНачисление(ДокПеренос, Строка, "ПрофВзнос", Строка.ПрофВзнос, Перечисления.ГруппыНачисленияУдержанияВыплаты.Удержано, Период, Организация, СтатьяФинансирования, СтатьяРасходов, ФизЛицо, Сотр); + ЗаписатьНачисление(ДокПеренос, Строка, "ИсполнительныйДокумент", Строка.ИсполнительныеДокументы, Перечисления.ГруппыНачисленияУдержанияВыплаты.Удержано, Период, Организация, СтатьяФинансирования, СтатьяРасходов, ФизЛицо, Сотр); + // Выплаты + ЗаписатьНачисление(ДокПеренос, Строка, "Оклад", Строка.Аванс, Перечисления.ГруппыНачисленияУдержанияВыплаты.Выплачено, Период, Организация, СтатьяФинансирования, СтатьяРасходов, ФизЛицо, Сотр); + ЗаписатьНачисление(ДокПеренос, Строка, "Оклад", Строка.ЗарплатаЗаПервуюПоловину, Перечисления.ГруппыНачисленияУдержанияВыплаты.Выплачено, Период, Организация, СтатьяФинансирования, СтатьяРасходов, ФизЛицо, Сотр); + ЗаписатьНачисление(ДокПеренос, Строка, "Касса1", Строка.Касса1, Перечисления.ГруппыНачисленияУдержанияВыплаты.Выплачено, Период, Организация, СтатьяФинансирования, СтатьяРасходов, ФизЛицо, Сотр); + ЗаписатьНачисление(ДокПеренос, Строка, "БезналичноеПеречисление", Строка.БезналичныеПеречисления, Перечисления.ГруппыНачисленияУдержанияВыплаты.Выплачено, Период, Организация, СтатьяФинансирования, СтатьяРасходов, ФизЛицо, Сотр); + ЗаписатьНачисление(ДокПеренос, Строка, "ПремияАванс", Строка.ПремияАванс, Перечисления.ГруппыНачисленияУдержанияВыплаты.Выплачено, Период, Организация, СтатьяФинансирования, СтатьяРасходов, ФизЛицо, Сотр); + ЗаписатьНачисление(ДокПеренос, Строка, "ВыплатыВМежрасчетный", Строка.ВыплатыВМежрасчетный, Перечисления.ГруппыНачисленияУдержанияВыплаты.Выплачено, Период, Организация, СтатьяФинансирования, СтатьяРасходов, ФизЛицо, Сотр); + КонецЦикла; + + // === Регистр 2: ОтработанноеВремяПоСотрудникам === + Для Каждого Строка Из Объект.ДанныеРасчетаЗП Цикл + ДанныеСотр = КэшСотрудников.Получить(Строка.ИдентификаторСотрудника); + Если ДанныеСотр = Неопределено Тогда Продолжить; КонецЕсли; + Если Строка.ОтработаноДней > 0 Или Строка.РабочиеЧасыПоТабелю > 0 Тогда + Движение = ДокПеренос.Движения.ОтработанноеВремяПоСотрудникам.Добавить(); + Движение.Период = Период; + Движение.Организация = Организация; + Движение.ФизическоеЛицо = ДанныеСотр.ФизическоеЛицо; + Движение.Сотрудник = ДанныеСотр.Сотрудник; + Движение.Начисление = ВидРасчётаОклад; + Движение.ОтработаноДней = Строка.ОтработаноДней; + Движение.ОтработаноЧасов = Строка.РабочиеЧасыПоТабелю; + Движение.ОплаченоДней = Строка.ОтработаноДней; + Движение.ОплаченоЧасов = Строка.РабочиеЧасыПоТабелю; + КонецЕсли; + КонецЦикла; + + // === Регистр 3: СведенияОДоходахНДФЛ === + Для Каждого Строка Из Объект.ДанныеНДФЛ Цикл + ДанныеСотр = КэшСотрудников.Получить(Строка.ИдентификаторСотрудника); + Если ДанныеСотр = Неопределено Тогда Продолжить; КонецЕсли; + Движение = ДокПеренос.Движения.СведенияОДоходахНДФЛ.Добавить(); + Движение.Период = Период; + Движение.ГоловнаяОрганизация = Организация; + Движение.Организация = Организация; + Движение.ФизическоеЛицо = ДанныеСотр.ФизическоеЛицо; + Движение.МесяцНалоговогоПериода = Период; + Движение.СуммаДохода = Строка.СуммаВаловогоДохода; + Движение.СуммаВычета = Строка.СкидкаДляНДФЛЗаМесяц + Строка.ВычетНаРаботникаЗаМесяц + Строка.ВычетНаИждивенцевЗаМесяц; + КонецЦикла; + + // === Регистр 4: СтраховыеВзносыПоФизическимЛицам === + Для Каждого Строка Из Объект.ДанныеСтраховыхВзносов Цикл + ДанныеСотр = КэшСотрудников.Получить(Строка.ИдентификаторСотрудника); + Если ДанныеСотр = Неопределено Тогда Продолжить; КонецЕсли; + Движение = ДокПеренос.Движения.СтраховыеВзносыПоФизическимЛицам.Добавить(); + Движение.Период = Период; + Движение.Организация = Организация; + Движение.ФизическоеЛицо = ДанныеСотр.ФизическоеЛицо; + Движение.Сотрудник = ДанныеСотр.Сотрудник; + Движение.ПФРДоПредельнойВеличины = Строка.ДТ6Процент; + Движение.ПФРСтраховая = Строка.ПФСтраховая; + Движение.ФФОМС = Строка.ФССФОМС; + Движение.ФССНесчастныеСлучаи = Строка.НСПЗ; + КонецЦикла; + + // === Регистр 6: ВзаиморасчетыССотрудниками === + ДвиженияВзаиморасчеты = ДокПеренос.Движения.ВзаиморасчетыССотрудниками; + Для Каждого Строка Из Объект.ДанныеРасчетаЗП Цикл + ДанныеСотр = КэшСотрудников.Получить(Строка.ИдентификаторСотрудника); + Если ДанныеСотр = Неопределено Тогда Продолжить; КонецЕсли; + Если Строка.ВсегоНаРуки <> 0 Тогда + Движение = ДвиженияВзаиморасчеты.Добавить(); + Движение.Период = Период; + Движение.Организация = Организация; + Движение.ФизическоеЛицо = ДанныеСотр.ФизическоеЛицо; + Движение.Сотрудник = ДанныеСотр.Сотрудник; + Движение.СтатьяФинансирования = СтатьяФинансирования; + Движение.СтатьяРасходов = СтатьяРасходов; + Движение.СуммаВзаиморасчетов = Строка.ВсегоНаРуки; + КонецЕсли; + КонецЦикла; + + // === Регистр 7: БухгалтерскиеВзаиморасчетыССотрудниками === + ДвиженияБухВзаиморасчеты = ДокПеренос.Движения.БухгалтерскиеВзаиморасчетыССотрудниками; + Для Каждого Строка Из Объект.ДанныеРасчетаЗП Цикл + ДанныеСотр = КэшСотрудников.Получить(Строка.ИдентификаторСотрудника); + Если ДанныеСотр = Неопределено Тогда Продолжить; КонецЕсли; + Если Строка.ВсегоНаРуки <> 0 Тогда + Движение = ДвиженияБухВзаиморасчеты.Добавить(); + Движение.Период = Период; + Движение.Организация = Организация; + Движение.ФизическоеЛицо = ДанныеСотр.ФизическоеЛицо; + Движение.Сотрудник = ДанныеСотр.Сотрудник; + Движение.СтатьяФинансирования = СтатьяФинансирования; + Движение.СтатьяРасходов = СтатьяРасходов; + Движение.СуммаВзаиморасчетов = Строка.ВсегоНаРуки; + КонецЕсли; + КонецЦикла; + + // === Регистр 8: ДанныеОВремениДляРасчетаСреднегоОбщий === + ДвиженияСреднего = ДокПеренос.Движения.ДанныеОВремениДляРасчетаСреднегоОбщий; + Для Каждого Строка Из Объект.ДанныеРасчетаЗП Цикл + ДанныеСотр = КэшСотрудников.Получить(Строка.ИдентификаторСотрудника); + Если ДанныеСотр = Неопределено Тогда Продолжить; КонецЕсли; + Если Строка.ОтработаноДней <> 0 Тогда + Движение = ДвиженияСреднего.Добавить(); + Движение.Период = Период; + Движение.Сотрудник = ДанныеСотр.Сотрудник; + Движение.ОтработаноДней = Строка.ОтработаноДней; + Движение.ОтработаноЧасов = Строка.РабочиеЧасыПоТабелю; + Движение.ОтработаноДнейКалендарных = Строка.ОтработаноДнейКалендарных; + КонецЕсли; + КонецЦикла; + + ДокПеренос.Записать(); + Сообщить("Данные записаны. Документ: " + ДокПеренос.Ссылка); +КонецПроцедуры + +&НаСервере +Процедура ЗаписатьНачисление(ДокПеренос, Строка, ВидРасчета, Сумма, Группа, Период, Организация, СтатьяФинанс, СтатьяРасх, ФизЛицо, Сотр) Экспорт + Если Сумма = 0 Тогда Возврат; КонецЕсли; + Суффикс = ""; + Если ЗначениеЗаполнено(СтатьяФинанс) Тогда + Наим = СокрЛП(СтатьяФинанс.Наименование); + Если СтрНайти(Наим, "ОМС") > 0 Тогда Суффикс = " (ОМС)"; + ИначеЕсли СтрНайти(Наим, "ПД") > 0 Тогда Суффикс = " (ПД)"; + КонецЕсли; + КонецЕсли; + ВидРасчёта = Неопределено; + Если ЗначениеЗаполнено(Суффикс) Тогда + ВидРасчёта = ПланыВидовРасчета.Начисления.НайтиПоНаименованию(ВидРасчета + Суффикс, Истина); + КонецЕсли; + Если ВидРасчёта = Неопределено Тогда + ВидРасчёта = ПланыВидовРасчета.Начисления.НайтиПоНаименованию(ВидРасчета, Истина); + КонецЕсли; + Если ВидРасчёта = Неопределено Тогда + Сообщить("Не найден ПВР: " + ВидРасчета + Суффикс); + Возврат; + КонецЕсли; + Движение = ДокПеренос.Движения.НачисленияУдержанияПоСотрудникам.Добавить(); + Движение.Период = Период; + Движение.Организация = Организация; + Движение.ФизическоеЛицо = ФизЛицо; + Движение.Сотрудник = Сотр; + Движение.НачислениеУдержание = ВидРасчёта; + Движение.Сумма = Сумма; + Движение.ГруппаНачисленияУдержанияВыплаты = Группа; + Движение.СтатьяФинансирования = СтатьяФинанс; + Движение.СтатьяРасходов = СтатьяРасх; + Движение.Сторно = Ложь; КонецПроцедуры #КонецОбласти