v3.0.0.20: fix СтрНайти, ИтогоУдержано/Выплачено, месяц/год UI

This commit is contained in:
Профи-Софт
2026-07-09 09:10:06 +00:00
parent c21328cac8
commit 6fa32d7e77
5 changed files with 5212 additions and 5204 deletions
+6 -5
View File
@@ -3,9 +3,9 @@
<ConfigVersions> <ConfigVersions>
<Metadata name="CommonPicture.Логотип" id="aa112233-4455-6677-8899-aabbccddeeff" configVersion="6f24d102553d8a92f749591fe9b03d4c92743c48"/> <Metadata name="CommonPicture.Логотип" id="aa112233-4455-6677-8899-aabbccddeeff" configVersion="6f24d102553d8a92f749591fe9b03d4c92743c48"/>
<Metadata name="CommonPicture.Логотип.Picture" id="aa112233-4455-6677-8899-aabbccddeeff.0" configVersion="ea37a29e5a8c705c4fbee54aca915b0475b94941"/> <Metadata name="CommonPicture.Логотип.Picture" id="aa112233-4455-6677-8899-aabbccddeeff.0" configVersion="ea37a29e5a8c705c4fbee54aca915b0475b94941"/>
<Metadata name="Configuration.ЗагрузкаДанныхИзExcel" id="a1b2c3d4-e5f6-7890-abcd-ef1234567890" configVersion="b24c0e73ffce270596ab6de7e1366c8481757a97"/> <Metadata name="Configuration.ЗагрузкаДанныхИзExcel" id="a1b2c3d4-e5f6-7890-abcd-ef1234567890" configVersion="1080f740f6a29d5919c3db3b920664f1aef0ff00"/>
<Metadata name="Configuration.ЗагрузкаДанныхИзExcel.Logo" id="b1c2d3e4-f5a6-7890-abcd-ef1234567890.1" configVersion="109ee3c69dbf183be1b179891821b3a3aa92c610"/> <Metadata name="Configuration.ЗагрузкаДанныхИзExcel.Logo" id="b1c2d3e4-f5a6-7890-abcd-ef1234567890.1" configVersion="109ee3c69dbf183be1b179891821b3a3aa92c610"/>
<Metadata name="DataProcessor.ЗагрузкаДанныхИзExcel" id="f1e2d3c4-b5a6-7890-abcd-ef1234567890" configVersion="171d829249f1ca31ae202e93944daf0b15ef04d3"> <Metadata name="DataProcessor.ЗагрузкаДанныхИзExcel" id="f1e2d3c4-b5a6-7890-abcd-ef1234567890" configVersion="9a9e4eefa0d5dc5e556384cb71b819ea811f91e4">
<Metadata name="DataProcessor.ЗагрузкаДанныхИзExcel.TabularSection.ДанныеНДФЛ.Attribute.СуммаВаловогоДоходаСНачалаГода" id="018266a1-4a61-4579-8f3f-db8e7968f829"/> <Metadata name="DataProcessor.ЗагрузкаДанныхИзExcel.TabularSection.ДанныеНДФЛ.Attribute.СуммаВаловогоДоходаСНачалаГода" id="018266a1-4a61-4579-8f3f-db8e7968f829"/>
<Metadata name="DataProcessor.ЗагрузкаДанныхИзExcel.TabularSection.ДанныеНДФЛ.Attribute.ОблагаемыйДоходЗаМесяц" id="03e05328-7d4e-4c65-bcf0-e06f2f87584e"/> <Metadata name="DataProcessor.ЗагрузкаДанныхИзExcel.TabularSection.ДанныеНДФЛ.Attribute.ОблагаемыйДоходЗаМесяц" id="03e05328-7d4e-4c65-bcf0-e06f2f87584e"/>
<Metadata name="DataProcessor.ЗагрузкаДанныхИзExcel.TabularSection.ДанныеРасчетаЗП.Attribute.Отпуск" id="03f3e152-1a35-4ee9-abf1-5069f70fa200"/> <Metadata name="DataProcessor.ЗагрузкаДанныхИзExcel.TabularSection.ДанныеРасчетаЗП.Attribute.Отпуск" id="03f3e152-1a35-4ee9-abf1-5069f70fa200"/>
@@ -108,13 +108,14 @@
<Metadata name="DataProcessor.ЗагрузкаДанныхИзExcel.TabularSection.ДанныеНДФЛ.Attribute.СуммаВаловогоДохода" id="f5ef73da-d182-4c6c-b3fb-61cb0aa2f4a2"/> <Metadata name="DataProcessor.ЗагрузкаДанныхИзExcel.TabularSection.ДанныеНДФЛ.Attribute.СуммаВаловогоДохода" id="f5ef73da-d182-4c6c-b3fb-61cb0aa2f4a2"/>
<Metadata name="DataProcessor.ЗагрузкаДанныхИзExcel.TabularSection.ДанныеРасчетаЗП.Attribute.РайонныйКоэффициент" id="f71ba835-d7cf-415e-a4da-6b0bea379753"/> <Metadata name="DataProcessor.ЗагрузкаДанныхИзExcel.TabularSection.ДанныеРасчетаЗП.Attribute.РайонныйКоэффициент" id="f71ba835-d7cf-415e-a4da-6b0bea379753"/>
<Metadata name="DataProcessor.ЗагрузкаДанныхИзExcel.TabularSection.ДанныеРасчетаЗП.Attribute.ВсегоНаРуки" id="f797071d-6e4e-4883-b10c-665c5c6b117d"/> <Metadata name="DataProcessor.ЗагрузкаДанныхИзExcel.TabularSection.ДанныеРасчетаЗП.Attribute.ВсегоНаРуки" id="f797071d-6e4e-4883-b10c-665c5c6b117d"/>
<Metadata name="DataProcessor.ЗагрузкаДанныхИзExcel.TabularSection.ДанныеРасчетаЗП.Attribute.ИтогоВыплачено" id="3dcf2ff6-0a08-466c-bf45-e09180cfd4ec"/>
<Metadata name="DataProcessor.ЗагрузкаДанныхИзExcel.TabularSection.ДанныеНДФЛ.Attribute.ВычетНаРаботникаЗаМесяц" id="fb3dd707-e1d6-4dd0-adb0-365953cc7b33"/> <Metadata name="DataProcessor.ЗагрузкаДанныхИзExcel.TabularSection.ДанныеНДФЛ.Attribute.ВычетНаРаботникаЗаМесяц" id="fb3dd707-e1d6-4dd0-adb0-365953cc7b33"/>
<Metadata name="DataProcessor.ЗагрузкаДанныхИзExcel.TabularSection.ДанныеСтраховыхВзносов.Attribute.НалоговаяБазаСВЗаГод" id="fe83daa5-24f0-403e-a493-d206d6c83ed7"/> <Metadata name="DataProcessor.ЗагрузкаДанныхИзExcel.TabularSection.ДанныеСтраховыхВзносов.Attribute.НалоговаяБазаСВЗаГод" id="fe83daa5-24f0-403e-a493-d206d6c83ed7"/>
</Metadata> </Metadata>
<Metadata name="DataProcessor.ЗагрузкаДанныхИзExcel.Form.Форма" id="e1f2d3c4-b5a6-7890-abcd-ef123456789d" configVersion="b21ce57e599484cf63928d9d55447cdf249a9495"/> <Metadata name="DataProcessor.ЗагрузкаДанныхИзExcel.Form.Форма" id="e1f2d3c4-b5a6-7890-abcd-ef123456789d" configVersion="b21ce57e599484cf63928d9d55447cdf249a9495"/>
<Metadata name="DataProcessor.ЗагрузкаДанныхИзExcel.Form.Форма.Form" id="e1f2d3c4-b5a6-7890-abcd-ef123456789d.0" configVersion="2a4728288c94bb3d05a42a8115241ea5221933a6"/> <Metadata name="DataProcessor.ЗагрузкаДанныхИзExcel.Form.Форма.Form" id="e1f2d3c4-b5a6-7890-abcd-ef123456789d.0" configVersion="56fda6516835946b773af3c1072ac8adbbde61b7"/>
<Metadata name="DataProcessor.ЗагрузкаДанныхИзExcel.ManagerModule" id="f1e2d3c4-b5a6-7890-abcd-ef1234567890.2" configVersion="c8140e43013608e07f4494ce2c9a99ea84bab853"/> <Metadata name="DataProcessor.ЗагрузкаДанныхИзExcel.ManagerModule" id="f1e2d3c4-b5a6-7890-abcd-ef1234567890.2" configVersion="bc2520b7c130bedea73dcfe5e442691af2ed078a"/>
<Metadata name="DataProcessor.ЗагрузкаДанныхИзExcel.ObjectModule" id="f1e2d3c4-b5a6-7890-abcd-ef1234567890.0" configVersion="bc38771ea40c113bf59a4bea1f569109af8bafb7"/> <Metadata name="DataProcessor.ЗагрузкаДанныхИзExcel.ObjectModule" id="f1e2d3c4-b5a6-7890-abcd-ef1234567890.0" configVersion="13d49b51279914c673d6f2cb3fbde0b0e60732f9"/>
<Metadata name="Language.Русский" id="fa05057b-734b-49ef-8c58-5cc468580f33" configVersion="d445a81521243ad274dc3237022bcfeb0b640f59"/> <Metadata name="Language.Русский" id="fa05057b-734b-49ef-8c58-5cc468580f33" configVersion="d445a81521243ad274dc3237022bcfeb0b640f59"/>
<Metadata name="Subsystem.Зарплата" id="55555555-5555-5555-5555-555555555555" configVersion="55c502e5fb642df4c059ed63fea339204c4a2334"/> <Metadata name="Subsystem.Зарплата" id="55555555-5555-5555-5555-555555555555" configVersion="55c502e5fb642df4c059ed63fea339204c4a2334"/>
</ConfigVersions> </ConfigVersions>
+1 -1
View File
@@ -56,7 +56,7 @@
<ScriptVariant>Russian</ScriptVariant> <ScriptVariant>Russian</ScriptVariant>
<DefaultRoles/> <DefaultRoles/>
<Vendor>ООО "Профи-Софт", код партнера 42575-13, г.Байконур.</Vendor> <Vendor>ООО "Профи-Софт", код партнера 42575-13, г.Байконур.</Vendor>
<Version>3.0.0.19</Version> <Version>3.0.0.20</Version>
<Caption/> <Caption/>
<ShortCaption/> <ShortCaption/>
<DefaultLanguage>Language.Русский</DefaultLanguage> <DefaultLanguage>Language.Русский</DefaultLanguage>
@@ -2421,6 +2421,7 @@
<ChoiceHistoryOnInput>Auto</ChoiceHistoryOnInput> <ChoiceHistoryOnInput>Auto</ChoiceHistoryOnInput>
</Properties> </Properties>
</Attribute> </Attribute>
<Attribute uuid="0ce65614-e10a-4246-9d95-dedbb50803d8"><Properties><Name>ИтогоВыплачено</Name><Synonym><v8:item><v8:lang>ru</v8:lang><v8:content>Итого выплачено</v8:content></v8:item></Synonym><Comment/><Type><v8:Type>Number</v8:Type></Type></Properties></Attribute>
</ChildObjects> </ChildObjects>
</TabularSection> </TabularSection>
<TabularSection uuid="44444444-4444-4444-4444-444444444444"> <TabularSection uuid="44444444-4444-4444-4444-444444444444">
@@ -473,6 +473,30 @@
<ContextMenu name="ТаблицаСотрудникиКонтекстноеМеню" id="801"/> <ContextMenu name="ТаблицаСотрудникиКонтекстноеМеню" id="801"/>
<AutoCommandBar name="ТаблицаСотрудникиКоманднаяПанель" id="802"/> <AutoCommandBar name="ТаблицаСотрудникиКоманднаяПанель" id="802"/>
<ExtendedTooltip name="ТаблицаСотрудникиРасширеннаяПодсказка" id="803"/> <ExtendedTooltip name="ТаблицаСотрудникиРасширеннаяПодсказка" id="803"/>
<SearchStringAddition name="ТаблицаСотрудникиСтрокаПоиска" id="981">
<AdditionSource>
<Item>ТаблицаСотрудники</Item>
<Type>SearchStringRepresentation</Type>
</AdditionSource>
<ContextMenu name="ТаблицаСотрудникиСтрокаПоискаКонтекстноеМеню" id="982"/>
<ExtendedTooltip name="ТаблицаСотрудникиСтрокаПоискаРасширеннаяПодсказка" id="983"/>
</SearchStringAddition>
<ViewStatusAddition name="ТаблицаСотрудникиСостояниеПросмотра" id="984">
<AdditionSource>
<Item>ТаблицаСотрудники</Item>
<Type>ViewStatusRepresentation</Type>
</AdditionSource>
<ContextMenu name="ТаблицаСотрудникиСостояниеПросмотраКонтекстноеМеню" id="985"/>
<ExtendedTooltip name="ТаблицаСотрудникиСостояниеПросмотраРасширеннаяПодсказка" id="986"/>
</ViewStatusAddition>
<SearchControlAddition name="ТаблицаСотрудникиУправлениеПоиском" id="987">
<AdditionSource>
<Item>ТаблицаСотрудники</Item>
<Type>SearchControl</Type>
</AdditionSource>
<ContextMenu name="ТаблицаСотрудникиУправлениеПоискомКонтекстноеМеню" id="988"/>
<ExtendedTooltip name="ТаблицаСотрудникиУправлениеПоискомРасширеннаяПодсказка" id="989"/>
</SearchControlAddition>
<ChildItems> <ChildItems>
<LabelField name="ТаблицаСотрудникиНомерСтроки" id="900"> <LabelField name="ТаблицаСотрудникиНомерСтроки" id="900">
<DataPath>Объект.Сотрудники.LineNumber</DataPath> <DataPath>Объект.Сотрудники.LineNumber</DataPath>
@@ -2,6 +2,8 @@
&НаСервере &НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
Элементы.ГруппаМесяцГод.Видимость = Ложь;
Элементы.СтраницыДанные.ТекущаяСтраница = Элементы.СтраницаСотрудники;
КонецПроцедуры КонецПроцедуры
#КонецОбласти #КонецОбласти
@@ -66,9 +68,7 @@
КонтекстExcel.Excel.Quit(); КонтекстExcel.Excel.Quit();
Исключение Исключение
КонецПопытки; КонецПопытки;
Если ЗначениеЗаполнено(ВременныйФайл) Тогда Если ЗначениеЗаполнено(ВременныйФайл) Тогда УдалитьФайлы(ВременныйФайл); КонецЕсли;
УдалитьФайлы(ВременныйФайл);
КонецЕсли;
КонецПроцедуры КонецПроцедуры
&НаКлиенте &НаКлиенте
@@ -78,7 +78,7 @@
Если Значение = Неопределено ИЛИ Значение = "" Тогда Возврат 0; КонецЕсли; Если Значение = Неопределено ИЛИ Значение = "" Тогда Возврат 0; КонецЕсли;
Возврат Число(Значение); Возврат Число(Значение);
Исключение Исключение
Сообщить("Ошибка чтения числа: " + КонтекстОшибки + " | строка " + Строка + " колонка " + Колонка + " | " + ОписаниеОшибки()); Сообщить("Ошибка чтения числа: " + КонтекстОшибки + " | строка " + Строка + " колонка " + Колонка);
Возврат 0; Возврат 0;
КонецПопытки; КонецПопытки;
КонецФункции КонецФункции
@@ -94,15 +94,15 @@
КонецПопытки; КонецПопытки;
КонецФункции КонецФункции
// Извлекает имя листа из формулы вида ='ИмяЛиста'!C2
&НаКлиенте &НаКлиенте
Функция ИзвлечьИмяЛистаИзФормулы(Формула) Функция ИзвлечьИмяЛистаИзФормулы(Формула)
Если Формула = Неопределено Тогда Возврат ""; КонецЕсли; Если Формула = Неопределено Тогда Возврат ""; КонецЕсли;
ТекстФормулы = СокрЛП("" + Формула); Текст = СокрЛП("" + Формула);
Если Не СтрНачинаетсяС(ТекстФормулы, "='") Тогда Возврат ""; КонецЕсли; Если Не СтрНачинаетсяС(Текст, "='") Тогда Возврат ""; КонецЕсли;
ПозицияНачала = 3; Поз = СтрНайти(Текст, "'!");
ПозицияКонца = СтрНайти(ТекстФормулы, "'!", , , ПозицияНачала); Если Поз = 0 Тогда Возврат ""; КонецЕсли;
Если ПозицияКонца = 0 Тогда Возврат ""; КонецЕсли; Возврат Сред(Текст, 3, Поз - 3);
Возврат Сред(ТекстФормулы, ПозицияНачала, ПозицияКонца - ПозицияНачала);
КонецФункции КонецФункции
&НаКлиенте &НаКлиенте
@@ -113,17 +113,27 @@
Возврат Неопределено; Возврат Неопределено;
КонецФункции КонецФункции
&НаКлиенте
Функция НомерМесяцаВТекст(НомерМесяца)
Массив = Новый Массив;
Массив.Добавить("Январь"); Массив.Добавить("Февраль");
Массив.Добавить("Март"); Массив.Добавить("Апрель");
Массив.Добавить("Май"); Массив.Добавить("Июнь");
Массив.Добавить("Июль"); Массив.Добавить("Август");
Массив.Добавить("Сентябрь"); Массив.Добавить("Октябрь");
Массив.Добавить("Ноябрь"); Массив.Добавить("Декабрь");
Если НомерМесяца >= 1 И НомерМесяца <= 12 Тогда
Возврат Массив[НомерМесяца - 1];
КонецЕсли;
Возврат "";
КонецФункции
#КонецОбласти #КонецОбласти
#Область ЧтениеДанныхСотрудника_Домен #Область ЧтениеДанныхСотрудника_Домен
// ============================================================================
// Чтение данных из листа сотрудника
// ============================================================================
&НаКлиенте &НаКлиенте
Функция НайтиЛистСотрудника(Книга, ЛистРасчет, НомерСтроки) Функция НайтиЛистСотрудника(Книга, ЛистРасчет, НомерСтроки)
// Способ 1: из формулы в ячейке (xlsm)
Формула = ЛистРасчет.Cells(НомерСтроки, 1).Formula; Формула = ЛистРасчет.Cells(НомерСтроки, 1).Formula;
Если ЗначениеЗаполнено(Формула) Тогда Если ЗначениеЗаполнено(Формула) Тогда
ИмяЛиста = ИзвлечьИмяЛистаИзФормулы(Формула); ИмяЛиста = ИзвлечьИмяЛистаИзФормулы(Формула);
@@ -131,7 +141,6 @@
Возврат НайтиЛист(Книга, ИмяЛиста); Возврат НайтиЛист(Книга, ИмяЛиста);
КонецЕсли; КонецЕсли;
КонецЕсли; КонецЕсли;
// Способ 2: ФИО как текст в ячейке — ищем лист по имени (xls)
ФИО = ПрочитатьЯчейкуСтрока(ЛистРасчет, НомерСтроки, 1); ФИО = ПрочитатьЯчейкуСтрока(ЛистРасчет, НомерСтроки, 1);
Если ЗначениеЗаполнено(ФИО) Тогда Если ЗначениеЗаполнено(ФИО) Тогда
Возврат НайтиЛист(Книга, ФИО); Возврат НайтиЛист(Книга, ФИО);
@@ -139,8 +148,6 @@
Возврат Неопределено; Возврат Неопределено;
КонецФункции КонецФункции
// Определяет строку данных для выбранного месяца на листе сотрудника.
// Строка = 35 + МесяцЗагрузки (36 = Январь, 37 = Февраль, ...)
&НаКлиенте &НаКлиенте
Функция СтрокаМесяцаНаЛистеСотрудника() Функция СтрокаМесяцаНаЛистеСотрудника()
Смещение = Объект.МесяцЗагрузки; Смещение = Объект.МесяцЗагрузки;
@@ -148,136 +155,125 @@
Возврат 35 + Смещение; Возврат 35 + Смещение;
КонецФункции КонецФункции
// Читает ФИО и данные карточки из листа сотрудника (строки 1-5).
&НаКлиенте &НаКлиенте
Функция ПрочитатьКарточкуСотрудника(ЛистСотрудника) Функция ПрочитатьКарточкуСотрудника(ЛистСотрудника)
Данные = Новый Структура; Данные = Новый Структура;
Данные.Вставить("ФИО", ПрочитатьЯчейкуСтрока(ЛистСотрудника, 2, 3)); Данные.Вставить("ФИО", ПрочитатьЯчейкуСтрока(ЛистСотрудника, 2, 3));
Данные.Вставить("Должность", ПрочитатьЯчейкуСтрока(ЛистСотрудника, 3, 3));
Данные.Вставить("СчетБК", ПрочитатьЯчейкуСтрока(ЛистСотрудника, 4, 4));
Данные.Вставить("ВидЗанятости", ПрочитатьЯчейкуСтрока(ЛистСотрудника, 6, 1));
Данные.Вставить("ИНН", ПрочитатьЯчейкуСтрока(ЛистСотрудника, 1, 10)); Данные.Вставить("ИНН", ПрочитатьЯчейкуСтрока(ЛистСотрудника, 1, 10));
Данные.Вставить("СНИЛС", ПрочитатьЯчейкуСтрока(ЛистСотрудника, 2, 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)); С.Вставить("Должность", ПрочитатьЯчейкуСтрока(ЛистРасчет, Ном, 2));
Строка.Вставить("СчетБК", ПрочитатьЯчейкуСтрока(ЛистРасчет, Ном, 3)); С.Вставить("СчетБК", ПрочитатьЯчейкуСтрока(ЛистРасчет, Ном, 3));
Строка.Вставить("ВидЗанятости", ПрочитатьЯчейкуСтрока(ЛистРасчет, Ном, 4)); С.Вставить("ВидЗанятости", ПрочитатьЯчейкуСтрока(ЛистРасчет, Ном, 4));
// col 5-8: Оклад и базовые С.Вставить("Оклад", ПрочитатьЯчейкуЧисло(ЛистРасчет, Ном, 8, ФИО));
Строка.Вставить("Оклад", ПрочитатьЯчейкуЧисло(ЛистРасчет, Ном, 8, ФИО + " Оклад")); С.Вставить("КоличествоСтавок", ПрочитатьЯчейкуЧисло(ЛистРасчет, Ном, 7, ФИО));
Строка.Вставить("КоличествоСтавок", ПрочитатьЯчейкуЧисло(ЛистРасчет, Ном, 7, ФИО + " Ставки")); С.Вставить("ОтработаноДней", ПрочитатьЯчейкуЧисло(ЛистРасчет, Ном, 6, ФИО));
Строка.Вставить("ОтработаноДней", ПрочитатьЯчейкуЧисло(ЛистРасчет, Ном, 6, ФИО + " Отработано")); С.Вставить("ЧасыДежурства", ПрочитатьЯчейкуЧисло(ЛистРасчет, Ном, 9, ФИО));
// col 9-38: Расчётные поля С.Вставить("ЧасыНочные", ПрочитатьЯчейкуЧисло(ЛистРасчет, Ном, 10, ФИО));
Строка.Вставить("ЧасыДежурства", ПрочитатьЯчейкуЧисло(ЛистРасчет, Ном, 9, ФИО)); С.Вставить("ЧасыПраздничные", ПрочитатьЯчейкуЧисло(ЛистРасчет, Ном, 11, ФИО));
Строка.Вставить("ЧасыНочные", ПрочитатьЯчейкуЧисло(ЛистРасчет, Ном, 10, ФИО)); С.Вставить("РабочиеЧасыПоТабелю", ПрочитатьЯчейкуЧисло(ЛистРасчет, Ном, 12, ФИО));
Строка.Вставить("ЧасыПраздничные", ПрочитатьЯчейкуЧисло(ЛистРасчет, Ном, 11, ФИО)); С.Вставить("ИзРасчетаМесячногоОкладаДни", ПрочитатьЯчейкуЧисло(ЛистРасчет, Ном, 13, ФИО));
Строка.Вставить("РабочиеЧасыПоТабелю", ПрочитатьЯчейкуЧисло(ЛистРасчет, Ном, 12, ФИО)); С.Вставить("ДоплатаСовместительство", ПрочитатьЯчейкуЧисло(ЛистРасчет, Ном, 14, ФИО));
Строка.Вставить("ИзРасчетаМесячногоОкладаДни", ПрочитатьЯчейкуЧисло(ЛистРасчет, Ном, 13, ФИО)); С.Вставить("ДоплатаСовмещениеПроцент", ПрочитатьЯчейкуЧисло(ЛистРасчет, Ном, 15, ФИО));
Строка.Вставить("ДоплатаСовместительство", ПрочитатьЯчейкуЧисло(ЛистРасчет, Ном, 14, ФИО)); С.Вставить("ДоплатаИнтенсивность", ПрочитатьЯчейкуЧисло(ЛистРасчет, Ном, 16, ФИО));
Строка.Вставить("ДоплатаСовмещениеПроцент", ПрочитатьЯчейкуЧисло(ЛистРасчет, Ном, 15, ФИО)); С.Вставить("ИзРасчетаМесячногоОкладаЧасы", ПрочитатьЯчейкуЧисло(ЛистРасчет, Ном, 17, ФИО));
Строка.Вставить("ДоплатаИнтенсивность", ПрочитатьЯчейкуЧисло(ЛистРасчет, Ном, 16, ФИО)); С.Вставить("ДоплатаНочные", ПрочитатьЯчейкуЧисло(ЛистРасчет, Ном, 18, ФИО));
Строка.Вставить("ИзРасчетаМесячногоОкладаЧасы", ПрочитатьЯчейкуЧисло(ЛистРасчет, Ном, 17, ФИО)); С.Вставить("ДоплатаПраздничные", ПрочитатьЯчейкуЧисло(ЛистРасчет, Ном, 19, ФИО));
Строка.Вставить("ДоплатаНочные", ПрочитатьЯчейкуЧисло(ЛистРасчет, Ном, 18, ФИО)); С.Вставить("ЗаСтаж", ПрочитатьЯчейкуЧисло(ЛистРасчет, Ном, 20, ФИО));
Строка.Вставить("ДоплатаПраздничные", ПрочитатьЯчейкуЧисло(ЛистРасчет, Ном, 19, ФИО)); С.Вставить("НадбавкаЗаКатегорию", ПрочитатьЯчейкуЧисло(ЛистРасчет, Ном, 21, ФИО));
Строка.Вставить("ЗаСтаж", ПрочитатьЯчейкуЧисло(ЛистРасчет, Ном, 20, ФИО)); С.Вставить("НадбавкаЗаВредность", ПрочитатьЯчейкуЧисло(ЛистРасчет, Ном, 22, ФИО));
Строка.Вставить("НадбавкаЗаКатегорию", ПрочитатьЯчейкуЧисло(ЛистРасчет, Ном, 21, ФИО)); С.Вставить("ПовышающийКоэффициент", ПрочитатьЯчейкуЧисло(ЛистРасчет, Ном, 23, ФИО));
Строка.Вставить("НадбавкаЗаВредность", ПрочитатьЯчейкуЧисло(ЛистРасчет, Ном, 22, ФИО)); С.Вставить("СтимулирующиеВыплаты", ПрочитатьЯчейкуЧисло(ЛистРасчет, Ном, 24, ФИО));
Строка.Вставить("ПовышающийКоэффициент", ПрочитатьЯчейкуЧисло(ЛистРасчет, Ном, 23, ФИО)); С.Вставить("СтимулирующаяНадбавка", ПрочитатьЯчейкуЧисло(ЛистРасчет, Ном, 25, ФИО));
Строка.Вставить("СтимулирующиеВыплаты", ПрочитатьЯчейкуЧисло(ЛистРасчет, Ном, 24, ФИО)); С.Вставить("РайонныйКоэффициент", ПрочитатьЯчейкуЧисло(ЛистРасчет, Ном, 26, ФИО));
Строка.Вставить("СтимулирующаяНадбавка", ПрочитатьЯчейкуЧисло(ЛистРасчет, Ном, 25, ФИО)); С.Вставить("ВыплатыПоУказу597", ПрочитатьЯчейкуЧисло(ЛистРасчет, Ном, 27, ФИО));
Строка.Вставить("РайонныйКоэффициент", ПрочитатьЯчейкуЧисло(ЛистРасчет, Ном, 26, ФИО)); С.Вставить("ПремияРазовая", ПрочитатьЯчейкуЧисло(ЛистРасчет, Ном, 28, ФИО));
Строка.Вставить("ВыплатыПоУказу597", ПрочитатьЯчейкуЧисло(ЛистРасчет, Ном, 27, ФИО)); С.Вставить("БольничныйЛистЗаСчетПредприятия", ПрочитатьЯчейкуЧисло(ЛистРасчет, Ном, 29, ФИО));
Строка.Вставить("ПремияРазовая", ПрочитатьЯчейкуЧисло(ЛистРасчет, Ном, 28, ФИО)); С.Вставить("ДоплатаПрофактиву", ПрочитатьЯчейкуЧисло(ЛистРасчет, Ном, 30, ФИО));
Строка.Вставить("БольничныйЛистЗаСчетПредприятия", ПрочитатьЯчейкуЧисло(ЛистРасчет, Ном, 29, ФИО)); С.Вставить("ПусковыеОбсервация", ПрочитатьЯчейкуЧисло(ЛистРасчет, Ном, 31, ФИО));
Строка.Вставить("ДоплатаПрофактиву", ПрочитатьЯчейкуЧисло(ЛистРасчет, Ном, 30, ФИО)); С.Вставить("Отпуск", ПрочитатьЯчейкуЧисло(ЛистРасчет, Ном, 32, ФИО));
Строка.Вставить("ПусковыеОбсервация", ПрочитатьЯчейкуЧисло(ЛистРасчет, Ном, 31, ФИО)); С.Вставить("КомпенсацияЗаОтпуск", ПрочитатьЯчейкуЧисло(ЛистРасчет, Ном, 33, ФИО));
Строка.Вставить("Отпуск", ПрочитатьЯчейкуЧисло(ЛистРасчет, Ном, 32, ФИО)); С.Вставить("ПрочиеКомандировочныйУчебныйОтпуск", ПрочитатьЯчейкуЧисло(ЛистРасчет, Ном, 34, ФИО));
Строка.Вставить("КомпенсацияЗаОтпуск", ПрочитатьЯчейкуЧисло(ЛистРасчет, Ном, 33, ФИО)); С.Вставить("ВыходноеПособие", ПрочитатьЯчейкуЧисло(ЛистРасчет, Ном, 35, ФИО));
Строка.Вставить("ПрочиеКомандировочныйУчебныйОтпуск", ПрочитатьЯчейкуЧисло(ЛистРасчет, Ном, 34, ФИО)); С.Вставить("ПоУходуЗаРебенкомИнвалидом", ПрочитатьЯчейкуЧисло(ЛистРасчет, Ном, 36, ФИО));
Строка.Вставить("ВыходноеПособие", ПрочитатьЯчейкуЧисло(ЛистРасчет, Ном, 35, ФИО)); С.Вставить("ДоплатаДоМРОТ", ПрочитатьЯчейкуЧисло(ЛистРасчет, Ном, 37, ФИО));
Строка.Вставить("ПоУходуЗаРебенкомИнвалидом", ПрочитатьЯчейкуЧисло(ЛистРасчет, Ном, 36, ФИО)); С.Вставить("Родовые", ПрочитатьЯчейкуЧисло(ЛистРасчет, Ном, 38, ФИО));
Строка.Вставить("ДоплатаДоМРОТ", ПрочитатьЯчейкуЧисло(ЛистРасчет, Ном, 37, ФИО)); // Итоги
Строка.Вставить("Родовые", ПрочитатьЯчейкуЧисло(ЛистРасчет, Ном, 38, ФИО)); С.Вставить("ИтогоНачислено", ПрочитатьЯчейкуЧисло(ЛистРасчет, Ном, 39, ФИО));
// col 39-55: Итоги и удержания С.Вставить("НДФЛ", ПрочитатьЯчейкуЧисло(ЛистРасчет, Ном, 40, ФИО));
Строка.Вставить("ИтогоНачислено", ПрочитатьЯчейкуЧисло(ЛистРасчет, Ном, 39, ФИО)); С.Вставить("ПрофВзнос", ПрочитатьЯчейкуЧисло(ЛистРасчет, Ном, 41, ФИО));
Строка.Вставить("НДФЛ", ПрочитатьЯчейкуЧисло(ЛистРасчет, Ном, 40, ФИО)); С.Вставить("ИсполнительныеДокументы", ПрочитатьЯчейкуЧисло(ЛистРасчет, Ном, 42, ФИО));
Строка.Вставить("ПрофВзнос", ПрочитатьЯчейкуЧисло(ЛистРасчет, Ном, 41, ФИО)); С.Вставить("Аванс", ПрочитатьЯчейкуЧисло(ЛистРасчет, Ном, 43, ФИО));
Строка.Вставить("ИтогоУдержано", ПрочитатьЯчейкуЧисло(ЛистРасчет, Ном, 53, ФИО)); С.Вставить("ПФСофинансирование", ПрочитатьЯчейкуЧисло(ЛистРасчет, Ном, 44, ФИО));
Строка.Вставить("ВсегоНаРуки", ПрочитатьЯчейкуЧисло(ЛистРасчет, Ном, 55, ФИО)); С.Вставить("ПремияУдержание", ПрочитатьЯчейкуЧисло(ЛистРасчет, Ном, 45, ФИО));
Возврат Строка; С.Вставить("Касса1", ПрочитатьЯчейкуЧисло(ЛистРасчет, Ном, 46, ФИО));
С.Вставить("Касса2", ПрочитатьЯчейкуЧисло(ЛистРасчет, Ном, 47, ФИО));
С.Вставить("Касса3", ПрочитатьЯчейкуЧисло(ЛистРасчет, Ном, 48, ФИО));
С.Вставить("ПособиеДо3ЛетУдержание", ПрочитатьЯчейкуЧисло(ЛистРасчет, Ном, 49, ФИО));
С.Вставить("БезналичныеПеречисления", ПрочитатьЯчейкуЧисло(ЛистРасчет, Ном, 50, ФИО));
С.Вставить("ВозвратВКассу", ПрочитатьЯчейкуЧисло(ЛистРасчет, Ном, 51, ФИО));
С.Вставить("Депонент", ПрочитатьЯчейкуЧисло(ЛистРасчет, Ном, 52, ФИО));
С.Вставить("ОстатокНаНачало", ПрочитатьЯчейкуЧисло(ЛистРасчет, Ном, 54, ФИО));
С.Вставить("ВсегоНаРуки", ПрочитатьЯчейкуЧисло(ЛистРасчет, Ном, 55, ФИО));
// Расчёт итогов
С.Вставить("ИтогоУдержано",
С.НДФЛ + С.ПрофВзнос + С.ИсполнительныеДокументы + С.ПФСофинансирование
+ С.ПремияУдержание + С.ПособиеДо3ЛетУдержание + С.Депонент);
С.Вставить("ИтогоВыплачено",
С.Аванс + С.Касса1 + С.Касса2 + С.Касса3
+ С.БезналичныеПеречисления + С.ВозвратВКассу);
Возврат С;
КонецФункции КонецФункции
// Читает НДФЛ из блока внизу листа сотрудника (строки 31-48).
&НаКлиенте &НаКлиенте
Функция ПрочитатьНДФЛСоЛиста(ЛистСотрудника, ФИО) Функция ПрочитатьНДФЛСоЛиста(ЛистСотрудника, ФИО)
Если ЛистСотрудника = Неопределено Тогда Возврат Неопределено; КонецЕсли; Если ЛистСотрудника = Неопределено Тогда Возврат Неопределено; КонецЕсли;
// Проверяем наличие блока НДФЛ
ЕстьБлок = Ложь; ЕстьБлок = Ложь;
Для ПроверяемаяСтрока = 30 По 32 Цикл Для Стр = 30 По 32 Цикл
Текст = НРег(ПрочитатьЯчейкуСтрока(ЛистСотрудника, ПроверяемаяСтрока, 1)); Текст = НРег(ПрочитатьЯчейкуСтрока(ЛистСотрудника, Стр, 1));
Если СтрНайти(Текст, "ндфл") > 0 ИЛИ СтрНайти(Текст, "взнос") > 0 Тогда Если СтрНайти(Текст, "ндфл") > 0 ИЛИ СтрНайти(Текст, "взнос") > 0 Тогда
ЕстьБлок = Истина; Прервать; ЕстьБлок = Истина; Прервать;
КонецЕсли; КонецЕсли;
КонецЦикла; КонецЦикла;
Если Не ЕстьБлок Тогда Если Не ЕстьБлок Тогда
ТекстЯнв = НРег(ПрочитатьЯчейкуСтрока(ЛистСотрудника, 36, 1)); Если СтрНайти(НРег(ПрочитатьЯчейкуСтрока(ЛистСотрудника, 36, 1)), "январь") = 0 Тогда
Если СтрНайти(ТекстЯнв, "январь") = 0 Тогда Возврат Неопределено; КонецЕсли; Возврат Неопределено;
КонецЕсли;
КонецЕсли; КонецЕсли;
СтрокаДанных = СтрокаМесяцаНаЛистеСотрудника(); СД = СтрокаМесяцаНаЛистеСотрудника();
НДФЛ = Новый Структура; НДФЛ = Новый Структура;
НДФЛ.Вставить("ФИО", ФИО); НДФЛ.Вставить("ФИО", ФИО);
НДФЛ.Вставить("МесяцРасчета", ПрочитатьЯчейкуСтрока(ЛистСотрудника, СтрокаДанных, 1)); НДФЛ.Вставить("МесяцРасчета", ПрочитатьЯчейкуСтрока(ЛистСотрудника, СД, 1));
НДФЛ.Вставить("СуммаВаловогоДохода", ПрочитатьЯчейкуЧисло(ЛистСотрудника, СтрокаДанных, 4, ФИО + " вал. доход")); НДФЛ.Вставить("СуммаВаловогоДохода", ПрочитатьЯчейкуЧисло(ЛистСотрудника, СД, 4, ФИО));
НДФЛ.Вставить("СуммаВаловогоДоходаСНачалаГода", ПрочитатьЯчейкуЧисло(ЛистСотрудника, СтрокаДанных, 6, ФИО + " вал. доход с н.г.")); НДФЛ.Вставить("СуммаВаловогоДоходаСНачалаГода", ПрочитатьЯчейкуЧисло(ЛистСотрудника, СД, 6, ФИО));
НДФЛ.Вставить("СкидкаДляНДФЛЗаМесяц", ПрочитатьЯчейкуЧисло(ЛистСотрудника, СтрокаДанных, 8, ФИО + " скидка НДФЛ мес")); НДФЛ.Вставить("СкидкаДляНДФЛЗаМесяц", ПрочитатьЯчейкуЧисло(ЛистСотрудника, СД, 8, ФИО));
НДФЛ.Вставить("СкидкаДляНДФЛЗаГод", ПрочитатьЯчейкуЧисло(ЛистСотрудника, СтрокаДанных, 9, ФИО + " скидка НДФЛ год")); НДФЛ.Вставить("СкидкаДляНДФЛЗаГод", ПрочитатьЯчейкуЧисло(ЛистСотрудника, СД, 9, ФИО));
НДФЛ.Вставить("СкидкаДляСВЗаМесяц", ПрочитатьЯчейкуЧисло(ЛистСотрудника, СтрокаДанных, 10, ФИО + " скидка СВ мес")); НДФЛ.Вставить("СкидкаДляСВЗаМесяц", ПрочитатьЯчейкуЧисло(ЛистСотрудника, СД, 10, ФИО));
НДФЛ.Вставить("ВычетНаРаботникаЗаМесяц", ПрочитатьЯчейкуЧисло(ЛистСотрудника, СтрокаДанных, 12, ФИО + " вычет работник")); НДФЛ.Вставить("ВычетНаРаботникаЗаМесяц", ПрочитатьЯчейкуЧисло(ЛистСотрудника, СД, 12, ФИО));
НДФЛ.Вставить("ВычетНаРаботникаЗаГод", 0); НДФЛ.Вставить("ВычетНаРаботникаЗаГод", 0);
НДФЛ.Вставить("ВычетНаИждивенцевЗаМесяц", ПрочитатьЯчейкуЧисло(ЛистСотрудника, СтрокаДанных, 13, ФИО + " вычет иждивенцы")); НДФЛ.Вставить("ВычетНаИждивенцевЗаМесяц", ПрочитатьЯчейкуЧисло(ЛистСотрудника, СД, 13, ФИО));
НДФЛ.Вставить("ВсегоВычетовЗаМесяц", ПрочитатьЯчейкуЧисло(ЛистСотрудника, СтрокаДанных, 14, ФИО + " всего вычетов")); НДФЛ.Вставить("ВсегоВычетовЗаМесяц", ПрочитатьЯчейкуЧисло(ЛистСотрудника, СД, 14, ФИО));
НДФЛ.Вставить("ОблагаемыйДоходЗаМесяц", 0); НДФЛ.Вставить("ОблагаемыйДоходЗаМесяц", 0);
НДФЛ.Вставить("ОблагаемыйДоходЗаГод", ПрочитатьЯчейкуЧисло(ЛистСотрудника, СтрокаДанных, 15, ФИО + " обл. доход год")); НДФЛ.Вставить("ОблагаемыйДоходЗаГод", ПрочитатьЯчейкуЧисло(ЛистСотрудника, СД, 15, ФИО));
НДФЛ.Вставить("НачисленныйНДФЛЗаГод", ПрочитатьЯчейкуЧисло(ЛистСотрудника, СтрокаДанных, 16, ФИО + " НДФЛ начисл. год")); НДФЛ.Вставить("НачисленныйНДФЛЗаГод", ПрочитатьЯчейкуЧисло(ЛистСотрудника, СД, 16, ФИО));
НДФЛ.Вставить("ИтогоНДФЛЗаМесяц", ПрочитатьЯчейкуЧисло(ЛистСотрудника, СтрокаДанных, 18, ФИО + " итого НДФЛ")); НДФЛ.Вставить("ИтогоНДФЛЗаМесяц", ПрочитатьЯчейкуЧисло(ЛистСотрудника, СД, 18, ФИО));
НДФЛ.Вставить("НалоговаяБазаПоСВЗаМесяц", ПрочитатьЯчейкуЧисло(ЛистСотрудника, СтрокаДанных, 23, ФИО + " база СВ мес")); НДФЛ.Вставить("НалоговаяБазаПоСВЗаМесяц", ПрочитатьЯчейкуЧисло(ЛистСотрудника, СД, 23, ФИО));
НДФЛ.Вставить("ИтогоФСС", ПрочитатьЯчейкуЧисло(ЛистСотрудника, СтрокаДанных, 37, ФИО + " итого СВ")); НДФЛ.Вставить("ИтогоФСС", ПрочитатьЯчейкуЧисло(ЛистСотрудника, СД, 37, ФИО));
Возврат НДФЛ; Возврат НДФЛ;
КонецФункции КонецФункции
// Читает страховые взносы из листа "Расчет" (cols 58-63).
&НаКлиенте &НаКлиенте
Функция ПрочитатьВзносыИзРасчета(ЛистРасчет, Ном, ФИО) Функция ПрочитатьВзносыИзРасчета(ЛистРасчет, Ном, ФИО)
СВ = ПрочитатьЯчейкуЧисло(ЛистРасчет, Ном, 63, ФИО + " СВ итого"); СВ = ПрочитатьЯчейкуЧисло(ЛистРасчет, Ном, 63, ФИО);
Если СВ <= 0 Тогда Возврат Неопределено; КонецЕсли; Если СВ <= 0 Тогда Возврат Неопределено; КонецЕсли;
Стр = Новый Структура; Стр = Новый Структура;
Стр.Вставить("ФИО", ФИО); Стр.Вставить("ФИО", ФИО);
@@ -296,11 +292,9 @@
&НаКлиенте &НаКлиенте
Процедура ПрочитатьExcelНаКлиенте() Процедура ПрочитатьExcelНаКлиенте()
СтатусЗагрузки = "Копирование файла...";
Состояние("Копирование файла...", 5); Состояние("Копирование файла...", 5);
ВременныйФайл = КаталогВременныхФайлов() + "temp_data.xls"; ВременныйФайл = КаталогВременныхФайлов() + "temp_data.xls";
КопироватьФайл(Объект.ПутьКФайлу, ВременныйФайл); КопироватьФайл(Объект.ПутьКФайлу, ВременныйФайл);
СтатусЗагрузки = "Открытие Excel...";
КонтекстExcel = ОткрытьФайлExcel(ВременныйФайл); КонтекстExcel = ОткрытьФайлExcel(ВременныйФайл);
Если КонтекстExcel = Неопределено Тогда УдалитьФайлы(ВременныйФайл); Возврат; КонецЕсли; Если КонтекстExcel = Неопределено Тогда УдалитьФайлы(ВременныйФайл); Возврат; КонецЕсли;
@@ -311,37 +305,44 @@
Возврат; Возврат;
КонецЕсли; КонецЕсли;
// Месяц загрузки // Месяц
МесяцЗначение = ЛистРасчет.Cells(4, 1).Value; МесяцЗначение = ЛистРасчет.Cells(4, 1).Value;
Если ЗначениеЗаполнено(МесяцЗначение) Тогда Если ЗначениеЗаполнено(МесяцЗначение) Тогда
Попытка Объект.МесяцЗагрузки = Число(МесяцЗначение); Исключение КонецПопытки; Попытка Объект.МесяцЗагрузки = Число(МесяцЗначение); Исключение КонецПопытки;
КонецЕсли; КонецЕсли;
// Год — определяем из файла (строка 3, колонка 1 в РАСЧЕТ)
ГодЗначение = ЛистРасчет.Cells(3, 1).Value;
Если ЗначениеЗаполнено(ГодЗначение) Тогда
Попытка ГодЗагрузки = Число(ГодЗначение); Исключение
ГодЗагрузки = Год(ТекущаяДата());
КонецПопытки;
Иначе
ГодЗагрузки = Год(ТекущаяДата());
КонецЕсли;
// Месяц текстом
МесяцТекст = НомерМесяцаВТекст(Объект.МесяцЗагрузки) + " " + ГодЗагрузки;
Элементы.ГруппаМесяцГод.Видимость = Истина;
// Определяем строку начала данных: первая строка с формулой-ссылкой вида ='ИмяЛиста'!... // Строка начала данных
НачальнаяСтрока = 0; НачальнаяСтрока = 0;
Для Ном = 17 По 30 Цикл Для Ном = 17 По 30 Цикл
Формула = ЛистРасчет.Cells(Ном, 1).Formula; Формула = ЛистРасчет.Cells(Ном, 1).Formula;
Если ЗначениеЗаполнено(Формула) И СтрНайти("" + Формула, "='") > 0 Тогда Если ЗначениеЗаполнено(Формула) И СтрНайти("" + Формула, "='") > 0 Тогда
НачальнаяСтрока = Ном; НачальнаяСтрока = Ном; Прервать;
Прервать;
КонецЕсли; КонецЕсли;
КонецЦикла; КонецЦикла;
Если НачальнаяСтрока = 0 Тогда Если НачальнаяСтрока = 0 Тогда
// Fallback для xls: ищем первую непустую строку с текстом > 3 символов
Для Ном = 17 По 30 Цикл Для Ном = 17 По 30 Цикл
ФИОТест = СокрЛП("" + ЛистРасчет.Cells(Ном, 1).Value); ФТ = СокрЛП("" + ЛистРасчет.Cells(Ном, 1).Value);
Если ЗначениеЗаполнено(ФИОТест) Если ЗначениеЗаполнено(ФТ) И Не СтрНачинаетсяС(ВРег(ФТ), "ИТОГО")
И Не СтрНачинаетсяС(ВРег(ФИОТест), "ИТОГО") И Не СтрНачинаетсяС(ВРег(ФТ), "СОТРУДНИК") И Не СтрНачинаетсяС(ВРег(ФТ), "ФАМИЛИЯ")
И Не СтрНачинаетсяС(ВРег(ФИОТест), "СОТРУДНИК") И СтрДлина(ФТ) > 3 Тогда
И Не СтрНачинаетсяС(ВРег(ФИОТест), "ФАМИЛИЯ") НачальнаяСтрока = Ном; Прервать;
И СтрДлина(ФИОТест) > 3 Тогда
НачальнаяСтрока = Ном;
Прервать;
КонецЕсли; КонецЕсли;
КонецЦикла; КонецЦикла;
КонецЕсли; КонецЕсли;
Если НачальнаяСтрока = 0 Тогда Если НачальнаяСтрока = 0 Тогда
Сообщить("Данные сотрудников не найдены!"); Сообщить("Данные не найдены!");
ЗакрытьExcel(КонтекстExcel, ВременныйФайл); ЗакрытьExcel(КонтекстExcel, ВременныйФайл);
Возврат; Возврат;
КонецЕсли; КонецЕсли;
@@ -351,58 +352,40 @@
МассивНДФЛ = Новый Массив; МассивНДФЛ = Новый Массив;
МассивСотрудников = Новый Массив; МассивСотрудников = Новый Массив;
Счетчик = 0; Счетчик = 0;
ПустыхПодряд = 0;
Для Ном = НачальнаяСтрока По ЛистРасчет.Rows.Count Цикл Для Ном = НачальнаяСтрока По ЛистРасчет.Rows.Count Цикл
// Проверка окончания данных
ЗначениеЯчейки = ЛистРасчет.Cells(Ном, 1).Value; ЗначениеЯчейки = ЛистРасчет.Cells(Ном, 1).Value;
Если ЗначениеЯчейки = Неопределено ИЛИ ЗначениеЯчейки = "" Тогда Если ЗначениеЯчейки = Неопределено ИЛИ ЗначениеЯчейки = "" Тогда
// Может быть пустая строка в середине — проверяем ещё 2 строки
След1 = ЛистРасчет.Cells(Ном + 1, 1).Value; След1 = ЛистРасчет.Cells(Ном + 1, 1).Value;
След2 = ЛистРасчет.Cells(Ном + 2, 1).Value; След2 = ЛистРасчет.Cells(Ном + 2, 1).Value;
Если (След1 = Неопределено ИЛИ След1 = "") И (След2 = Неопределено ИЛИ След2 = "") Тогда Если (След1 = Неопределено ИЛИ След1 = "") И (След2 = Неопределено ИЛИ След2 = "") Тогда Прервать; КонецЕсли;
Прервать;
КонецЕсли;
Продолжить; Продолжить;
КонецЕсли; КонецЕсли;
ФИОТекст = СокрЛП("" + ЗначениеЯчейки); ФИОТекст = СокрЛП("" + ЗначениеЯчейки);
Если СтрНачинаетсяС(ВРег(ФИОТекст), "ИТОГО") Тогда Прервать; КонецЕсли; Если СтрНачинаетсяС(ВРег(ФИОТекст), "ИТОГО") Тогда Прервать; КонецЕсли;
Если СтрНачинаетсяС(ВРег(ФИОТекст), "СОТРУДНИК") Тогда Продолжить; КонецЕсли; Если СтрНачинаетсяС(ВРег(ФИОТекст), "СОТРУДНИК") ИЛИ СтрНачинаетсяС(ВРег(ФИОТекст), "ФАМИЛИЯ") Тогда Продолжить; КонецЕсли;
Если СтрНачинаетсяС(ВРег(ФИОТекст), "ФАМИЛИЯ") Тогда Продолжить; КонецЕсли;
// Ищем лист сотрудника — ВСЕГДА, независимо от того, есть ли ФИО
ЛистСотрудника = НайтиЛистСотрудника(КонтекстExcel.Книга, ЛистРасчет, Ном); ЛистСотрудника = НайтиЛистСотрудника(КонтекстExcel.Книга, ЛистРасчет, Ном);
Если ЛистСотрудника = Неопределено Тогда Продолжить; КонецЕсли; Если ЛистСотрудника = Неопределено Тогда Продолжить; КонецЕсли;
// Читаем ФИО из листа сотрудника (приоритет) или из формулы ФИО = ПрочитатьЯчейкуСтрока(ЛистСотрудника, 2, 3);
ФИО = ""; Если Не ЗначениеЗаполнено(ФИО) Тогда ФИО = ФИОТекст; КонецЕсли;
Если ЛистСотрудника <> Неопределено Тогда
ФИО = ПрочитатьЯчейкуСтрока(ЛистСотрудника, 2, 3); // C2 листа сотрудника
КонецЕсли;
Если Не ЗначениеЗаполнено(ФИО) Тогда
ФИО = ФИОТекст;
КонецЕсли;
Если Не ЗначениеЗаполнено(ФИО) Тогда Продолжить; КонецЕсли; Если Не ЗначениеЗаполнено(ФИО) Тогда Продолжить; КонецЕсли;
Счетчик = Счетчик + 1; Счетчик = Счетчик + 1;
Состояние("Загрузка: " + ФИО, 20 + 70 * Счетчик / 50); Состояние("Загрузка: " + ФИО, 20 + 70 * Счетчик / 50);
// Основные расчётные данные — из листа РАСЧЕТ (все колонки 5-63)
Строка = ПрочитатьРасчетныеДанныеИзРасчета(ЛистРасчет, Ном, ФИО); Строка = ПрочитатьРасчетныеДанныеИзРасчета(ЛистРасчет, Ном, ФИО);
Строка.Вставить("ИдентификаторСотрудника", Счетчик); Строка.Вставить("ИдентификаторСотрудника", Счетчик);
// Обогащение данными карточки с листа сотрудника
Если ЛистСотрудника <> Неопределено Тогда Если ЛистСотрудника <> Неопределено Тогда
Карточка = ПрочитатьКарточкуСотрудника(ЛистСотрудника); Карточка = ПрочитатьКарточкуСотрудника(ЛистСотрудника);
// Обновляем ФИО если лист вернул более точное Если ЗначениеЗаполнено(Карточка.ФИО) Тогда Строка.Вставить("ФИО", Карточка.ФИО); КонецЕсли;
Если ЗначениеЗаполнено(Карточка.ФИО) Тогда
Строка.Вставить("ФИО", Карточка.ФИО);
КонецЕсли;
КонецЕсли; КонецЕсли;
МассивДанных.Добавить(Строка); МассивДанных.Добавить(Строка);
// Таблица сотрудников // Сотрудники
Если ЛистСотрудника <> Неопределено Тогда Если ЛистСотрудника <> Неопределено Тогда
ДанныеСотр = ПрочитатьКарточкуСотрудника(ЛистСотрудника); ДанныеСотр = ПрочитатьКарточкуСотрудника(ЛистСотрудника);
Иначе Иначе
@@ -412,7 +395,7 @@
ДанныеСотр.Вставить("Идентификатор", Счетчик); ДанныеСотр.Вставить("Идентификатор", Счетчик);
МассивСотрудников.Добавить(ДанныеСотр); МассивСотрудников.Добавить(ДанныеСотр);
// НДФЛ — ВСЕГДА из листа сотрудника // НДФЛ
Если ЛистСотрудника <> Неопределено Тогда Если ЛистСотрудника <> Неопределено Тогда
ДанныеНДФЛ = ПрочитатьНДФЛСоЛиста(ЛистСотрудника, ФИО); ДанныеНДФЛ = ПрочитатьНДФЛСоЛиста(ЛистСотрудника, ФИО);
Если ДанныеНДФЛ <> Неопределено Тогда Если ДанныеНДФЛ <> Неопределено Тогда
@@ -421,7 +404,7 @@
КонецЕсли; КонецЕсли;
КонецЕсли; КонецЕсли;
// Страховые взносы — из РАСЧЕТ (cols 58-63) // Страховые взносы
СтрВзносов = ПрочитатьВзносыИзРасчета(ЛистРасчет, Ном, ФИО); СтрВзносов = ПрочитатьВзносыИзРасчета(ЛистРасчет, Ном, ФИО);
Если СтрВзносов <> Неопределено Тогда Если СтрВзносов <> Неопределено Тогда
СтрВзносов.Вставить("ИдентификаторСотрудника", Счетчик); СтрВзносов.Вставить("ИдентификаторСотрудника", Счетчик);
@@ -431,8 +414,7 @@
ЗакрытьExcel(КонтекстExcel, ВременныйФайл); ЗакрытьExcel(КонтекстExcel, ВременныйФайл);
ЗаполнитьТаблицыНаСервере(МассивДанных, МассивВзносов, МассивНДФЛ, МассивСотрудников); ЗаполнитьТаблицыНаСервере(МассивДанных, МассивВзносов, МассивНДФЛ, МассивСотрудников);
СтатусЗагрузки = "Готово! Загружено: " + МассивДанных.Количество() + " сотрудников, " СтатусЗагрузки = "Готово! " + МассивДанных.Количество() + " сотр., " + МассивНДФЛ.Количество() + " записей НДФЛ";
+ МассивНДФЛ.Количество() + " записей НДФЛ";
Сообщить(СтатусЗагрузки); Сообщить(СтатусЗагрузки);
ОбновитьОтображениеДанных(); ОбновитьОтображениеДанных();
КонецПроцедуры КонецПроцедуры