v3.0.0.1: Initial release - загрузка данных из Excel
This commit is contained in:
@@ -0,0 +1,35 @@
|
||||
#Область ПрограммныйИнтерфейс
|
||||
|
||||
// Создание обработки
|
||||
Функция СоздатьОбработку() Экспорт
|
||||
|
||||
Возврат ДополнительныеОтчетыИОбработки.СоздатьОбъектВнешнейОбработки(
|
||||
"ЗагрузкаДанныхИзExcel");
|
||||
|
||||
КонецФункции
|
||||
|
||||
// Получение описания обработки
|
||||
Функция СведенияОВнешнейОбработке() Экспорт
|
||||
|
||||
ПараметрыРегистрации = ДополнительныеОтчетыИОбработки.СведенияОВнешнейОбработке();
|
||||
|
||||
ПараметрыРегистрации.Вставить("Вид", ДополнительныеОтчетыИОбработкиКлиентСервер.ВидОбработкиДополнительнаяОбработка());
|
||||
ПараметрыРегистрации.Вставить("Назначение", Новый Массив);
|
||||
ПараметрыРегистрации.Назначение.Добавить("Документ.НачислениеЗарплаты");
|
||||
ПараметрыРегистрации.Назначение.Добавить("Документ.КадровыйПеревод");
|
||||
|
||||
ПараметрыРегистрации.Вставить("Команды", Новый Массив);
|
||||
|
||||
Команда = ДополнительныеОтчетыИОбработки.ДобавитьКоманду(
|
||||
ПараметрыРегистрации.Команды,
|
||||
"Загрузить данные из Excel",
|
||||
"ЗагрузитьДанные",
|
||||
ДополнительныеОтчетыИОбработкиКлиентСервер.ТипКомандыОткрытиеФормы(),
|
||||
Истина);
|
||||
Команда.Модификатор = "ФормаОбъекта";
|
||||
|
||||
Возврат ПараметрыРегистрации;
|
||||
|
||||
КонецФункции
|
||||
|
||||
#КонецОбласти
|
||||
+276
@@ -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Процент;
|
||||
СтрокаВзносов.ПФСтраховая = ПФСтраховая;
|
||||
СтрокаВзносов.ФССФОМС = ФССФОМС;
|
||||
СтрокаВзносов.НСПЗ = НСПЗ;
|
||||
СтрокаВзносов.Итого = СВИтого;
|
||||
КонецЕсли;
|
||||
|
||||
КонецЦикла;
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
#КонецОбласти
|
||||
@@ -0,0 +1,23 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<MetaDataObject xmlns="http://v8.1c.ru/8.3/MDClasses" xmlns:app="http://v8.1c.ru/8.2/managed-application/core" xmlns:cfg="http://v8.1c.ru/8.1/data/enterprise/current-config" xmlns:cmi="http://v8.1c.ru/8.2/managed-application/cmi" xmlns:ent="http://v8.1c.ru/8.1/data/enterprise" xmlns:lf="http://v8.1c.ru/8.2/managed-application/logform" xmlns:pal="http://v8.1c.ru/8.1/data/ui/colors/palette" xmlns:style="http://v8.1c.ru/8.1/data/ui/style" xmlns:sys="http://v8.1c.ru/8.1/data/ui/fonts/system" xmlns:v8="http://v8.1c.ru/8.1/data/core" xmlns:v8ui="http://v8.1c.ru/8.1/data/ui" xmlns:web="http://v8.1c.ru/8.1/data/ui/colors/web" xmlns:win="http://v8.1c.ru/8.1/data/ui/colors/windows" xmlns:xen="http://v8.1c.ru/8.3/xcf/enums" xmlns:xpr="http://v8.1c.ru/8.3/xcf/predef" xmlns:xr="http://v8.1c.ru/8.3/xcf/readable" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="2.21">
|
||||
<Form uuid="e1f2d3c4-b5a6-7890-abcd-ef123456789d">
|
||||
<Properties>
|
||||
<Name>Форма</Name>
|
||||
<Synonym>
|
||||
<v8:item>
|
||||
<v8:lang>ru</v8:lang>
|
||||
<v8:content>Форма</v8:content>
|
||||
</v8:item>
|
||||
</Synonym>
|
||||
<Comment/>
|
||||
<FormType>Managed</FormType>
|
||||
<IncludeHelpInContents>false</IncludeHelpInContents>
|
||||
<UsePurposes>
|
||||
<v8:Value xsi:type="app:ApplicationUsePurpose">PlatformApplication</v8:Value>
|
||||
<v8:Value xsi:type="app:ApplicationUsePurpose">MobilePlatformApplication</v8:Value>
|
||||
</UsePurposes>
|
||||
<UseInInterfaceCompatibilityMode>Any</UseInInterfaceCompatibilityMode>
|
||||
<ExtendedPresentation/>
|
||||
</Properties>
|
||||
</Form>
|
||||
</MetaDataObject>
|
||||
@@ -0,0 +1,292 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<Form xmlns="http://v8.1c.ru/8.3/xcf/logform" xmlns:app="http://v8.1c.ru/8.2/managed-application/core" xmlns:cfg="http://v8.1c.ru/8.1/data/enterprise/current-config" xmlns:ent="http://v8.1c.ru/8.1/data/enterprise" xmlns:lf="http://v8.1c.ru/8.2/managed-application/logform" xmlns:pal="http://v8.1c.ru/8.1/data/ui/colors/palette" xmlns:style="http://v8.1c.ru/8.1/data/ui/style" xmlns:sys="http://v8.1c.ru/8.1/data/ui/fonts/system" xmlns:v8="http://v8.1c.ru/8.1/data/core" xmlns:v8ui="http://v8.1c.ru/8.1/data/ui" xmlns:web="http://v8.1c.ru/8.1/data/ui/colors/web" xmlns:win="http://v8.1c.ru/8.1/data/ui/colors/windows" xmlns:xr="http://v8.1c.ru/8.3/xcf/readable" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="2.21">
|
||||
<WindowOpeningMode>DontBlock</WindowOpeningMode>
|
||||
<Group>Vertical</Group>
|
||||
<VerticalScroll>useIfNecessary</VerticalScroll>
|
||||
<AutoCommandBar name="ФормаКоманднаяПанель" id="-1">
|
||||
<Autofill>false</Autofill>
|
||||
<ChildItems>
|
||||
<Button name="ВыбратьФайл" id="1">
|
||||
<Type>CommandBarButton</Type>
|
||||
<CommandName>Form.Command.ВыбратьФайл</CommandName>
|
||||
<Title>
|
||||
<v8:item>
|
||||
<v8:lang>ru</v8:lang>
|
||||
<v8:content>Выбрать файл</v8:content>
|
||||
</v8:item>
|
||||
</Title>
|
||||
</Button>
|
||||
<Button name="ЗагрузитьДанные" id="2">
|
||||
<Type>CommandBarButton</Type>
|
||||
<CommandName>Form.Command.ЗагрузитьДанные</CommandName>
|
||||
<Title>
|
||||
<v8:item>
|
||||
<v8:lang>ru</v8:lang>
|
||||
<v8:content>Загрузить данные</v8:content>
|
||||
</v8:item>
|
||||
</Title>
|
||||
</Button>
|
||||
<Button name="ЗаписатьДанные" id="3">
|
||||
<Type>CommandBarButton</Type>
|
||||
<CommandName>Form.Command.ЗаписатьДанные</CommandName>
|
||||
<Title>
|
||||
<v8:item>
|
||||
<v8:lang>ru</v8:lang>
|
||||
<v8:content>Записать данные</v8:content>
|
||||
</v8:item>
|
||||
</Title>
|
||||
</Button>
|
||||
</ChildItems>
|
||||
</AutoCommandBar>
|
||||
<Events>
|
||||
<Event name="OnCreateAtServer">ПриСозданииНаСервере</Event>
|
||||
</Events>
|
||||
<ChildItems>
|
||||
<UsualGroup name="ОсновнаяГруппа" id="10">
|
||||
<Group>Vertical</Group>
|
||||
<ChildItems>
|
||||
<UsualGroup name="ГруппаПараметры" id="20">
|
||||
<Group>Horizontal</Group>
|
||||
<ChildItems>
|
||||
<LabelField name="ЗаголовокПутьКФайлу" id="21">
|
||||
<Title>
|
||||
<v8:item>
|
||||
<v8:lang>ru</v8:lang>
|
||||
<v8:content>Путь к файлу:</v8:content>
|
||||
</v8:item>
|
||||
</Title>
|
||||
</LabelField>
|
||||
<InputField name="ПутьКФайлу" id="22">
|
||||
<DataPath>Объект.ПутьКФайлу</DataPath>
|
||||
<Width>80</Width>
|
||||
</InputField>
|
||||
<InputField name="МесяцЗагрузки" id="23">
|
||||
<DataPath>Объект.МесяцЗагрузки</DataPath>
|
||||
<Title>
|
||||
<v8:item>
|
||||
<v8:lang>ru</v8:lang>
|
||||
<v8:content>Месяц:</v8:content>
|
||||
</v8:item>
|
||||
</Title>
|
||||
<Width>10</Width>
|
||||
</InputField>
|
||||
</ChildItems>
|
||||
</UsualGroup>
|
||||
<Pages name="ГруппаДанные" id="30">
|
||||
<ChildItems>
|
||||
<Page name="СтраницаРасчетЗП" id="31">
|
||||
<Title>
|
||||
<v8:item>
|
||||
<v8:lang>ru</v8:lang>
|
||||
<v8:content>Расчет ЗП</v8:content>
|
||||
</v8:item>
|
||||
</Title>
|
||||
<ChildItems>
|
||||
<TableBox name="ТаблицаРасчетЗП" id="32">
|
||||
<DataPath>Объект.ДанныеРасчетаЗП</DataPath>
|
||||
<ColumnInitializationOnInput>DoNotUse</ColumnInitializationOnInput>
|
||||
<ChildItems>
|
||||
<Column name="ФИО" id="33">
|
||||
<DataPath>ФИО</DataPath>
|
||||
<Title>
|
||||
<v8:item>
|
||||
<v8:lang>ru</v8:lang>
|
||||
<v8:content>ФИО</v8:content>
|
||||
</v8:item>
|
||||
</Title>
|
||||
<Width>30</Width>
|
||||
</Column>
|
||||
<Column name="Должность" id="34">
|
||||
<DataPath>Должность</DataPath>
|
||||
<Title>
|
||||
<v8:item>
|
||||
<v8:lang>ru</v8:lang>
|
||||
<v8:content>Должность</v8:content>
|
||||
</v8:item>
|
||||
</Title>
|
||||
<Width>25</Width>
|
||||
</Column>
|
||||
<Column name="Оклад" id="35">
|
||||
<DataPath>Оклад</DataPath>
|
||||
<Title>
|
||||
<v8:item>
|
||||
<v8:lang>ru</v8:lang>
|
||||
<v8:content>Оклад</v8:content>
|
||||
</v8:item>
|
||||
</Title>
|
||||
<Width>12</Width>
|
||||
</Column>
|
||||
<Column name="ИтогоНачислено" id="36">
|
||||
<DataPath>ИтогоНачислено</DataPath>
|
||||
<Title>
|
||||
<v8:item>
|
||||
<v8:lang>ru</v8:lang>
|
||||
<v8:content>Итого начислено</v8:content>
|
||||
</v8:item>
|
||||
</Title>
|
||||
<Width>15</Width>
|
||||
</Column>
|
||||
<Column name="НДФЛ" id="37">
|
||||
<DataPath>НДФЛ</DataPath>
|
||||
<Title>
|
||||
<v8:item>
|
||||
<v8:lang>ru</v8:lang>
|
||||
<v8:content>НДФЛ</v8:content>
|
||||
</v8:item>
|
||||
</Title>
|
||||
<Width>12</Width>
|
||||
</Column>
|
||||
<Column name="ВсегоНаРуки" id="38">
|
||||
<DataPath>ВсегоНаРуки</DataPath>
|
||||
<Title>
|
||||
<v8:item>
|
||||
<v8:lang>ru</v8:lang>
|
||||
<v8:content>Всего на руки</v8:content>
|
||||
</v8:item>
|
||||
</Title>
|
||||
<Width>15</Width>
|
||||
</Column>
|
||||
</ChildItems>
|
||||
</TableBox>
|
||||
</ChildItems>
|
||||
</Page>
|
||||
<Page name="СтраницаСтраховыеВзносы" id="39">
|
||||
<Title>
|
||||
<v8:item>
|
||||
<v8:lang>ru</v8:lang>
|
||||
<v8:content>Страховые взносы</v8:content>
|
||||
</v8:item>
|
||||
</Title>
|
||||
<ChildItems>
|
||||
<TableBox name="ТаблицаСтраховыеВзносы" id="40">
|
||||
<DataPath>Объект.ДанныеСтраховыхВзносов</DataPath>
|
||||
<ColumnInitializationOnInput>DoNotUse</ColumnInitializationOnInput>
|
||||
<ChildItems>
|
||||
<Column name="ФИО" id="41">
|
||||
<DataPath>ФИО</DataPath>
|
||||
<Title>
|
||||
<v8:item>
|
||||
<v8:lang>ru</v8:lang>
|
||||
<v8:content>ФИО</v8:content>
|
||||
</v8:item>
|
||||
</Title>
|
||||
<Width>30</Width>
|
||||
</Column>
|
||||
<Column name="ДТ6Процент" id="42">
|
||||
<DataPath>ДТ6Процент</DataPath>
|
||||
<Title>
|
||||
<v8:item>
|
||||
<v8:lang>ru</v8:lang>
|
||||
<v8:content>ДТ 6%</v8:content>
|
||||
</v8:item>
|
||||
</Title>
|
||||
<Width>12</Width>
|
||||
</Column>
|
||||
<Column name="ДТ4Процент" id="43">
|
||||
<DataPath>ДТ4Процент</DataPath>
|
||||
<Title>
|
||||
<v8:item>
|
||||
<v8:lang>ru</v8:lang>
|
||||
<v8:content>ДТ 4%</v8:content>
|
||||
</v8:item>
|
||||
</Title>
|
||||
<Width>12</Width>
|
||||
</Column>
|
||||
<Column name="ПФСтраховая" id="44">
|
||||
<DataPath>ПФСтраховая</DataPath>
|
||||
<Title>
|
||||
<v8:item>
|
||||
<v8:lang>ru</v8:lang>
|
||||
<v8:content>ПФ страховая</v8:content>
|
||||
</v8:item>
|
||||
</Title>
|
||||
<Width>12</Width>
|
||||
</Column>
|
||||
<Column name="ФССФОМС" id="45">
|
||||
<DataPath>ФССФОМС</DataPath>
|
||||
<Title>
|
||||
<v8:item>
|
||||
<v8:lang>ru</v8:lang>
|
||||
<v8:content>ФСС/ФОМС</v8:content>
|
||||
</v8:item>
|
||||
</Title>
|
||||
<Width>12</Width>
|
||||
</Column>
|
||||
<Column name="Итого" id="46">
|
||||
<DataPath>Итого</DataPath>
|
||||
<Title>
|
||||
<v8:item>
|
||||
<v8:lang>ru</v8:lang>
|
||||
<v8:content>Итого</v8:content>
|
||||
</v8:item>
|
||||
</Title>
|
||||
<Width>12</Width>
|
||||
</Column>
|
||||
</ChildItems>
|
||||
</TableBox>
|
||||
</ChildItems>
|
||||
</Page>
|
||||
</ChildItems>
|
||||
</Pages>
|
||||
</ChildItems>
|
||||
</UsualGroup>
|
||||
</ChildItems>
|
||||
<Attributes>
|
||||
<Attribute name="Объект" id="1">
|
||||
<Type>
|
||||
<v8:Type>cfg:DataProcessorObject.ЗагрузкаДанныхИзExcel</v8:Type>
|
||||
</Type>
|
||||
<MainAttribute>true</MainAttribute>
|
||||
</Attribute>
|
||||
</Attributes>
|
||||
<Commands>
|
||||
<Command name="ВыбратьФайл" id="1">
|
||||
<Title>
|
||||
<v8:item>
|
||||
<v8:lang>ru</v8:lang>
|
||||
<v8:content>Выбрать файл</v8:content>
|
||||
</v8:item>
|
||||
</Title>
|
||||
<ToolTip>
|
||||
<v8:item>
|
||||
<v8:lang>ru</v8:lang>
|
||||
<v8:content>Выбрать Excel файл для загрузки</v8:content>
|
||||
</v8:item>
|
||||
</ToolTip>
|
||||
<Action>ВыбратьФайл</Action>
|
||||
<CurrentRowUse>DontUse</CurrentRowUse>
|
||||
</Command>
|
||||
<Command name="ЗагрузитьДанные" id="2">
|
||||
<Title>
|
||||
<v8:item>
|
||||
<v8:lang>ru</v8:lang>
|
||||
<v8:content>Загрузить данные</v8:content>
|
||||
</v8:item>
|
||||
</Title>
|
||||
<ToolTip>
|
||||
<v8:item>
|
||||
<v8:lang>ru</v8:lang>
|
||||
<v8:content>Загрузить данные из выбранного файла</v8:content>
|
||||
</v8:item>
|
||||
</ToolTip>
|
||||
<Action>ЗагрузитьДанные</Action>
|
||||
<CurrentRowUse>DontUse</CurrentRowUse>
|
||||
</Command>
|
||||
<Command name="ЗаписатьДанные" id="3">
|
||||
<Title>
|
||||
<v8:item>
|
||||
<v8:lang>ru</v8:lang>
|
||||
<v8:content>Записать данные</v8:content>
|
||||
</v8:item>
|
||||
</Title>
|
||||
<ToolTip>
|
||||
<v8:item>
|
||||
<v8:lang>ru</v8:lang>
|
||||
<v8:content>Записать загруженные данные в 1С</v8:content>
|
||||
</v8:item>
|
||||
</ToolTip>
|
||||
<Action>ЗаписатьДанные</Action>
|
||||
<CurrentRowUse>DontUse</CurrentRowUse>
|
||||
</Command>
|
||||
</Commands>
|
||||
</Form>
|
||||
@@ -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 Тогда
|
||||
Объект.ЗаписатьДанныеСтраховыхВзносов(ТЗВзносы, Период);
|
||||
КонецЕсли;
|
||||
КонецПроцедуры
|
||||
|
||||
#КонецОбласти
|
||||
Reference in New Issue
Block a user