Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
22 ноя 2024, 17:28

Схема компоновки

Автор макс, 26 окт 2010, 05:09

0 Пользователей и 1 гость просматривают эту тему.

макс

Есть схема компоновки, у нее запрос, выводит схема совсем другие поля, которых в запросе нету, вот код, помогите разобраться в нем

Процедура ДоработатьКомпоновщикПередВыводом() Экспорт
   
   ЗначениеПараметра = КомпоновщикНастроек.Настройки.ПараметрыДанных.НайтиЗначениеПараметра(Новый ПараметрКомпоновкиДанных("ЕстьГруппировкаПоПериодуРегисрации"));
   ЗначениеПараметра.Значение = ПрисутствуетПоле("ПериодРегистрации");
   
   ЕстьСтатьяФинансирования = ПрисутствуетПоле("СтатьяФинансирования");
   ЕстьСтатьяРасходов = ПрисутствуетПоле("КОСГУ");
   ЗначениеПараметра = КомпоновщикНастроек.Настройки.ПараметрыДанных.НайтиЗначениеПараметра(Новый ПараметрКомпоновкиДанных("ВыводитьИФ"));
   ЗначениеПараметра.Значение = ЕстьСтатьяРасходов или ЕстьСтатьяФинансирования;   
   
   //ЗначениеПараметра = КомпоновщикНастроек.Настройки.ПараметрыДанных.НайтиЗначениеПараметра(Новый ПараметрКомпоновкиДанных("ВыводитьВремя"));
   //ЗначениеПараметра.Значение = ПрисутствуетПоле("ОплаченоДней") или ПрисутствуетПоле("ОплаченоЧасов")
   //                      или ПрисутствуетПоле("ОтработаноДней") или ПрисутствуетПоле("ОтработаноЧасов")или (Не ЕстьСтатьяРасходов и Не ЕстьСтатьяФинансирования);
   
   // Если в выбранные поля добавлены поле нумерации в группе или сквозной нумерации в группе перенесем данные
   // поля в самую нижнюю группировку строк отчета.
   ГруппировкаДляВремени = Неопределено;
   УдаляемыеПоля = Новый Массив;
   
   Для каждого ВыбранноеПоле из КомпоновщикНастроек.Настройки.Выбор.Элементы Цикл
      Если ТипЗнч(ВыбранноеПоле) <> Тип("ГруппаВыбранныхПолейКомпоновкиДанных") тогда
         Если ВыбранноеПоле.Поле = Новый ПолеКомпоновкиДанных("СистемныеПоля.НомерПоПорядкуВГруппировке") или ВыбранноеПоле.Поле = Новый ПолеКомпоновкиДанных("SystemFields.GroupSerialNumber") тогда
            ПоследнийЭлементСтруктуры = НайтиПоследнийЭлементСтруктурыСтрок(КомпоновщикНастроек.Настройки.Структура[0].Строки);
            Если ПоследнийЭлементСтруктуры <> Неопределено тогда
               ЭлементВыбранногоПоля = ПоследнийЭлементСтруктуры.Выбор.Элементы.Вставить(0,Тип("ВыбранноеПолеКомпоновкиДанных"));
               ЭлементВыбранногоПоля.Поле = Новый ПолеКомпоновкиДанных("СистемныеПоля.НомерПоПорядкуВГруппировке");
            КонецЕсли;
            
         ИначеЕсли ВыбранноеПоле.Поле = Новый ПолеКомпоновкиДанных("СистемныеПоля.НомерПоПорядку") или ВыбранноеПоле.Поле = Новый ПолеКомпоновкиДанных("SystemFields.SerialNumber") тогда
            ПоследнийЭлементСтруктуры = НайтиПоследнийЭлементСтруктурыСтрок(КомпоновщикНастроек.Настройки.Структура[0].Строки);
            Если ПоследнийЭлементСтруктуры <> Неопределено тогда
               ЭлементВыбранногоПоля = ПоследнийЭлементСтруктуры.Выбор.Элементы.Вставить(0,Тип("ВыбранноеПолеКомпоновкиДанных"));
               ЭлементВыбранногоПоля.Поле = Новый ПолеКомпоновкиДанных("СистемныеПоля.НомерПоПорядку");
            КонецЕсли;
         ИначеЕсли ВыбранноеПоле.Поле = Новый ПолеКомпоновкиДанных("ОтработаноДней")
            или ВыбранноеПоле.Поле = Новый ПолеКомпоновкиДанных("ОтработаноЧасов")
            или ВыбранноеПоле.Поле = Новый ПолеКомпоновкиДанных("ОплаченоДней")
            или ВыбранноеПоле.Поле = Новый ПолеКомпоновкиДанных("ОплаченоЧасов")
            тогда
            Если КомпоновщикНастроек.Настройки.Структура.Количество() > 0 и ТипЗнч(КомпоновщикНастроек.Настройки.Структура[0]) = Тип("ТаблицаКомпоновкиДанных") тогда
               Если КомпоновщикНастроек.Настройки.Структура[0].Колонки.Количество() > 0 и ГруппировкаДляВремени = Неопределено тогда
                  ГруппировкаДляВремени = КомпоновщикНастроек.Настройки.Структура[0].Колонки.Вставить(0);
                  ГруппировкаДляВремени.Использование = Истина;
                  
                  ПолеГруппировки = ГруппировкаДляВремени.ПоляГруппировки.Элементы.Добавить(Тип("ПолеГруппировкиКомпоновкиДанных"));
                  ПолеГруппировки.Поле = Новый ПолеКомпоновкиДанных("Группа");
                  ПолеГруппировки.Использование = Истина;
                  
                  ПолеВыбора = ГруппировкаДляВремени.Выбор.Элементы.Добавить(Тип("ВыбранноеПолеКомпоновкиДанных"));
                  ПолеВыбора.Поле = Новый ПолеКомпоновкиДанных("Группа");
                  ПолеВыбора.Использование = Истина;
                  
                  ТиповыеОтчеты.ДобавитьОтбор(ГруппировкаДляВремени.Отбор, "Группа", "Всего начислено");
                  
                  УсловноеОформление = ГруппировкаДляВремени.УсловноеОформление.Элементы.Добавить();
                  УсловноеОформление.Использование = Истина;
                  
                  ПолеОформления = УсловноеОформление.Поля.Элементы.Добавить();
                  ПолеОформления.Поле = Новый ПолеКомпоновкиДанных("Группа");
                  ПолеОформления.Использование = Истина;
                  
                  ПараметрОформелния = УсловноеОформление.Оформление.НайтиЗначениеПараметра(Новый ПараметрКомпоновкиДанных("Text"));
                  ПараметрОформелния.Использование = Истина;
                  ПараметрОформелния.Значение = "Отработанное время";
                  
                  ПараметрОформелния = УсловноеОформление.Оформление.НайтиЗначениеПараметра(Новый ПараметрКомпоновкиДанных("BackColor"));
                  ПараметрОформелния.Использование = Истина;
                  ПараметрОформелния.Значение = ЦветаСтиля.ЦветФонаФормы;
                  
                  ПараметрОформелния = УсловноеОформление.Оформление.НайтиЗначениеПараметра(Новый ПараметрКомпоновкиДанных("Font"));
                  ПараметрОформелния.Использование = Истина;
                  ПараметрОформелния.Значение =  Новый Шрифт(ПараметрОформелния.Значение, "Verdana", ,истина);
                  
               КонецЕсли;
               Если ГруппировкаДляВремени <> Неопределено тогда
                  ПолеВыбора = ГруппировкаДляВремени.Выбор.Элементы.Добавить(Тип("ВыбранноеПолеКомпоновкиДанных"));
                  ПолеВыбора.Поле = ВыбранноеПоле.Поле;
                  УдаляемыеПоля.Добавить(ВыбранноеПоле);
               КонецЕсли;
            КонецЕсли;   
         КонецЕсли;
      КонецЕсли;
   КонецЦикла;   
   Если ГруппировкаДляВремени <> Неопределено тогда
      Для каждого ПолеВыбора из УдаляемыеПоля Цикл
         КомпоновщикНастроек.Настройки.Выбор.Элементы.Удалить(ПолеВыбора);
      КонецЦикла;
   КонецЕсли;
   
   // Отключим строку итогов, если расшифровывается конечное или начальное сальдо
   //
   МассивОтборов = ТиповыеОтчеты.ПолучитьЭлементыОтбора(КомпоновщикНастроек);
   
   Для каждого ЭлементОтбора из МассивОтборов Цикл
      Если ТипЗнч(ЭлементОтбора) = Тип("ГруппаЭлементовОтбораКомпоновкиДанных") тогда
         Продолжить;
      КонецЕсли;
      Если ЭлементОтбора.Использование
         и ЭлементОтбора.ВидСравнения    = ВидСравненияКомпоновкиДанных.Равно
         и (ЭлементОтбора.ПравоеЗначение = Новый ПолеКомпоновкиДанных("ИмяВидаРасчета") или ЭлементОтбора.ПравоеЗначение = "Конечное сальдо" или ЭлементОтбора.ПравоеЗначение = "Начальное сальдо")
         и (ЭлементОтбора.ЛевоеЗначение  = Новый ПолеКомпоновкиДанных("ИмяВидаРасчета") или ЭлементОтбора.ЛевоеЗначение = "Конечное сальдо" или ЭлементОтбора.ЛевоеЗначение = "Начальное сальдо")
          тогда
         ТиповыеОтчеты.УстановитьПараметрВывода(КомпоновщикНастроек, "VerticalOverallPlacement", РасположениеИтоговКомпоновкиДанных.Нет);
      КонецЕсли;
   КонецЦикла;
   
   
