v3.0.0.20: fix СтрНайти, ИтогоУдержано/Выплачено, месяц/год UI
This commit is contained in:
File diff suppressed because it is too large
Load Diff
@@ -2,6 +2,8 @@
|
||||
|
||||
&НаСервере
|
||||
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
|
||||
Элементы.ГруппаМесяцГод.Видимость = Ложь;
|
||||
Элементы.СтраницыДанные.ТекущаяСтраница = Элементы.СтраницаСотрудники;
|
||||
КонецПроцедуры
|
||||
|
||||
#КонецОбласти
|
||||
@@ -66,9 +68,7 @@
|
||||
КонтекстExcel.Excel.Quit();
|
||||
Исключение
|
||||
КонецПопытки;
|
||||
Если ЗначениеЗаполнено(ВременныйФайл) Тогда
|
||||
УдалитьФайлы(ВременныйФайл);
|
||||
КонецЕсли;
|
||||
Если ЗначениеЗаполнено(ВременныйФайл) Тогда УдалитьФайлы(ВременныйФайл); КонецЕсли;
|
||||
КонецПроцедуры
|
||||
|
||||
&НаКлиенте
|
||||
@@ -78,7 +78,7 @@
|
||||
Если Значение = Неопределено ИЛИ Значение = "" Тогда Возврат 0; КонецЕсли;
|
||||
Возврат Число(Значение);
|
||||
Исключение
|
||||
Сообщить("Ошибка чтения числа: " + КонтекстОшибки + " | строка " + Строка + " колонка " + Колонка + " | " + ОписаниеОшибки());
|
||||
Сообщить("Ошибка чтения числа: " + КонтекстОшибки + " | строка " + Строка + " колонка " + Колонка);
|
||||
Возврат 0;
|
||||
КонецПопытки;
|
||||
КонецФункции
|
||||
@@ -94,15 +94,15 @@
|
||||
КонецПопытки;
|
||||
КонецФункции
|
||||
|
||||
// Извлекает имя листа из формулы вида ='ИмяЛиста'!C2
|
||||
&НаКлиенте
|
||||
Функция ИзвлечьИмяЛистаИзФормулы(Формула)
|
||||
Если Формула = Неопределено Тогда Возврат ""; КонецЕсли;
|
||||
ТекстФормулы = СокрЛП("" + Формула);
|
||||
Если Не СтрНачинаетсяС(ТекстФормулы, "='") Тогда Возврат ""; КонецЕсли;
|
||||
ПозицияНачала = 3;
|
||||
ПозицияКонца = СтрНайти(ТекстФормулы, "'!", , , ПозицияНачала);
|
||||
Если ПозицияКонца = 0 Тогда Возврат ""; КонецЕсли;
|
||||
Возврат Сред(ТекстФормулы, ПозицияНачала, ПозицияКонца - ПозицияНачала);
|
||||
Текст = СокрЛП("" + Формула);
|
||||
Если Не СтрНачинаетсяС(Текст, "='") Тогда Возврат ""; КонецЕсли;
|
||||
Поз = СтрНайти(Текст, "'!");
|
||||
Если Поз = 0 Тогда Возврат ""; КонецЕсли;
|
||||
Возврат Сред(Текст, 3, Поз - 3);
|
||||
КонецФункции
|
||||
|
||||
&НаКлиенте
|
||||
@@ -113,17 +113,27 @@
|
||||
Возврат Неопределено;
|
||||
КонецФункции
|
||||
|
||||
&НаКлиенте
|
||||
Функция НомерМесяцаВТекст(НомерМесяца)
|
||||
Массив = Новый Массив;
|
||||
Массив.Добавить("Январь"); Массив.Добавить("Февраль");
|
||||
Массив.Добавить("Март"); Массив.Добавить("Апрель");
|
||||
Массив.Добавить("Май"); Массив.Добавить("Июнь");
|
||||
Массив.Добавить("Июль"); Массив.Добавить("Август");
|
||||
Массив.Добавить("Сентябрь"); Массив.Добавить("Октябрь");
|
||||
Массив.Добавить("Ноябрь"); Массив.Добавить("Декабрь");
|
||||
Если НомерМесяца >= 1 И НомерМесяца <= 12 Тогда
|
||||
Возврат Массив[НомерМесяца - 1];
|
||||
КонецЕсли;
|
||||
Возврат "";
|
||||
КонецФункции
|
||||
|
||||
#КонецОбласти
|
||||
|
||||
#Область ЧтениеДанныхСотрудника_Домен
|
||||
|
||||
// ============================================================================
|
||||
// Чтение данных из листа сотрудника
|
||||
// ============================================================================
|
||||
|
||||
&НаКлиенте
|
||||
Функция НайтиЛистСотрудника(Книга, ЛистРасчет, НомерСтроки)
|
||||
// Способ 1: из формулы в ячейке (xlsm)
|
||||
Формула = ЛистРасчет.Cells(НомерСтроки, 1).Formula;
|
||||
Если ЗначениеЗаполнено(Формула) Тогда
|
||||
ИмяЛиста = ИзвлечьИмяЛистаИзФормулы(Формула);
|
||||
@@ -131,7 +141,6 @@
|
||||
Возврат НайтиЛист(Книга, ИмяЛиста);
|
||||
КонецЕсли;
|
||||
КонецЕсли;
|
||||
// Способ 2: ФИО как текст в ячейке — ищем лист по имени (xls)
|
||||
ФИО = ПрочитатьЯчейкуСтрока(ЛистРасчет, НомерСтроки, 1);
|
||||
Если ЗначениеЗаполнено(ФИО) Тогда
|
||||
Возврат НайтиЛист(Книга, ФИО);
|
||||
@@ -139,8 +148,6 @@
|
||||
Возврат Неопределено;
|
||||
КонецФункции
|
||||
|
||||
// Определяет строку данных для выбранного месяца на листе сотрудника.
|
||||
// Строка = 35 + МесяцЗагрузки (36 = Январь, 37 = Февраль, ...)
|
||||
&НаКлиенте
|
||||
Функция СтрокаМесяцаНаЛистеСотрудника()
|
||||
Смещение = Объект.МесяцЗагрузки;
|
||||
@@ -148,136 +155,125 @@
|
||||
Возврат 35 + Смещение;
|
||||
КонецФункции
|
||||
|
||||
// Читает ФИО и данные карточки из листа сотрудника (строки 1-5).
|
||||
&НаКлиенте
|
||||
Функция ПрочитатьКарточкуСотрудника(ЛистСотрудника)
|
||||
Данные = Новый Структура;
|
||||
Данные.Вставить("ФИО", ПрочитатьЯчейкуСтрока(ЛистСотрудника, 2, 3));
|
||||
Данные.Вставить("Должность", ПрочитатьЯчейкуСтрока(ЛистСотрудника, 3, 3));
|
||||
Данные.Вставить("СчетБК", ПрочитатьЯчейкуСтрока(ЛистСотрудника, 4, 4));
|
||||
Данные.Вставить("ВидЗанятости", ПрочитатьЯчейкуСтрока(ЛистСотрудника, 6, 1));
|
||||
Данные.Вставить("ИНН", ПрочитатьЯчейкуСтрока(ЛистСотрудника, 1, 10));
|
||||
Данные.Вставить("СНИЛС", ПрочитатьЯчейкуСтрока(ЛистСотрудника, 2, 10));
|
||||
Данные.Вставить("Адрес", ПрочитатьЯчейкуСтрока(ЛистСотрудника, 4, 10));
|
||||
Данные.Вставить("ЛицевойСчетВБанке", ПрочитатьЯчейкуСтрока(ЛистСотрудника, 4, 4));
|
||||
Данные.Вставить("ВидЗанятости", ПрочитатьЯчейкуСтрока(ЛистСотрудника, 6, 1));
|
||||
Данные.Вставить("АдресРегистрации", ПрочитатьЯчейкуСтрока(ЛистСотрудника, 4, 10));
|
||||
Возврат Данные;
|
||||
КонецФункции
|
||||
|
||||
// Читает расчётные данные из листа сотрудника (OFFSET-блок, строки 12+).
|
||||
&НаКлиенте
|
||||
Функция ПрочитатьРасчетныеДанныеСЛиста(ЛистСотрудника, ФИО)
|
||||
Стр = Новый Структура;
|
||||
Стр.Вставить("ФИО", ФИО);
|
||||
Стр.Вставить("Должность", ПрочитатьЯчейкуСтрока(ЛистСотрудника, 3, 3));
|
||||
Стр.Вставить("СчетБК", ПрочитатьЯчейкуСтрока(ЛистСотрудника, 4, 4));
|
||||
Стр.Вставить("ВидЗанятости", ПрочитатьЯчейкуСтрока(ЛистСотрудника, 6, 1));
|
||||
БазоваяСтрока = 12;
|
||||
Смещение = Объект.МесяцЗагрузки;
|
||||
Если Не ЗначениеЗаполнено(Смещение) Тогда Смещение = 1; КонецЕсли;
|
||||
СтрокаДанных = БазоваяСтрока + Смещение;
|
||||
Стр.Вставить("Оклад", ПрочитатьЯчейкуЧисло(ЛистСотрудника, СтрокаДанных, 3, ФИО + " Оклад"));
|
||||
Стр.Вставить("КоличествоСтавок", ПрочитатьЯчейкуЧисло(ЛистСотрудника, СтрокаДанных, 4, ФИО + " Ставки"));
|
||||
Стр.Вставить("ОтработаноДней", ПрочитатьЯчейкуЧисло(ЛистСотрудника, СтрокаДанных, 5, ФИО + " Отработано"));
|
||||
Стр.Вставить("ИтогоНачислено", ПрочитатьЯчейкуЧисло(ЛистСотрудника, СтрокаДанных, 10, ФИО + " Итого начислено"));
|
||||
Стр.Вставить("НДФЛ", 0);
|
||||
Стр.Вставить("ИтогоУдержано", 0);
|
||||
Стр.Вставить("ВсегоНаРуки", 0);
|
||||
Возврат Стр;
|
||||
КонецФункции
|
||||
|
||||
// Читает расчётные данные из листа "Расчет" (табличные колонки 5-63).
|
||||
&НаКлиенте
|
||||
Функция ПрочитатьРасчетныеДанныеИзРасчета(ЛистРасчет, Ном, ФИО)
|
||||
Строка = Новый Структура;
|
||||
Строка.Вставить("ФИО", ФИО);
|
||||
Строка.Вставить("Должность", ПрочитатьЯчейкуСтрока(ЛистРасчет, Ном, 2));
|
||||
Строка.Вставить("СчетБК", ПрочитатьЯчейкуСтрока(ЛистРасчет, Ном, 3));
|
||||
Строка.Вставить("ВидЗанятости", ПрочитатьЯчейкуСтрока(ЛистРасчет, Ном, 4));
|
||||
// col 5-8: Оклад и базовые
|
||||
Строка.Вставить("Оклад", ПрочитатьЯчейкуЧисло(ЛистРасчет, Ном, 8, ФИО + " Оклад"));
|
||||
Строка.Вставить("КоличествоСтавок", ПрочитатьЯчейкуЧисло(ЛистРасчет, Ном, 7, ФИО + " Ставки"));
|
||||
Строка.Вставить("ОтработаноДней", ПрочитатьЯчейкуЧисло(ЛистРасчет, Ном, 6, ФИО + " Отработано"));
|
||||
// col 9-38: Расчётные поля
|
||||
Строка.Вставить("ЧасыДежурства", ПрочитатьЯчейкуЧисло(ЛистРасчет, Ном, 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, ФИО));
|
||||
// col 39-55: Итоги и удержания
|
||||
Строка.Вставить("ИтогоНачислено", ПрочитатьЯчейкуЧисло(ЛистРасчет, Ном, 39, ФИО));
|
||||
Строка.Вставить("НДФЛ", ПрочитатьЯчейкуЧисло(ЛистРасчет, Ном, 40, ФИО));
|
||||
Строка.Вставить("ПрофВзнос", ПрочитатьЯчейкуЧисло(ЛистРасчет, Ном, 41, ФИО));
|
||||
Строка.Вставить("ИтогоУдержано", ПрочитатьЯчейкуЧисло(ЛистРасчет, Ном, 53, ФИО));
|
||||
Строка.Вставить("ВсегоНаРуки", ПрочитатьЯчейкуЧисло(ЛистРасчет, Ном, 55, ФИО));
|
||||
Возврат Строка;
|
||||
С = Новый Структура;
|
||||
С.Вставить("ФИО", ФИО);
|
||||
С.Вставить("Должность", ПрочитатьЯчейкуСтрока(ЛистРасчет, Ном, 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, ФИО));
|
||||
// Расчёт итогов
|
||||
С.Вставить("ИтогоУдержано",
|
||||
С.НДФЛ + С.ПрофВзнос + С.ИсполнительныеДокументы + С.ПФСофинансирование
|
||||
+ С.ПремияУдержание + С.ПособиеДо3ЛетУдержание + С.Депонент);
|
||||
С.Вставить("ИтогоВыплачено",
|
||||
С.Аванс + С.Касса1 + С.Касса2 + С.Касса3
|
||||
+ С.БезналичныеПеречисления + С.ВозвратВКассу);
|
||||
Возврат С;
|
||||
КонецФункции
|
||||
|
||||
// Читает НДФЛ из блока внизу листа сотрудника (строки 31-48).
|
||||
&НаКлиенте
|
||||
Функция ПрочитатьНДФЛСоЛиста(ЛистСотрудника, ФИО)
|
||||
Если ЛистСотрудника = Неопределено Тогда Возврат Неопределено; КонецЕсли;
|
||||
// Проверяем наличие блока НДФЛ
|
||||
ЕстьБлок = Ложь;
|
||||
Для ПроверяемаяСтрока = 30 По 32 Цикл
|
||||
Текст = НРег(ПрочитатьЯчейкуСтрока(ЛистСотрудника, ПроверяемаяСтрока, 1));
|
||||
Для Стр = 30 По 32 Цикл
|
||||
Текст = НРег(ПрочитатьЯчейкуСтрока(ЛистСотрудника, Стр, 1));
|
||||
Если СтрНайти(Текст, "ндфл") > 0 ИЛИ СтрНайти(Текст, "взнос") > 0 Тогда
|
||||
ЕстьБлок = Истина; Прервать;
|
||||
КонецЕсли;
|
||||
КонецЦикла;
|
||||
Если Не ЕстьБлок Тогда
|
||||
ТекстЯнв = НРег(ПрочитатьЯчейкуСтрока(ЛистСотрудника, 36, 1));
|
||||
Если СтрНайти(ТекстЯнв, "январь") = 0 Тогда Возврат Неопределено; КонецЕсли;
|
||||
Если СтрНайти(НРег(ПрочитатьЯчейкуСтрока(ЛистСотрудника, 36, 1)), "январь") = 0 Тогда
|
||||
Возврат Неопределено;
|
||||
КонецЕсли;
|
||||
КонецЕсли;
|
||||
СтрокаДанных = СтрокаМесяцаНаЛистеСотрудника();
|
||||
СД = СтрокаМесяцаНаЛистеСотрудника();
|
||||
НДФЛ = Новый Структура;
|
||||
НДФЛ.Вставить("ФИО", ФИО);
|
||||
НДФЛ.Вставить("МесяцРасчета", ПрочитатьЯчейкуСтрока(ЛистСотрудника, СтрокаДанных, 1));
|
||||
НДФЛ.Вставить("СуммаВаловогоДохода", ПрочитатьЯчейкуЧисло(ЛистСотрудника, СтрокаДанных, 4, ФИО + " вал. доход"));
|
||||
НДФЛ.Вставить("СуммаВаловогоДоходаСНачалаГода", ПрочитатьЯчейкуЧисло(ЛистСотрудника, СтрокаДанных, 6, ФИО + " вал. доход с н.г."));
|
||||
НДФЛ.Вставить("СкидкаДляНДФЛЗаМесяц", ПрочитатьЯчейкуЧисло(ЛистСотрудника, СтрокаДанных, 8, ФИО + " скидка НДФЛ мес"));
|
||||
НДФЛ.Вставить("СкидкаДляНДФЛЗаГод", ПрочитатьЯчейкуЧисло(ЛистСотрудника, СтрокаДанных, 9, ФИО + " скидка НДФЛ год"));
|
||||
НДФЛ.Вставить("СкидкаДляСВЗаМесяц", ПрочитатьЯчейкуЧисло(ЛистСотрудника, СтрокаДанных, 10, ФИО + " скидка СВ мес"));
|
||||
НДФЛ.Вставить("ВычетНаРаботникаЗаМесяц", ПрочитатьЯчейкуЧисло(ЛистСотрудника, СтрокаДанных, 12, ФИО + " вычет работник"));
|
||||
НДФЛ.Вставить("МесяцРасчета", ПрочитатьЯчейкуСтрока(ЛистСотрудника, СД, 1));
|
||||
НДФЛ.Вставить("СуммаВаловогоДохода", ПрочитатьЯчейкуЧисло(ЛистСотрудника, СД, 4, ФИО));
|
||||
НДФЛ.Вставить("СуммаВаловогоДоходаСНачалаГода", ПрочитатьЯчейкуЧисло(ЛистСотрудника, СД, 6, ФИО));
|
||||
НДФЛ.Вставить("СкидкаДляНДФЛЗаМесяц", ПрочитатьЯчейкуЧисло(ЛистСотрудника, СД, 8, ФИО));
|
||||
НДФЛ.Вставить("СкидкаДляНДФЛЗаГод", ПрочитатьЯчейкуЧисло(ЛистСотрудника, СД, 9, ФИО));
|
||||
НДФЛ.Вставить("СкидкаДляСВЗаМесяц", ПрочитатьЯчейкуЧисло(ЛистСотрудника, СД, 10, ФИО));
|
||||
НДФЛ.Вставить("ВычетНаРаботникаЗаМесяц", ПрочитатьЯчейкуЧисло(ЛистСотрудника, СД, 12, ФИО));
|
||||
НДФЛ.Вставить("ВычетНаРаботникаЗаГод", 0);
|
||||
НДФЛ.Вставить("ВычетНаИждивенцевЗаМесяц", ПрочитатьЯчейкуЧисло(ЛистСотрудника, СтрокаДанных, 13, ФИО + " вычет иждивенцы"));
|
||||
НДФЛ.Вставить("ВсегоВычетовЗаМесяц", ПрочитатьЯчейкуЧисло(ЛистСотрудника, СтрокаДанных, 14, ФИО + " всего вычетов"));
|
||||
НДФЛ.Вставить("ВычетНаИждивенцевЗаМесяц", ПрочитатьЯчейкуЧисло(ЛистСотрудника, СД, 13, ФИО));
|
||||
НДФЛ.Вставить("ВсегоВычетовЗаМесяц", ПрочитатьЯчейкуЧисло(ЛистСотрудника, СД, 14, ФИО));
|
||||
НДФЛ.Вставить("ОблагаемыйДоходЗаМесяц", 0);
|
||||
НДФЛ.Вставить("ОблагаемыйДоходЗаГод", ПрочитатьЯчейкуЧисло(ЛистСотрудника, СтрокаДанных, 15, ФИО + " обл. доход год"));
|
||||
НДФЛ.Вставить("НачисленныйНДФЛЗаГод", ПрочитатьЯчейкуЧисло(ЛистСотрудника, СтрокаДанных, 16, ФИО + " НДФЛ начисл. год"));
|
||||
НДФЛ.Вставить("ИтогоНДФЛЗаМесяц", ПрочитатьЯчейкуЧисло(ЛистСотрудника, СтрокаДанных, 18, ФИО + " итого НДФЛ"));
|
||||
НДФЛ.Вставить("НалоговаяБазаПоСВЗаМесяц", ПрочитатьЯчейкуЧисло(ЛистСотрудника, СтрокаДанных, 23, ФИО + " база СВ мес"));
|
||||
НДФЛ.Вставить("ИтогоФСС", ПрочитатьЯчейкуЧисло(ЛистСотрудника, СтрокаДанных, 37, ФИО + " итого СВ"));
|
||||
НДФЛ.Вставить("ОблагаемыйДоходЗаГод", ПрочитатьЯчейкуЧисло(ЛистСотрудника, СД, 15, ФИО));
|
||||
НДФЛ.Вставить("НачисленныйНДФЛЗаГод", ПрочитатьЯчейкуЧисло(ЛистСотрудника, СД, 16, ФИО));
|
||||
НДФЛ.Вставить("ИтогоНДФЛЗаМесяц", ПрочитатьЯчейкуЧисло(ЛистСотрудника, СД, 18, ФИО));
|
||||
НДФЛ.Вставить("НалоговаяБазаПоСВЗаМесяц", ПрочитатьЯчейкуЧисло(ЛистСотрудника, СД, 23, ФИО));
|
||||
НДФЛ.Вставить("ИтогоФСС", ПрочитатьЯчейкуЧисло(ЛистСотрудника, СД, 37, ФИО));
|
||||
Возврат НДФЛ;
|
||||
КонецФункции
|
||||
|
||||
// Читает страховые взносы из листа "Расчет" (cols 58-63).
|
||||
&НаКлиенте
|
||||
Функция ПрочитатьВзносыИзРасчета(ЛистРасчет, Ном, ФИО)
|
||||
СВ = ПрочитатьЯчейкуЧисло(ЛистРасчет, Ном, 63, ФИО + " СВ итого");
|
||||
СВ = ПрочитатьЯчейкуЧисло(ЛистРасчет, Ном, 63, ФИО);
|
||||
Если СВ <= 0 Тогда Возврат Неопределено; КонецЕсли;
|
||||
Стр = Новый Структура;
|
||||
Стр.Вставить("ФИО", ФИО);
|
||||
@@ -296,11 +292,9 @@
|
||||
|
||||
&НаКлиенте
|
||||
Процедура ПрочитатьExcelНаКлиенте()
|
||||
СтатусЗагрузки = "Копирование файла...";
|
||||
Состояние("Копирование файла...", 5);
|
||||
ВременныйФайл = КаталогВременныхФайлов() + "temp_data.xls";
|
||||
КопироватьФайл(Объект.ПутьКФайлу, ВременныйФайл);
|
||||
СтатусЗагрузки = "Открытие Excel...";
|
||||
КонтекстExcel = ОткрытьФайлExcel(ВременныйФайл);
|
||||
Если КонтекстExcel = Неопределено Тогда УдалитьФайлы(ВременныйФайл); Возврат; КонецЕсли;
|
||||
|
||||
@@ -311,37 +305,44 @@
|
||||
Возврат;
|
||||
КонецЕсли;
|
||||
|
||||
// Месяц загрузки
|
||||
// Месяц
|
||||
МесяцЗначение = ЛистРасчет.Cells(4, 1).Value;
|
||||
Если ЗначениеЗаполнено(МесяцЗначение) Тогда
|
||||
Попытка Объект.МесяцЗагрузки = Число(МесяцЗначение); Исключение КонецПопытки;
|
||||
КонецЕсли;
|
||||
// Год — определяем из файла (строка 3, колонка 1 в РАСЧЕТ)
|
||||
ГодЗначение = ЛистРасчет.Cells(3, 1).Value;
|
||||
Если ЗначениеЗаполнено(ГодЗначение) Тогда
|
||||
Попытка ГодЗагрузки = Число(ГодЗначение); Исключение
|
||||
ГодЗагрузки = Год(ТекущаяДата());
|
||||
КонецПопытки;
|
||||
Иначе
|
||||
ГодЗагрузки = Год(ТекущаяДата());
|
||||
КонецЕсли;
|
||||
// Месяц текстом
|
||||
МесяцТекст = НомерМесяцаВТекст(Объект.МесяцЗагрузки) + " " + ГодЗагрузки;
|
||||
Элементы.ГруппаМесяцГод.Видимость = Истина;
|
||||
|
||||
// Определяем строку начала данных: первая строка с формулой-ссылкой вида ='ИмяЛиста'!...
|
||||
// Строка начала данных
|
||||
НачальнаяСтрока = 0;
|
||||
Для Ном = 17 По 30 Цикл
|
||||
Формула = ЛистРасчет.Cells(Ном, 1).Formula;
|
||||
Если ЗначениеЗаполнено(Формула) И СтрНайти("" + Формула, "='") > 0 Тогда
|
||||
НачальнаяСтрока = Ном;
|
||||
Прервать;
|
||||
НачальнаяСтрока = Ном; Прервать;
|
||||
КонецЕсли;
|
||||
КонецЦикла;
|
||||
Если НачальнаяСтрока = 0 Тогда
|
||||
// Fallback для xls: ищем первую непустую строку с текстом > 3 символов
|
||||
Для Ном = 17 По 30 Цикл
|
||||
ФИОТест = СокрЛП("" + ЛистРасчет.Cells(Ном, 1).Value);
|
||||
Если ЗначениеЗаполнено(ФИОТест)
|
||||
И Не СтрНачинаетсяС(ВРег(ФИОТест), "ИТОГО")
|
||||
И Не СтрНачинаетсяС(ВРег(ФИОТест), "СОТРУДНИК")
|
||||
И Не СтрНачинаетсяС(ВРег(ФИОТест), "ФАМИЛИЯ")
|
||||
И СтрДлина(ФИОТест) > 3 Тогда
|
||||
НачальнаяСтрока = Ном;
|
||||
Прервать;
|
||||
ФТ = СокрЛП("" + ЛистРасчет.Cells(Ном, 1).Value);
|
||||
Если ЗначениеЗаполнено(ФТ) И Не СтрНачинаетсяС(ВРег(ФТ), "ИТОГО")
|
||||
И Не СтрНачинаетсяС(ВРег(ФТ), "СОТРУДНИК") И Не СтрНачинаетсяС(ВРег(ФТ), "ФАМИЛИЯ")
|
||||
И СтрДлина(ФТ) > 3 Тогда
|
||||
НачальнаяСтрока = Ном; Прервать;
|
||||
КонецЕсли;
|
||||
КонецЦикла;
|
||||
КонецЕсли;
|
||||
Если НачальнаяСтрока = 0 Тогда
|
||||
Сообщить("Данные сотрудников не найдены!");
|
||||
Сообщить("Данные не найдены!");
|
||||
ЗакрытьExcel(КонтекстExcel, ВременныйФайл);
|
||||
Возврат;
|
||||
КонецЕсли;
|
||||
@@ -351,58 +352,40 @@
|
||||
МассивНДФЛ = Новый Массив;
|
||||
МассивСотрудников = Новый Массив;
|
||||
Счетчик = 0;
|
||||
ПустыхПодряд = 0;
|
||||
|
||||
Для Ном = НачальнаяСтрока По ЛистРасчет.Rows.Count Цикл
|
||||
// Проверка окончания данных
|
||||
ЗначениеЯчейки = ЛистРасчет.Cells(Ном, 1).Value;
|
||||
Если ЗначениеЯчейки = Неопределено ИЛИ ЗначениеЯчейки = "" Тогда
|
||||
// Может быть пустая строка в середине — проверяем ещё 2 строки
|
||||
След1 = ЛистРасчет.Cells(Ном + 1, 1).Value;
|
||||
След2 = ЛистРасчет.Cells(Ном + 2, 1).Value;
|
||||
Если (След1 = Неопределено ИЛИ След1 = "") И (След2 = Неопределено ИЛИ След2 = "") Тогда
|
||||
Прервать;
|
||||
КонецЕсли;
|
||||
Если (След1 = Неопределено ИЛИ След1 = "") И (След2 = Неопределено ИЛИ След2 = "") Тогда Прервать; КонецЕсли;
|
||||
Продолжить;
|
||||
КонецЕсли;
|
||||
ФИОТекст = СокрЛП("" + ЗначениеЯчейки);
|
||||
Если СтрНачинаетсяС(ВРег(ФИОТекст), "ИТОГО") Тогда Прервать; КонецЕсли;
|
||||
Если СтрНачинаетсяС(ВРег(ФИОТекст), "СОТРУДНИК") Тогда Продолжить; КонецЕсли;
|
||||
Если СтрНачинаетсяС(ВРег(ФИОТекст), "ФАМИЛИЯ") Тогда Продолжить; КонецЕсли;
|
||||
Если СтрНачинаетсяС(ВРег(ФИОТекст), "СОТРУДНИК") ИЛИ СтрНачинаетсяС(ВРег(ФИОТекст), "ФАМИЛИЯ") Тогда Продолжить; КонецЕсли;
|
||||
|
||||
// Ищем лист сотрудника — ВСЕГДА, независимо от того, есть ли ФИО
|
||||
ЛистСотрудника = НайтиЛистСотрудника(КонтекстExcel.Книга, ЛистРасчет, Ном);
|
||||
Если ЛистСотрудника = Неопределено Тогда Продолжить; КонецЕсли;
|
||||
|
||||
// Читаем ФИО из листа сотрудника (приоритет) или из формулы
|
||||
ФИО = "";
|
||||
Если ЛистСотрудника <> Неопределено Тогда
|
||||
ФИО = ПрочитатьЯчейкуСтрока(ЛистСотрудника, 2, 3); // C2 листа сотрудника
|
||||
КонецЕсли;
|
||||
Если Не ЗначениеЗаполнено(ФИО) Тогда
|
||||
ФИО = ФИОТекст;
|
||||
КонецЕсли;
|
||||
ФИО = ПрочитатьЯчейкуСтрока(ЛистСотрудника, 2, 3);
|
||||
Если Не ЗначениеЗаполнено(ФИО) Тогда ФИО = ФИОТекст; КонецЕсли;
|
||||
Если Не ЗначениеЗаполнено(ФИО) Тогда Продолжить; КонецЕсли;
|
||||
|
||||
Счетчик = Счетчик + 1;
|
||||
Состояние("Загрузка: " + ФИО, 20 + 70 * Счетчик / 50);
|
||||
|
||||
// Основные расчётные данные — из листа РАСЧЕТ (все колонки 5-63)
|
||||
Строка = ПрочитатьРасчетныеДанныеИзРасчета(ЛистРасчет, Ном, ФИО);
|
||||
Строка.Вставить("ИдентификаторСотрудника", Счетчик);
|
||||
|
||||
// Обогащение данными карточки с листа сотрудника
|
||||
Если ЛистСотрудника <> Неопределено Тогда
|
||||
Карточка = ПрочитатьКарточкуСотрудника(ЛистСотрудника);
|
||||
// Обновляем ФИО если лист вернул более точное
|
||||
Если ЗначениеЗаполнено(Карточка.ФИО) Тогда
|
||||
Строка.Вставить("ФИО", Карточка.ФИО);
|
||||
КонецЕсли;
|
||||
Если ЗначениеЗаполнено(Карточка.ФИО) Тогда Строка.Вставить("ФИО", Карточка.ФИО); КонецЕсли;
|
||||
КонецЕсли;
|
||||
|
||||
МассивДанных.Добавить(Строка);
|
||||
|
||||
// Таблица сотрудников
|
||||
// Сотрудники
|
||||
Если ЛистСотрудника <> Неопределено Тогда
|
||||
ДанныеСотр = ПрочитатьКарточкуСотрудника(ЛистСотрудника);
|
||||
Иначе
|
||||
@@ -412,7 +395,7 @@
|
||||
ДанныеСотр.Вставить("Идентификатор", Счетчик);
|
||||
МассивСотрудников.Добавить(ДанныеСотр);
|
||||
|
||||
// НДФЛ — ВСЕГДА из листа сотрудника
|
||||
// НДФЛ
|
||||
Если ЛистСотрудника <> Неопределено Тогда
|
||||
ДанныеНДФЛ = ПрочитатьНДФЛСоЛиста(ЛистСотрудника, ФИО);
|
||||
Если ДанныеНДФЛ <> Неопределено Тогда
|
||||
@@ -421,7 +404,7 @@
|
||||
КонецЕсли;
|
||||
КонецЕсли;
|
||||
|
||||
// Страховые взносы — из РАСЧЕТ (cols 58-63)
|
||||
// Страховые взносы
|
||||
СтрВзносов = ПрочитатьВзносыИзРасчета(ЛистРасчет, Ном, ФИО);
|
||||
Если СтрВзносов <> Неопределено Тогда
|
||||
СтрВзносов.Вставить("ИдентификаторСотрудника", Счетчик);
|
||||
@@ -431,8 +414,7 @@
|
||||
|
||||
ЗакрытьExcel(КонтекстExcel, ВременныйФайл);
|
||||
ЗаполнитьТаблицыНаСервере(МассивДанных, МассивВзносов, МассивНДФЛ, МассивСотрудников);
|
||||
СтатусЗагрузки = "Готово! Загружено: " + МассивДанных.Количество() + " сотрудников, "
|
||||
+ МассивНДФЛ.Количество() + " записей НДФЛ";
|
||||
СтатусЗагрузки = "Готово! " + МассивДанных.Количество() + " сотр., " + МассивНДФЛ.Количество() + " записей НДФЛ";
|
||||
Сообщить(СтатусЗагрузки);
|
||||
ОбновитьОтображениеДанных();
|
||||
КонецПроцедуры
|
||||
|
||||
Reference in New Issue
Block a user