Представления в запросах. ЗУП

О пользе функции ЗаменитьЗапросыКПредставлениямВиртуальныхТаблиц(Запрос.Текст, ). Где есть запрос-пустышка, например, «Представления_КадровыеДанныеСотрудников.
Тестировано в Зарплата и управление персоналом КОРП, редакция 3.1 (3.1.4.171) на платформе 8.3.12.1412. В этой конфигурации я насчитал 66 макетов в различных отчетах, где применяется этот механизм, в которых можно получить до 220 различных данных о сотруднике. Если доработать типовой код, то возможно этот список добавить. В моем примере я нахожу данные: Организация, Сотрудник, ФизЛицо, ФИОПолные, ДатаРождения, МестоРождения, ДокументПредставление, АдресПоПропискеПредставление, АдресМестаПроживанияПредставление, ДатаПриема, Должность, ДатаУвольнения,ТрудовойДоговорДата,ТрудовойДоговорНомер, Подразделение.

  Большинство отчетов в процедуре ИнициализироватьОтчет() имеют вызов   ЗарплатаКадрыОбщиеНаборыДанных.ЗаполнитьОбщиеИсточникиДанныхОтчета(ЭтотОбъект) . Она обрабатывает запрос-пустышку(Представления_) из макета СКД отчета.

1. Вариант.  Мой. Предлагаю пользоваться в просто функцией связанной с названной — ЗарплатаКадрыОбщиеНаборыДанных.ЗаменитьЗапросыКПредставлениямВиртуальныхТаблиц(Запрос.Текст, ); Здесь обычный текст где есть запрос-пустышка.. Мой код из обработки немного упрощен для просмотра:

 

Какие еще данные можно извлечь? 220 видов данных о сотруднике можно получить: 

 

2. Вариант.  Спасибо автору xrrg публикации Введение в механизм представлений в ЗУП ред. 3

 

P.S. Не в тему, но очень полезен метод для отладки запросов до выполнения:
 Запрос.ВыполнитьПакетСПромежуточнымиДанными() [ИндексТаблицы].выгрузить()
а для отладки менеджера врем.таблиц после выполнения запроса: Запрос.МенеджерВременныхТаблиц.Таблицы.Найти("Имя_ВременнойТаблицы").ПолучитьДанные().Выгрузить()
просто добавить строку в ТаблицуЗначений — ТЗ.Вставить(ИндексСтроки).

 

14 Comments

  1. IgorXml

    (1) Если данные переносились, то твой запрос для получения списка сотрудников правильно. Но может проще обратиться прямо к «РегистрСведений.ТекущиеКадровыеДанныеСотрудников»?

    Reply
  2. IgorXml

    (2) это ошибка.

    (1) Недооценил код. Спасибо. Код полностью заменяет весь код в публикации. Лишь бы 1С завтра не исправил функционал 🙂

    Для себя добавил бы две строки:

        //Запрос.Выполнить();
    Результат = Запрос.ВыполнитьПакетСПромежуточнымиДанными();
    ТаблицаЗначений_20 =   Результат[19].Выгрузить();
    
    Reply
  3. Serj1C

    (3) Из Менеджера Временных Таблиц теперь можно получать таблицы по наименованию, а не по индексу.

    А то опасно так, с обновлением количество запросов представления изменится с вероятностью 146% и ваш код станет неработоспособным.

    Reply
  4. ccserg

    а что это за цифра 19 ?

    ТаблицаЗначений_20 = Результат[19].Выгрузить();

    Reply
  5. IgorXml

    (5) Самому так больше нравится 🙂

        //Запрос.Выполнить();
    Результат = Запрос.ВыполнитьПакетСПромежуточнымиДанными();
    //ТЗ_20 =   Результат[19].Выгрузить();
    ТЗ_ВТКадровыеДанныеСотрудников =  Запрос.МенеджерВременныхТаблиц.Таблицы.Найти(«ВТКадровыеДанныеСотрудников»).ПолучитьДанные().Выгрузить();
    
    Reply
  6. vat-74

    (1)Звездочка в КоллекцияПолей для примера стоит? т.к. с ней вызывается исключение.

    ОбщийМодуль.КадровыйУчетБазовый.Модуль(5615)}: Среди кадровых данных сотрудников нет данных с именем «*»

    ВызватьИсключение ТекстСообщенияИсключения;

    Reply
  7. user620235_m_ginger

    я в отладчике пишу

    Запрос.МенеджерВременныхТаблиц.Таблицы.ПОЛУЧИТЬ(«ВТКадровыеДанныеСотрудников»).ПолучитьДанные().Выгрузить();

    Есть ли разница в этих двух методах (Найти и Получить)?

    При этом запрос не обязательно выполнять с промежуточными данными — из менеджера он и при Запрос.Выполнить() спокойно все данные вытаскивает.

    Reply
  8. IgorXml

    (8) с промежуточными данными , потом Запрос.Выполнить() и потом к менеджеру. Это не связано. Вы правы. Исправлю.

    А вопрос пока не проверил.

    Reply
  9. AMS_Guskov_VL

    Оп. Как раз сейчас пришел к мысли, что надо разобраться с этим механизмом. Подскажет может кто в треде, по поводу дополнения такого «запроса»? Написал свой РС по всем канонам зуп (с разграничением прав в РЛС, периодической таблицей и т.д.) и встал вопрос, что эти данные нужно показывать в отчетах (почти всех кадровых). Хотеся описание мануал или записки о том как такая интеграция реализуется.

    Reply
  10. IgorXml

    (10) свой «параметр» чтобы типовое прелставление в запросах вытаскивал?

    Reply
  11. AMS_Guskov_VL

    (11) «параметр», по которому БСП сама зацепит мой метод ЗапросВТРнгистрСведений в обработке ИнициализироватьОтчет() и добавить ВТ с моим регистром и добавит нужное поле в конечный набор данных.

    Reply
  12. IgorXml

    (12) Надо править код в общем модуле. Глобальный поиск по строке «Представления_» запустить. И там добавлять. У меня есть в коде такое. Если интересно могу позднее выложить.

    Reply
  13. AMS_Guskov_VL

    (13)буду оч признателен.

    Reply
  14. IgorXml

    (14) 1. В общем модуле «ЗарплатаКадрыОбщиеНаборыДанныхБазовый» Функция ПолучитьТекстОбщегоЗапроса( :

      |////////////////////////////////////////////////////////////////////////////////
    |ВЫБРАТЬ РАЗРЕШЕННЫЕ РАЗЛИЧНЫЕ
    | ДАТАВРЕМЯ(1, 1, 1) КАК Период,
    | …
    | ЗНАЧЕНИЕ(Справочник.НАШСПРАВОЧНИК.ПустаяСсылка) КАК НАШСПРАВОЧНИК,
    | …
    | 0 КАК ПриоритетРабочегоМеста
    |ПОМЕСТИТЬ Представления_КадровыеДанныеСотрудниковАнализНачисленийИУдер­жаний
    |ГДЕ
    | «»ТолькоРазрешенные»» = ИСТИНА
    |;
    |
    

    Показать

    Reply

Leave a Comment

Ваш адрес email не будет опубликован. Обязательные поля помечены *