v3.0.0.75

This commit is contained in:
Профи-Софт
2026-07-16 08:07:43 +00:00
parent 055c9c3f45
commit 65657932bd
9 changed files with 768 additions and 694 deletions
@@ -0,0 +1,17 @@
<?xml version="1.0" encoding="UTF-8"?>
<MetaDataObject xmlns="http://v8.1c.ru/8.3/MDClasses" xmlns:v8="http://v8.1c.ru/8.1/data/core">
<CommonModule uuid="95b559dc-5653-44e6-9eb3-312f0e28dc68">
<Properties>
<Name>ЗагрузкаДанныхИзExcel_ЗаписьВРегистры</Name>
<Synonym>
<v8:item>
<v8:lang>ru</v8:lang>
<v8:content>Запись в регистры</v8:content>
</v8:item>
</Synonym>
<Comment/>
<Global>false</Global>
<Server>true</Server>
</Properties>
</CommonModule>
</MetaDataObject>
@@ -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 Тогда
Суффикс = " (ПД)";
КонецЕсли;
КонецЕсли;
ВидРасчёта = Неопределено;
Если ЗначениеЗаполнено(Суффикс) Тогда
ВидРасчёта = ПланыВидовРасчета.Начисления.НайтиПоНаименованию(ВидРасчета + Суффикс, Истина);
КонецЕсли;
Если ВидРасчёта = Неопределено Тогда
ВидРасчёта = ПланыВидовРасчета.Начисления.НайтиПоНаименованию(ВидРасчета, Истина);
КонецЕсли;
Если ВидРасчёта = Неопределено Тогда
Сообщить("Не найден ПВР: " + ВидРасчета + Суффикс);
Возврат;
КонецЕсли;
Движение = ДокПеренос.Движения.НачисленияУдержанияПоСотрудникам.Добавить();
Движение.Период = Период;
Движение.Организация = Организация;
Движение.ФизическоеЛицо = ФизЛицо;
Движение.Сотрудник = СотрудникСсылка;
Движение.НачислениеУдержание = ВидРасчёта;
Движение.Сумма = Сумма;
Движение.ГруппаНачисленияУдержанияВыплаты = Группа;
Движение.СтатьяФинансирования = СтатьяФинансирования;
Движение.СтатьяРасходов = СтатьяРасходов;
Движение.Сторно = Ложь;
КонецПроцедуры
@@ -0,0 +1,17 @@
<?xml version="1.0" encoding="UTF-8"?>
<MetaDataObject xmlns="http://v8.1c.ru/8.3/MDClasses" xmlns:v8="http://v8.1c.ru/8.1/data/core">
<CommonModule uuid="a3945307-e5b9-4d84-96e1-e13bbacabada">
<Properties>
<Name>ЗагрузкаДанныхИзExcel_МаппингДанных</Name>
<Synonym>
<v8:item>
<v8:lang>ru</v8:lang>
<v8:content>Маппинг данных</v8:content>
</v8:item>
</Synonym>
<Comment/>
<Global>false</Global>
<Server>false</Server>
</Properties>
</CommonModule>
</MetaDataObject>
@@ -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));
КонецФункции
@@ -0,0 +1,17 @@
<?xml version="1.0" encoding="UTF-8"?>
<MetaDataObject xmlns="http://v8.1c.ru/8.3/MDClasses" xmlns:v8="http://v8.1c.ru/8.1/data/core">
<CommonModule uuid="8844f26b-b375-4a06-accc-1f45c502fb29">
<Properties>
<Name>ЗагрузкаДанныхИзExcel_ЧтениеЭксель</Name>
<Synonym>
<v8:item>
<v8:lang>ru</v8:lang>
<v8:content>Чтение Excel (Клиент)</v8:content>
</v8:item>
</Synonym>
<Comment/>
<Global>false</Global>
<Server>false</Server>
</Properties>
</CommonModule>
</MetaDataObject>
@@ -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) = ВРег(ИмяЛиста) Тогда Возврат Лист; КонецЕсли;
КонецЦикла;
Возврат Неопределено;
КонецФункции