1с табличный документ отображать группировки

Обновлено: 06.07.2024

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

Представленный вариант - для толстого клиента или для сервера. Желающие могут превратить таблицу и дерево значений в коллекции или данные формы, сути это не меняет. Суть очень проста - сериализовать в XDTO, через XML в DOM и прочитать сведения об иерархии по нужным узлам-тегам. Производительность на больших объёмах будет, естественно, не ахти, что надо учитывать; ну и если построитель DOM не потянет, придётся копать последовательным чтением XML. Мысль публикации лишь в том, что, хотя во встроенном языке нет возможности выяснить уровень области, данные об этом любой табличный документ хранит. Я поработал с группировками строк, нечто подобное можно сделать и для группировок колонок - это, к примеру, для любителей курочить выходной таб.документ СКД.

P.S. Если это баян, киньте в меня тапочком ссылкой.

Специальные предложения

Electronic Software Distribution

Интеграция 1С с системой Меркурий

Алкогольная декларация

Готовые переносы данных

54-ФЗ

Управление проектом на Инфостарте

Траектория обучения 1С-разработчика

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

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С

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

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

Откроем палитру свойств ячейки, в которой выводится параметр НомерСтроки.

Ячейка табличного документа 1С

В этой палитре нас интересует свойство АвтоОтступ. Установим в него значение.

Свойство Отступ ячейки табличного документа

На этом с макетом закончим. Доработаем код.

В этом коде мы применили методы НачатьАвтогруппировкуСтрок() и ЗакончитьАвтогруппировкуСтрок() перед тем как начали заполнять табличный документе, и после того как закончили. Кроме того, мы дополнили параметры метода Вывести табличного документе. Если в первом параметре указывается область которая будет выводиться в табличном документе, то во втором параметре указываем уровень группировки, в третьем – название группировки, а четвертом – булево значение, которое определяет, будет ли сворачиваться группировка или нет, после того, как она будет выведена.

Результат работы этого кода:

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

Группировка колонок в табличном документе 1С

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

Макет табличного документа

А также на основной форме обработки создадим команду формы, которую назовем «Вывести вертикальную группировку», и выведем её на форму.

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

Смысл группировки вертикальных областей тот же, что и горизонтальных: используем методы НачатьАвтогруппировкуКолонок и ЗакончитьАвтогруппировкуКолонок перед выводом областей, а в методе Присоединить необходимо указать уровень группировки, название группы и признак того, будет развернута группа или нет, как и в методе Вывести.

Результат работы этого кода будет следующим:

 Группировка колонок в табличном документе 1С

Видео с бонусом! В этом бонусе я покажу, как сделать вывод иерархического справочника.

Группировка табличного документа 1С

Другие статьи про табличные документы в 1С:

Это изображение имеет пустой атрибут alt; его имя файла - 1C-в-желтом-цвете-3D-221x300.jpg

Это изображение имеет пустой атрибут alt; его имя файла - 1_в-желтом-цвете-3D-маленькая-221x300.jpg

Отличное пособие по разработке в управляемом приложении 1С, как для начинающих разработчиков, так и для опытных программистов.

  1. Очень доступный и понятный язык изложения
  2. Книга посылается на электронную почту в формате PDF. Можно открыть на любом устройстве!
  3. Поймете идеологию управляемого приложения 1С
  4. Узнаете, как разрабатывать управляемое приложение;
  5. Научитесь разрабатывать управляемые формы 1С;
  6. Сможете работать с основными и нужными элементами управляемых форм
  7. Программирование под управляемым приложением станет понятным

Эти книги, плюс книга по программированию оперативного учета имеются в едином комплекте: комплект книг по разработке в 1С.
Только для читателей моего блога,
промо-код на скидку в 300 рублей на весь комплект: blog


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

можно оплатить вручную:

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

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

Пример с отчетом

Реализуем самый простой вариант отчета, который будет без какой-то смысловой нагрузки, призванный просто показать, как работает табличный документ на управляемой форме. В основном все современные отчеты делают на СКД, но этот мы сделаем по «старинке», используя табличный документ. Для этого создадим объект Отчет и подчиненный ему макет табличного документа всего с одной областью.

Отчет с макетом табличного документа

Подробнее о том, как создается и оформляется макет табличного документа, читайте в этой статье:

Следующим шагом создадим пустую форму подчиненную этом отчёту, и добавим у неё реквизит управляемой формы с типом ТабличныйДокумент.

Реквизит управляемой формы с типом ТабличныйДокумент

Поместим этот реквизит на форму. Если его перетащить мышкой, то он станет элементом поля табличного документа. Чтобы не было заголовка, нужно в свойстве ПоложениеЗаголовка добавленного элемента формы установить значение Нет.

Элемент формы поле табличного документа

Создадим команду управляемой формы, и поместим её на форму в виде кнопки.

Команда управляемой формы

Подробнее о заполнении табличных документов читайте в этой статье:

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

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

Пример с печатной формой документа

А сейчас, мы доработаем вывод печатной формы документа, который мы делали в статье ранее:

Раньше у нас печатная форма документа выходила каждый раз в отдельном окне, так её выводила платформа 1С, мы же сделаем так, чтобы печатная форма выводилась в нужной нам управляемой форме.

Для этого мы создадим общую форму, которую назовем ФормаВыводаПечатнойФормы.

Общая форма

У этой формы создадим реквизит с типом ТабличныйДокумент, разместим его на форме, а также поменяем заголовок формы.

Реквизит с типом табличный документ управляемой формы

Следующим шагом, создадим параметр ТабДок с типом ТабличныйДокумент.

Параметр управляемой формы с типом табличный документ

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

На этом мы закончим работать с общей формой. В нашем случае, при открытии, форма будет заполняться тем табличным документом, который будет передан в параметре.

Перейдем в модуль команды документа, которую мы создали в предыдущей статье.

Открытие модуля команды

И подправим эту команду: будем открывать общую форму, в которую в качестве параметра передадим сформированный ранее табличный документ.

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

Всё! На этом доработка команды закончена. Можно проверить, как работает открытие нашей формы.

Открытие общей управляемой формы для печати

Причем, форму мы можем открыть, как с общего списка документов, так и из нужного нам документа.

Открытие общей управляемой формы для печати


Отличное пособие по разработке в управляемом приложении 1С, как для начинающих разработчиков, так и для опытных программистов.

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

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

Для демонстрации создадим у обработки простой макет табличного документа с одной областью и с одним параметром области.

Группировка в табличном документе 1С, изображение №1

На основной форме обработки сделаем команду ВывестиГоризонтальнуюГруппировку, реквизит формы КоличествоЧисел (тип Число), и всё это разместим на форме.

Группировка в табличном документе 1С, изображение №2

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

Получится такой код:

Подробно о формировании областей табличного документа читайте в статье:

Результат работы этого кода будет следующий:

Группировка в табличном документе 1С, изображение №3

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

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

Откроем палитру свойств ячейки, в которой выводится параметр НомерСтроки.

Группировка в табличном документе 1С, изображение №4

В этой палитре нас интересует свойство АвтоОтступ. Установим в него значение.

Группировка в табличном документе 1С, изображение №5

На этом с макетом закончим. Доработаем код.

В этом коде мы применили методы НачатьАвтогруппировкуСтрок() и ЗакончитьАвтогруппировкуСтрок() перед тем как начали заполнять табличный документе, и после того как закончили. Кроме того, мы дополнили параметры метода Вывести табличного документе. Если в первом параметре указывается область которая будет выводиться в табличном документе, то во втором параметре указываем уровень группировки, в третьем – название группировки, а четвертом – булево значение, которое определяет, будет ли сворачиваться группировка или нет, после того, как она будет выведена.

Результат работы этого кода:

Группировка в табличном документе 1С, изображение №6

Группировка колонок в табличном документе 1С

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

Группировка в табличном документе 1С, изображение №7

А также на основной форме обработки создадим команду формы, которую назовем «Вывести вертикальную группировку», и выведем её на форму.

Группировка в табличном документе 1С, изображение №8

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

Смысл группировки вертикальных областей тот же, что и горизонтальных: используем методы НачатьАвтогруппировкуКолонок и ЗакончитьАвтогруппировкуКолонок перед выводом областей, а в методе Присоединить необходимо указать уровень группировки, название группы и признак того, будет развернута группа или нет, как и в методе Вывести.

Результат работы этого кода будет следующим:

Группировка в табличном документе 1С, изображение №9

Другие статьи про табличные документы в 1С:

Более подробно и основательно разработка в 1С дается в моей книге:

Добавьте описание

Книга написана понятным и простым языком — для новичка.

  1. Книга посылается на электронную почту в формате PDF. Можно открыть на любом устройстве!
  2. Научитесь понимать архитектуру 1С;
  3. Станете писать код на языке 1С;
  4. Освоите основные приемы программирования;
  5. Закрепите полученные знания при помощи задачника.

Добавьте описание

Очень доступный и понятный язык изложения

  1. Поймете идеологию управляемого приложения 1С
  2. Узнаете, как разрабатывать управляемое приложение;
  3. Научитесь разрабатывать управляемые формы 1С;
  4. Сможете работать с основными и нужными элементами управляемых форм

Промо-код на скидку в 15% — 48PVXHeYu

Эти книги, плюс книга по программированию оперативного учета имеются в едином комплекте: комплект книг по разработке в 1С.

Только для читателей моего блога,
промо-код на скидку в 300 рублей на весь комплект: blog

Читайте также: