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