Перейти к содержаниюСправка

Различия

Показаны различия между двумя версиями страницы.

Ссылка на это сравнение

hc:admin:print_forms [10.10.2026 16:41] – создано - внешнее изменениеhc:admin:print_forms [10.10.2026 19:32] (текущий) – внешнее изменение
Строка 71: Строка 71:
 </WRAP> </WRAP>
  
-Кнопка **«Источник»** в редакторе показывает шаблон в виде HTML-кода. Сложные формы — со множеством таблиц и точным расположением полей — надёжнее править в этом режиме.+Кнопка **«Источник»** в редакторе показывает шаблон в виде HTML-кода. Сложные формы — со множеством таблиц и точным расположением полей — надёжнее править в этом режиме, см. [[#как_править_html-код_шаблона|Как править HTML-код шаблона]]. Какие конструкции можно использовать и где брать имена полей — в разделах [[#синтаксис_шаблона|Синтаксис шаблона]] и [[#переменные_по_типам_документов|Переменные по типам документов]].
  
 ===== Как добавить шаблон ===== ===== Как добавить шаблон =====
Строка 83: Строка 83:
 </WRAP> </WRAP>
  
-===== Подстановка данных =====+===== Где какой синтаксис работает =====
  
-Данные документа подставляются в шаблон вместо имён полей в двойных фигурных скобках.+Шаблоны разных типов собираются по-разному, поэтому и возможности у них разные.
  
 <WRAP props> <WRAP props>
-| ''%%{{docnum}}%%'' | Значение поля документа: номер, дата, сумма | +| **Печатные формы документов** | Полный синтаксис: подстановка, циклы, условия, форматирование чисел, штрихкоды — см. [[#синтаксис_шаблона|Синтаксис шаблона]] | 
-| ''%%{{organisation.inn}}%%'' | Поле вложенной записи — через точку: ИНН юридического лица, название поставщика | +| **Печатная форма :: Кассовая форма** | Подстановка, циклы ''%%{{#each}}%%'' и условия ''%%{{#if}}%%'', ''%%{{#unless}}%%''. Форматирование чисел, сравнение и штрихкоды недоступны | 
-| ''%%{{#each orders_item}} … {{/each}}%%'' | Повторяет фрагмент для каждой строки документа — так строится таблица товаров | +| **EMail** | Только подстановка значений: ''%%{{first_name}}%%''. Циклы и условия не работают — конструкция останется в письме как текст | 
-| ''%%{{#if shipping_address}} … {{/if}}%%'' | Выводит фрагмент, только если поле заполнено |+| **Ценники** | Свой набор полей — см. [[hc:prices:labels|Ценники]] | 
 +| **Интернет-витрина :: Информация** | Обычная страница, подстановок нет |
 </WRAP> </WRAP>
  
-Какие поля есть у документа, видно под редактором: раскройте блок **«Показать структуру данных документа для автоподстановки»**. В нём показаны имена полей на примере одного из существующих документов этого типа.+===== Синтаксис шаблона =====
  
-Пример строки таблицы товаров в счёте по заказу:+Шаблон — это HTML-страница, в которую вставлены конструкции в двойных фигурных скобках. При печати система заменяет их данными документа. Используется шаблонизатор Handlebars. 
 + 
 +==== Значения ==== 
 + 
 +<WRAP props> 
 +| ''%%{{docnum}}%%'' | Значение поля документа | 
 +| ''%%{{supplier.name}}%%'' | Поле вложенной записи — через точку: название поставщика, ИНН юридического лица | 
 +| ''%%{{orders_item.0.name}}%%'' | Поле конкретной строки документа. Строки нумеруются с нуля | 
 +| ''%%{{orders_item.length}}%%'' | Количество строк | 
 +| ''%%{{{comment}}}%%'' | Значение без защиты: если в поле записан HTML-код, он сработает как разметка. В двойных скобках тот же код выводится как текст | 
 +| ''%%{{!-- примечание --}}%%'' | Комментарий: в документ не попадает | 
 +</WRAP> 
 + 
 +Если поля с таким именем нет или оно не заполнено, на его месте будет пусто — ошибки не возникнет. 
 + 
 +==== Циклы ==== 
 + 
 +Цикл повторяет фрагмент для каждой строки документа — так строится таблица товаров.
  
 <code html> <code html>
-{{#each orders_item}} +<table> 
-<tr> +  <tbody> 
-  <td>{{index}}</td> +    {{#each orders_item}} 
-  <td>{{name}}</td> +    <tr> 
-  <td>{{quantity}} {{okei_name}}</td> +      <td>{{index}}</td> 
-  <td>{{price}}</td> +      <td>{{name}}</td> 
-  <td>{{amount}}</td> +      <td>{{quantity}} {{okei_name}}</td> 
-</tr> +      <td>{{price}}</td> 
-{{/each}}+      <td>{{amount}}</td> 
 +    </tr> 
 +    {{else}} 
 +    <tr><td colspan="5">В заказе нет товаров</td></tr> 
 +    {{/each}} 
 +  </tbody> 
 +</table>
 </code> </code>
 +
 +<WRAP props>
 +| ''%%{{#each строки}} … {{/each}}%%'' | Повторяет фрагмент для каждой строки. Внутри цикла имена полей относятся к строке: ''%%{{name}}%%'' — название товара в строке |
 +| ''%%{{else}}%%'' внутри цикла | Что вывести, если строк нет |
 +| ''%%{{index}}%%'' | Номер строки с единицы — готовое поле в строках документов |
 +| ''%%{{@index}}%%'' | Номер строки с нуля — считает сам шаблонизатор |
 +| ''%%{{#if @first}}%%'', ''%%{{#if @last}}%%'' | Первая и последняя строка: удобно для разделителей и итогов |
 +| ''%%{{../docnum}}%%'' | Поле документа изнутри цикла: ''../'' поднимает на уровень выше |
 +| ''%%{{#each_with_sort orders_item "name"}} … {{/each_with_sort}}%%'' | Тот же цикл, но строки отсортированы по указанному полю по возрастанию. Порядок сохраняется и для циклов ниже по шаблону |
 +| ''%%{{#times 10}} … {{/times}}%%'' | Повторяет фрагмент заданное число раз — так добавляют пустые строки в бланк. ''%%{{this}}%%'' внутри — счётчик с нуля |
 +</WRAP>
 +
 +В поступлении, возврате поставщику, перемещении и заказе поставщику порядок строк можно менять прямо на странице печати: над документом есть ссылка **Сортировка: Товар**.
 +
 +==== Условия ====
 +
 +<WRAP props>
 +| ''%%{{#if shipping_address}} … {{/if}}%%'' | Выводит фрагмент, если поле заполнено. Пустая строка, ноль и пустой список считаются незаполненными |
 +| ''%%{{#if paid}} … {{else}} … {{/if}}%%'' | Два варианта: для заполненного и пустого поля |
 +| ''%%{{#unless customer_name}} … {{/unless}}%%'' | Наоборот: выводит фрагмент, если поле пустое |
 +| ''%%{{#ifeq is_paid "Да"}} … {{else}} … {{/ifeq}}%%'' | Сравнение: выводит фрагмент, если значение поля равно указанному. То же делает ''%%{{#if_eq}}%%'' |
 +| ''%%{{#with supplier}} {{name}}, ИНН {{inn}} {{/with}}%%'' | Переходит внутрь вложенной записи, чтобы не повторять её имя |
 +</WRAP>
 +
 +Пример: строка с адресом доставки печатается, только если адрес указан.
 +
 +<code html>
 +{{#if shipping_address}}
 +<p>Адрес доставки: {{shipping_address}}</p>
 +{{/if}}
 +</code>
 +
 +==== Числа и текст ====
 +
 +<WRAP props>
 +| ''%%{{toFixed cogs 2}}%%'' | Число с заданным количеством знаков после запятой: 760 → ''760.00''. Без второго значения — округление до целого |
 +| ''%%{{removeZeros count}}%%'' | Убирает лишние нули: ''2.000'' → ''2'', ''1.500'' → ''1.5'' |
 +| ''%%{{concat docnum " от " docdate_readable}}%%'' | Склеивает несколько значений и текст в одну строку |
 +</WRAP>
 +
 +Шаблон не умеет считать: сложить, умножить или сравнить «больше — меньше» в нём нельзя. Всё нужное уже посчитано в данных документа: суммы и итоги, суммы прописью (поля с окончанием ''_text'' или ''Text''), даты в привычном виде (''docdate_readable''), дата по частям для бланков (''docdate_parts.d'', ''docdate_parts.mText'', ''docdate_parts.Y'').
 +
 +==== Штрихкод ====
 +
 +<code html>
 +{{> barcode data=docnum}}
 +{{> barcode data=docnum type="qrcode"}}
 +{{> barcode data="4600000010526" type="ean13" includeText="true"}}
 +</code>
 +
 +<WRAP props>
 +| ''data'' | Что закодировать: имя поля или текст в кавычках |
 +| ''type'' | Вид кода: ''code128'' (по умолчанию), ''ean13'', ''qrcode'' |
 +| ''includeText'' | ''%%"true"%%'' — подписать значение под штрихкодом |
 +| ''scale'', ''width'', ''rotate'' | Масштаб, ширина и поворот изображения |
 +</WRAP>
  
 <WRAP info> <WRAP info>
-**Подсказка.** Шаблоны используют синтаксис Handlebars. Реквизиты продавца и покупателя берутся из справочников — см. [[hc:company:organisations|Юридические лица]] и [[hc:company:bank_accounts|Банковские счета]]: если в печатной форме пустые реквизиты, заполните их там.+**Подсказка.** Изображение штрихкода строит внешний сервис quickchart.io: при печати компьютеру нужен доступ в интернет, а закодированное значение передаётся этому сервису. Не кодируйте так персональные данные. 
 +</WRAP> 
 + 
 +===== Переменные по типам документов ===== 
 + 
 +==== Где смотреть имена полей ==== 
 + 
 +Откройте шаблон на изменение и раскройте под редактором блок **«Показать структуру данных документа для автоподстановки»**. В нём показаны все поля на примере одного из существующих документов этого типа. 
 + 
 +{{:hc:admin:print_forms:template-data.png?700|Структура данных документа под редактором шаблона}} 
 + 
 +<WRAP props> 
 +| ''%%[docnum] => 1052%%'' | Поле документа. В шаблоне: ''%%{{docnum}}%%'' | 
 +| ''%%[organisation] => Array%%'' и поля с отступом ниже | Вложенная запись. В шаблоне — через точку: ''%%{{organisation.inn}}%%'' | 
 +| ''%%[orders_item] => Array%%'', внутри ''%%[0] => Array%%'' | Строки документа. В шаблоне — цикл ''%%{{#each orders_item}}%%'', внутри него поля строки: ''%%{{name}}%%'' | 
 +</WRAP> 
 + 
 +В примере показана только первая строка документа — этого достаточно, чтобы узнать имена полей. Если документов этого типа ещё нет, блок пуст: создайте хотя бы один документ. 
 + 
 +<WRAP important> 
 +**Внимание.** У кассовых форм блока нет — их поля перечислены [[#кассовые_формы|ниже]]. Для писем блок показывает готовый список переменных. 
 +</WRAP> 
 + 
 +==== Общие поля ==== 
 + 
 +В печатных формах документов доступны все поля самого документа и общие поля: 
 + 
 +<WRAP props> 
 +| ''currency_symbol'', ''currency_sub_symbol'' | Обозначение валюты и её дробной части | 
 +| ''user_full_name'', ''user_short_name'' | Ф.И.О. сотрудника, который печатает документ, — полностью и с инициалами. Есть в поступлении, возврате, перемещении, отгрузке и заказе поставщику | 
 +| ''attribute1'' … ''attribute15'' | [[hc:admin:flex_fields|Пользовательские поля]] документа. Какое поле под каким номером, видно по значениям в блоке структуры данных | 
 +| ''warehouse.name'', ''warehouse.address'', ''warehouse.phone'' | Точка продаж документа | 
 +| ''warehouse.organisation.name'', ''.legal_name'', ''.inn'', ''.kpp'', ''.ogrn'', ''.okpo'', ''.address'' | Юридическое лицо точки продаж | 
 +| ''supplier.name'', ''.legal_name'', ''.inn'', ''.kpp'', ''.address'', ''.phone'', ''.bank_name'', ''.BIK'', ''.bankaccount'', ''.corraccount'' | Поставщик или контрагент и его банковские реквизиты | 
 +| ''item.name'', ''item.print_name'', ''item.article'', ''item.unit'', ''item.barcodes'', ''item.manufacturer.name'' | Товар строки — внутри цикла по строкам | 
 +</WRAP> 
 + 
 +==== Документы ==== 
 + 
 +Имена полей со строками и основных итогов. Полный список для типа — в блоке структуры данных. 
 + 
 +^ Тип ^ Строки ^ Поля строки ^ Итоги и даты ^ 
 +| Поступление | ''inflow_items'' | ''quantity'', ''cogs'', ''cogsum'', ''vat_rate'', ''vat_sum'', ''sum_minus_vat'', ''price_minus_vat'', ''retail_price'', ''retail_sum'', ''lot_number'', ''expir_date'', ''item.*'' | ''waybill'', ''docdate_readable'', ''accept_date_readable'', ''docdate_parts'', ''inflow_sum.*'', ''inflow_items_count'', ''inflow_items_count_text'', ''consignee.*''; расхождения — ''difference_report'' | 
 +| Возврат | ''returns_items'' | ''quantity'', ''cogs'', ''cogsum'', ''vat_rate'', ''vat_sum'', ''sum_minus_vat'', ''lot_number'', ''item.*'' | ''amount'', ''docdate_readable'', ''returns_sum.*'', ''returns_items_count_text'', ''consignee.*'' | 
 +| Перемещение, Товарная накладная | ''movegood_items'' | ''count'', ''cogs'', ''amount'', ''src_retail_price'', ''dst_retail_price'', ''vat_rate'', ''vat_sum'', ''lot_number'', ''expir_date'', ''item.*'' | ''amount'', ''amountText'', ''retail_amount'', ''retailAmountText'', ''totalCount'', ''item_count'', ''item_count_text'', ''docdate_readable'', ''docdate_parts'', ''source.*'', ''destination.*'' | 
 +| Списание | ''writeoff_item'' | ''quantity'', ''cogs'', ''cogsum'', ''retail_price'', ''lot_number'', ''formatted_expir_date'', ''item.*'' | ''amount'', ''amountText'', ''quantity'', ''formatted_date'', ''reason_readable'' | 
 +| Инвентаризация | ''pages'' → ''inventory_items'' | ''quantity_initial'', ''quantity'', ''cogs'', ''item_sum'', ''item_fact_sum'', ''item.*'' | ''docnum'', ''formatted_date'', ''sum'', ''fact_sum'', ''quantity_sum'', ''fact_quantity_sum'', ''fact_sum_str''; расхождения — ''pages_diff'' | 
 +| Отгрузка со склада | ''shipment_items'' | ''index'', ''name'', ''article'', ''okei_code'', ''okei_name'', ''quantity'', ''price_without_vat'', ''amount_without_vat'', ''vat_rate'', ''vat_amount'', ''amount_with_vat'', ''kiz_codes'' | ''docnum'', ''docdate_readable'', ''total_amount_without_vat'', ''total_vat_amount'', ''total_amount_with_vat'', ''total_amount_with_vat_text'', ''shipment_items_count'', ''shipment_items_count_text'' | 
 +| Заказ покупателя | ''orders_item'' | ''index'', ''name'', ''article'', ''okei_name'', ''quantity'', ''price'', ''discount_formatted'', ''amount'', ''item.*'' | ''docnum'', ''docdate_readable'', ''total_amount'', ''total_amount_text'', ''order_discount'', ''shipping_cost_formatted'', ''total_amount_final'', ''total_amount_final_text'', ''orders_item_count'' | 
 +| Заказ поставщику | ''purchase_order_items'' | ''index'', ''quantity'', ''price'', ''amount'', ''item.*'' | ''docnum'', ''docdate_readable'', ''expected_date'', ''docdate_parts'', ''total_quantity'', ''total_amount'', ''total_amount_text'', ''items_count'', ''items_count_text'' | 
 +| Установка розничных цен | ''lines'' | ''price_old'', ''price_new'', ''price2_old'', ''price2_new'', ''item.*'' | ''docNum'', ''dateDay'', ''dateMonth'', ''dateYear'', ''pricelist.*'' | 
 +| Движение денег по главной кассе | — | — | ''doc_num'', ''doc_date'', ''doc_date_data.*'', ''amount'', ''amount_data.*'', ''typeName'', ''subtypeName'', ''responsibleUser.fioName'', ''cash_before_data.*'', ''cash_after_data.*'' | 
 +| Главная касса | — | — | ''cash'', ''doc_date'', ''doc_date_data.day'', ''.month_string'', ''.year'', ''cash_data.whole_part'', ''.fraction_part'', ''.string_format'' | 
 +| Кассовая книга | ''pages'' → ''items'' | ''index'', ''title'', ''in_amount'', ''out_amount'', ''account'' | ''doc_date'', ''doc_date_data.*'', ''organisation.*''; у страницы — ''page_number'' | 
 +| Инкассация главной кассы | ''note_set'' | ''den'', ''count'', ''sum'' | ''transaction.*'' — данные движения денег | 
 +| Z-отчет | ''returnReceipts'' | поля чека возврата | ''doc_num'', ''date'', ''time'', ''amountCash'', ''amountCard'', ''amountSbp'', ''amountReturn'', ''totalIncome'', ''totalIncomeText'', ''terminal.*'', ''openUser.fioName'', ''closeUser.fioName'' | 
 + 
 +Суммы с набором вариантов записи (''amount_data'', ''cash_before_data'', ''cash_data'') раскрываются через точку: ''.money_format'' — число с копейками, ''.string_format'' — прописью, ''.whole_part'' и ''.fraction_part'' — целая и дробная части отдельно. 
 + 
 +<WRAP info> 
 +**Подсказка.** В заказе покупателя и отгрузке со склада реквизиты продавца вынесены в отдельные поля: ''organisation_name'', ''organisation.inn'', ''organisation.kpp'', ''organisation_bank_name'', ''organisation_bik'', ''organisation_account'', ''organisation_corr_account''. Банк берётся из первого банковского счёта юридического лица. Покупатель в заказе — ''customer_name'', ''customer_contact'', ''customer.*''; в отгрузке — ''supplier_name'' и ''supplier.*''. 
 +</WRAP> 
 + 
 +В перемещении себестоимость (''cogs'', ''amount'') видит только сотрудник с правом ''console.movegoods.showcostprice''. Остальным в эти поля подставляется розничная цена. 
 + 
 +==== Кассовые формы ==== 
 + 
 +Кассовые формы печатает касса, данные берутся из открытого чека или смены. Касса находит шаблон по системному имени, поэтому меняйте существующие шаблоны «Товарный чек», «КМ-3» и «КМ-6»: новый шаблон этого типа касса печатать не будет. 
 + 
 +<WRAP props> 
 +| ''company.name'', ''.inn'', ''.kpp'', ''.ogrn'', ''.okpo'' | Юридическое лицо | 
 +| ''company.warehouseName'', ''.address'', ''.phone'', ''.warehouse_time_open'', ''.warehouse_time_close'' | Точка продаж и часы работы | 
 +| ''user.shortFio'', ''user.shortName'', ''user.lastName'', ''.firstName'', ''.middleName'' | Кассир | 
 +| ''number'', ''date'', ''time'' | Номер, дата и время чека — товарный чек | 
 +| ''amount'', ''amount_text'' | Сумма чека со скидками — числом и прописью | 
 +| ''customer_fname'', ''customer_lname'', ''customer_phone'' | Покупатель | 
 +| ''items'' | Строки чека: ''index'', ''name'', ''quantity'', ''price'', ''discount'', ''discount_name'', ''amount'', ''amount_original'' | 
 +| ''inCash'', ''inCard'', ''inBonus'', ''moneyChange'', ''net_amount'', ''net_amount_text'' | Оплата: наличные, карта, баллы, сдача, сумма к оплате без баллов. Заполняются после оплаты чека | 
 +| ''shift.*'' | Данные смены в формах КМ-3 и КМ-6. Имена полей смотрите в стандартных шаблонах | 
 +</WRAP> 
 + 
 +==== Письма ==== 
 + 
 +В шаблонах типа «EMail» — в тексте и в теме письма — работают эти переменные: 
 + 
 +<WRAP props> 
 +| ''%%{{first_name}}%%'', ''%%{{last_name}}%%'', ''%%{{middle_name}}%%'' | Имя, фамилия и отчество клиента | 
 +| ''%%{{email}}%%'', ''%%{{phone}}%%'' | Почта и телефон | 
 +| ''%%{{sales_amount}}%%'' | Сумма покупок клиента | 
 +| ''%%{{mobile_app_link}}%%'', ''%%{{mobile_invite_code}}%%'' | Ссылка на мобильное приложение и код приглашения | 
 +| ''%%{{shop_name}}%%'' | Название сети из настроек системы | 
 +</WRAP> 
 + 
 +Имя переменной пишите слитно со скобками, без пробелов: ''%%{{ first_name }}%%'' в письме не сработает. 
 + 
 +===== Как править HTML-код шаблона ===== 
 + 
 +Редактор показывает шаблон в двух видах: как оформленную страницу и как HTML-код. Сложные формы — со множеством таблиц, циклами и условиями — правят в коде. 
 + 
 +<WRAP procedure> 
 +  - Откройте шаблон на изменение и нажмите **«Источник»** — первую кнопку на панели редактора. Вместо страницы появится HTML-код. 
 + 
 +{{:hc:admin:print_forms:template-source.png?700|Шаблон «Счёт по заказу» в режиме «Источник»}} 
 + 
 +  - Внесите правки в код. 
 +  - Нажмите **«Источник»** ещё раз, чтобы вернуться к оформленной странице. Циклы и условия в ней показаны как текст в фигурных скобках — это нормально. 
 +  - Нажмите **«Сохранить»** над редактором. 
 +  - Откройте документ этого типа, нажмите **«Печать»**, выберите шаблон и проверьте результат. Чтобы отправить документ на принтер, нажмите **«Печатать»** над ним. 
 +</WRAP> 
 + 
 +<WRAP tip> 
 +**Совет.** Большой шаблон удобнее править во внешнем редакторе кода: скопируйте код из режима **«Источник»**, измените и вставьте обратно целиком. Копию исходного кода сохраните в файл — так шаблон можно вернуть. 
 +</WRAP> 
 + 
 +Что нужно знать о редакторе: 
 + 
 +<WRAP props> 
 +| **Вставка кода** | Вставляйте HTML-код только в режиме **«Источник»**. В обычном режиме редактор вставит его как текст, и вместо таблицы в документе окажутся теги | 
 +| **Переформатирование** | При переключении видов редактор выравнивает отступы и переносы строк по-своему. На документ это не влияет | 
 +| **Циклы в таблицах** | ''%%{{#each}}%%'' и ''%%{{/each}}%%'' ставьте внутри ''<tbody>'', вокруг строки ''<tr>'' целиком — как в примере выше | 
 +| **Парные конструкции** | Каждой открывающей части нужна своя закрывающая: ''%%{{#if}}%%'' — ''%%{{/if}}%%'', ''%%{{#each}}%%'' — ''%%{{/each}}%%'' | 
 +| **Перенос строки** | Клавиша Enter в обычном режиме ставит перенос строки ''<br>'', а не новый абзац | 
 +</WRAP> 
 + 
 +Оформление задаётся обычными средствами HTML и CSS: 
 + 
 +<WRAP props> 
 +| **Стили** | Блок ''<style> … </style>'' в начале шаблона или атрибут ''style'' у тега. Давайте классам свои имена с общей приставкой, например ''schet-'': стили шаблона действуют на всю страницу печати | 
 +| **Размер и поля страницы** | ''@media print { @page { size: A4 portrait; margin: 10mm; } }'' внутри блока ''<style>''. Для альбомной ориентации — ''A4 landscape'' | 
 +| **Размеры** | Ширину формы и колонок задавайте в миллиметрах: ''width: 190mm'' | 
 +| **Разрыв страницы** | ''<div style="page-break-after: always"></div>'' — всё, что ниже, печатается с новой страницы | 
 +| **Масштаб** | При печати документ уменьшается до 90 % |
 </WRAP> </WRAP>
  
Строка 133: Строка 344:
 | В меню «Печать» документа нет нужной формы | Шаблон создан с другим типом или удалён | Проверьте **Тип** шаблона в списке; при необходимости создайте шаблон заново | | В меню «Печать» документа нет нужной формы | Шаблон создан с другим типом или удалён | Проверьте **Тип** шаблона в списке; при необходимости создайте шаблон заново |
 | В напечатанном документе пустые реквизиты | Не заполнены реквизиты юридического лица, банковский счёт или данные покупателя | Заполните справочники — см. [[hc:company:organisations|Юридические лица]] | | В напечатанном документе пустые реквизиты | Не заполнены реквизиты юридического лица, банковский счёт или данные покупателя | Заполните справочники — см. [[hc:company:organisations|Юридические лица]] |
-| В документе пусто на месте значения | В имени поля опечатка, такого поля у документа нет или оно не заполнено | Сверьте имя с блоком «Показать структуру данных документа для автоподстановки» | +| В документе пусто на месте значения | В имени поля опечатка, такого поля у документа нет или оно не заполнено | Сверьте имя с блоком «Показать структуру данных документа для автоподстановки» или с таблицей [[#документы|полей по типам]] | 
-| Таблица товаров пустая или выводит одну строку | Повреждена конструкция ''%%{{#each}} … {{/each}}%%'' | Откройте шаблон в режиме **«Источник»** и восстановите открывающую и закрывающую части |+| Таблица товаров пустая или выводит одну строку | Повреждена конструкция ''%%{{#each}} … {{/each}}%%'' или в ней неверное имя поля со строками | Откройте шаблон в режиме **«Источник»**, проверьте имя и восстановите открывающую и закрывающую части | 
 +| Блок «Показать структуру данных…» пуст | Документов такого типа ещё нет или это кассовая форма | Создайте документ этого типа или возьмите имена полей из раздела [[#переменные_по_типам_документов|Переменные по типам документов]] | 
 +| В письме клиенту остался текст ''%%{{#if …}}%%'' | В шаблонах писем работает только подстановка значений | Уберите циклы и условия, оставьте переменные из [[#письма|списка]] | 
 +| Вместо штрихкода пустое место или значок битой картинки | Нет доступа в интернет или значение не подходит для выбранного вида кода | Проверьте интернет на компьютере; для ''ean13'' значение должно состоять из 12–13 цифр | 
 +| Изменённый шаблон товарного чека не печатается на кассе | Создан новый шаблон, а касса печатает по стандартному | Внесите правки в существующий шаблон «Товарный чек» — см. [[#кассовые_формы|Кассовые формы]] |
 | После правки форма «поехала» | Редактор изменил разметку таблиц | Верните шаблон из копии и правьте в режиме **«Источник»** | | После правки форма «поехала» | Редактор изменил разметку таблиц | Верните шаблон из копии и правьте в режиме **«Источник»** |
 | Поле **Тип** недоступно | Тип задаётся при создании и не меняется | Создайте новый шаблон нужного типа | | Поле **Тип** недоступно | Тип задаётся при создании и не меняется | Создайте новый шаблон нужного типа |