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



Каждому программисту 1с, хоть раз, да приходилось писать выгрузку отчета из 1С в Excel с формулами. Есть много вариантов как это сделать. Но мне захотелось это сделать «по нормальному», используя как можно меньше кода выгрузки в excel, и так чтобы проще было дорабатывать. Идея была проста, все формулы засунуть в макет, и при выводе в Excel просто «проинициализировать» их. Но меня ждал облом, который мне пришлось героически преодолевать. Спойлер — в итоге все получилось…)

Итак, задача следующая — нужно выгрузить отчет сразу в Excel, отчет с кучей формул, формулы сложные, с выделением групп и т.п., отчет за свою жизнь будет не раз правиться, и формулы будут становится всё "ужаснее" и сложнее, структура отчета, как это ни странно, изменяться будет не часто и не сильно.

Отчетов таких была написана куча и на доработку каждого требовалось куча времени. Я захотел попробовать найти какой-нибудь новый подход — все формулы засунуть в макет. Но меня поджидал облом… С простыми формулами типа "=RC[-2]-RC[-1]" все было замечательно — внести как текст и все ок, но, когда потребовалось реализовать формулу чуть посложнее, типа "=СУММ(R[1]C:R[КоличествоСтрок]C)", то тут ждал облом… Тут сразу напрашивается шаблон, но как оказалось, шаблон никак не хотел выводить символ "[", т.к. для 1С это служебный символ, определяющий параметры для шаблона. Поиск в инете типа "как вывести квадратные скобки в шаблоне макета" ничего не дал, вообще ничего не дал! Путем проб и ошибок выяснилось, чтоб вывести "КакойТоТекст[1]" нужно задать "КакойТоТекст[[1]". А вот чтоб задать "КакойТоТекст[1]ещё[КоличествоСтрок]", где КоличествоСтрок — это параметр, который нужно менять, то тут нужно извратиться по жёсткому — "КакойТоТекст[][[1]ещё[][[[КоличествоСтрок]]". Конструкция [] — нужна, чтоб не удалялся текст — "КакойТоТекст".

Итого: копируем формулу Excel, модифицируем её:

1. заменяем ";" на ","

2. к неизменным значениям в скобках добавляем спереди [][

3. изменяемые значения в скобках обворачиваем [][[изменяемое значение в скобках]. И макет готов. 

И тогда весь код при формировании Excel будет минимальным:

 
 

 ФормированиеExcel

Как вы будете использовать макет — это ваше дело, хотите формируйте отчет через СКД используя Макет, хотите выводите отчет алгоритмически. В приложенном файле, я использую алгоритмическое формирование табличного документа (через СКД не получилось получить КоличествоСтрок), а затем формирую Excel файл из него. Приложенный файл это шаблон для ознакомления с подходом, он будет запускаться в Бухгалтерии, УТ, в общем там где есть регистр сведений ЦеныНоменклатуры.

 

Конечно формула в таком виде "=КакойТоТекст[][[1]ещё[][[[КоличествоСтрок]]" мне не очень нравится. Если кто-нибудь знает, как можно представить формулу в более наглядном виде, был бы рад узнать…

 

Версия платформы, на которой тестировался отчет: 8.3.10.2299.

 

4 Comments

  1. Leon75

    Ну воспринимает она (платформа в макете) квадратную скобку как параметр, а если заполнить значение параметра формулой?

    Reply
  2. _root

    (1) «С простыми формулами типа «=RC[-2]-RC[-1]» все было замечательно — внести как текст и все ок, но, когда потребовалось реализовать формулу чуть посложнее, типа «=СУММ(R[1]C:R[КоличествоСтрок]C)», то тут ждал облом…»

    Reply
  3. Leon75

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

    Reply
  4. ak313

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

    В итоге оказалось все просто.

    Символ(91)+[Артикул]+Символ(93)

    91 и 93 это коды Unicode для скобок [ и ]

    Reply

Leave a Comment

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