#Если ТолстыйКлиентОбычноеПриложение Тогда Процедура ЗаполнитьРезультатНадбавкойПоНеучтеннымВБазеНачислениям(Объект) Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | ОсновныеНачисленияОрганизацийБазовыеВидыРасчета.ВидРасчета |ПОМЕСТИТЬ ВТБазовыеВРСевернойНадбавки |ИЗ | ПланВидовРасчета.ОсновныеНачисленияОрганизаций.БазовыеВидыРасчета КАК ОсновныеНачисленияОрганизацийБазовыеВидыРасчета |ГДЕ | ОсновныеНачисленияОрганизацийБазовыеВидыРасчета.Ссылка = ЗНАЧЕНИЕ(ПланВидовРасчета.ОсновныеНачисленияОрганизаций.СевернаяНадбавка) |; | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ | ОсновныеНачисленияРаботниковОрганизацийФактическийПериодДействия.Сотрудник, | СУММА(ОсновныеНачисленияРаботниковОрганизацийФактическийПериодДействия.Результат) КАК Результат, | ОсновныеНачисленияРаботниковОрганизацийФактическийПериодДействия.ПериодДействияНачало |ИЗ | РегистрРасчета.ОсновныеНачисленияРаботниковОрганизаций.ФактическийПериодДействия КАК ОсновныеНачисленияРаботниковОрганизацийФактическийПериодДействия | ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВТБазовыеВРСевернойНадбавки КАК ВТБазовыеВРСевернойНадбавки | ПО ОсновныеНачисленияРаботниковОрганизацийФактическийПериодДействия.ВидРасчета = ВТБазовыеВРСевернойНадбавки.ВидРасчета |ГДЕ | ОсновныеНачисленияРаботниковОрганизацийФактическийПериодДействия.ПериодРегистрации = &ПериодРегистрации | И ОсновныеНачисленияРаботниковОрганизацийФактическийПериодДействия.ПериодДействия = &ПериодДействия | И ОсновныеНачисленияРаботниковОрганизацийФактическийПериодДействия.ВидРасчета В (ЗНАЧЕНИЕ(ПланВидовРасчета.ОсновныеНачисленияОрганизаций.ОплатаСверхурочных), ЗНАЧЕНИЕ(ПланВидовРасчета.ОсновныеНачисленияОрганизаций.ОплатаПраздничныхИВыходных), ЗНАЧЕНИЕ(ПланВидовРасчета.ОсновныеНачисленияОрганизаций.ДоплатаЗаПраздничныеИВыходные)) | |СГРУППИРОВАТЬ ПО | ОсновныеНачисленияРаботниковОрганизацийФактическийПериодДействия.Сотрудник, | ОсновныеНачисленияРаботниковОрганизацийФактическийПериодДействия.ПериодДействияНачало"; Запрос.УстановитьПараметр("ПериодРегистрации", Объект.ПериодРегистрации); Запрос.УстановитьПараметр("ПериодДействия", ДобавитьМесяц(Объект.ПериодРегистрации, -1)); ТаблицаНеУчтенныхНачислений = Запрос.Выполнить().Выгрузить(); Если ТаблицаНеУчтенныхНачислений.Количество() > 0 Тогда Для каждого СтрокаНачисления Из Объект.Начисления Цикл Отбор = Новый Структура(); Отбор.Вставить("Сотрудник",СтрокаНачисления.Сотрудник); ДанныеПоСотруднику = ТаблицаНеУчтенныхНачислений.НайтиСтроки(Отбор); НеучтеннаяБаза = 0; Для каждого СтрокаДанных Из ДанныеПоСотруднику Цикл Если СтрокаДанных.ПериодДействияНачало >= СтрокаНачисления.ДатаНачала И СтрокаДанных.ПериодДействияНачало <= СтрокаНачисления.ДатаОкончания Тогда НеучтеннаяБаза = НеучтеннаяБаза + СтрокаДанных.Результат; КонецЕсли; КонецЦикла; Если НеучтеннаяБаза > 0 Тогда СтрокаНачисления.Результат = СтрокаНачисления.Результат + НеучтеннаяБаза * СтрокаНачисления.Показатель1 / 100;; КонецЕсли; КонецЦикла; КонецЕсли; КонецПроцедуры Процедура ОставитьВТЧТолькоСевернуюНадбавку(Объект) // условия отбора по виду расчета ПараметрыОтбора = Новый Структура("ВидРасчета", ПланыВидовРасчета.ОсновныеНачисленияОрганизаций.СевернаяНадбавка); // выгружаем ТЧ в ТЗ ТЗИсходная = Объект.Начисления.Выгрузить(); // копируем ТЗ с заданным отбором в новую ТЗ ТЗСевернаяНадбавка = ТЗИсходная.Скопировать(ПараметрыОтбора); // очистим ТЧ Объект.Начисления.Очистить(); // загружаем в ТЧ новую ТЗ Объект.Начисления.Загрузить(ТЗСевернаяНадбавка); КонецПроцедуры // () Процедура УдалитьВТЧСтрокиСПустымРезультатом(Объект) НайденныеСтроки = Объект.Начисления.НайтиСтроки(Новый Структура("Результат", 0)); Для каждого СтрокаНачисления Из НайденныеСтроки Цикл Объект.Начисления.Удалить(СтрокаНачисления); КонецЦикла; КонецПроцедуры Процедура Инициализировать(Объект,ИмяТабличнойЧасти,ТабличноеПолеОбъекта) Экспорт ФормаОбъекта = Объект.ПолучитьФорму(); ОбработкаКомментариев = глЗначениеПеременной("глОбработкаСообщений"); ОбработкаКомментариев.УдалитьСообщения(); Если Объект.ВидОперации = Перечисления.ВидыОперацийНачислениеЗарплатыРаботникамОрганизаций.ПолныйРасчет Тогда МассивТаблиц = Новый Массив; МассивТаблиц.Добавить(Объект.Начисления); МассивТаблиц.Добавить(Объект.ДополнительныеНачисления); МассивТаблиц.Добавить(Объект.ДоговорыНаВыполнениеРабот); МассивТаблиц.Добавить(Объект.НДФЛ); МассивТаблиц.Добавить(Объект.Удержания); МассивТаблиц.Добавить(Объект.ПогашениеЗаймов); ТекстВопроса1 = "Автоматически заполнить документ можно только после отмены его проведения. Продолжить?"; ТекстВопроса2 = "Перед заполнением все таблицы документа будут очищены. Продолжить?"; Если НЕ РаботаСДиалогами.ЗаписатьДокументОчиститьТаблицыПередВыполнениемДействия(Объект, ФормаОбъекта, МассивТаблиц, ТекстВопроса1, ТекстВопроса2) Тогда ОбработкаКомментариев.ПоказатьСообщения(); Возврат; КонецЕсли; Объект.Начисления.Очистить(); Объект.ДополнительныеНачисления.Очистить(); Объект.ДоговорыНаВыполнениеРабот.Очистить(); Объект.НДФЛ.Очистить(); Объект.Удержания.Очистить(); Объект.ПогашениеЗаймов.Очистить(); ФормаОбъекта.Обновить(); ИначеЕсли Объект.ВидОперации = Перечисления.ВидыОперацийНачислениеЗарплатыРаботникамОрганизаций.РасчетНачислений Тогда МассивТаблиц = Новый Массив; МассивТаблиц.Добавить(Объект.Начисления); МассивТаблиц.Добавить(Объект.ДополнительныеНачисления); МассивТаблиц.Добавить(Объект.ДоговорыНаВыполнениеРабот); ТекстВопроса1 = "Автоматически заполнить документ можно только после отмены его проведения. Продолжить?"; ТекстВопроса2 = "Перед заполнением все таблицы документа будут очищены. Продолжить?"; Если НЕ РаботаСДиалогами.ЗаписатьДокументОчиститьТаблицыПередВыполнениемДействия(Объект, ФормаОбъекта, МассивТаблиц, ТекстВопроса1, ТекстВопроса2) Тогда ОбработкаКомментариев.ПоказатьСообщения(); Возврат; КонецЕсли; Объект.Начисления.Очистить(); Объект.ДополнительныеНачисления.Очистить(); Объект.ДоговорыНаВыполнениеРабот.Очистить(); ФормаОбъекта.Обновить(); КонецЕсли; Объект.ПериодНачисления = Перечисления.ПериодНачисленияЗарплаты.ПрошлыйПериод; Объект.ПериодНачисленияДатаНачала = НачалоМесяца(Объект.ПериодРегистрации - 1); Объект.ПериодНачисленияДатаОкончания = КонецМесяца(Объект.ПериодНачисленияДатаНачала); СтрокаВидОперации = ?(Объект.ВидОперации = Перечисления.ВидыОперацийНачислениеЗарплатыРаботникамОрганизаций.ПолныйРасчет, "", Строка(Объект.ВидОперации) + ". "); МесяцГодСтрокой = УправлениеОтчетамиЗК.ОписаниеПериода(Объект.ПериодНачисленияДатаНачала, Объект.ПериодНачисленияДатаОкончания, Ложь, Истина, Ложь); СтрокаЗаголовокФормы = "Начисление зарплаты: " + СтрокаВидОперации + "За " + МесяцГодСтрокой + ". "; // выполнить стандартное автозаполнение ЗаполнениеВыполнено = Объект.Автозаполнение(); // очистим все ТЧ, кроме Объект.Начисления Объект.ДополнительныеНачисления.Очистить(); Объект.ДоговорыНаВыполнениеРабот.Очистить(); Объект.Удержания.Очистить(); Объект.НДФЛ.Очистить(); Объект.ПогашениеЗаймов.Очистить(); // оставить в таблице только строки с видом расчета СерернаяНадбавка ОставитьВТЧТолькоСевернуюНадбавку(Объект); // рассчитать и заполнить Результат ЗаполнитьРезультатНадбавкойПоНеучтеннымВБазеНачислениям(Объект); // удалить строки с пустым результатом УдалитьВТЧСтрокиСПустымРезультатом(Объект); Если ЗаполнениеВыполнено Тогда // проверяем заполнились ли данные только если автозаполнение выполнено НетДанных = Ложь; Если Объект.ВидОперации = Перечисления.ВидыОперацийНачислениеЗарплатыРаботникамОрганизаций.ПолныйРасчет Тогда Если Объект.Начисления.Количество() = 0 Тогда НетДанных = Истина; КонецЕсли; ИначеЕсли Объект.ВидОперации = Перечисления.ВидыОперацийНачислениеЗарплатыРаботникамОрганизаций.РасчетНачислений Тогда Если Объект.Начисления.Количество() = 0 Тогда НетДанных = Истина; КонецЕсли; КонецЕсли; Если НетДанных Тогда ОбщегоНазначенияЗК.ОшибкаРасчета("Не обнаружены данные для записи в табличные части документа."); КонецЕсли; КонецЕсли; // после заполнения табличных частей, активизируем строку Если Объект.Начисления.Количество() > 0 Тогда СтрокаТЧ = Объект.Начисления.Получить(0); ФормаОбъекта.ЭлементыФормы.Начисления.ТекущаяСтрока = СтрокаТЧ; КонецЕсли; ОбработкаКомментариев.ПоказатьСообщения(); КонецПроцедуры #КонецЕсли