КонецПроцедуры

ЭлементыНастройки = Новый Массив(4);

ТекстЗапроса = СхемаКомпоновкиДанных.НаборыДанных.Начисления.Запрос;
УправлениеОтчетамиЗК.ПолучитьТаблицуРаботников(, ТекстЗапроса, "ТаблицаДвижений", Истина);
УправлениеОтчетамиЗК.ПодставитьРасчетПолей(ТекстЗапроса, "РаботникиПредприятия", "РаботникиОрганизаций", "ПодразделениеОрганизации", "Должность");
СхемаКомпоновкиДанных.НаборыДанных.Начисления.Запрос = ТекстЗапроса;

Если СохраненнаяНастройка = Неопределено Тогда
   СохраненнаяНастройка =  Справочники.СохраненныеНастройки.ПустаяСсылка();
КонецЕсли;

Если КомпоновщикНастроек = Неопределено Тогда
   КомпоновщикНастроек =  Новый КомпоновщикНастроекКомпоновкиДанных;
КонецЕсли;
УправлениеОтчетами.ЗаменитьНазваниеПолейСхемыКомпоновкиДанных(СхемаКомпоновкиДанных)

макс

Так будет удобнее

Процедура ДоработатьКомпоновщикПередВыводом() Экспорт

ЗначениеПараметра = КомпоновщикНастроек.Настройки.ПараметрыДанных.НайтиЗначениеПараметра(Новый ПараметрКомпоновкиДанных("ЕстьГруппировкаПоПериодуРегисрации"));
ЗначениеПараметра.Значение = ПрисутствуетПоле("ПериодРегистрации");

ЕстьСтатьяФинансирования = ПрисутствуетПоле("СтатьяФинансирования");
ЕстьСтатьяРасходов = ПрисутствуетПоле("КОСГУ");
ЗначениеПараметра = КомпоновщикНастроек.Настройки.ПараметрыДанных.НайтиЗначениеПараметра(Новый ПараметрКомпоновкиДанных("ВыводитьИФ"));
ЗначениеПараметра.Значение = ЕстьСтатьяРасходов или ЕстьСтатьяФинансирования;

//ЗначениеПараметра = КомпоновщикНастроек.Настройки.ПараметрыДанных.НайтиЗначениеПараметра(Новый ПараметрКомпоновкиДанных("ВыводитьВремя"));
//ЗначениеПараметра.Значение = ПрисутствуетПоле("ОплаченоДней") или ПрисутствуетПоле("ОплаченоЧасов")
// или ПрисутствуетПоле("ОтработаноДней") или ПрисутствуетПоле("ОтработаноЧасов")или (Не ЕстьСтатьяРасходов и Не ЕстьСтатьяФинансирования);

// Если в выбранные поля добавлены поле нумерации в группе или сквозной нумерации в группе перенесем данные
// поля в самую нижнюю группировку строк отчета.
ГруппировкаДляВремени = Неопределено;
УдаляемыеПоля = Новый Массив;

