commit d0ed6625e24734207ecbe9b985fe517a220b4780 Author: Профи-Софт Date: Mon Jul 6 19:45:41 2026 +0000 v3.0.0.1: Initial release - загрузка данных из Excel diff --git a/CommonPictures/Логотип.xml b/CommonPictures/Логотип.xml new file mode 100644 index 0000000..95ce54a --- /dev/null +++ b/CommonPictures/Логотип.xml @@ -0,0 +1,17 @@ + + + + + Логотип + + + ru + Логотип + + + + true + true + + + diff --git a/CommonPictures/Логотип/Ext/Picture.xml b/CommonPictures/Логотип/Ext/Picture.xml new file mode 100644 index 0000000..37038a2 --- /dev/null +++ b/CommonPictures/Логотип/Ext/Picture.xml @@ -0,0 +1,7 @@ + + + + Picture.zip + false + + diff --git a/CommonPictures/Логотип/Ext/Picture/Picture.zip b/CommonPictures/Логотип/Ext/Picture/Picture.zip new file mode 100755 index 0000000..f415bc4 Binary files /dev/null and b/CommonPictures/Логотип/Ext/Picture/Picture.zip differ diff --git a/Configuration.xml b/Configuration.xml new file mode 100755 index 0000000..e4a3d98 --- /dev/null +++ b/Configuration.xml @@ -0,0 +1,93 @@ + + + + + + 9cd510cd-abfc-11d4-9434-004095e12fc7 + b1c2d3e4-f5a6-7890-abcd-ef1234567890 + + + 9fcd25a0-4822-11d4-9414-008048da11f9 + c2d3e4f5-a6b7-8901-bcde-f12345678901 + + + e3687481-0a87-462c-a166-9f34594f9bba + d3e4f5a6-b7c8-9012-cdef-123456789012 + + + 9de14907-ec23-4a07-96f0-85521cb6b53b + e4f5a6b7-c8d9-0123-defa-234567890123 + + + 51f2d5d8-ea4d-4064-8892-82951750031e + f5a6b7c8-d9e0-1234-efab-345678901234 + + + e68182ea-4237-4383-967f-90c1e3370bc7 + a6b7c8d9-e0f1-2345-fabc-456789012345 + + + fb282519-d103-4dd3-bc12-cb271d631dfc + b7c8d9e0-f1a2-3456-abcd-567890123456 + + + Logo + Extended + + + DefaultRoles + Extended + + + + ЗагрузкаДанныхИзExcel + + + ru + Загрузка данных из Excel + + + Расширение для загрузки данных о заработной плате из Excel + AddOn + Adopted + true + ЗДЭ_ + Version8_3_24 + ManagedApplication + + PlatformApplication + + Russian + Language.Русский + ООО "Профи-Софт", код партнера 42575-13, г.Байконур. + 3.0.0.1 + Language.Русский + + + ru + Загрузка данных о заработной плате из Excel в 1С ЗГУ + + + + + ru + Обработка для загрузки данных о расчете заработной платы, страховых взносов и НДФЛ из Excel-файлов в конфигурацию "1С:Зарплата и кадры государственного учреждения". Разработка выполнена при участии AI-ассистента MiMo Code. + + + ru© ООО "Профи-Софт", 2026 + + + ru + https://profi-soft.ru + + + TaxiEnableVersion8_2 + + + Русский + Зарплата + ЗагрузкаДанныхИзExcel + Логотип + + + diff --git a/DataProcessors/ЗагрузкаДанныхИзExcel.xml b/DataProcessors/ЗагрузкаДанныхИзExcel.xml new file mode 100755 index 0000000..a7328e9 --- /dev/null +++ b/DataProcessors/ЗагрузкаДанныхИзExcel.xml @@ -0,0 +1,110 @@ + + + + + + a1b2c3d4-e5f6-7890-abcd-ef1234567891 + b1b2c3d4-e5f6-7890-abcd-ef1234567892 + + + c1b2c3d4-e5f6-7890-abcd-ef1234567893 + d1b2c3d4-e5f6-7890-abcd-ef1234567894 + + + + ЗагрузкаДанныхИзExcel + + + ru + Загрузка данных из Excel + + + Обработка для загрузки данных о заработной плате из Excel + true + DataProcessor.ЗагрузкаДанныхИзExcel.Form.Форма + + false + + + + +
Форма
+ + + ПутьКФайлу + + + ru + Путь к файлу + + + + + String + + false + + + + false + + false + false + + + + + МесяцЗагрузки + + + ru + Месяц загрузки + + + + + Number + + false + + + + false + + false + false + + + + + ДанныеРасчетаЗП + + + ru + Данные расчета ЗП + + + + + ValueTable + + + + + + ДанныеСтраховыхВзносов + + + ru + Данные страховых взносов + + + + + ValueTable + + + +
+
+
diff --git a/DataProcessors/ЗагрузкаДанныхИзExcel/Ext/ManagerModule.bsl b/DataProcessors/ЗагрузкаДанныхИзExcel/Ext/ManagerModule.bsl new file mode 100755 index 0000000..22b728a --- /dev/null +++ b/DataProcessors/ЗагрузкаДанныхИзExcel/Ext/ManagerModule.bsl @@ -0,0 +1,35 @@ +#Область ПрограммныйИнтерфейс + +// Создание обработки +Функция СоздатьОбработку() Экспорт + + Возврат ДополнительныеОтчетыИОбработки.СоздатьОбъектВнешнейОбработки( + "ЗагрузкаДанныхИзExcel"); + +КонецФункции + +// Получение описания обработки +Функция СведенияОВнешнейОбработке() Экспорт + + ПараметрыРегистрации = ДополнительныеОтчетыИОбработки.СведенияОВнешнейОбработке(); + + ПараметрыРегистрации.Вставить("Вид", ДополнительныеОтчетыИОбработкиКлиентСервер.ВидОбработкиДополнительнаяОбработка()); + ПараметрыРегистрации.Вставить("Назначение", Новый Массив); + ПараметрыРегистрации.Назначение.Добавить("Документ.НачислениеЗарплаты"); + ПараметрыРегистрации.Назначение.Добавить("Документ.КадровыйПеревод"); + + ПараметрыРегистрации.Вставить("Команды", Новый Массив); + + Команда = ДополнительныеОтчетыИОбработки.ДобавитьКоманду( + ПараметрыРегистрации.Команды, + "Загрузить данные из Excel", + "ЗагрузитьДанные", + ДополнительныеОтчетыИОбработкиКлиентСервер.ТипКомандыОткрытиеФормы(), + Истина); + Команда.Модификатор = "ФормаОбъекта"; + + Возврат ПараметрыРегистрации; + +КонецФункции + +#КонецОбласти \ No newline at end of file diff --git a/DataProcessors/ЗагрузкаДанныхИзExcel/Ext/ObjectModule.bsl b/DataProcessors/ЗагрузкаДанныхИзExcel/Ext/ObjectModule.bsl new file mode 100755 index 0000000..54bc48a --- /dev/null +++ b/DataProcessors/ЗагрузкаДанныхИзExcel/Ext/ObjectModule.bsl @@ -0,0 +1,276 @@ +#Область ОписаниеПеременных + +Перем ДанныеФайла; +Перем СоответствиеСотрудников; +Перем СоответствиеСтатейФинансирования; + +#КонецОбласти + +#Область ПрограммныйИнтерфейс + +// Получение данных из Excel файла +Функция ПолучитьДанныеИзExcel(ПутьКФайлу) Экспорт + + Результат = Новый Структура("ДанныеРасчетаЗП, ДанныеСтраховыхВзносов, Ошибки"); + Результат.ДанныеРасчетаЗП = Новый ТаблицаЗначений; + Результат.ДанныеСтраховыхВзносов = Новый ТаблицаЗначений; + Результат.Ошибки = Новый Массив; + + Попытка + // Создание COM-соединения с Excel + ExcelПриложение = Новый COMОбъект("Excel.Application"); + ExcelПриложение.Visible = Ложь; + ExcelПриложение.DisplayAlerts = Ложь; + + // Открытие файла + РабочаяКнига = ExcelПриложение.Workbooks.Open(ПутьКФайлу); + + // Получение листа "Расчет" + ЛистРасчет = Неопределено; + Для Каждого Лист Из РабочаяКнига.Sheets Цикл + Если ВРег(Лист.Name) = "РАСЧЕТ" Тогда + ЛистРасчет = Лист; + Прервать; + КонецЕсли; + КонецЦикла; + + Если ЛистРасчет = Неопределено Тогда + Результат.Ошибки.Добавить("Лист 'Расчет' не найден в файле"); + Возврат Результат; + КонецЕсли; + + // Определение месяца из ячейки A4 (номер месяца) или строки заголовка + МесяцЗначение = ЛистРасчет.Cells(4, 1).Value; + Если Не ЗначениеЗаполнено(МесяцЗначение) Тогда + Результат.Ошибки.Добавить("Месяц не определен (ячейка A4 пуста)"); + Возврат Результат; + КонецЕсли; + + МесяцЗагрузки = Число(МесяцЗначение); + Если МесяцЗагрузки < 1 Или МесяцЗагрузки > 12 Тогда + Результат.Ошибки.Добавить("Некорректный номер месяца: " + МесяцЗначение); + Возврат Результат; + КонецЕсли; + + // Чтение данных из листа "Расчет" + ПрочитатьДанныеРасчета(ЛистРасчет, Результат); + + // Закрытие Excel + РабочаяКнига.Close(Ложь); + ExcelПриложение.Quit(); + + Исключение + Результат.Ошибки.Добавить("Ошибка чтения файла: " + ОписаниеОшибки()); + КонецПопытки; + + Возврат Результат; + +КонецФункции + +// Сопоставление сотрудника +Функция НайтиСотрудника(ФИО, ТабельныйНомер, Должность, ВидЗанятости) Экспорт + + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ ПЕРВЫЕ 1 + | Сотрудники.Ссылка КАК Сотрудник + |ИЗ + | Справочник.Сотрудники КАК Сотрудники + | ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.ФизическиеЛица КАК ФизическиеЛица + | ПО Сотрудники.ФизическоеЛицо = ФизическиеЛица.Ссылка + |ГДЕ + | ФизическиеЛица.ФИО = &ФИО + | И Сотрудники.Код = &ТабельныйНомер"; + + Запрос.УстановитьПараметр("ФИО", ФИО); + Запрос.УстановитьПараметр("ТабельныйНомер", ТабельныйНомер); + + РезультатЗапроса = Запрос.Выполнить(); + + Если РезультатЗапроса.Пустой() Тогда + Возврат Неопределено; + КонецЕсли; + + Выборка = РезультатЗапроса.Выбрать(); + Выборка.Следующий(); + + Возврат Выборка.Сотрудник; + +КонецФункции + +// Запись данных расчета ЗП +Процедура ЗаписатьДанныеРасчета(Данные, Период) Экспорт + + ДокументОбъект = Документы.ПереносДанных.СоздатьДокумент(); + ДокументОбъект.Дата = Период; + ДокументОбъект.Комментарий = "Загрузка расчета ЗП из Excel за " + Формат(Период, "ДФ='ММММ yyyy'"); + + Для Каждого СтрокаДанных Из Данные Цикл + + // Движение по регистру НачисленияУдержанияПоСотрудникам + Движение = ДокументОбъект.Движения.НачисленияУдержанияПоСотрудникам.Добавить(); + Движение.Сотрудник = СтрокаДанных.Сотрудник; + Движение.ФизическоеЛицо = СтрокаДанных.Сотрудник.ФизическоеЛицо; + Движение.Период = Период; + Движение.НачислениеУдержание = ПланыВидовРасчета.Начисления.ОкладПоЧасам; + Движение.Сумма = СтрокаДанных.ИтогоНачислено; + + КонецЦикла; + + ДокументОбъект.Записать(РежимЗаписиДокумента.Проведение); + +КонецПроцедуры + +// Запись данных страховых взносов +Процедура ЗаписатьДанныеСтраховыхВзносов(Данные, Период) Экспорт + + ДокументОбъект = Документы.ПереносДанных.СоздатьДокумент(); + ДокументОбъект.Дата = Период; + ДокументОбъект.Комментарий = "Загрузка страховых взносов из Excel"; + + Для Каждого СтрокаДанных Из Данные Цикл + + Движение = ДокументОбъект.Движения.ИсчисленныеСтраховыеВзносы.Добавить(); + Движение.Сотрудник = СтрокаДанных.Сотрудник; + Движение.Период = Период; + Движение.ВидВзноса = СтрокаДанных.ВидВзноса; + Движение.Сумма = СтрокаДанных.Сумма; + + КонецЦикла; + + ДокументОбъект.Записать(РежимЗаписиДокумента.Проведение); + +КонецПроцедуры + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +// Чтение данных из листа "Расчет" +Процедура ПрочитатьДанныеРасчета(ЛистРасчет, Результат) + + // Определение последней строки данных + ПоследняяСтрока = ЛистРасчет.Cells(1, 1).End(-4121).Row; // xlDown + + // Чтение данных начиная со строки 16 (данные сотрудников) + Для НомерСтроки = 16 По ПоследняяСтрока Цикл + + ФИО = ЛистРасчет.Cells(НомерСтроки, 1).Value; + Если Не ЗначениеЗаполнено(ФИО) Тогда + Продолжить; + КонецЕсли; + + // Пропуск строк итогов + Если СтрНачинаетсяС(ВРег(СокрЛП(ФИО)), "ИТОГО") Тогда + Продолжить; + КонецЕсли; + + // Чтение данных сотрудника + Должность = ЛистРасчет.Cells(НомерСтроки, 2).Value; + СчетБК = ЛистРасчет.Cells(НомерСтроки, 3).Value; + ВидЗанятости = ЛистРасчет.Cells(НомерСтроки, 4).Value; + ЧасоваяНорма = ЛистРасчет.Cells(НомерСтроки, 5).Value; + ОтработаноДней = ЛистРасчет.Cells(НомерСтроки, 6).Value; + КоличествоСтавок = ЛистРасчет.Cells(НомерСтроки, 7).Value; + Оклад = ЛистРасчет.Cells(НомерСтроки, 8).Value; + + // Доплаты и надбавки + ЧасыДежурства = ЛистРасчет.Cells(НомерСтроки, 9).Value; + ЧасыНочные = ЛистРасчет.Cells(НомерСтроки, 10).Value; + ЧасыПраздничные = ЛистРасчет.Cells(НомерСтроки, 11).Value; + РабочиеЧасыПоТабелю = ЛистРасчет.Cells(НомерСтроки, 12).Value; + ИзРасчетаМесОкладаДни = ЛистРасчет.Cells(НомерСтроки, 13).Value; + ДоплатаСовместительство = ЛистРасчет.Cells(НомерСтроки, 14).Value; + ДоплатаСовмещение = ЛистРасчет.Cells(НомерСтроки, 15).Value; + ДоплатаИнтенсивность = ЛистРасчет.Cells(НомерСтроки, 16).Value; + ИзРасчетаМесОкладаЧасы = ЛистРасчет.Cells(НомерСтроки, 17).Value; + ДоплатаНочные = ЛистРасчет.Cells(НомерСтроки, 18).Value; + ДоплатаПраздничные = ЛистРасчет.Cells(НомерСтроки, 19).Value; + ЗаСтаж = ЛистРасчет.Cells(НомерСтроки, 20).Value; + НадбавкаЗаКатегорию = ЛистРасчет.Cells(НомерСтроки, 21).Value; + НадбавкаЗаВредность = ЛистРасчет.Cells(НомерСтроки, 22).Value; + ПовышающийКоэффициент = ЛистРасчет.Cells(НомерСтроки, 23).Value; + СтимулирующиеВыплаты = ЛистРасчет.Cells(НомерСтроки, 24).Value; + СтимулирующаяНадбавка = ЛистРасчет.Cells(НомерСтроки, 25).Value; + РайонныйКоэффициент = ЛистРасчет.Cells(НомерСтроки, 26).Value; + ВыплатыПоУказу597 = ЛистРасчет.Cells(НомерСтроки, 27).Value; + ПремияРазовая = ЛистРасчет.Cells(НомерСтроки, 28).Value; + БольничныйЛист = ЛистРасчет.Cells(НомерСтроки, 29).Value; + ДоплатаПрофактиву = ЛистРасчет.Cells(НомерСтроки, 30).Value; + Пусковые = ЛистРасчет.Cells(НомерСтроки, 31).Value; + Отпуск = ЛистРасчет.Cells(НомерСтроки, 32).Value; + КомпенсацияОтпуск = ЛистРасчет.Cells(НомерСтроки, 33).Value; + Прочие = ЛистРасчет.Cells(НомерСтроки, 34).Value; + ВыходноеПособие = ЛистРасчет.Cells(НомерСтроки, 35).Value; + ПособиеПоУходу = ЛистРасчет.Cells(НомерСтроки, 36).Value; + ДоплатаДоМРОТ = ЛистРасчет.Cells(НомерСтроки, 37).Value; + Родовые = ЛистРасчет.Cells(НомерСтроки, 38).Value; + + // Итоговые суммы + ИтогоНачислено = ЛистРасчет.Cells(НомерСтроки, 39).Value; + НДФЛ = ЛистРасчет.Cells(НомерСтроки, 40).Value; + ПрофВзнос = ЛистРасчет.Cells(НомерСтроки, 41).Value; + Исполнительные = ЛистРасчет.Cells(НомерСтроки, 42).Value; + Аванс = ЛистРасчет.Cells(НомерСтроки, 43).Value; + ПФСофинансирование = ЛистРасчет.Cells(НомерСтроки, 44).Value; + ПремияУд = ЛистРасчет.Cells(НомерСтроки, 45).Value; + Касса1 = ЛистРасчет.Cells(НомерСтроки, 46).Value; + Касса2 = ЛистРасчет.Cells(НомерСтроки, 47).Value; + Касса3 = ЛистРасчет.Cells(НомерСтроки, 48).Value; + ПособиеДо3Лет = ЛистРасчет.Cells(НомерСтроки, 49).Value; + Безналичные = ЛистРасчет.Cells(НомерСтроки, 50).Value; + ВозвратВКассу = ЛистРасчет.Cells(НомерСтроки, 51).Value; + Депонент = ЛистРасчет.Cells(НомерСтроки, 52).Value; + ИтогоУдержано = ЛистРасчет.Cells(НомерСтроки, 53).Value; + ОстатокНаНачало = ЛистРасчет.Cells(НомерСтроки, 54).Value; + ВсегоНаРуки = ЛистРасчет.Cells(НомерСтроки, 55).Value; + + // Страховые взносы + ДТ6Процент = ЛистРасчет.Cells(НомерСтроки, 58).Value; + ДТ4Процент = ЛистРасчет.Cells(НомерСтроки, 59).Value; + ПФСтраховая = ЛистРасчет.Cells(НомерСтроки, 60).Value; + ФССФОМС = ЛистРасчет.Cells(НомерСтроки, 61).Value; + НСПЗ = ЛистРасчет.Cells(НомерСтроки, 62).Value; + СВИтого = ЛистРасчет.Cells(НомерСтроки, 63).Value; + + // Сопоставление сотрудника + Сотрудник = НайтиСотрудника(ФИО, "", Должность, ВидЗанятости); + + Если Сотрудник = Неопределено Тогда + Результат.Ошибки.Добавить("Сотрудник не найден: " + ФИО); + Продолжить; + КонецЕсли; + + // Добавление строки в таблицу расчета ЗП + СтрокаДанных = Результат.ДанныеРасчетаЗП.Добавить(); + СтрокаДанных.Сотрудник = Сотрудник; + СтрокаДанных.ФИО = ФИО; + СтрокаДанных.Должность = Должность; + СтрокаДанных.СчетБК = СчетБК; + СтрокаДанных.ВидЗанятости = ВидЗанятости; + СтрокаДанных.Оклад = Оклад; + СтрокаДанных.КоличествоСтавок = КоличествоСтавок; + СтрокаДанных.ОтработаноДней = ОтработаноДней; + СтрокаДанных.ИтогоНачислено = ИтогоНачислено; + СтрокаДанных.НДФЛ = НДФЛ; + СтрокаДанных.ИтогоУдержано = ИтогоУдержано; + СтрокаДанных.ВсегоНаРуки = ВсегоНаРуки; + + // Добавление строки в таблицу страховых взносов + Если ЗначениеЗаполнено(СВИтого) И СВИтого > 0 Тогда + СтрокаВзносов = Результат.ДанныеСтраховыхВзносов.Добавить(); + СтрокаВзносов.Сотрудник = Сотрудник; + СтрокаВзносов.ФИО = ФИО; + СтрокаВзносов.ДТ6Процент = ДТ6Процент; + СтрокаВзносов.ДТ4Процент = ДТ4Процент; + СтрокаВзносов.ПФСтраховая = ПФСтраховая; + СтрокаВзносов.ФССФОМС = ФССФОМС; + СтрокаВзносов.НСПЗ = НСПЗ; + СтрокаВзносов.Итого = СВИтого; + КонецЕсли; + + КонецЦикла; + +КонецПроцедуры + +#КонецОбласти diff --git a/DataProcessors/ЗагрузкаДанныхИзExcel/Forms/Форма.xml b/DataProcessors/ЗагрузкаДанныхИзExcel/Forms/Форма.xml new file mode 100644 index 0000000..f81c4b5 --- /dev/null +++ b/DataProcessors/ЗагрузкаДанныхИзExcel/Forms/Форма.xml @@ -0,0 +1,23 @@ + + +
+ + Форма + + + ru + Форма + + + + Managed + false + + PlatformApplication + MobilePlatformApplication + + Any + + +
+
diff --git a/DataProcessors/ЗагрузкаДанныхИзExcel/Forms/Форма/Ext/Form.xml b/DataProcessors/ЗагрузкаДанныхИзExcel/Forms/Форма/Ext/Form.xml new file mode 100644 index 0000000..99b8047 --- /dev/null +++ b/DataProcessors/ЗагрузкаДанныхИзExcel/Forms/Форма/Ext/Form.xml @@ -0,0 +1,292 @@ + +
+ DontBlock + Vertical + useIfNecessary + + false + + + + + + + + ПриСозданииНаСервере + + + + Vertical + + + Horizontal + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Путь к файлу:</v8:content> + </v8:item> + + + + Объект.ПутьКФайлу + 80 + + + Объект.МесяцЗагрузки + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Месяц:</v8:content> + </v8:item> + + 10 + + + + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Расчет ЗП</v8:content> + </v8:item> + + + + Объект.ДанныеРасчетаЗП + DoNotUse + + + ФИО + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>ФИО</v8:content> + </v8:item> + + 30 + + + Должность + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Должность</v8:content> + </v8:item> + + 25 + + + Оклад + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Оклад</v8:content> + </v8:item> + + 12 + + + ИтогоНачислено + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Итого начислено</v8:content> + </v8:item> + + 15 + + + НДФЛ + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>НДФЛ</v8:content> + </v8:item> + + 12 + + + ВсегоНаРуки + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Всего на руки</v8:content> + </v8:item> + + 15 + + + + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Страховые взносы</v8:content> + </v8:item> + + + + Объект.ДанныеСтраховыхВзносов + DoNotUse + + + ФИО + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>ФИО</v8:content> + </v8:item> + + 30 + + + ДТ6Процент + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>ДТ 6%</v8:content> + </v8:item> + + 12 + + + ДТ4Процент + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>ДТ 4%</v8:content> + </v8:item> + + 12 + + + ПФСтраховая + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>ПФ страховая</v8:content> + </v8:item> + + 12 + + + ФССФОМС + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>ФСС/ФОМС</v8:content> + </v8:item> + + 12 + + + Итого + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Итого</v8:content> + </v8:item> + + 12 + + + + + + + + + + + + + + cfg:DataProcessorObject.ЗагрузкаДанныхИзExcel + + true + + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Выбрать файл</v8:content> + </v8:item> + + + + ru + Выбрать Excel файл для загрузки + + + ВыбратьФайл + DontUse + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Загрузить данные</v8:content> + </v8:item> + + + + ru + Загрузить данные из выбранного файла + + + ЗагрузитьДанные + DontUse + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Записать данные</v8:content> + </v8:item> + + + + ru + Записать загруженные данные в 1С + + + ЗаписатьДанные + DontUse + + +
diff --git a/DataProcessors/ЗагрузкаДанныхИзExcel/Forms/Форма/Ext/Form/Module.bsl b/DataProcessors/ЗагрузкаДанныхИзExcel/Forms/Форма/Ext/Form/Module.bsl new file mode 100644 index 0000000..2c7d60c --- /dev/null +++ b/DataProcessors/ЗагрузкаДанныхИзExcel/Forms/Форма/Ext/Form/Module.bsl @@ -0,0 +1,213 @@ +#Область ОбработчикиСобытийФормы + +&НаСервере +Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + ИнициализироватьТаблицы(); +КонецПроцедуры + +#КонецОбласти + +#Область ОбработчикиКоманд + +&НаКлиенте +Процедура ВыбратьФайл(Команда) + Диалог = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие); + Диалог.МножественныйВыбор = Ложь; + Диалог.Фильтр = "Excel файлы (*.xls;*.xlsx;*.xlsm)|*.xls;*.xlsx;*.xlsm"; + Если Диалог.Выбрать() Тогда + Объект.ПутьКФайлу = Диалог.ПолноеИмяФайла; + КонецЕсли; +КонецПроцедуры + +&НаКлиенте +Процедура ЗагрузитьДанные(Команда) + Если Не ЗначениеЗаполнено(Объект.ПутьКФайлу) Тогда + Сообщить("Выберите файл!"); + Возврат; + КонецЕсли; + ПрочитатьExcelНаКлиенте(); +КонецПроцедуры + +&НаКлиенте +Процедура ЗаписатьДанные(Команда) + Если Объект.ДанныеРасчетаЗП.Количество() = 0 Тогда + Сообщить("Нет данных для записи!"); + Возврат; + КонецЕсли; + ЗаписатьДанныеНаСервере(); + Сообщить("Данные записаны!"); +КонецПроцедуры + +#КонецОбласти + +#Область РаботаСExcel + +&НаКлиенте +Функция ПрочитатьЯчейку(Лист, Строка, Колонка, ФИО, ВидДанных) + + Попытка + Значение = Лист.Cells(Строка, Колонка).Value; + Если Значение = Неопределено ИЛИ Значение = "" Тогда + Возврат 0; + КонецЕсли; + Возврат Число(Значение); + Исключение + Сообщить("Ошибка чтения ячейки: " + ФИО + " | " + ВидДанных + + " | строка " + Строка + " колонка " + Колонка + + " | значение: """ + Значение + """ | " + ОписаниеОшибки()); + Возврат 0; + КонецПопытки; + +КонецФункции + +&НаКлиенте +Функция ПрочитатьСтроку(Лист, Строка, Колонка) + + Попытка + Значение = Лист.Cells(Строка, Колонка).Value; + Если Значение = Неопределено Тогда + Возврат ""; + КонецЕсли; + Возврат СокрЛП("" + Значение); + Исключение + Возврат ""; + КонецПопытки; + +КонецФункции + +&НаКлиенте +Процедура ПрочитатьExcelНаКлиенте() + + Попытка + ВременныйФайл = КаталогВременныхФайлов() + "temp_data.xls"; + КопироватьФайл(Объект.ПутьКФайлу, ВременныйФайл); + + Excel = Новый COMОбъект("Excel.Application"); + Excel.Visible = Ложь; + Excel.DisplayAlerts = Ложь; + + Книга = Excel.Workbooks.Open(ВременныйФайл); + + ЛистРасчет = Неопределено; + Для Каждого Лист Из Книга.Sheets Цикл + Если ВРег(Лист.Name) = "РАСЧЕТ" Тогда + ЛистРасчет = Лист; + Прервать; + КонецЕсли; + КонецЦикла; + + Если ЛистРасчет = Неопределено Тогда + Сообщить("Лист 'Расчет' не найден!"); + Книга.Close(Ложь); + Excel.Quit(); + УдалитьФайлы(ВременныйФайл); + Возврат; + КонецЕсли; + + МесяцЗначение = ЛистРасчет.Cells(4, 1).Value; + Если ЗначениеЗаполнено(МесяцЗначение) Тогда + Попытка + Объект.МесяцЗагрузки = Число(МесяцЗначение); + Исключение + Сообщить("Не удалось определить месяц из ячейки A4: " + МесяцЗначение); + КонецПопытки; + КонецЕсли; + + ПоследняяСтрока = ЛистРасчет.Cells(1000, 1).End(-4121).Row; + + МассивДанных = Новый Массив; + МассивВзносов = Новый Массив; + + Для Ном = 16 По ПоследняяСтрока Цикл + + ФИО = ПрочитатьСтроку(ЛистРасчет, Ном, 1); + Если Не ЗначениеЗаполнено(ФИО) Тогда Продолжить; КонецЕсли; + Если СтрНачинаетсяС(ВРег(ФИО), "ИТОГО") Тогда Продолжить; КонецЕсли; + + Строка = Новый Структура; + Строка.Вставить("ФИО", ФИО); + Строка.Вставить("Должность", ПрочитатьСтроку(ЛистРасчет, Ном, 2)); + Строка.Вставить("СчетБК", ПрочитатьСтроку(ЛистРасчет, Ном, 3)); + Строка.Вставить("ВидЗанятости", ПрочитатьСтроку(ЛистРасчет, Ном, 4)); + Строка.Вставить("Оклад", ПрочитатьЯчейку(ЛистРасчет, Ном, 8, ФИО, "Оклад")); + Строка.Вставить("КоличествоСтавок", ПрочитатьЯчейку(ЛистРасчет, Ном, 7, ФИО, "Кол-во ставок")); + Строка.Вставить("ОтработаноДней", ПрочитатьЯчейку(ЛистРасчет, Ном, 6, ФИО, "Отработано дней")); + Строка.Вставить("ИтогоНачислено", ПрочитатьЯчейку(ЛистРасчет, Ном, 39, ФИО, "Итого начислено")); + Строка.Вставить("НДФЛ", ПрочитатьЯчейку(ЛистРасчет, Ном, 40, ФИО, "НДФЛ")); + Строка.Вставить("ИтогоУдержано", ПрочитатьЯчейку(ЛистРасчет, Ном, 53, ФИО, "Итого удержано")); + Строка.Вставить("ВсегоНаРуки", ПрочитатьЯчейку(ЛистРасчет, Ном, 55, ФИО, "Всего на руки")); + МассивДанных.Добавить(Строка); + + СВ = ПрочитатьЯчейку(ЛистРасчет, Ном, 63, ФИО, "Страховые взносы итого"); + Если СВ > 0 Тогда + СтрВзносов = Новый Структура; + СтрВзносов.Вставить("ФИО", ФИО); + СтрВзносов.Вставить("ДТ6Процент", ПрочитатьЯчейку(ЛистРасчет, Ном, 58, ФИО, "ДТ 6%")); + СтрВзносов.Вставить("ДТ4Процент", ПрочитатьЯчейку(ЛистРасчет, Ном, 59, ФИО, "ДТ 4%")); + СтрВзносов.Вставить("ПФСтраховая", ПрочитатьЯчейку(ЛистРасчет, Ном, 60, ФИО, "ПФ страховая")); + СтрВзносов.Вставить("ФССФОМС", ПрочитатьЯчейку(ЛистРасчет, Ном, 61, ФИО, "ФСС/ФОМС")); + СтрВзносов.Вставить("НСПЗ", ПрочитатьЯчейку(ЛистРасчет, Ном, 62, ФИО, "НС и ПЗ")); + СтрВзносов.Вставить("Итого", СВ); + МассивВзносов.Добавить(СтрВзносов); + КонецЕсли; + + КонецЦикла; + + Книга.Close(Ложь); + Excel.Quit(); + УдалитьФайлы(ВременныйФайл); + + ЗаполнитьТаблицыНаСервере(МассивДанных, МассивВзносов); + + Сообщить("Загружено сотрудников: " + МассивДанных.Количество()); + + Исключение + Сообщить("Ошибка чтения Excel: " + ОписаниеОшибки()); + КонецПопытки; + +КонецПроцедуры + +#КонецОбласти + +#Область СерверныеПроцедуры + +&НаСервере +Процедура ИнициализироватьТаблицы() +КонецПроцедуры + +&НаСервере +Процедура ЗаполнитьТаблицыНаСервере(МассивДанных, МассивВзносов) + + ТЗРасчет = РеквизитФормыВЗначение("Объект.ДанныеРасчетаЗП"); + ТЗРасчет.Очистить(); + Для Каждого Эл Из МассивДанных Цикл + Строка = ТЗРасчет.Добавить(); + ЗаполнитьЗначенияСвойств(Строка, Эл); + КонецЦикла; + ЗначениеВРеквизитФормы(ТЗРасчет, "Объект.ДанныеРасчетаЗП"); + + ТЗВзносы = РеквизитФормыВЗначение("Объект.ДанныеСтраховыхВзносов"); + ТЗВзносы.Очистить(); + Для Каждого Эл Из МассивВзносов Цикл + Строка = ТЗВзносы.Добавить(); + ЗаполнитьЗначенияСвойств(Строка, Эл); + КонецЦикла; + ЗначениеВРеквизитФормы(ТЗВзносы, "Объект.ДанныеСтраховыхВзносов"); + +КонецПроцедуры + +&НаСервере +Процедура ЗаписатьДанныеНаСервере() + ГодЗагрузки = ТекущаяДата().Год(); + Период = Дата(ГодЗагрузки, Объект.МесяцЗагрузки, 1); + + ТЗРасчет = РеквизитФормыВЗначение("Объект.ДанныеРасчетаЗП"); + Объект.ЗаписатьДанныеРасчета(ТЗРасчет, Период); + + ТЗВзносы = РеквизитФормыВЗначение("Объект.ДанныеСтраховыхВзносов"); + Если ТЗВзносы.Количество() > 0 Тогда + Объект.ЗаписатьДанныеСтраховыхВзносов(ТЗВзносы, Период); + КонецЕсли; +КонецПроцедуры + +#КонецОбласти diff --git a/Languages/Русский.xml b/Languages/Русский.xml new file mode 100644 index 0000000..297f8c1 --- /dev/null +++ b/Languages/Русский.xml @@ -0,0 +1,14 @@ + + + + + + + Русский + + Adopted + 35d4deef-5b93-4c11-ac42-07beb390c332 + ru + + + diff --git a/Subsystems/Зарплата.xml b/Subsystems/Зарплата.xml new file mode 100644 index 0000000..a975e74 --- /dev/null +++ b/Subsystems/Зарплата.xml @@ -0,0 +1,25 @@ + + + + + + Content + Extended + + + CommandInterface + Extended + + + + Зарплата + + Adopted + e24abf16-a774-4696-9280-ac78486ba9a8 + + DataProcessor.ЗагрузкаДанныхИзExcel + + + + +