1. Набираем команду codeby webinar. Набираем команду для организации и проведения вебинаров. Подробнее ...

    Скрыть объявление
  2. Требуются разработчики и тестеры для проекта codebyOS. Требования для участия в проекте: Знание принципов работы ОС на базе Linux; Знание Bash; Крайне желательное знание CPP, Python, Lua; Навыки системного администрирования. Подробнее ...

    Скрыть объявление
  3. Получи 30.000 рублей. Для получения денег необходимо принять участие в конкурсе авторов codeby. С условиями и призами можно ознакомиться на этой странице ...

    Внимание! Регистрация авторов на конкурс закрыта.

    Скрыть объявление

Объединение Справочников Через Тз

Тема в разделе "Базы данных и администрирование", создана пользователем nestovby, 28 фев 2012.

  1. nestovby

    nestovby Гость

    Репутация:
    0
    Вновь возвращаюсь к моей проблеме с обьединением нескольких справочников (3-ех). С запросами не получилось решить проблему http://codeby.net/forum/threads/45776.html
    По советам сделал через Таблицу Значений, но результат точно такой же - не получается вывести все в одной строке.
    вот картинка:
    Объединение Справочников Через Тз
    Нужно чтобы выделенные ставки выводились напротив свох Степеней и Званий, а они выводятся отдельно.
    Вроде бы правильно написал "Свернуть", но видимо как-то ошибка в структуре вывода справочников. Не могу никак понять в чем ошибка.
    Подскажите, пожалуйста, как мне решить мою ошибку и в чем я не прав.
    Я вывожу сначала главный справочник, потом по отдельности два других - но видимо это не правильно, так где же мне их вывести?.
    вот мой код:
    Код:
    Процедура Сформировать()
    перем пд, ИтогоЗаСтепень, ИтогоЗаЗвание;
    Таб=СоздатьОбъект("ТаблицаЗначений");
    Если Подр=1 Тогда
    Таб.НоваяКолонка("Подразделение","Справочник.Подразделения");
    КонецЕсли;
    СпрСотр=СоздатьОбъект("Справочник.Сотрудники");
    ПрикДл=СоздатьОбъект("Справочник.ПриказыДлительногоДействия");
    КадрДанные=СоздатьОбъект("Справочник.КадровыеДанные");
    ДопУчСт= СоздатьОбъект("Справочник.ДоплатыЗаУченуюСтепень");
    ДопУчЗв= СоздатьОбъект("Справочник.ДоплатыЗаУченыеЗвания");
    Таб.НоваяКолонка("Степень2","перечисление.УченаяСтепень");
    Таб.НоваяКолонка("Степень","перечисление.УченаяСтепень");
    Таб.НоваяКолонка("Ставка","Число",4,2);
    Таб.НоваяКолонка("ЧислоСтавокНеППС","Число",4,2);
    Таб.НоваяКолонка("ЧислоСтавокДляППС","Число",4,2);
    Таб.НоваяКолонка("Звание","Перечисление.УченоеЗвание");												
    Таб.НоваяКолонка("Звание2","Перечисление.УченоеЗвание"); 
    Таб.НоваяКолонка("Совместитель","Справочник.ВнутренниеСовместители");
    СпрСотр.ИспользоватьДату(ДатаОт);
    СпрСотр.ПорядокНаименований();
    СпрСотр.ВыбратьЭлементы();
    Пока СпрСотр.ПолучитьЭлемент()=1 Цикл
    Если СпрСотр.ЭтоГруппа() = 1 Тогда
    Продолжить;
    КонецЕсли;
    Если СпрСотр.Родитель = СпрУволенные Тогда
    Продолжить;
    КонецЕсли;
    Если (СпрСотр.ВидРаботника=Перечисление.ВидыРаботников.ТрудовойДоговор) Тогда
    Продолжить;
    КонецЕсли;
    
    ПрикДл.ИспользоватьВладельца(СпрСотр.ТекущийЭлемент());
    ПрикДл.ВыбратьЭлементы();
    Пока ПрикДл.ПолучитьЭлемент()=1 Цикл
    пр=0;
    Если (ПрикДл.Приказ.Вид()="ПостоянныеНачисленияУдержания") и (ПрикДЛ.Приказ.ВидРасч=ВидРасчета.ПрочиеНачисления) Тогда
    Если (ПрикДл.Приказ.Вид.Код="4") или (ПрикДл.Приказ.Вид.Код="5") Тогда
    пр=1;
    КонецЕсли;
    Если пр=1 Тогда
    Сообщить(СпрСотр.Наименование);
    КадрДанные.ИспользоватьВладельца(СпрСотр.ТекущийЭлемент());
    КадрДанные.ВыбратьЭлементы();
    пока кадрДанные.ПолучитьЭлемент()=1 цикл
    Таб.НоваяСтрока();
    Таб.Степень=КадрДанные.УченаяСтепень.ученаястепень;
    Таб.Звание=КадрДанные.УченоеЗвание;
    // Таб.Зв=?(ПустоеЗначение(КадрДанные.УченоеЗвание)=1,ДопУчЗв.УченоеЗвание,КадрДанные.УченоеЗвание);  
    Таб.Ставка=?(ПустоеЗначение(ПрикДл.Приказ.ВнСовместитель)=1,СпрСотр.Ставка,ПрикДл.Приказ.ВнСовместитель.Ставка.Получить(ДатаОт));  
    Таб.Совместитель=ПрикДл.Приказ.ВнСовместитель;
    конеццикла;
    КонецЕсли;
    КонецЕсли;
    КонецЦикла;
    КонецЦикла;																 
    
    // ПЕРВЫЙ СПРАВОЧНИК Я ВЫВЕЛ ПРАВИЛЬНО, ТЕПЕРЬ ВЫВОЖУ ДВА ДРУГИХ. МОЖЕТ БЫТЬ ИХ НУЖНО ГДЕ-ТО В ДРУГОМ МЕСТЕ ВЫВЕСТИ, ЧТОБЫ СОЕДИНИТЬ ОДИНАКОВЫЕ ПОЛЯ? 
    
    ДопУчЗв.выбратьэлементы();
    пока ДопУчЗв.получитьЭлемент()=1 цикл
    Таб.НоваяСтрока();
    Таб.Звание2=ДопУчЗв.УченоеЗвание;
    Таб.ЧислоСтавокДляППС=ДопУчЗв.ЧислоСтавокДляППС.Получить(ДатаОт);
    конеццикла; 
    
    ДопУчСт.выбратьэлементы();
    пока ДопУчСт.получитьэлемент()=1 цикл
    Таб.НоваяСтрока();			 
    Таб.Степень2=ДопУчСт.УченаяСтепень;
    Таб.ЧислоСтавокНеППС=ДопУчСт.ЧислоСтавокНеППС;						
    конеццикла;	 
    
    Таб.Свернуть("Степень,звание,Степень2,Звание2,Совместитель,ЧислоСтавокНеППС,ЧислоСтавокДля
    ППС","Ставка");
    
    ТабД=СоздатьОбъект("Таблица");
    ТабД.ВывестиСекцию("Заголовок");
    ТабД.ПовторятьПриПечатиСтроки(3,3);
    ТабД.ВывестиСекцию("Шапка");
    Если Подр=1 Тогда
    Таб.Сортировать("Ставка");
    Иначе
    Таб.Сортировать("Ставка");
    КонецЕсли;
    Таб.ВыбратьСтроки();
    Пока Таб.ПолучитьСтроку()=1 Цикл
    ТабД.ВывестиСекцию("Строка");
    КонецЦикла;
    КС=ТабД.КоличествоСтраниц();
    ТабД.ВывестиСекцию("Итого");
    ТабД.Показать("Доплаты за степень и звание");
    КонецПроцедуры
    ДатаОт=ТекущаяДата();
    СтрОрг=Перечисление.СтруктураОрганизации.ОсновнойСостав;
    Подр=1;
     
  2. vbs

    vbs Well-Known Member

    Репутация:
    0
    Регистрация:
    18 фев 2007
    Сообщения:
    1.708
    Симпатии:
    3
    Код читать очень долго, но, кажется, должна выручить группировка ТЗ
     
  3. nestovby

    nestovby Гость

    Репутация:
    0
    а подскажите пожалуйста как и где эту группировку делать? ее нужно прописывать сразу после циклов в моем случае?
     
  4. Darlock

    Darlock Well-Known Member

    Репутация:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    560
    Симпатии:
    1
    vbs, с моей колокольни. Группировка не совсем поможет.в том топике предложили использовать СКД. а сейчас увидв скрин, стало гораздо яснее. только СКД и поможет. там и группировки развернуть можно.

    nestovby, опыт в 7.7 хорошая вещь, но не в этом вопросе. Обратите свой взор на возможности 8.1 (8.2) в плане СКД, а в частности на ресурсы. С их помощью ваша задача может быть ршена.
     
  5. nestovby

    nestovby Гость

    Репутация:
    0
    да, но я ищу возможности решения в 7.7 версии
     
  6. nestovby

    nestovby Гость

    Репутация:
    0
    вот пишу такой код:
    Код:
    	СпрСотр.ВыбратьЭлементы();
    Пока СпрСотр.ПолучитьЭлемент()=1 Цикл
    Если СпрСотр.ЭтоГруппа() = 1 Тогда
    Продолжить;
    КонецЕсли;
    Если ПустоеЗначение(СпрУволенные)=0 Тогда //бред
    Если СпрСотр.Родитель = СпрУволенные Тогда
    Продолжить;
    КонецЕсли;
    КонецЕсли;	
    
    Если (СпрСотр.ВидРаботника=Перечисление.ВидыРаботников.ТрудовойДоговор) Тогда
    Продолжить;
    КонецЕсли;
    
    ПрикДл.ИспользоватьВладельца(СпрСотр.ТекущийЭлемент());
    ПрикДл.ВыбратьЭлементы();
    Пока ПрикДл.ПолучитьЭлемент()=1 Цикл
    пр=0;
    Если (ПрикДл.Приказ.Вид()="ПостоянныеНачисленияУдержания") и (ПрикДЛ.Приказ.ВидРасч=ВидРасчета.ПрочиеНачисления) Тогда
    Если (ПрикДл.Приказ.Вид.Код="4") или (ПрикДл.Приказ.Вид.Код="5") Тогда
    пр=1;
    КонецЕсли;
    Если (пр=1) и (ПустоеЗначение(ПрикДл.Приказ.ВнСовместитель)=0) и (ПрикДл.Приказ.ВнСовместитель.ДатаУвольнения<>Дата(0)) и (ПрикДл.Приказ.ВнСовместитель.ДатаУвольнения<ДатаОт) Тогда
    пр=0;
    КонецЕсли;
    Если пр=1 Тогда
    Сообщить(СпрСотр.Наименование); 
    
    КадрДанные.ИспользоватьВладельца(СпрСотр.ТекущийЭлемент());
    КадрДанные.ВыбратьЭлементы();
    пока кадрДанные.ПолучитьЭлемент()=1 цикл 
    Таб.НоваяСтрока();
    Таб.Степень=КадрДанные.УченаяСтепень.ученаястепень;
    Таб.Звание=КадрДанные.УченоеЗвание;
    Таб.Ставка=?(ПустоеЗначение(ПрикДл.Приказ.ВнСовместитель)=1,СпрСотр.Ставка,ПрикДл.Приказ.ВнСовместитель.Ставка.Получить(ДатаОт));				
    
    Таб.Совместитель=ПрикДл.Приказ.ВнСовместитель;
    
    Если ДопУчЗв.НайтиЭлемент(КадрДанные.УченоеЗвание,,УченоеЗвание)=1 Тогда
    Таб.ЧислоСтавокДляППС=ДопУчЗв.ЧислоСтавокДляППС.Получить(ДатаОт);
    Иначе
    Сообщить("Не нашли "+КадрДанные.УченоеЗвание);
    КонецЕсли;
    
    Если ДопУчСт.НайтиЭлемент(КадрДанные.УченаяСтепень.УченаяСтепень)=1 Тогда 
    Таб.ЧислоСтавокНеППС=ДопУчСт.ЧислоСтавокНеППС.Получить(ДатаОт); 
    Иначе
    Сообщить("Не нашли "+КадрДанные.УченаяСтепень.УченаяСтепень);
    КонецЕсли;	 
    конеццикла;
    КонецЕсли;
    КонецЕсли;
    и не выводит ЧислоСтавокНеППС и ЧислоСтавокДляППС. Не находит элемент ДопУчСт.НайтиЭлемент(КадрДанные.УченаяСтепень.УченаяСтепень)
    не пойму в чем дело.
     
Загрузка...

Поделиться этой страницей