Добрый день! Нужна ваша помощь! Создан вот такой отчет но он собирает все приказы о приеме (сотрудник работает по срочным договорам) и задваевает(затраивает...) сотрудника, а надо данные только из последнего приказа
Процедура Сформировать8()
Таб = СоздатьОбъект("Таблица");
Таб.ИсходнаяТаблица("ОкончаниеДоговораОбщ");
Таб.ВывестиСекцию("Заголовок");
Таб.ВывестиСекцию("Шапка");
Запрос = СоздатьОбъект("Запрос");
ТекстЗапроса =
"//{{ЗАПРОС(сформировать)
|с (НачГода(ДатаДок)-365) по (ДатаДок);
|ОбрабатыватьДокументы Проведенные;
|Сотрудник = Документ.ПриказОПриемеНаРаботу.Сотрудник;
|СостояниеФизлица = Документ.ПриказОПриемеНаРаботу.Сотрудник.СостояниеФизлица;
|ДатаОкончанияДог = Документ.ПриказОПриемеНаРаботу.ДатаОкончанияДог;
|Функция Итог = Счётчик(Сотрудник);
|"//}}Запрос
;
Если Сортировка.ТекущаяСтрока()=1 Тогда
ТекстЗапроса = ТекстЗапроса + "Группировка Сотрудник без групп;Группировка ДатаОкончанияДог;";
ИначеЕсли Сортировка.ТекущаяСтрока()=2 Тогда
ТекстЗапроса = ТекстЗапроса + "Группировка ДатаОкончанияДог;Группировка Сотрудник без групп;";
КонецЕсли;
Если Запрос.Выполнить(ТекстЗапроса)=0 Тогда
Возврат;
КонецЕсли;
Ном=0;
Пока Запрос.Группировка(1)=1 Цикл
Пока Запрос.Группировка(2)=1 Цикл
Если (ПустоеЗначение(Запрос.СостояниеФизЛица)=1) Тогда
Продолжить;
КонецЕсли;
Если (ПустоеЗначение(Запрос.ДатаОкончанияДог)<>0)Тогда
Продолжить;
КонецЕсли;
Ном=Ном+1;
Таб.ВывестиСекцию("Сотрудник");
КонецЦикла;
КонецЦикла;
Таб.ВывестиСекцию("Подвал");
Таб.Опции(0,0,0,0);
Таб.ТолькоПросмотр(0);
Таб.ПараметрыСтраницы(1,,,10,10,10,10,10,10,1);
Таб.Показать("Отчет по трудовым договорам с иностранцами");
КонецПроцедуры
Процедура Сформировать8()
Таб = СоздатьОбъект("Таблица");
Таб.ИсходнаяТаблица("ОкончаниеДоговораОбщ");
Таб.ВывестиСекцию("Заголовок");
Таб.ВывестиСекцию("Шапка");
Запрос = СоздатьОбъект("Запрос");
ТекстЗапроса =
"//{{ЗАПРОС(сформировать)
|с (НачГода(ДатаДок)-365) по (ДатаДок);
|ОбрабатыватьДокументы Проведенные;
|Сотрудник = Документ.ПриказОПриемеНаРаботу.Сотрудник;
|СостояниеФизлица = Документ.ПриказОПриемеНаРаботу.Сотрудник.СостояниеФизлица;
|ДатаОкончанияДог = Документ.ПриказОПриемеНаРаботу.ДатаОкончанияДог;
|Функция Итог = Счётчик(Сотрудник);
|"//}}Запрос
;
Если Сортировка.ТекущаяСтрока()=1 Тогда
ТекстЗапроса = ТекстЗапроса + "Группировка Сотрудник без групп;Группировка ДатаОкончанияДог;";
ИначеЕсли Сортировка.ТекущаяСтрока()=2 Тогда
ТекстЗапроса = ТекстЗапроса + "Группировка ДатаОкончанияДог;Группировка Сотрудник без групп;";
КонецЕсли;
Если Запрос.Выполнить(ТекстЗапроса)=0 Тогда
Возврат;
КонецЕсли;
Ном=0;
Пока Запрос.Группировка(1)=1 Цикл
Пока Запрос.Группировка(2)=1 Цикл
Если (ПустоеЗначение(Запрос.СостояниеФизЛица)=1) Тогда
Продолжить;
КонецЕсли;
Если (ПустоеЗначение(Запрос.ДатаОкончанияДог)<>0)Тогда
Продолжить;
КонецЕсли;
Ном=Ном+1;
Таб.ВывестиСекцию("Сотрудник");
КонецЦикла;
КонецЦикла;
Таб.ВывестиСекцию("Подвал");
Таб.Опции(0,0,0,0);
Таб.ТолькоПросмотр(0);
Таб.ПараметрыСтраницы(1,,,10,10,10,10,10,10,1);
Таб.Показать("Отчет по трудовым договорам с иностранцами");
КонецПроцедуры
Прикрепленные файлы:

По теме из базы знаний
- Отчет "Анализ налогов по подразделениям" для ЗУП 2.5 (ЕСН до 2010, страховые взносы с 2010, НДФЛ)
- Развернутый отчет по сотрудникам в ЗиК 7.7 вер. 1.3
- Заявление в СБЕРБАНК на получение международной карты. Печатная форма.
- Анализ объема используемых функций на предприятии по ЗУП
- Учет статуса иностранца резидент/не резидент по прошествии 183 дней для ЗУП 3.1
Ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
Введите счетчик во внутренний цикл второй группировки и выводите только ту запись которая по этому внутреннему счетчику будет равна Запрос.Итог. Естественно после окончания внутреннего цикла по группировке второго уровня сбрасывайте этот счетчик на 0.
И упорядочить по дате не забудьте.
Пока Запрос.Группировка(1)=1 Цикл
счт = 0;
Пока Запрос.Группировка(2)=1 Цикл
счт = счт + 1;
Если (ПустоеЗначение(Запрос.СостояниеФизЛица)=1) Тогда
Продолжить;
КонецЕсли;
Если (ПустоеЗначение(Запрос.ДатаОкончанияДог)<>0)Тогда
Продолжить;
КонецЕсли;
Ном=Ном+1;
Если счт = Запрос.Итог Тогда
Таб.ВывестиСекцию("Сотрудник");
КонецЕсли;
КонецЦикла;
КонецЦикла;
ПоказатьИ упорядочить по дате не забудьте.
(1) VLADELETC, Не ясна цель отчета. То ли нужно собрать работающих на текущую дату с окончанием в приказе, то ли всех работавших в каком-то периоде. Если работающих на текущую дату, то запрос может выглядеть так:
ТекстЗапроса =
"//{{ЗАПРОС(сформировать)
|с (НачГода(ДатаДок)-365) по (ДатаДок);
|ОбрабатыватьДокументы Проведенные;
|Докум = Документ.ПриказОПриемеНаРаботу.ТекущийДокумент;
|Сотрудник = Документ.ПриказОПриемеНаРаботу.Сотрудник;
|СостояниеФизлица = Документ.ПриказОПриемеНаРаботу.Сотрудник.СостояниеФизлица;
|ДатаОкончанияДог = Документ.ПриказОПриемеНаРаботу.ДатаОкончанияДог;
|Условие(ПустоеЗначение(ДатаОкончанияДог)=0);
|Условие(ПустоеЗначение(Сотрудник.СостояниеФизлица.Получить(ТекущаяДата()))=0);
|Условие(глПриказПоСотруднику(Сотрудник,ТекущаяДата(),Докум.Вид())=Докум);
|Группировка Сотрудник упорядочить по Сотрудник.Наименование;
|"//}}Запрос
Только в типовой нет реквизита "ДатаОкончанияДог" в прикае о приеме. Надеюсь Вы знаете, что делаете.
ТекстЗапроса =
"//{{ЗАПРОС(сформировать)
|с (НачГода(ДатаДок)-365) по (ДатаДок);
|ОбрабатыватьДокументы Проведенные;
|Докум = Документ.ПриказОПриемеНаРаботу.ТекущийДокумент;
|Сотрудник = Документ.ПриказОПриемеНаРаботу.Сотрудник;
|СостояниеФизлица = Документ.ПриказОПриемеНаРаботу.Сотрудник.СостояниеФизлица;
|ДатаОкончанияДог = Документ.ПриказОПриемеНаРаботу.ДатаОкончанияДог;
|Условие(ПустоеЗначение(ДатаОкончанияДог)=0);
|Условие(ПустоеЗначение(Сотрудник.СостояниеФизлица.Получить(ТекущаяДата()))=0);
|Условие(глПриказПоСотруднику(Сотрудник,ТекущаяДата(),Докум.Вид())=Докум);
|Группировка Сотрудник упорядочить по Сотрудник.Наименование;
|"//}}Запрос
Только в типовой нет реквизита "ДатаОкончанияДог" в прикае о приеме. Надеюсь Вы знаете, что делаете.
JACK19
ОГРОМНОЕ СПАСИБО!!! Вот эту строчку (|Условие(глПриказПоСотруднику(Сотрудник,ТекущаяДата(),Докум.Вид())=Докум); )
я никак не мог сочинить, знаний еще не хватат... А в моей конфигурации в приказе о приеме чего только нет - вплоть до бланков уведомлений о привлечении иностранцев в ФМС. У меня одни иностранцы вот и приходится пилить типовую
ОГРОМНОЕ СПАСИБО!!! Вот эту строчку (|Условие(глПриказПоСотруднику(Сотрудник,ТекущаяДата(),Докум.Вид())=Докум); )
я никак не мог сочинить, знаний еще не хватат... А в моей конфигурации в приказе о приеме чего только нет - вплоть до бланков уведомлений о привлечении иностранцев в ФМС. У меня одни иностранцы вот и приходится пилить типовую
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот