Процедура ПриКомпоновкеРезультата

Коллекция кода

На вопрос «Что можно делать в СКД , в процедуре ПриКомпоновкеРезультата ?» смело отвечайте «Все!» и вы не ошибетесь. Ниже список приемов кодирования внутри процедуры ПриКомпоновкеРезультата, подходит для УТ 11.4.6.188 и многих других современных программ. Пункты 6-8 уже подробно описаны на сайте, включил их для полной картины. Хотелось обобщить, собрать все приемы в одном месте.

 

 1. Присвоить значение параметра.

 

 2. Дополнительная обработка табличного документа ДокументРезультат.

 

 3. Изменить текст запроса, получить значение параметра.

 

 4. Установить дополнительный отбор

 

 5. Подсчитать итог по отчету

 

 6. Внешние наборы данных (ссылки).

 

 7. Нестандартная обработка системы компоновки данных (ссылки).

 

 8. Нестандартная расшифровка (ссылки).

 

 Прочее

 Кроме всего вышеперечисленного, в процедуре «ПриКомпоновкеРезультата» можно устанавливать нужный вариант отчета или проверять права пользователя на доступ к отчету, но как правило, это выполняют раньше. В типовой конфигурации УТ разработчики чаще всего используют приемы 2-4, 7. Вот кажется и все.

Файл с учебным примером прикреплен.

Обновление от 13/09/2024

Для ДинамическогоСписка обратите внимание на функции 

ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбораДинамическогоСписка(),

ОбщегоНазначенияКлиентСервер.УстановитьПараметрДинамическогоСписка(),

ПолучитьИсполняемуюСхемуКомпоновкиДанных(),

ПолучитьИсполняемыеНастройкиКомпоновкиДанных().

 

 

 

