Отчет с настраиваемым списком колонок

17.02.10

Разработка - Работа с интерфейсом

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

Файлы

ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.

Наименование Скачано Купить файл
Шаблон отчета с отключаемыми колонками
.erf 13,48Kb
175 1 850 руб. Купить

Подписка PRO — скачивайте любые файлы со скидкой до 85% из Базы знаний

Оформите подписку на компанию для решения рабочих задач

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

Что делать, когда клиент просит отчет по предложенному в Excel макету, содержащий, по меньшей мере, с полсотни столбцов, и, вдобавок, требует, чтобы была возможность все эти столбцы при желании отключать? Предложить ему воспользоваться СКД? Возможно, кто-то так и делает, но мои клиенты почему-то, при виде аббревиатуры СКД, сразу скисают, однако, отчеты с полсотни отключаемых столбцов, при этом, любят. И тем больше количество столбцов в отчете, чем крупнее город, где расположен клиент... 

Поскольку работать с небольшими городами не всегда выгодно, а времени на колдовство по всем правилам с построителем жаль (*), я однажды решил что-нибудь придумать, чтобы и клиенту было удобно, и самому потратить лишь несколько минут. Решение пришло быстро, при взгляде на вереницу этих столбцов, на фоне лени вбивать все их наименования вручную. Ведь что может быть нагляднее для клиента, чем те названия, которые он сам придумал? Лишь бы все они были уникальными.

Итак, копируем таблицу из исходного xls-файла в макет нашего отчета, разбиваем на горизонтальные секции. На этом работа над макетом завершена. Никаких параметров в строках не создаем. Создаем на форме закладку «Настройки» и выводим туда список с пометками "ДоступныеПоля", а в обработчике ПриОткрытии прописываем обход колонок отчета (**):

 

 Макет=ПолучитьМакет("Макет");
  К=1;
  Пока Истина Цикл
    Область=Макет.ПолучитьОбласть("R1C"+К+":R1C"+К);
    Если ЗначениеЗаполнено(Область.ТекущаяОбласть.Текст) Тогда
      ДоступныеПоля.Добавить(Область.ТекущаяОбласть.Текст);
    Иначе
      Прервать;
    КонецЕсли;
    К=К+1;
  КонецЦикла;

 

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

(**) Оговорюсь, что если в отчете более 999 колонок, то стоит использовать не +К, а Формат(К,”ЧГ=0”) ;)


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

Список колонок отчета

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

Моя табличка

Большой проблемы это не вызвало:

 

Макет=ПолучитьМакет("Макет");
  К=1;
  Пока Истина Цикл
    Область1=Макет.ПолучитьОбласть("R4C"+К+":R4C"+К);
    Область2=Макет.ПолучитьОбласть("R5C"+К+":R5C"+К);
    Если ЗначениеЗаполнено(Область2.ТекущаяОбласть.Текст) Тогда
      ДоступныеПоля.Добавить(Область2.ТекущаяОбласть.Текст);
    ИначеЕсли ЗначениеЗаполнено(Область1.ТекущаяОбласть.Текст) Тогда
      ДоступныеПоля.Добавить(Область1.ТекущаяОбласть.Текст);
    Иначе
      Прервать;
    КонецЕсли;
    К=К+1;
  КонецЦикла;


Но пойдем далее… Мы отказались от прописывания имен параметров в макете строки. Чтобы теперь вывести в строки отчета необходимую информацию, достаточно написать запрос, с составом полей, соответствующим в точности столбцам нашей таблицы, а потом просто пробежаться по ним, проверяя, что выделил пользователь в списке колонок. Каждая строка нашего отчета легко может быть построена вот такой процедурой:

 

 Процедура СформироватьСтрокуОтчета(ТабличныйДокумент, Макет, ИмяГоризонтальнойОбласти, СтрокаРезультатаЗапроса=Неопределено)
    Область=Макет.ПолучитьОбласть(ИмяГоризонтальнойОбласти);
    К=1;
    Перв=Истина;
    Для Каждого Эл Из ДоступныеПоля Цикл
      Если Эл.Пометка Тогда
        ТекОбласть=Область.ПолучитьОбласть("R1C"+К+":R"+Область.ВысотаТаблицы+"C"+К);
        Если СтрокаРезультатаЗапроса<>Неопределено Тогда
          ТекОбласть.ТекущаяОбласть.Текст=Строка(СтрокаРезультатаЗапроса[К-1]);
        КонецЕсли;
        Если Перв Тогда
          Перв=Ложь;
          ТабличныйДокумент.Вывести(ТекОбласть);
        Иначе
          ТабличныйДокумент.Присоединить(ТекОбласть);
        КонецЕсли;
      КонецЕсли;
      К=К+1;
    КонецЦикла;
  КонецПроцедуры