Для каждого ВыбранноеПоле из КомпоновщикНастроек.Настройки.Выбор.Элементы Цикл
Если ТипЗнч(ВыбранноеПоле) <> Тип("ГруппаВыбранныхПолейКомпоновкиДанных") тогда
Если ВыбранноеПоле.Поле = Новый ПолеКомпоновкиДанных("СистемныеПоля.НомерПоПорядкуВГруппировке") или ВыбранноеПоле.Поле = Новый ПолеКомпоновкиДанных("SystemFields.GroupSerialNumber") тогда
ПоследнийЭлементСтруктуры = НайтиПоследнийЭлементСтруктурыСтрок(КомпоновщикНастроек.Настройки.Структура[0].Строки);
Если ПоследнийЭлементСтруктуры <> Неопределено тогда
ЭлементВыбранногоПоля = ПоследнийЭлементСтруктуры.Выбор.Элементы.Вставить(0,Тип("ВыбранноеПолеКомпоновкиДанных"));
ЭлементВыбранногоПоля.Поле = Новый ПолеКомпоновкиДанных("СистемныеПоля.НомерПоПорядкуВГруппировке");
КонецЕсли;

ИначеЕсли ВыбранноеПоле.Поле = Новый ПолеКомпоновкиДанных("СистемныеПоля.НомерПоПорядку") или ВыбранноеПоле.Поле = Новый ПолеКомпоновкиДанных("SystemFields.SerialNumber") тогда
ПоследнийЭлементСтруктуры = НайтиПоследнийЭлементСтруктурыСтрок(КомпоновщикНастроек.Настройки.Структура[0].Строки);
Если ПоследнийЭлементСтруктуры <> Неопределено тогда
ЭлементВыбранногоПоля = ПоследнийЭлементСтруктуры.Выбор.Элементы.Вставить(0,Тип("ВыбранноеПолеКомпоновкиДанных"));
ЭлементВыбранногоПоля.Поле = Новый ПолеКомпоновкиДанных("СистемныеПоля.НомерПоПорядку");
КонецЕсли;
ИначеЕсли ВыбранноеПоле.Поле = Новый ПолеКомпоновкиДанных("ОтработаноДней")
или ВыбранноеПоле.Поле = Новый ПолеКомпоновкиДанных("ОтработаноЧасов")
или ВыбранноеПоле.Поле = Новый ПолеКомпоновкиДанных("ОплаченоДней")
или ВыбранноеПоле.Поле = Новый ПолеКомпоновкиДанных("ОплаченоЧасов")
тогда
Если КомпоновщикНастроек.Настройки.Структура.Количество() > 0 и ТипЗнч(КомпоновщикНастроек.Настройки.Структура[0]) = Тип("ТаблицаКомпоновкиДанных") тогда
Если КомпоновщикНастроек.Настройки.Структура[0].Колонки.Количество() > 0 и ГруппировкаДляВремени = Неопределено тогда
ГруппировкаДляВремени = КомпоновщикНастроек.Настройки.Структура[0].Колонки.Вставить(0);
ГруппировкаДляВремени.Использование = Истина;

ПолеГруппировки = ГруппировкаДляВремени.ПоляГруппировки.Элементы.Добавить(Тип("ПолеГруппировкиКомпоновкиДанных"));
ПолеГруппировки.Поле = Новый ПолеКомпоновкиДанных("Группа");
ПолеГруппировки.Использование = Истина;

ПолеВыбора = ГруппировкаДляВремени.Выбор.Элементы.Добавить(Тип("ВыбранноеПолеКомпоновкиДанных"));
ПолеВыбора.Поле = Новый ПолеКомпоновкиДанных("Группа");
ПолеВыбора.Использование = Истина;

ТиповыеОтчеты.ДобавитьОтбор(ГруппировкаДляВремени.Отбор, "Группа", "Всего начислено");

УсловноеОформление = ГруппировкаДляВремени.УсловноеОформление.Элементы.Добавить();
УсловноеОформление.Использование = Истина;

ПолеОформления = УсловноеОформление.Поля.Элементы.Добавить();
ПолеОформления.Поле = Новый ПолеКомпоновкиДанных("Группа");
ПолеОформления.Использование = Истина;

ПараметрОформелния = УсловноеОформление.Оформление.НайтиЗначениеПараметра(Новый ПараметрКомпоновкиДанных("Text"));
ПараметрОформелния.Использование = Истина;
ПараметрОформелния.Значение = "Отработанное время";

ПараметрОформелния = УсловноеОформление.Оформление.НайтиЗначениеПараметра(Новый ПараметрКомпоновкиДанных("BackColor"));
ПараметрОформелния.Использование = Истина;
ПараметрОформелния.Значение = ЦветаСтиля.ЦветФонаФормы;

ПараметрОформелния = УсловноеОформление.Оформление.НайтиЗначениеПараметра(Новый ПараметрКомпоновкиДанных("Font"));
ПараметрОформелния.Использование = Истина;
ПараметрОформелния.Значение =  Новый Шрифт(ПараметрОформелния.Значение, "Verdana", ,истина);

КонецЕсли;
Если ГруппировкаДляВремени <> Неопределено тогда
ПолеВыбора = ГруппировкаДляВремени.Выбор.Элементы.Добавить(Тип("ВыбранноеПолеКомпоновкиДанных"));
ПолеВыбора.Поле = ВыбранноеПоле.Поле;
УдаляемыеПоля.Добавить(ВыбранноеПоле);
КонецЕсли;
КонецЕсли;
КонецЕсли;
КонецЕсли;
КонецЦикла;
Если ГруппировкаДляВремени <> Неопределено тогда
Для каждого ПолеВыбора из УдаляемыеПоля Цикл
КомпоновщикНастроек.Настройки.Выбор.Элементы.Удалить(ПолеВыбора);
КонецЦикла;
КонецЕсли;

// Отключим строку итогов, если расшифровывается конечное или начальное сальдо
//
МассивОтборов = ТиповыеОтчеты.ПолучитьЭлементыОтбора(КомпоновщикНастроек);

Для каждого ЭлементОтбора из МассивОтборов Цикл
Если ТипЗнч(ЭлементОтбора) = Тип("ГруппаЭлементовОтбораКомпоновкиДанных") тогда
Продолжить;
КонецЕсли;
Если ЭлементОтбора.Использование
   и ЭлементОтбора.ВидСравнения    = ВидСравненияКомпоновкиДанных.Равно
   и (ЭлементОтбора.ПравоеЗначение = Новый ПолеКомпоновкиДанных("ИмяВидаРасчета") или ЭлементОтбора.ПравоеЗначение = "Конечное сальдо" или ЭлементОтбора.ПравоеЗначение = "Начальное сальдо")
   и (ЭлементОтбора.ЛевоеЗначение  = Новый ПолеКомпоновкиДанных("ИмяВидаРасчета") или ЭлементОтбора.ЛевоеЗначение = "Конечное сальдо" или ЭлементОтбора.ЛевоеЗначение = "Начальное сальдо")
    тогда
ТиповыеОтчеты.УстановитьПараметрВывода(КомпоновщикНастроек, "VerticalOverallPlacement", РасположениеИтоговКомпоновкиДанных.Нет);
КонецЕсли;
КонецЦикла;


КонецПроцедуры

ЭлементыНастройки = Новый Массив(4);

ТекстЗапроса = СхемаКомпоновкиДанных.НаборыДанных.Начисления.Запрос;
УправлениеОтчетамиЗК.ПолучитьТаблицуРаботников(, ТекстЗапроса, "ТаблицаДвижений", Истина);
УправлениеОтчетамиЗК.ПодставитьРасчетПолей(ТекстЗапроса, "РаботникиПредприятия", "РаботникиОрганизаций", "ПодразделениеОрганизации", "Должность");
СхемаКомпоновкиДанных.НаборыДанных.Начисления.Запрос = ТекстЗапроса;

Если СохраненнаяНастройка = Неопределено Тогда
СохраненнаяНастройка =  Справочники.СохраненныеНастройки.ПустаяСсылка();
КонецЕсли;

Если КомпоновщикНастроек = Неопределено Тогда
КомпоновщикНастроек =  Новый КомпоновщикНастроекКомпоновкиДанных;
КонецЕсли;
УправлениеОтчетами.ЗаменитьНазваниеПолейСхемыКомпоновкиДанных(СхемаКомпоновкиДанных)



Теги:

Похожие темы (5)

Рейтинг@Mail.ru

Поиск