51 Comments

  1. DoctorRoza

    Хороший материал, пригодится

    Reply
  2. vasilev2015

    (2) Здравствуйте !

    Это учебный пример.

    В реальности вместо текста должен быть вызов функции (вычисление значения).

    :))

    Reply
  3. Rais96

    (2) Вы смотрели байт-код этой процедуры? В си, компилятор оптимизирует байт-код и независимо как написать в одну или две строки на выходе будет один и тот же код. А программа пишется для программиста и понятнее как раз в две строки.

    Reply
  4. user623969_dusa

    (5) интерпретатор в 1с и вряд ли там есть оптимизация это ж даже не среда разработки

    Reply
  5. Rais96

    (6) «вот за это 1сников и не считают за программистов » — задело это, в других языках, в частности Си, это как раз допустимо и приветствуется как правило запись в две строки.Если Вы знаете как выполняется код в 1С, то тогда может и правы. Но 1С это все же среда разработки.

    Reply
  6. v3132

    Полезный материал и хорошо оформлен.

    Reply
  7. user623969_dusa

    (7) я не против записать в две строки, но дать переменной осмысленное название если она нужна в данном случае переменную надо назвать ВыражениеКомпоновки чтобы не путать со значением

    но переменная не нужна и можно было в комментарий записать или вообще в строковый реквизит вместо переменной

    «тут команда выполнить»

    я когда прочитал прямо почувствовал как у меня из-за напряжения в голове уменьшилось количество во нейронов, поэтому и высказал претензию автору образцы кода должны быть легкими для восприятия

    Reply
  8. webester

    (6)Вряд ли там есть оптимизация, это даже не среда разработки…

    Можно объяснить, для тупых, как связаны среда разработки и оптимизация байткода?

    Reply
  9. aximo

    прикольно, базовые вещи уже обсуждаем — напишите, что «при компановке» — это единственное правильное стандартизированное решение… а то многие до сих пор работают на «форме» и считают себя мегаспецами, ну а за ними переделывать все приходится))))

    Reply
  10. Rustig

    (2)

    1сников и не считают за программистов

    1сников это не волнует…

    радуйтесь жизни и не глядите в рот другим…

    Reply
  11. Rustig

    (0) не проверял, но в избранное положу….звездочку в карму

    Reply
  12. Бэнни

    (9)тут у нас волшебник господа. Он хочет оптимизировать код, но не алгоритм. Он борется за количество строк, но не хочет понять что, код для программиста а не для машины. И что читать а тем более отлаживать легче алгоритмы написанные не в одну строку с подстановкой параметров функций в месте их вычисления. Он хочет заменить переменную на комментарий. Наверное его код представляет из себя пол листа текста с пояснениями и одну строку вызова функции где все параметры вычисляются в месте вызова.

    Reply
  13. user623969_dusa

    (14) прочитал бы три раза прежде чем писать

    за колво строк я не борюсь — читай внимательно выше «я не против писать в две строки»

    ну и далее читай и думай, значит голову включай)

    Reply
  14. user623969_dusa

    (10) тупым объяснять — хорошая шутка))

    Reply
  15. webester

    (16)пруфов не будет, понятно, ты видимо просто умничал в (5) но немного обосрамс

    Reply
  16. Поручик

    Я этим пользуюсь сплошь и рядом. Редкий отчёт без неё, только самый простой

    Reply
  17. Armando

    В первом примере на снимке изображены параметры схемы компоновки данных. А в коде приведен пример установки параметров настроек компоновки данных. Все-таки важно понимать, какие параметры устанавливаем, а то можно словить неожиданные эффекты.

    Reply
  18. acanta

    (19) В коде можно изменить параметры схемы?

    Reply
  19. Armando

    (20) Можно

    Reply
  20. vasilev2015

    (19) Здравствуйте !

    спасибо за уточнение.

    Reply
  21. AlX0id

    Три раза за сегодня залез подглядеть — пришлось звездочку поставить %))

    Reply
  22. vasilev2015

    (24) Здравствуйте !

    да я сам только для того статью и написал, чтобы сюда подглядывать.

    Reply
  23. tamepjlah
    подходит для УТ 11.4.6.188 и многих других современных программ

    ЗУП 8.3.15.1489 не современная… Присвоение значения параметра выглядит примерно так:

    Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка)
    НашПараметр = Справочники.ПодразделенияОрганизаций.НайтиПоКоду(«9999»)
    
    Параметры = КомпоновщикНастроек.Настройки.ПараметрыДанных;
    Параметры.УстановитьЗначениеПараметра(«Подразделение», НашПараметр);
    КонецПроцедуры
    Reply
  24. logarifm

    Если Вы заговорили о штатных конфигурациях то позвольте с Вами в кой чем не согласится, а именно не все возможно сделать в процедуре ПриКомопоновкеРезультата, а именно, вот недавно пришлось решать задачу на базе конфигурации БСП. В отчете указаны параметры и отчет надо сделать с вызова команды. То есть есть документ Приход в нем необходимо добавить в подменю Отчеты нашу команду с вариантом отчета (это не главное). Главное то что отчет должен открыться сразу с параметрами из Номерами артикулов из документа. В отчете это не Отбор , а ПараметрДанных (так спроектированно). Так вот ПриКомпоновке нам никак не удасца присвоить наши значения параметров.

    В БСП имеется функционал:

    НастройкиОтчета.ОпределитьНастройкиФормы = Истина; (необходимо в модуле менеджера отчета или общего модуля описать)

    потом в модуле объекта Отчета уже прописать установку таких параметров.

    
    // Настройки общей формы отчета подсистемы «Варианты отчетов».
    //
    // Параметры:
    //   Форма — УправляемаяФорма, Неопределено — Форма отчета или форма настроек отчета.
    //       Неопределено когда вызов без контекста.
    //   КлючВарианта — Строка, Неопределено — Имя предопределенного
    //       или уникальный идентификатор пользовательского варианта отчета.
    //       Неопределено когда вызов без контекста.
    //   Настройки — Структура — см. возвращаемое значение
    //       ОтчетыКлиентСервер.ПолучитьНастройкиОтчетаПоУмолчанию().
    //
    Процедура ОпределитьНастройкиФормы(Форма, КлючВарианта, Настройки) Экспорт
    
    Настройки.События.ПриОпределенииПараметровВыбора = Истина;
    
    КонецПроцедуры
    
    
    // Вызывается в форме отчета перед выводом настройки.
    //   Подробнее — см. ОтчетыПереопределяемый.ПриОпределенииПараметровВыбора().
    //
    Процедура ПриОпределенииПараметровВыбора(Форма, СвойстваНастройки) Экспорт
    
    Параметры = Форма.Параметры;
    
    Если Параметры.Свойство(«ПараметрКоманды») Тогда
    
    Если Параметры.Свойство(«ОписаниеКоманды»)
    И Параметры.ОписаниеКоманды.Свойство(«ДополнительныеПараметры») Тогда
    
    Если СвойстваНастройки.Тип = «ЗначениеПараметраНастроек»
    И СвойстваНастройки.ПолеКД = Новый ПолеКомпоновкиДанных(«ПараметрыДанных.Номера»)
    И Параметры.ОписаниеКоманды.ДополнительныеПараметры.ИмяКоманды = «СОтборомПоНомерам» Тогда
    
    Список = ПолучитьСписокНомерИзТабличнойЧасти(Параметры.ПараметрКоманды);
    СвойстваНастройки.ПользовательскаяНастройкаКД.Значение = Список;
    
    
    КонецЕсли;
    
    КонецЕсли;
    
    КонецЕсли;
    
    КонецПроцедуры
    
    

    Показать

    Может кому пригодится…

    Reply
  25. vasilev2015

    Здравствуйте !

    Фразу «…что можно сделать ? — Все..» я написал с долей иронии.

    Как я понимаю, открытие отчета происходит раньше формирования, раньше события «ПриКомпоновке…»

    Кстати, я следующую статью уже заготовил, там будет про ОпределитьНастройкиФормы.

    В любом случае, спасибо за отзыв, может кому пригодится.

    Reply
  26. logarifm

    (28) Обратите уклон на БСП в этом сущность. 1С как обычно все описала как смогли на ИТС

    Я только хотел чтобы Вы обратили внимание именно на БСП. Там много фичей при получении настроек Вне формы (основной) эта форма переопределяется. И вот здесь нам разработчики немножко оставили поле для деятельности.

    Reply
  27. Yashazz

    Ну, сборник самоочевидностей и баянов, конечно, но как антисклерозная записная книжка — вполне прокатит и потому невредно быть.

    Reply
  28. vasilev2015

    (30) Здравствуйте, Яков !

    Откуда Вы узнали про мой склероз ?

    Не помню, чтобы я про это кому-то рассказывал….

    Reply
  29. tamepjlah

    (26) только сейчас заметил, что скинул версию платформы. ЗУП 3.1.9.227

    Reply
  30. vasilev2015

    (33) Здравствуйте !

    Мало адептов ЗУП, никто не заметил. Можно еще посмотреть версию БСП командой

    СтандартныеПодсистемыСервер.ВерсияБиблиотеки();

    ?

    Во всех отчетах используют Параметры.УстановитьЗначениеПараметра, или исключительный отчет ?

    Reply
  31. John_d

    (1) Добрый день! Спасибо, интересно.

    Вот еще статья по теме ПриКомпоновкеРезультата.

    1. Использование Набора данных и загрузка в него Таблицы значений.

    3. Установить параметры в модуле отчета

    4. Заголовок в отчете СКД

    https://infostart.ru/public/967277/

    Reply
  32. vasilev2015

    (35) Здравствуйте !

    Посмотрел, неплохая статья.

    Reply
  33. tamepjlah

    (34)

    Можно еще посмотреть версию БСП командой

    3.0.1.440

    Во всех отчетах используют Параметры.УстановитьЗначениеПараметра, или исключительный отчет ?

    В типовых отчетах для каждого параметра используется примерно такой код:

    ПараметрДанных = КомпоновщикНастроек.Настройки.ПараметрыДанных.Элементы.Найти(«НачалоПериода»);
    ПараметрДанных.Значение = ПериодНастройкаПользовательская.Значение.ДатаНачала;
    ПараметрДанных.Использование = Истина;
    

    Мы для себя решили, что в самописных отчетах будем получать все параметры данных и уже с этим работать

    Reply
  34. skv_79

    (1) Спасибо, всегда интересно читать примеры, собранные опытным путем в библиотеку знаний и приемов. Повышает скилл программиста 🙂

    Reply
  35. Yashazz

    (31) Я вообще-то про себя) потому что у меня, к примеру, бывает — забывается некая тонкость, а в таком поминальничке раз, и посмотрел.

    Reply
  36. vasilev2015

    (29) Здравствуйте !

    опубликовал статью про БСП, как вы хотели

    https://infostart.ru/public/1100185/

    Reply
  37. webester

    (23)

    добрый я с утра…

    очень неплохо

    для этого надо понимать отличия интерпретатора от компилятора

    не не не, это я понимаю, я не понимаю,как ты аргументировал отсутствие оптимизации, тем, что для тебя конфигуратор не среда разработки. То есть с твоего позволения я процитирую: (6)

    интерпретатор в 1с и вряд ли там есть оптимизация это ж даже не среда разработки

    Вот я и спрашиваю, раз ты такой умный то может расскажешь(как нибудь утром, когда ты добрый) где связь интерпетатора и конфигуратора которую ты увидел когда писал (6)

    (23)

    интепретатор выполняет код таким какой он есть по сути выполняя построчный перевод, в нем по определению нет оптимизации

    Ничоси, расскажи это java php и perl а еще расскажи как 1с вычисляет(не всегда конечно) бесконечные циклы.

    изначально мой пост был о том что заметил человек в (19) попробуй там прочитать и понять

    не, изначально сообщение было о том, что оптимизаций нет, потому, что конфигуратор не такой, как тебе бы хотелось

    не считай себя тупым не отчаивайся)

    Спасибо, добрый, человек, я стараюсь

    Reply
  38. Nefilimus

    Спасибо большое! Было приятно узнать новое.

    Reply
  39. user623969_dusa

    (41) плохо стараешься, пишешь код и смотришь как его понимает конфигуратор — есть оптимизация или нет для этого все средства у тебя есть удачи

    если бы ты включил голову и вчитался в приведенную тобой цитату то увидел бы в ней предположение и никакой аргументации, вероятно из-за этого ты увел спор в другую тему совсем не связанную с темой топика

    еще раз вернуться к теме топика и высказанной мной претензии — объявляется переменная, которая тут же используется и больше нигде — это не нужно и конфигуратор или интерпретатор или «среда разработки» как ты ее называешь вряд ли такое оптимизирует будет выделена память на ненужную переменную

    вроед то что конфигуратор не среда обработки я тоже пояснил — ты загуглил «определение конфигуратора» получил конфигуратор — это режим работы программы

    Reply
  40. webester

    (43)

    плохо стараешься

    как могу, сорян, что разочаровал, в следующий раз буду стараться лучше

    если бы ты включил голову и вчитался в приведенную тобой цитату то увидел бы в ней предположение и никакой аргументации, вероятно из-за этого ты увел спор в другую тему совсем не связанную с темой топика

    Я просто спросил по теме поста в (6) мне показалось, что это среда неразработки(здесь и далее имеется ввиду конфигуратор) и оптимизация выполняемого кода, две не связанные вещи. Я подумал, может я туповат и не понимаю элементарных вещей? Спросил на всякий, ты сказал, да ты туповат. Я спросил но, чего же я не понял? Ты вместо аргументов отвечаешь, что я спор куда-то увожу. По моему туповат не я.

    как ты ее называешь вряд ли такое оптимизирует будет выделена память на ненужную переменную

    Может быть у тебя есть исходные коды, что бы делать такие заявления? Или хотя бы рекомендации вендора?

    ты загуглил «определение конфигуратора» получил конфигуратор — это режим работы программы

    Просто поток сознания, никак не относящийся к беседе с обсуждением что предполагает под собой термин.

    Reply
  41. user623969_dusa

    (44) блин ты не до конца туповат, ты молодец стараешься, правильно понимаешь ты уводишь спор не в ту сторону, я сказал фразу конфигуратор не среда разработки на уровне бога нет… хочешь верь хочешь нет, приводил пример для кого -то и блокнот среда разработки, только сверху нужно добавить интерпретатор строк текста, ты так и не понял что конфигуратор ближе к песочнице — ограниченной среде для написания своего кода… конечно кодов у меня нет и с разработчиками 1с не спал , я работал в андроид студио, в эклипсе и сравниваю с ними… касательно примера — если бы я указал неиспользуемую переменную в них среда разработки вежливо мне подсказала что уважаемый переменная не используется, а конфигуратор смолчит и много других маст хев фишек — история изменений, версии приложений вних реально удобнее именно разрабатывать а с конфигуратором я отдельно держу библиотеку вот таких вот приведенных примеров кода, только у меня переменная для выражения скд не называется значением скд!

    Reply
  42. user623969_dusa

    (44)когда говоришь что конфигуратор среда разработки хочется добавить како-нибудь прилагательно вроде — доисторическая, урезанная или вот постарался нашел в некоторых источниках аргумент в твою пользу называют таки конфигуратор объектно-ориентированной средой разработки… вот без прилагательного просто средой разработки конфигуратор не называть — это против моей религии) понятно наконец

    Reply
  43. user623969_dusa

    (44) крик души — тупые псевдоразработчики 1с у надписи дата отправки поставили поле ввода дата доставки а блокнот конфигуратор не подсказывает)

    Reply
  44. webester

    (45)ты таки пытаешься ответить не на тот вопрос, который я задал в (10) я не спорю среда разработки конфигуратор или нет. Я работал в php storm, когда писал первые сайты, я писал1c-cod.ru в PyCharm. Сейчас периодически курю другие вещи в visual studio code. Были и сублаймы и атомы и нотепад++ и обычный блокнот. Я понимаю разницу между средой разработки и продвинутым текстовым редактором. Может быть конфигуратор хороший, может быть плохой(на тему именно переменной, меня бесит когда мне тыкают этим при сборке, или каждой компиляции) но вопрос был другим. Может все таки ответишь на него а сопли на тему, что тебе, что то не нравится в том как работает конфигуратор или что не так названа переменная в абстрактном примере оставь себе. Уважаемые знатоки внимание вопрос связанный с (6)

    Как все таки связаны несреда неразработки и оптимизация выполняемого байт кода? Большая просьба уважаемого user623969_dusa не уводить спор в сторону.

    конечно кодов у меня нет и с разработчиками 1с не спал

    тогда мне непонятно, откуда выводы про,отсутствие оптимизации. С потолка?

    Reply
  45. webester

    (46)Абсолютно наплевать, чем ты считаешь конфигуратор. Не могу понять, почему до тебя это до сих пор не дошло.

    Reply
  46. user623969_dusa

    (48) не могу ответить на вопрос который не задавал где ты увидел до 10 про байт код и среду разработки

    как ты из (6)Вряд ли там есть оптимизация, это даже не среда разработки…

    перевел это в

    Можно объяснить, для тупых, как связаны среда разработки и оптимизация байткода?

    ты невнимательно читал на что я ответил в (6)

    оптимизация может быть не только байт кода а подсказки среды разработки как лучше написать программу представляешь — это тоже оптимизация — среда разработки подсказывает лучшее решение

    ты не узнал контекст используемого слова придумал свое и просишь меня дать ответ интересный ход, я не случайно каждый раз тебя возвращаю к теме — уходишь от нее все время ты

    даже попробую восстановить ход мыслей чтоб ты не мучался цени

    5. Rais96 26.07.19 14:33

    (2) Вы смотрели байт-код этой процедуры? В си, компилятор оптимизирует байт-код и независимо как написать в одну или две строки на выходе будет один и тот же код. А программа пишется для программиста и понятнее как раз в две строки.

    отвечаю на 5 поправляю что конфигуратор интерпретирует код и написанный в модулях а значит не оптимизирует и далее по тексту — не будет код одинаковым если сначала идет оператор присваиваний а затем вызов процедуры

    или сразу вызов процедуры с установленным значением это мог бы сделать компилятор но у нас интерпретатор, байт код для этого смотреть не надо — смотришь средство конфигуратора замер производительности на выполнение присваивания тратится время

    не утони в тексте — не уйди опять в сторону

    Reply
  47. user623969_dusa

    (48) еще раз отсутствие оптимизации простые логические рассуждения — есть замер производительности он показывает время выполнения команд — зачем замерять команду если она будет оптимизирована, значит работает интерпретатор — каждая команда имеет точку входа и выхода

    кстати то что интерпретатор выполняет бесконечные циклы чтоб ты знал это не оптимизация а обработка исключительной ситуации — контролируется команда на повторение не больше Н раз — я не знаю, с разработчиками не спал, это логика , не всем доступно

    ты ж не знаешь что такое оптимизация — это выбор лучшего из альтернатив, приводящих к решению.. бесконечный цикл к решению не приводит, это ошибочная ситуация а не вариант оптимизации.. с тобой было бы приятно рассуждать если бы в твоем тексте была бы не вода а вот такие рассуждения.. в прошлом (44) ты старался и мне показалось ты что то понял а тут (48) опять скатился на непонимание

    Reply
  48. user623969_dusa

    (48) сложно написал поймешь ли,

    итого кратко простыми словами

    человек в 5 говорит какая разница 2 строки или одна конфигуратор оптимизирует

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

    байт код не смотрим, смотрим замер производительности

    тебе кажется что в моих ответах вода потому что ты ждешь что я тебе расскажу про связь среды разработки и оптимизации байт кода… если все еще ждешь прочти 3 предыдущих абзаца повторно

    Reply
  49. user623969_dusa

    (52) вот из-за такой маленькой фигни, раздул столько воды, говорила мне мама не объясняй ничего тупым людям, ты ведь сам в (10) признался. Сгубила меня моя доброта. Убивают тупые люди доброту на земле. Кстати тупых людей больше — доброты меньше))

    Reply
  50. acanta

    (52) это странно. Имхо разделителем строк для интерпретатора является точка с запятой, а для программиста enter.

    Reply
  51. webester

    (50)

    оптимизация может быть не только байт кода а подсказки среды разработки как лучше написать программу

    Ах оптимизация среды разработки…так надо было сразу и сказать, не было бы срача. На тему, оптимизации конфигуратора есть оптимизаторы ввиде турбоконфа и снегопата. В последнем скриптами можешь сам прикрутить, все, что хочешь. Вроде как. Я сам не пользуюсь, но по описанию, вроде было так.

    (51)

    контролируется команда на повторение не больше Н раз

    А если надо больше Н раз?

    (52)

    тебе кажется что в моих ответах вода

    Неее мне так не кажется, все отлично. читать одно удовольствие, еще бы не грубил в процессе, вообще бы красота. Но это вроде как норм, люди любят хамить в нашей стране в России живем.

    (52)

    байт код не смотрим, смотрим замер производительности

    Ок, согласимся. Но все равно наплевать ибо это демонстрационный пример, объясняющий механику и не может должен выступать образцом кода.

    (53)

    вот из-за такой маленькой фигни, раздул столько воды

    Бомбануло знатно, лулзов норм прилетело, получил тонну удоволствия от этих брызг эмоций, правда монитор мне забрызгал с обратной стороны, как его теперь оттирать хз.

    (53)

    Сгубила меня моя доброта. Убивают тупые люди доброту на земле

    Что случилось то? Надеюсь с тобой все хорошо. Не переживай так сильно пожалуйста из-за переменной в конфигураторе.Или из-за чего ты там так сильно разволновался. Неважно, просто не переживай )

    Reply

Leave a Comment

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