Теперь наш отчет с произвольным составом колонок строится в два счета:

 

Процедура ДействияФормыкнСформировать(Кнопка)
    Макет=ПолучитьМакет("Макет");
    ЭлементыФормы.ТабДок.Очистить();
    СформироватьСтрокуОтчета(ЭлементыФормы.ТабДок,Макет,"Шапка");
    РезультатЗапроса=СформироватьЗапрос();
    РезультатЗапроса.Выбрать();
    Пока РезультатЗапроса.Следующий() Цикл
      СформироватьСтрокуОтчета(ЭлементыФормы.ТабДок,Макет,"Строка", РезультатЗапроса);
    КонецЦикла;
    СформироватьСтрокуОтчета(ЭлементыФормы.ТабДок,Макет,"Подвал");
    ЭлементыФормы.ТабДок.Показать();
  КонецПроцедуры



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

Страница настроек отчета

В этом случае, имеет смысл поместить текст запроса в обработчик ПриОткрытии:

 

Построитель.Текст=”…”;
  Построитель.ЗаполнитьНастройки();



Тогда функция СформироватьЗапрос будет иметь всего лишь пару строк:

  Функция СформироватьЗапрос()
    Построитель.Выполнить();
    Возврат Построитель.Результат;
  КонецФункции



Вот и все…

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

Кстати, прилагаю шаблон отчета, который тут старался описать…

 

Вступайте в нашу телеграмм-группу Инфостарт

См. также

Работа с интерфейсом Анализ учета Мониторинг 1С:Предприятие 8 1С 8.3 1C:Бухгалтерия 1С:Бухгалтерия 3.0 1С:Библиотека стандартных подсистем 1С:ERP Управление предприятием 2 1С:Управление холдингом 1С:Зарплата и Управление Персоналом 3.x 1С:Комплексная автоматизация 2.х 1С:Управление нашей фирмой 3.0 1С:Управление торговлей 11 Платные (руб)

Создайте свой функциональный интерфейс в любой конфигурации 1С с помощью расширения Infostart Dashboard. Настраивайте панели виджетов с метриками, индикаторами и показателями на начальном экране. Узнайте возможность внедрения подсистемы у себя в конфигурации с помощью бесплатной обработки "Анализ внедрения подсистемы 1С Infostart Dashboard"!

28800 руб.

27.03.2025    56639    31    25    

45

Разработка Инструментарий разработчика Работа с интерфейсом Адаптация типовых решений Нейросети 1C:Бухгалтерия 1C:ERP 1С:ЗУП 1С:КА 1С:УНФ 1С:УТ 1С:Розница 1С:ДО 1С:ERP Управление предприятием 2 Платные (руб)

Разработка "Дизайнер форм 1С" реализована в виде расширения 1С и является универсальным инструментом для разработки прототипа форм с целью демонстраций, технических заданий и т.д. Без участия разработчика с возможностью экспорта в файл внешней обработки и генерации формы используя искусственный интеллект.

36000 руб.

28.08.2025    2765    1    2    

4

Работа с интерфейсом Системный администратор Программист 1С:Предприятие 8 1C:Бухгалтерия Платные (руб)

Расширение «Динамическое управление доступом к элементам форм объектов 1С8» предназначен для обеспечения возможности оперативного управления видимостью и доступностью элементов форм документов и справочников продуктов фирмы «1С» «1С:Предприятие 8». Решение универсальное, встраивается в любую конфигурацию с минимальными доработками, что позволяет без проблем обновлять типовые решения.

6000 руб.

14.01.2016    58276    20    25    

46

Работа с интерфейсом Программист 1С:Предприятие 8 1C:Бухгалтерия 1С:ERP Управление предприятием 2 Платные (руб)

Обработка предназначена для создания и управления дашбордами (виджетами) в 1С.

5160 руб.

29.06.2020    22883    32    6    

51

Работа с интерфейсом Программист 1С:Предприятие 8 1C:Бухгалтерия Россия Платные (руб)

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

5040 руб.

06.10.2020    12870    8    8    

14

Работа с интерфейсом Программист Стажер 1С:Предприятие 8 Бесплатно (free)

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

20.08.2024    43468    mrXoxot    44    

138

Работа с интерфейсом Программист 1С:Предприятие 8 Бесплатно (free)

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

27.05.2024    24849    smielka    38    

111
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. Evg-Lylyk 5222 17.02.10 16:35 Сейчас в теме
Это все замечательно в 8-ке мучения всегда были в получении данных. Простите может не внимательно читал, но всетаки непонятно чем не подходят стандартные механизмы УниверсальныйОтчет, ПостроительОтчета раз уж на СКД аллергия

(**) Оговорюсь, что если в отчете более 999 колонок, то стоит использовать не +К, а Формат(К,”ЧГ=0”) ;)

метод получить область можно использовать так:
ПолучитьОбласть(<Номер первой строки>, <Номер первой колонки>, <Номер последней строки>, <Номер последней колонки>)
т.е. ПолучитьОбласть(4,К,4,К)
2. O-Planet 6455 17.02.10 17:22 Сейчас в теме
(1) Мне что-то через RC больше нравится. Наверное, из дельфей осталось.

Стандартная настройка колонок, в общем, подошла бы, если бы клиенту подошел сгенерированный построителем шаблон. Часто клиент бывает очень привередлив к тому, что отображается на экране, вплоть до разных нестандартных бантиков, расшифровок, подстрок в строках. Если же построителю подсунуть собственный макет, то что-то не знаю, как организовать тогда настройку состава колонок стандартными средствами построителя. Ну а потом, если задача решается универсальным отчетом, ни кто не запрещает его использовать. Здесь просто приведен еще один метод. И главная фишка - в том, что макет вообще НЕ строим, а просто копируем через буфер обмена то, что предоставляет заказчик в xls-файле.
6. Evg-Lylyk 5222 18.02.10 00:02 Сейчас в теме
(2)
Мне что-то через RC больше нравится. Наверное, из дельфей осталось
в предложенном варианте не будет проблемы описанной в (**)
Понятно что пользователи могут хотеть финдиплюшки, но если отчет стоил сначала 1000 после мелочи 5000
(3) в статье пример другой :) (в примере на картинке есть нумерация строк, СКД подойдет)
3. O-Planet 6455 17.02.10 18:21 Сейчас в теме
+ Вот пример того, что лично я не представляю, как можно вывести средствами универсального отчета (в каждой строке может быть произвольное кол-во подстрок с расшифровкой по пунктам следования)
Прикрепленные файлы:
4. luns 17.02.10 21:26 Сейчас в теме
(3) Компоновка так может. И не только так. А в принципе и на построителе можно сваять. Особых сложностей нет (если я правильно понял задачу)
5. anig99 2861 17.02.10 22:05 Сейчас в теме
Эээээ...до существование СКД такое же ваял... Через "присоеденить"...Теперь не так актуально
7. O-Planet 6455 18.02.10 13:29 Сейчас в теме
Да я знаю, что СКД подойдет. Но вот не любят его и все.
8. O-Planet 6455 18.02.10 13:46 Сейчас в теме
И с другой стороны, всегда ли нужно использовать универсальные механизмы по-максимуму? Не забываем, что СКД - это мощный ресурс. В конце концов, мы вроде программисты. Разве не интересно сделать что-то альтернативное самому, и чтобы оно получилось удобным, оптимальным и быстрым? Если задача вполне решаема ста стоками кода, то зачем притягивать СКД? Ресурсы сервака не безграничны.
9. Nadezhda09 23.03.10 08:13 Сейчас в теме
1С:Предприятие 8.1 (8.1.14.72)
Управление производственным предприятием, редакция 1.2 (1.2.23.2)

Здравствуйте!
Заинтересовалась обработкой.
Начала выполнять по приведенной инструкции.
"Любуясь красивым списком с названиями всех колонок отчета" заметила, что у меня только список колонок без флажков.
Что делать, чтобы они появились?
Прошу прощения, если вопрос глупый. Самостоятельно программирую еще очень мало.
10. Nadezhda09 23.03.10 10:11 Сейчас в теме
Уже сама разобралась. :)
Прошу прощения за беспокойство.
11. Nadezhda09 23.03.10 10:19 Сейчас в теме
12. O-Planet 6455 24.03.10 03:52 Сейчас в теме
Угу. Кстати ошибочка была в ДействиеФормыкнСформировать... Там нужно добавить:

РезультатЗапроса.Выбрать();

Тоже разобрались?
Для отправки сообщения требуется регистрация/авторизация