Инструкция описывает техническую настройку КП-подборки из новой шахматки недвижимости 2.0.
Связанная задача: CRM4DEV-1534.
Связанные реализации:
share_url.Актуальный пакет: CRM4DEV-selection-commercial-offer.zip.
Ключевые файлы:
kp_selection_template.html - основной HTML template печатной формы КП-подборки;kp_selection_autotext.json - структура JSON/автотекстов;kp_selection_mapping.md - маппинг данных;kp_selection_1c_adapter.bsl - пример серверной логики 1С;kp_selection_filters_v8_proxy.html - HTML-блок фильтров для формы 1С через v8-proxy;kp_selection_filters_v8_proxy_contract.md - контракт методов фильтров;kp_selection_acceptance_tests.csv - приемочные проверки.В вид печатной формы нужно вставлять содержимое файла:
kp_selection_template.html |
Не использовать как основной template:
kp_selection_example_preview.html - пример с уже вставленным тестовым JSON;kp_selection_example_data.json - тестовые данные;commercial_offer_form_mockup.html - визуальный макет формы, не печатный шаблон;kp_selection_filters_v8_proxy.html - блок фильтров формы, не печатная форма.Template должен храниться и загружаться в UTF-8.
Контрольный признак нормальной кодировки:
Коммерческое предложение Описание жилых комплексов Изображение не загружено Основные параметры |
Если в template видны строки вида РљРѕРјРј..., файл загружен или сохранен в неверной кодировке. Такой template нельзя использовать.
Минимальная структура:
{
"selection": {
"title": "Коммерческое предложение",
"subtitle": "От застройщика «ПАРТНЕР-СТРОЙ СЗ АО»",
"date": "30.06.2026",
"count": 5
},
"objects": [
{
"title": "Квартира · 38,3 м²",
"subtitle": "Маяк Курган, ГП 6, Парадная 1, кв. №13",
"price": "3 830 000",
"pricePerM2": "100 000 руб./м²",
"planImg": "data:image/png;base64,...",
"params": [
{ "k": "Площадь", "v": "38,3 м²" },
{ "k": "Этаж", "v": "2" }
],
"description": "Краткое описание объекта"
}
],
"titlePage": {
"renderImg": "data:image/png;base64,...",
"renderCaption": "Рендер жилого комплекса",
"blocks": [
{
"title": "ЖК Маяк",
"text": "Описание жилого комплекса"
}
],
"footerLeft": "© 4DEV · Макет подборки",
"footerRight": "Поддержка печати: Ctrl+P / Сохранить как PDF"
}
} |
Основной ожидаемый формат:
"titlePage": {
"blocks": [
{ "title": "ЖК Маяк", "text": "Описание ЖК" }
]
} |
Template также поддерживает fallback-поля:
titlePage.description;titlePage.text;complexes[];residentialComplexes[];complexBlocks[];complexDescription;residentialComplexDescription;objects[].complexDescription;objects[].complexText.Если описание не передано ни в одном поле, в PDF будет диагностический блок:
Описание ЖК не передано в JSON. Нужно заполнить titlePage.blocks[] или titlePage.description. |
Это не ошибка template. Это означает, что 1С не передала описание ЖК.
Для изображений передавать готовый src:
data:image/png;base64,...; илиПоля:
objects[].planImg - планировка объекта;titlePage.renderImg - рендер ЖК.Если изображение не передано, template выводит Изображение не загружено.
Текущий template настроен под A4.
Ожидаемая раскладка:
| Количество объектов | Страницы |
|---|---|
| 1 | объект + описание ЖК на одной странице |
| 2 | 2 объекта + описание ЖК на одной странице |
| 3 | 3 объекта на первой странице, описание ЖК на второй |
| 4 | 3 объекта на первой странице, 1 объект + описание ЖК на второй |
| 5 | 3 объекта на первой странице, 2 объекта + описание ЖК на второй |
| 6 | 3 объекта на первой странице, 3 объекта на второй, описание ЖК на третьей |
Техническая логика template:
.object-page;is-full-page;with-title-page items-N;items-N, чтобы растягивать блок описания на остаток страницы;Должен быть настроен автотекст количества объектов подборки.
Логика:
Если КоммерческоеПредложение = Неопределено Тогда
Результат = 1;
Иначе
Результат = КоммерческоеПредложение.ОбъектыНедвижимости.Количество();
КонецЕсли; |
Проверить, что имя табличной части в базе действительно ОбъектыНедвижимости. Если имя отличается, код нужно адаптировать.
kp_selection_template.html.РљРѕ....КоммерческоеПредложение.Файл kp_selection_filters_v8_proxy.html является отдельным блоком для формы, не печатным template.
HTML ожидает вызов:
window.v8proxy.call(methodName, payload) |
Методы 1С, которые должны быть реализованы:
KPSelectionFilters_Init;KPSelectionFilters_GetDefaultsFromChessboard;KPSelectionFilters_PreviewSelection;KPSelectionFilters_ApplyFilters;KPSelectionFilters_AddObject;KPSelectionFilters_ClearFilters;KPSelectionFilters_ReportClientError.Основная логика:
PreviewSelection только показывает найденные объекты;ApplyFilters добавляет найденные объекты в табличную часть КП;AddObject добавляет один объект;Требования:
.pdf;Content-Type: application/pdf;Минимальный набор проверок:
share_url.| Симптом | Вероятная причина | Что проверить |
|---|---|---|
В PDF РљРѕ... вместо русского текста | template сохранен не в UTF-8 | Перезагрузить kp_selection_template.html в UTF-8 |
| Нет описания ЖК | 1С не передала titlePage.blocks[] или fallback-поля | Проверить JSON перед PDF |
Видно Описание ЖК не передано в JSON | Template работает, но данные не заполнены | Настроить автотекст/маппинг описания ЖК |
| PDF уходит на лишнюю страницу | Слишком длинные описания/изображения или измененный CSS | Проверить page-break и размеры блоков |
| PDF не открывается в браузере | Некорректная отдача файла | Проверить Content-Type, Content-Length, завершение записи |
| Дубли объектов | Нет проверки дублей в табличной части | Проверить добавление по ссылке объекта недвижимости |
Последняя проверка template:
3 объекта -> 2 страницы 4 объекта -> 2 страницы 5 объектов -> 2 страницы 6 объектов -> 3 страницы |
Кодировка проверена:
{
"proper": true,
"mojibake": false
} |