1с табличный документ отображать группировки
Обновлено: 06.07.2024
По сути, это простой пример по следам решения простой конкретной задачи. Но, к своему удивлению, навскидку я не нашёл таких решений, а значит, почему бы и не выложить.
Представленный вариант - для толстого клиента или для сервера. Желающие могут превратить таблицу и дерево значений в коллекции или данные формы, сути это не меняет. Суть очень проста - сериализовать в XDTO, через XML в DOM и прочитать сведения об иерархии по нужным узлам-тегам. Производительность на больших объёмах будет, естественно, не ахти, что надо учитывать; ну и если построитель DOM не потянет, придётся копать последовательным чтением XML. Мысль публикации лишь в том, что, хотя во встроенном языке нет возможности выяснить уровень области, данные об этом любой табличный документ хранит. Я поработал с группировками строк, нечто подобное можно сделать и для группировок колонок - это, к примеру, для любителей курочить выходной таб.документ СКД.
P.S. Если это баян, киньте в меня тапочком ссылкой.
Специальные предложения
Вообще мне кажется, что кода не так уж и много, чтобы причесать его перед тем, как публиковать. А по хорошему, причесывать надо каждый раз перед помещением в продуктив.
mvxyz; olegol; kaa_erpcentr; CyberCerber; a.kuznetsov; WaterSmith; Chif13; trntv; Sun_Storm; premierex; shalimski; + 11 – 3 Ответить(1) yurii_host, вы далеко не первый, кто мне это говорит)))
1. Расскажите это разработчикам типовых конфигураций)
2. Имена промежуточных и вспомогательных переменных не обязательно должны быть говорящими. Классический код на общепринятых языках программирования спокойно рассматривает "i" "j" "k" в качестве итераторов. Так что не довод) Опять же, сравните стандарты 1С и реальный код 1С, посмеётесь. И, думаете, я, автор тиражных решений, не знаю эти стандарты?))
3. См.п2, понять и так можно, и это несложно.
Вообще, это мой стиль и служит своеобразным "авторским клеймом". Я всегда отличу свой код от чужого, особенно бывает удобно, если его скопирайтили против моей воли. Считайте это авторским почерком и некоей обфускацией. Так что "причёсывать" тут, равно как и в других публикациях, не считаю нужным.
По делу есть замечания?
(1) меня удивил минус к первому моему посту. Уважаемый Корум, не могли бы пояснить свою точку зрения с каким именно пунктом Вы не согласны?) Я вроде все обосновал и мало того привел еще и ссылки на рекомендации. Вы не согласны с тем, что код - вырвиглазный?
Позиция автора мне абсолютно понятна, она субъективна и направлена на отстаивание собственной правоты. Причем автор в своей манере отвечает общими фразами без конкретных фактов:
- так и не привел конкретные примеры про типовые конфигурации. Что именно по его мнению не соответствует рекомендациям, в каком модуле/процедуре можно увидеть это несоблюдение. Вместо этого привел зачем-то версию конфигурации. Если он слабо знаком с Системой стандартов и методик разработки конфигураций для платформы 1С:Предприятие 8, то как он может отследить такое несоблюдение?
- я указал на сокращения переменных, а он начал объяснять про итераторы. Это вроде как не одно и то же. Если посмотреть на ссылку, которую я привел в посту 1, то там явно сказано, что "Использование коротких имен допускается только для счетчиков циклов" и к этому у меня нет претензий.
- кроме того, сокращения крайне затрудняют командную разработку. Ведь это же очевидно. Смотрите, по поводу сокращений у каждого человека свой набор правил, кто-то вообще любит сокращать на гласную букву (см. в публикации переменная мстро). И даже если можно догадаться из контекста что именно означает сокращение, то все равно читать чужой код, который пестрит сокращениями - очень неприятное занятие. Голова очень быстро перегружается, т.к. она должна помнить, что означает каждое сокращение. Спросите у коллеги, который будет поддерживать ваш код, хочет ли он, чтобы вы использовали сокращения. Или сами подумайте, хотите ли разбираться в чужом коде, в котором все переменные построены через сокращения? Ответ здорового человека может быть только один - "нет"
- про авторское клеймо - кому-нибудь еще кроме автора нужно это клеймо? Есть ли в нем какая-либо логическая целесообразность, которая бы давала преимущества и упрощала работу другим программистам? Ответ - "нет". Это просто такая своеобразная "причуда", которая скорее вредна, чем полезна.
- также автор стал приводить примеры из других языков программирования (при чем тут они), хотя читаемость кода зависит ведь не от языка программирования, а от программиста . Практически все современные языки программирования имеют средства для написания читаемого кода. Та же самая упомянутая автором Java. Ведь именно разработчики из этого языка внесли огромный вклад в построение читаемого и расширяемого кода
(2)
- еще автор считает, что "понять и так можно, и это несложно." Ведь тут всего то менее 100 строк кода. А представьте себе, что автор, к примеру, каждый день пишет и выкладывает в продуктив такое вот добро))) Это по-моему катастрофа, потому что такого кода становится все больше и больше, и он иногда покрывает важные функции системы, которые потом потребуется развивать. И разобраться что в нем происходит, при доработке каких-то сложных алгоритмов - и сложно и неприятно одновременно. Такой код не вызывает отторжения только у разработчиков, которые не читали профессиональную литературу и привыкли ориентироваться на свой опыт и опыт коллег.
Я повторю свой вопрос, Корум, не могли бы обосновать свою точку зрения, очень любопытно было бы услышать/прочитать с чем вы не согласны
mvxyz; astrallight; kaa_erpcentr; a.kuznetsov; unichkin; + 5 – Ответить (1) yurii_host, не скажу за Корума, но поясню свое мнение:1) ссылки на закрытые форумы и статьи выглядят неуважительно по отношению к не имеющим подписку ИТС.
2) требование размещать функции по порядку напомнило одного "специалиста" одной весьма крупной структуры, связанной с оказанием услуг в финансовой сфере, который высказывал весьма громкое "фи" касательно отсутствия пробелов в коде (при этом согласно рекомендациям пробелы отсутствовали только между // и текстом комментария), но незнакомого с иерархией элементов справочника.
(11) shard, Ваша претензия по поводу ссылок на ИТС - абсолютно справедлива. Я этот нюанс выпустил из вида.
Но к сожалению, 1С не выкладывает их в общий доступ, а копировать полный текст и выкладывать на общем ресурсе - нарушение авторских прав.
Лично у меня не всегда есть доступ к сайту 1С. Поэтому основные разделы я себе скопировал и обращаюсь к ним периодически, независимо от наличия доступа. При этом разумеется, что на общедоступных ресурсах я это не выкладываю.
По моему скромному мнению, рекомендации формулируют требования, продиктованные здравым смыслом. В них другими словами перечислены основные моменты, которые описаны и в других книгах по написанию кода. Для тех, у кого нет доступа на ИТС, я бы рекомендовал прочитать книгу, упомянутую в первом посте. По моему мнению (и не только по моему) в ней собраны самые основные правила по построению читаемого кода, при этом автор приводит вполне убедительные аргументы. Эта книжка - меняет программистов, я наблюдал это примере своих коллег. При этом рекомендации, описанные в ней согласуются с рекомендациями, описанными в "Системе стандартов и методик. "
По поводу порядка процедур, рекомендация тоже взята тоже из книги "Чистый код". И как я привел пример, подтверждается построением кода в типовых, хотя на ИТС явно такое требование не описано. Такое расположение процедур удобно, т.к. человек привык читать код сверху вниз. Поэтому он ожидает сначала увидеть общую картину, а затем детали этой картины (при необходимости) т.е. по принципу декомпозиции. Поэтому логичнее сначала располагать процедуры более верхнего уровня, а под ними вложенные в них. Но Ваше право не соглашаться с таким подходом.
В этой статье я покажу, как в табличных документах 1С реализовывать группировку строк и колонок.
Группировка строк в табличном документе 1С
Для демонстрации создадим у обработки простой макет табличного документа с одной областью и с одним параметром области.
На основной форме обработки сделаем команду ВывестиГоризонтальнуюГруппировку, реквизит формы КоличествоЧисел (тип Число), и всё это разместим на форме.
При выполнении команды, я буду выводить ряд чисел с дробными частями. Для этого, создадим обработчик команды формы на клиенте и серверную процедуру, в которой будем заполнять табличный документ.
Получится такой код:
Подробно о формировании областей табличного документа читайте в статье:
Результат работы этого кода будет следующий:
Изменим этот макет: сделаем группировку целых чисел, а дробные числа будут с небольшим отступом.
Для того, чтобы дробные числа выводились с отступом изменим макет.
Откроем палитру свойств ячейки, в которой выводится параметр НомерСтроки.
В этой палитре нас интересует свойство АвтоОтступ. Установим в него значение.
На этом с макетом закончим. Доработаем код.
В этом коде мы применили методы НачатьАвтогруппировкуСтрок() и ЗакончитьАвтогруппировкуСтрок() перед тем как начали заполнять табличный документе, и после того как закончили. Кроме того, мы дополнили параметры метода Вывести табличного документе. Если в первом параметре указывается область которая будет выводиться в табличном документе, то во втором параметре указываем уровень группировки, в третьем – название группировки, а четвертом – булево значение, которое определяет, будет ли сворачиваться группировка или нет, после того, как она будет выведена.
Результат работы этого кода:
Группировка колонок в табличном документе 1С
Группировка колонок в табличном документе осуществляется по аналогии с группировкой строк. Для демонстрации создадим макет табличного документа, в котором сделаем вертикальную область с единственным параметром.
А также на основной форме обработки создадим команду формы, которую назовем «Вывести вертикальную группировку», и выведем её на форму.
Создадим обработчик команды и функцию в серверном контексте, которая формирует табличный документ с вертикальными областями, к которым применена группировка.
Смысл группировки вертикальных областей тот же, что и горизонтальных: используем методы НачатьАвтогруппировкуКолонок и ЗакончитьАвтогруппировкуКолонок перед выводом областей, а в методе Присоединить необходимо указать уровень группировки, название группы и признак того, будет развернута группа или нет, как и в методе Вывести.
Результат работы этого кода будет следующим:
Видео с бонусом! В этом бонусе я покажу, как сделать вывод иерархического справочника.
Другие статьи про табличные документы в 1С:
Отличное пособие по разработке в управляемом приложении 1С, как для начинающих разработчиков, так и для опытных программистов.
- Очень доступный и понятный язык изложения
- Книга посылается на электронную почту в формате PDF. Можно открыть на любом устройстве!
- Поймете идеологию управляемого приложения 1С
- Узнаете, как разрабатывать управляемое приложение;
- Научитесь разрабатывать управляемые формы 1С;
- Сможете работать с основными и нужными элементами управляемых форм
- Программирование под управляемым приложением станет понятным
Эти книги, плюс книга по программированию оперативного учета имеются в едином комплекте: комплект книг по разработке в 1С.
Только для читателей моего блога,
промо-код на скидку в 300 рублей на весь комплект: blog
Если Вам понравился этот урок, был полезен или помог решить какую-нибудь проблему, то Вы можете поддержать мой проект, перечислив любую сумму.
можно оплатить вручную:
В предыдущих статьях, все табличные документы выводились в виде отдельного окна, что, согласитесь, бывает иногда не удобно. В этой статье я покажу, как выводить табличный документ на управляемой форме.
Я рассмотрю два примера. В первом, мы будем на управляемой форме выводить произвольный отчет, который будет сделан при помощи макета табличного документа. А во втором примере, я создам форму для вывода различных печатных форм документов, как это делается в большинстве современных конфигураций.
Пример с отчетом
Реализуем самый простой вариант отчета, который будет без какой-то смысловой нагрузки, призванный просто показать, как работает табличный документ на управляемой форме. В основном все современные отчеты делают на СКД, но этот мы сделаем по «старинке», используя табличный документ. Для этого создадим объект Отчет и подчиненный ему макет табличного документа всего с одной областью.
Подробнее о том, как создается и оформляется макет табличного документа, читайте в этой статье:
Следующим шагом создадим пустую форму подчиненную этом отчёту, и добавим у неё реквизит управляемой формы с типом ТабличныйДокумент.
Поместим этот реквизит на форму. Если его перетащить мышкой, то он станет элементом поля табличного документа. Чтобы не было заголовка, нужно в свойстве ПоложениеЗаголовка добавленного элемента формы установить значение Нет.
Создадим команду управляемой формы, и поместим её на форму в виде кнопки.
Подробнее о заполнении табличных документов читайте в этой статье:
И всё, если мы сейчас попробуем выполнить нашу команду, то отчет заполнится нужными данными.
Пример с печатной формой документа
А сейчас, мы доработаем вывод печатной формы документа, который мы делали в статье ранее:
Раньше у нас печатная форма документа выходила каждый раз в отдельном окне, так её выводила платформа 1С, мы же сделаем так, чтобы печатная форма выводилась в нужной нам управляемой форме.
Для этого мы создадим общую форму, которую назовем ФормаВыводаПечатнойФормы.
У этой формы создадим реквизит с типом ТабличныйДокумент, разместим его на форме, а также поменяем заголовок формы.
Следующим шагом, создадим параметр ТабДок с типом ТабличныйДокумент.
Нам осталось при создании формы реквизиту управляемой формы присвоить значение параметра.
На этом мы закончим работать с общей формой. В нашем случае, при открытии, форма будет заполняться тем табличным документом, который будет передан в параметре.
Перейдем в модуль команды документа, которую мы создали в предыдущей статье.
И подправим эту команду: будем открывать общую форму, в которую в качестве параметра передадим сформированный ранее табличный документ.
Чтобы каждый раз открывалась новая форма, я передают в качестве третьего параметра новый уникальный идентификатор.
Всё! На этом доработка команды закончена. Можно проверить, как работает открытие нашей формы.
Причем, форму мы можем открыть, как с общего списка документов, так и из нужного нам документа.
Отличное пособие по разработке в управляемом приложении 1С, как для начинающих разработчиков, так и для опытных программистов.
В этой статье я покажу, как в табличных документах 1С реализовывать группировку строк и колонок.
Группировка строк в табличном документе 1С
Для демонстрации создадим у обработки простой макет табличного документа с одной областью и с одним параметром области.
На основной форме обработки сделаем команду ВывестиГоризонтальнуюГруппировку, реквизит формы КоличествоЧисел (тип Число), и всё это разместим на форме.
При выполнении команды, я буду выводить ряд чисел с дробными частями. Для этого, создадим обработчик команды формы на клиенте и серверную процедуру, в которой будем заполнять табличный документ.
Получится такой код:
Подробно о формировании областей табличного документа читайте в статье:
Результат работы этого кода будет следующий:
Изменим этот макет: сделаем группировку целых чисел, а дробные числа будут с небольшим отступом.
Для того, чтобы дробные числа выводились с отступом изменим макет.
Откроем палитру свойств ячейки, в которой выводится параметр НомерСтроки.
В этой палитре нас интересует свойство АвтоОтступ. Установим в него значение.
На этом с макетом закончим. Доработаем код.
В этом коде мы применили методы НачатьАвтогруппировкуСтрок() и ЗакончитьАвтогруппировкуСтрок() перед тем как начали заполнять табличный документе, и после того как закончили. Кроме того, мы дополнили параметры метода Вывести табличного документе. Если в первом параметре указывается область которая будет выводиться в табличном документе, то во втором параметре указываем уровень группировки, в третьем – название группировки, а четвертом – булево значение, которое определяет, будет ли сворачиваться группировка или нет, после того, как она будет выведена.
Результат работы этого кода:
Группировка колонок в табличном документе 1С
Группировка колонок в табличном документе осуществляется по аналогии с группировкой строк. Для демонстрации создадим макет табличного документа, в котором сделаем вертикальную область с единственным параметром.
А также на основной форме обработки создадим команду формы, которую назовем «Вывести вертикальную группировку», и выведем её на форму.
Создадим обработчик команды и функцию в серверном контексте, которая формирует табличный документ с вертикальными областями, к которым применена группировка.
Смысл группировки вертикальных областей тот же, что и горизонтальных: используем методы НачатьАвтогруппировкуКолонок и ЗакончитьАвтогруппировкуКолонок перед выводом областей, а в методе Присоединить необходимо указать уровень группировки, название группы и признак того, будет развернута группа или нет, как и в методе Вывести.
Результат работы этого кода будет следующим:
Другие статьи про табличные документы в 1С:
Более подробно и основательно разработка в 1С дается в моей книге:
Книга написана понятным и простым языком — для новичка.
- Книга посылается на электронную почту в формате PDF. Можно открыть на любом устройстве!
- Научитесь понимать архитектуру 1С;
- Станете писать код на языке 1С;
- Освоите основные приемы программирования;
- Закрепите полученные знания при помощи задачника.
Очень доступный и понятный язык изложения
- Поймете идеологию управляемого приложения 1С
- Узнаете, как разрабатывать управляемое приложение;
- Научитесь разрабатывать управляемые формы 1С;
- Сможете работать с основными и нужными элементами управляемых форм
Промо-код на скидку в 15% — 48PVXHeYu
Эти книги, плюс книга по программированию оперативного учета имеются в едином комплекте: комплект книг по разработке в 1С.
Только для читателей моего блога,
промо-код на скидку в 300 рублей на весь комплект: blog
Читайте также: