====== Опции шаблонов Excel ====== Эта страница — полный справочник по **опциям (ключевым словам)**, которые администратор базы может использовать в шаблонах первичных документов и отчётов. Основы работы с шаблонами (регистрация, NoRange/Range-наборы, списки переменных) описаны в разделе «[[docs:settings:templates_docs|Шаблоны первичных документов]]». Группировка со всеми параметрами, оформление строк итогов, сводные таблицы, диаграммы и прочие опции, не вошедшие в эту страницу, — на отдельной странице «[[docs:settings:templates_option2|Опции шаблонов Excel: группировка, итоги и остальные опции]]». ===== 1. Где размещаются опции ===== Опция — это ключевое слово, написанное **текстом** в определённой ячейке шаблона. Место ячейки определяет, на что опция действует. ^Место в шаблоне ^Уровень ^Что настраивает ^ |Ячейка **A1** первого листа|Книга|Действует на **всю книгу** (все листы)| |Ячейка **A2** любого листа|Лист|Действует **только на этот лист**| |**Левая нижняя** ячейка области Range|Область|Действует на **эту область**| |Ячейки **нижней (служебной) строки** области|Столбец|Действуют на **свой столбец** области| |**Левая ячейка строки данных** области|Строка|Фильтры строк (''FILTER'', ''EXFILTER'')| >**Важно.** Все служебные ячейки после построения отчёта **очищаются автоматически** — в готовом документе текста опций не остаётся. ===== 2. Правила записи опций ===== ^Символ ^Назначение ^Пример ^ |'';''|Разделитель **между опциями**|''RowsFit;ColsFit''| |''\''|Разделитель между **именем опции и её параметрами**|''Sort\Desc''| |''=''|Внутри параметра: **имя=значение**|''RANGE=TableRange''| |**Перевод строки** (Alt+Enter)|То же, что ''\'' — разделитель параметров|см. ''RangeBreaks''| Регистр не важен: ''OnlyValues'', ''ONLYVALUES'' и ''onlyvalues'' — одно и то же. ==== Перевод строки как разделитель ==== Внутри одной ячейки параметры можно писать **в столбик**, нажимая **Alt+Enter**. Это удобно для длинных опций и **обязательно**, если в параметре есть формула Excel (в русской локали формулы содержат '';'', который иначе был бы принят за разделитель опций). Правило простое: **'';'' разделяет опции только в конце строки.** '';'' внутри формулы (например в ''ТЕКСТ(дата;"ДД.ММ.ГГГГ")'') разбор не ломает. ==== Перевод строки НЕ заканчивает опцию ==== Это обратная сторона того же правила, и на ней легко обжечься. Перевод строки — разделитель **параметров** одной опции, а не разделитель опций. Чтобы с новой строки началась **новая опция**, в конце предыдущей строки нужна '';''. **Верно** — в конце первой строки стоит '';'': OnlyValues2;DeleteMacro; MacroAfter=Module1.MacroAfter **Неверно** — '';'' нет, и вторая строка приклеивается к ''DeleteMacro'' как её параметр: OnlyValues2;DeleteMacro MacroAfter=Module1.MacroAfter Движок прочитает это как две опции: ''OnlyValues2'' и ''DeleteMacro'' с параметром ''MacroAfter=Module1.MacroAfter''. ''DeleteMacro'' параметров не ждёт и молча их игнорирует — то есть ''MacroAfter'' просто не сработает, **и никакой ошибки при этом не будет**. >**Если опция «не сработала»** — первым делом смотрите, стоит ли '';'' в конце предыдущей строки. На этом же правиле построен пример ''RangeBreaks'' в разделе 7: там '';'' стоит после ''OnlyValues'' и после последнего параметра ''RangeBreaks'' — то есть перед каждой строкой, с которой начинается следующая опция. ===== 3. Опции книги и листа (ячейки A1 / A2) ===== ==== OnlyValues ==== Отключает (замораживает) **все** формулы: в готовом отчёте вместо формул остаются только вычисленные значения. * В **A1** — по всей книге. * В **A2** — только по своему листу. Применяется почти всегда: получатель документа не должен видеть формулы, а файл не должен «ломаться» при пересылке. Опция удаляет из файла скрытый лист с данными для формул, которые получатель не должен видеть. OnlyValues ==== OnlyValues2 ==== **Выборочная** заморозка. Замораживает в значения **только** те формулы, где есть ссылки на данные программы — то есть на поля (''Title_'', ''Table_'' и т.п.) и на параметры (''XLRParams_''). Все **пользовательские** формулы Excel и **итоги** (''=СУММ(...)'') остаются **живыми**. * В **A1** — по всей книге. * В **A2** — только по своему листу. Когда использовать: если в отчёте нужно оставить рабочие формулы (например, чтобы пользователь мог поменять количество и увидеть пересчёт суммы), но при этом убрать ссылки на данные, которых после выгрузки уже не существует. Опция удаляет из файла скрытый лист с данными для формул, которые получатель не должен видеть. OnlyValues2 >**Внимание.** ''OnlyValues2'' **не** замораживает ''=СУММ(...)''. Если вам нужен полностью «замороженный» документ без формул — используйте обычный ''OnlyValues''. ==== FitMergedCells ==== Подгоняет **высоту строк под текст** для ячеек, находящихся **вне** Range-областей (внутри областей эту работу делает ''RowsFit''). Работает и с обычными, и с **объединёнными** ячейками (обычный автоподбор высоты Excel объединённые ячейки не умеет). Высота только **увеличивается**: если текст помещается, строка не трогается. Скрытые столбцы не учитываются. Ставится в **A2**. Через ''\'' перечисляются ячейки и/или имена областей через запятую. FitMergedCells\C5,D5,MyRange1,MyRange2 Типичный случай: объединённая ячейка с адресом клиента (''=CLIENT_ADDRESS'') или с наименованием фирмы (''=FIRM_FIRM_NAME'') — текст длинный, высота «съезжает». FitMergedCells\E8,E9,E10,E11 ==== RangeBreaks ==== Расстановка **разрывов страниц** по Range-области с **повтором шапки таблицы** на каждой новой странице, с необязательными **промежуточными итогами** по страницам и **заголовком** над шапкой (например «Универсальный передаточный документ №… Лист 2 из 3»). Ставится в **A2**. Подробно — в разделе [[#7. RangeBreaks — разрывы страниц (подробно)]]. ==== MacroBefore / MacroAfter ==== Задаёт имя макроса шаблона прямо в **A1**: MacroAfter=Module1.MacroAfter * ''MacroBefore'' — макрос выполняется **до** построения отчёта; * ''MacroAfter'' — **после** построения, когда данные уже разложены. Имя пишется как в Excel: ''Модуль.Процедура''. Регистр не важен. === Три равнозначные формы записи === Все три означают одно и то же, выбирайте любую: MacroAfter=Module1.MacroAfter MacroAfter\Module1.MacroAfter MacroAfter Module1.MacroAfter Третья — через **Alt+Enter**: перевод строки внутри ячейки движок и так считает разделителем, равным ''\''. >**Чего делать не надо.** Не смешивайте разделители в одной записи: ''MacroAfter\=Module1.MacroAfter'' или ''MacroAfter'' + Alt+Enter + ''=Module1.MacroAfter'' дадут имя макроса, начинающееся со знака ''='', и макрос не найдётся. === Вместе с другими опциями === Если перед опцией стоят другие, в конце предыдущей строки обязательна '';'' — иначе строка с ''MacroAfter'' будет прочитана как **параметр** предыдущей опции и макрос не сработает (см. [[#Перевод строки НЕ заканчивает опцию]]): OnlyValues2;DeleteMacro; MacroAfter=Module1.MacroAfter В одну строку — тоже верно: OnlyValues2;DeleteMacro;MacroAfter=Module1.MacroAfter === Старые способы задать тот же макрос === До появления этой опции имя макроса задавалось двумя другими способами. **Оба продолжают работать**, но считаются устаревшими: опция в A1 нагляднее, видна рядом с остальными настройками шаблона и **перекрывает** их обоих. ^Способ ^Как выглядит ^ |**Именованная ячейка** ''MACROAFTER'' / ''MACROBEFORE''|В шаблоне создаётся имя (**Формулы → Присвоить имя**), а в ячейке, на которую оно ссылается, пишется имя макроса — ''Module1.MacroAfter''| |**Решётка в конце имени файла шаблона**|Если имя файла содержит ''#'' перед расширением (''РасхНакл#.xls'') или ''#_'' (''РасхНакл#_2.xls''), программа сама подставляет макрос ''Module1.MacroAfter''| >**Почему не рекомендуются.** Именованную ячейку не видно при беглом просмотре шаблона, и про неё легко забыть при копировании листа. Решётка в имени файла вообще не говорит, **какой** макрос запустится: имя ''Module1.MacroAfter'' зашито в программу, и ни переименовать процедуру, ни задать ''MacroBefore'' этим способом нельзя. Вдобавок решётка работает только при выгрузке из документа, но не из конструктора отчётов. >**Если заданы оба способа сразу** — работает опция из A1. Это и есть штатный путь перевода старых шаблонов: добавить опцию в A1, ничего больше не трогая, и убедиться, что отчёт строится как прежде. ==== DeleteMacro ==== Удаляет из готового отчёта все макросы (VBA-модули). Ставится в **A1**. Используйте, если готовый файл уходит наружу и не должен содержать код. DeleteMacro ==== DeleteMacro2 ==== Удаляет из готового отчёта все макросы (VBA-модули) за исключением системных модулей для работы с Excel (контроль действий при закрытии книги). Ставится в **A1**. DeleteMacro2 ==== Несколько опций в одной ячейке ==== OnlyValues;FitMergedCells\E8,E9,E10,E11 ===== 4. Опции области (левая нижняя ячейка области) ===== ==== OnlyValues ==== Отключает формулы **в пределах этой области**. ==== AutoFilter ==== Включает автофильтр для области-списка. >**Ограничение.** Не работает в произвольных областях (с объединёнными ячейками или если размножаемая часть занимает больше одной строки) — приведёт к ошибке. ==== RowsFit ==== Автоматически подгоняет высоту строк области под значение в ячейке, если оно не помещается в высоту, заданную в шаблоне. Работает и с **объединёнными** ячейками. Незаменима, если в данных встречаются длинные наименования (''Table_GOODS_NAME'') или значения с переводом строки. Чтобы опция работала, в свойствах ячейки должно быть установлено «Переносить по словам». >**Ограничение.** Если области вложенные, например Master-detail, то опцию нужно указывать у самой внешней Range области ==== RowsFit2 ==== То же самое, что ''RowsFit'', но высота строки меняется **только в сторону увеличения**: если значение не влезает в заданную шаблоном высоту, строка увеличивается; если влезает — высота из шаблона сохраняется. В отличие от ''RowsFit'', который работает в обе стороны — и увеличивает, и уменьшает. ==== ColsFit ==== Автоматически расширяет столбцы области по содержимому. ==== GroupNoSort ==== Отключает предварительную сортировку при использовании промежуточных итогов ''Group'' (см. раздел про итоги). Экономит время, если данные и так приходят отсортированными. Ставится не только в области: в **A1** действует на всю книгу, в **A2** — на лист. >**Когда это не ускорение, а необходимость.** Если столбцов с ''Group'' и ''Sort'' в сумме больше трёх, предварительная сортировка не выполняется вообще. Тогда данные обязаны приходить отсортированными из запроса, а области надо ставить ''GroupNoSort''. ===== 5. Фильтрация строк области ===== Фильтр записывается в **левую (служебную) ячейку строки данных** области — то есть в ту же строку, где стоят поля (''=Table_GOODS_NAME'' и т.д.), в самый левый служебный столбец. Фильтр применяется **до** построения таблицы: не подошедшие записи в отчёт не попадают, итоги считаются уже по отфильтрованным строкам. ==== FILTER — условие в стиле SQL ==== FILTER=<условие> В условии имена полей пишутся **без префикса** области (просто ''MIX_ID'', ''QUANT''). === Пример: накладная без услуг === В номенклатуре тип позиции ''MIX_ID = 2'' — это услуга. Чтобы в расходную накладную попали только товары: FILTER=MIX_ID<>2 === Что поддерживается === ^Возможность ^Пример ^ |Сравнения ''='' ''<>'' ''!='' ''<'' ''>'' ''<='' ''>=''|''FILTER=QUANT>0''| |''AND'', ''OR'', ''NOT'', скобки|''FILTER=MIX_ID<>2 AND QUANT>0''| |''IS NULL'' / ''IS NOT NULL''|''FILTER=GTD IS NOT NULL''| |''LIKE'' (''%'' — любые символы, ''_'' — один символ)|''FILTER=GOODS_NAME LIKE 'Кабель%' ''| |''IN (...)'' / ''NOT IN (...)''|''FILTER=MIX_ID IN (0,1)''| |''BETWEEN ... AND ...''|''FILTER=PRICE BETWEEN 100 AND 5000''| |Арифметика ''+ - * /''|''FILTER=QUANT*PRICE>=1000''| |Сравнение поля с полем|''FILTER=PRICE>SELFCOST''| |Даты|''FILTER=INSERT_DATE>=#2024-01-01#''| |Строки в апострофах|''FILTER=STOCK_NAME='Основной' ''| === Составные примеры === Только товары, у которых есть количество и цена выше себестоимости: FILTER=MIX_ID<>2 AND QUANT>0 AND PRICE>SELFCOST Позиции с суммой строки от 1000, кроме услуг: FILTER=MIX_ID NOT IN (2) AND QUANT*PRICE>=1000 ==== EXFILTER — условие формулой Excel ==== Если привычнее мыслить формулами Excel, используйте ''EXFILTER''. В формуле поля пишутся **полностью**, как в ячейках области (''Table_QUANT'', ''Table_MIX_ID''). EXFILTER=И(Table_MIX_ID<>2; Table_QUANT>0) Строка попадает в отчёт, если формула вернула **ИСТИНА**. EXFILTER=ИЛИ(Table_PRICE*Table_QUANT>=1000; Table_MIX_ID=2) >**Подсказка.** ''FILTER'' работает быстрее и его условия короче. ''EXFILTER'' удобен, когда нужна функция Excel (''ЕСЛИ'', ''ПОИСК'', ''ЛЕВСИМВ'' и т.п.). Можно указать обе опции: сначала отработает ''FILTER'', затем ''EXFILTER'' по оставшимся строкам. Формула в ''EXFILTER'' пишется в **русской** локали (''И'', ''ИЛИ'', ''ЕСЛИ'') — так же, как вы написали бы её в ячейке. Порядок обработки области: ''FILTER'' → ''EXFILTER'' → схлопывание строк (''GroupRowID'') → итоги и группировка. То есть итоги всегда считаются по тому, что осталось после фильтров. ===== 6. Опции столбцов (нижняя служебная строка области) ===== Опции пишутся в служебной строке области, **каждая — под своим столбцом**. ==== Сортировка ==== ^Опция ^Действие ^ |''Sort''|Сортировать по этому столбцу (по возрастанию)| |''Sort\Desc'' или ''Desc''|По убыванию| |''Sort\Asc'' или ''Asc''|По возрастанию (явно)| >**Ограничение Excel: максимум три ключа сортировки.** Если столбцов с ''Sort'' / ''Asc'' / ''Desc'' **и** ''Group'' в сумме больше трёх, область не сортируется **вообще** — не «по первым трём», а совсем. Сортировка и группировка считаются **вместе**: три уровня группировки плюс один столбец сортировки — это уже четыре ключа. В таких случаях сортируйте данные в запросе отчёта (''ORDER BY'') и ставьте области ''GroupNoSort''. ==== Итоги по столбцу ==== В служебной ячейке столбца указывается вид итога: ^Опция ^Итог ^ |''Sum''|Сумма| |''Count''|Количество **непустых** значений, включая текст (''СЧЁТЗ'')| |''CountNums''|Количество **числовых** значений (''СЧЁТ'')| |''Avg'' / ''Average''|Среднее| |''Max''|Максимум| |''Min''|Минимум| |''Product''|Произведение| |''StDev''|Стандартное отклонение| |''StDevP''|Стандартное отклонение (ген. совокупность)| |''Var''|Дисперсия| |''VarP''|Дисперсия (ген. совокупность)| >По столбцу можно получить **только один** итог. Если указать несколько — применится последний. === Пример === В служебной строке под столбцом «Количество» (''=Table_QUANT'') пишем ''Sum'', под столбцом «Сумма» — тоже ''Sum''. В ячейке слева от итоговых можно написать «Итого». ==== Промежуточные итоги (Group) ==== Опция ''Group'' ставится в тех столбцах, **по которым группируем**. В отчёте появятся строки промежуточных итогов (по тем столбцам, где указаны ''Sum'', ''Avg'' и т.д.). * Уровни группировки идут **слева направо** по столбцам шаблона. * ''Group\Collapse'' — сразу свернуть дерево итогов. * ''GroupNoSort'' — отключить предварительную сортировку. Ставится в **A1**, в **A2** или в области. Практических ограничений два: **три** ключа сортировки (см. выше — при четырёх и более область не сортируется вообще) и **восемь** уровней структуры Excel. >У ''Group'' есть ещё с десяток параметров: объединение подписей, позиция строки итогов, заголовок группы отдельной строкой, отключение подытогов и структуры, разрывы страниц. Все они и то, как устроена группировка внутри, — на странице «[[docs:settings:templates_option2|Опции шаблонов Excel: группировка, итоги и остальные опции]]». ==== Схлопывание одинаковых строк: GroupRowID / GroupRowSum ==== Иногда одна и та же позиция попадает в документ **несколькими строками** (разные партии, разные ГТД). В печатной форме их нужно показать **одной строкой**, сложив количество и суммы. ^Опция ^Где ставится ^Действие ^ |''GroupRowID''|под столбцом-**ключом**|Строки с одинаковым значением этого столбца считаются одной позицией. Ключей может быть **несколько**| |''GroupRowSum''|под столбцом-**суммой**|Значения этого столбца **складываются** при схлопывании| Остаётся **первая** строка группы, остальные удаляются. === Пример === Столбцы области: Наименование, Артикул, Количество, Цена, Сумма. * Под столбцом **Наименование** (или под ''=Table_GOOD_ID'') — ''GroupRowID'' * Под столбцом **Количество** — ''Sum;GroupRowSum'' * Под столбцом **Сумма** — ''Sum;GroupRowSum'' Наименование: GroupRowID Количество: Sum;GroupRowSum Сумма: Sum;GroupRowSum Если группировать нужно по нескольким признакам (например по позиции **и** цене), поставьте ''GroupRowID'' под обоими столбцами. >**Обратите внимание:** две опции в одной ячейке разделяются '';'' — ''Sum;GroupRowSum''. ''Sum'' считает общий итог по столбцу, ''GroupRowSum'' — складывает значения при схлопывании. ===== 7. RangeBreaks — разрывы страниц (подробно) ===== Опция листа (ячейка **A2**). Нужна для многостраничных документов (УПД, счёт-фактура, ТОРГ-12), где на **каждой** странице должна повторяться шапка таблицы, а внизу страницы — промежуточный итог. ==== Что делает ==== На каждом разрыве страницы внутри области: - (если задан ''SUBSUMCOLS'') вставляет строку **промежуточного итога** — это копия итоговой строки области, с суммами **только по строкам этой страницы**; - копирует **шапку таблицы** (''HEAD'') в начало новой страницы; - (если заданы ''PREHEADLEFT''/''PREHEADRIGHT'') вставляет над шапкой строку заголовка; - ставит разрыв страницы. В конце подставляет общее число страниц туда, где стоит плейсхолдер. ==== Параметры ==== ^Параметр ^Обязательный ^Описание ^ |''RANGE''|да|Имя области данных (''TableRange'')| |''HEAD''|да|**Область** шапки таблицы: адрес (''B19:AI20'') или имя области. Копируются целые строки. Её левый и правый столбцы задают, куда писать ''PREHEADLEFT'' и ''PREHEADRIGHT''| |''LASTROW''|да|Граница, ниже которой разрывы не ставим (подвал документа). **Число** — номер строки; **не число** — имя ячейки, находящейся в последней строке| |''SUBSUMCOLS''|нет|Столбцы промежуточных итогов: **буквы столбцов** и/или **имена ячеек** через запятую. **Само наличие параметра включает промежуточные итоги**| |''PAGECOUNT''|нет|Ячейки (через запятую), в которых плейсхолдер ''{PAGES}'' заменяется на число страниц| |''PREHEADLEFT''|нет|Заголовок над шапкой, **слева**. Можно указать **адрес ячейки** или **сам текст/формулу**| |''PREHEADRIGHT''|нет|То же, **справа**| ==== Плейсхолдеры ==== ^Плейсхолдер ^Значение ^ |''{PAGE}''|Номер текущего листа| |''{PAGES}''|Всего листов| ''{PAGES}'' можно ставить и в тексте подвала (например «Документ составлен на {PAGES} листах») — укажите такие ячейки в ''PAGECOUNT'', либо просто напишите плейсхолдер в ячейке: он будет заменён. ==== Пример: УПД на несколько страниц ==== Ячейка **A2** (параметры вводятся в столбик через **Alt+Enter**): OnlyValues; RangeBreaks RANGE=TableRange HEAD=B19:AI20 LASTROW=LastRowUPD SUBSUMCOLS=L,P,S,T PAGECOUNT=PageCountInfo PREHEADLEFT="Универсальный передаточный документ №" & СЖПРОБЕЛЫ(Title_CHECK_NUMBER) & " от " & ТЕКСТ(Title_CHECK_DATE;"ДД.ММ.ГГГГ") & " г." PREHEADRIGHT=Лист {PAGE} из {PAGES}; FitMergedCells\E8,E9 Что здесь происходит: * ''RANGE=TableRange'' — область с позициями документа. * ''HEAD=B19:AI20'' — две строки шапки таблицы («Наименование / Кол-во / Цена / Сумма» и строка нумерации столбцов). Эти строки повторятся на каждой странице. * ''LASTROW=LastRowUPD'' — имя ячейки в последней строке документа; ниже неё разрывы не ставятся (там подписи и подвал). * ''SUBSUMCOLS=L,P,S,T'' — промежуточные итоги считаются по столбцам L, P, S, T (количество, сумма без НДС, НДС, сумма с НДС). * ''PAGECOUNT=PageCountInfo'' — в ячейке с именем ''PageCountInfo'' (в подвале: «Документ составлен на {PAGES} листах») подставится число страниц. * ''PREHEADLEFT=...'' — над шапкой каждой новой страницы появится «Универсальный передаточный документ №123 от 05.02.2024 г.». * ''PREHEADRIGHT=Лист {PAGE} из {PAGES}'' — справа «Лист 2 из 3». * Строка ''PREHEADRIGHT'' заканчивается '';'' — это конец опции ''RangeBreaks'', далее идёт следующая опция. >**Про столбцы для итогов.** Вместо букв удобнее задать **имена ячейкам** итоговой строки (меню **Формулы\Присвоить имя**) и перечислить имена: тогда при добавлении/удалении столбцов в шаблоне опцию править не придётся. SUBSUMCOLS=SumQuant,SumNoNDS,SumNDS,SumTotal ==== Важно про итоги и финансы ==== При включённых промежуточных итогах итоговая строка **самой области** пересчитывается на сумму **последней страницы** (так устроена печатная форма). Общий итог документа должен находиться в строке **ниже области** (например «Всего к оплате»). Чтобы эта строка не «подхватила» промежуточный итог последней страницы, ''RangeBreaks'' **принудительно замораживает формулы листа** (как ''OnlyValues''), если ''OnlyValues'' не задан в книге или на листе. Это сделано намеренно — для защиты сумм в документе. >**Рекомендация.** Всегда указывайте ''OnlyValues'' в A1 для документов с ''RangeBreaks'' — так поведение будет предсказуемым. ==== Заголовок над шапкой ==== ''PREHEADLEFT'' / ''PREHEADRIGHT'' можно задать двумя способами: **1) Формулой прямо в опции** (как в примере выше). Формула пишется в русской локали (''СЖПРОБЕЛЫ'', ''ТЕКСТ''), точка с запятой внутри формулы разбор не ломает. **2) Ссылкой на ячейку** — если формула длинная, положите её в свободную ячейку (например ''A3'') и укажите её адрес. Ячейка будет очищена после построения. PREHEADLEFT=A3 PREHEADRIGHT=A4 Строка заголовка автоматически: без рамок, без переноса по словам, шрифт берётся из строки над шапкой шаблона, левый текст выравнивается влево, правый — вправо. >**Про ''подвал''.** Если разрыв страницы приходится внутрь ''подвала'' (строка итогов + подписи), он должен уехать на новую страницу целиком, а с ним - ровно одна последняя строка данных включая строку итогов. ===== 8. Полный перечень опций (шпаргалка) ===== ^Опция ^Где ^Кратко ^ |''OnlyValues''|A1 / A2 / область|Заморозить все формулы| |''OnlyValues2''|A1 / A2|Заморозить только ссылки на данные, оставить формулы Excel живыми| |''FitMergedCells\список''|A2|Подгон высоты строк вне областей (в т.ч. объединённые ячейки)| |''RangeBreaks\параметры''|A2|Разрывы страниц, повтор шапки, промежуточные итоги, заголовок листа| |''MacroBefore=Модуль.Процедура''|A1|Макрос шаблона **до** построения. Перекрывает именованную ячейку ''MACROBEFORE''| |''MacroAfter=Модуль.Процедура''|A1|Макрос шаблона **после** построения. Перекрывает именованную ячейку ''MACROAFTER'' и ''#'' в имени файла шаблона| |''DeleteMacro''|A1|Удалить макросы из готового отчёта| |''DeleteMacro2''|A1|Удалить макросы из готового отчёта исключая системные| |''AutoFilter''|область|Автофильтр по области-списку| |''RowsFit''|область|Автоподбор высоты строк области| |''RowsFit2''|область|Автоподбор высоты строк области (только в сторону увеличения)| |''ColsFit''|область|Автоподбор ширины столбцов области| |''GroupNoSort''|A1 / A2 / область|Не сортировать перед промежуточными итогами ''Group''| |''FILTER=условие''|левая ячейка строки данных|Фильтр строк (SQL-условие)| |''EXFILTER=формула''|левая ячейка строки данных|Фильтр строк (формула Excel)| |''Sort'', ''Desc'', ''Asc''|столбец|Сортировка области| |''Sum'', ''Count'', ''CountNums'', ''Avg'', ''Max'', ''Min'', ''Product'', ''StDev'', ''StDevP'', ''Var'', ''VarP''|столбец|Итог по столбцу| |''Group'', ''Group\Collapse''|столбец|Промежуточные итоги с группировкой. Полный список параметров — на отдельной странице| |''GroupRowID''|столбец|Ключ схлопывания одинаковых строк| |''GroupRowSum''|столбец|Складывать значения при схлопывании| >Опции, которых нет в этой таблице (''SummaryAbove'', ''DisableGrandTotals'', ''SmartGroup'', ''DeleteColumn'', ''Chart'', ''Pivot'', ''Hide'', ''Delete'' и другие), — на странице «[[docs:settings:templates_option2|Опции шаблонов Excel: группировка, итоги и остальные опции]]». ===== 9. Типовые рецепты ===== ==== Расходная накладная (без услуг, схлопывание позиций) ==== **A1:** OnlyValues **Левая ячейка строки данных области ''TableRange'':** FILTER=MIX_ID<>2 **Левая нижняя ячейка области:** RowsFit **Служебная строка области:** Наименование: GroupRowID Количество: Sum;GroupRowSum Сумма: Sum;GroupRowSum ==== Акт выполненных работ (только услуги) ==== **Левая ячейка строки данных:** FILTER=MIX_ID=2 ==== Многостраничный УПД ==== См. пример в разделе [[#7. RangeBreaks — разрывы страниц (подробно)]]. ==== Документ с длинными реквизитами ==== Если объединённые ячейки с адресом клиента и наименованием фирмы «обрезают» текст: **A2:** FitMergedCells\E8,E9,E10,E11 ===== 10. Частые ошибки ===== ^Симптом ^Причина ^Решение ^ |Текст опции остался в готовом отчёте|Опция написана с ошибкой или не в той ячейке|Проверьте написание и место (A1 / A2 / служебные ячейки области)| |''FitMergedCells=C5,D5'' не работает|Между именем опции и параметрами должен быть ''\'', а не ''=''|''FitMergedCells\C5,D5''| |Опция после формулы «потерялась»|'';'' внутри формулы был принят за разделитель|Пишите параметры **в столбик** через **Alt+Enter**; '';'' ставьте только в **конце строки**| |Опция с новой строки не сработала, ошибки при этом нет|В конце предыдущей строки нет '';'', и строка прочиталась как **параметр** предыдущей опции|Поставьте '';'' в конце предыдущей строки| |''MacroAfter'' не запускается|Либо нет '';'' в конце предыдущей строки, либо в имени макроса опечатка (нужно ''Модуль.Процедура'')|Проверьте '';'' и имя процедуры в редакторе VBA| |Промежуточные итоги равны общему итогу|Не задан ''SUBSUMCOLS''|Перечислите столбцы: ''SUBSUMCOLS=L,P,S,T''| |Строки таблицы слишком высокие|В данных есть перевод строки в конце значения|Включите ''RowsFit'' или ''RowsFit2''; программа обрезает «хвостовые» переводы строк автоматически| |Картинка «разъехалась» на разрыве страницы|—|Исправляется автоматически; убедитесь, что используется актуальная версия| |Итог «Всего» показывает сумму последней страницы|Не была включена заморозка формул|Поставьте ''OnlyValues'' в A1|