Строка по шаблону с помощью СКД

28.08.20

Разработка - СКД

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

Файлы

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

Наименование Скачано Купить файл
Строка по шаблону с помощью СКД:
.epf 9,60Kb
0 2 500 руб. Купить

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

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

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

Вы можете заказать платную доработку или адаптацию этой разработки под вашу конфигурацию на «Бирже заказов».

  • 0% комиссии — оплата напрямую исполнителю;
  • Исполнители любого масштаба — от отдельных специалистов до команд под проект;
  • Прямой обмен контактами между заказчиком и исполнителем;
  • Безопасная сделка — при необходимости;
  • Рейтинги, кейсы и прозрачная система откликов.

В статье описывается создание строки по шаблону с использованием СКД. Основная идея - использование пользовательского поля, в котором можно применять различные функции.

Создаем новый макет с набором данных объект, в котором полями являются параметры для подстановки в шаблон.

 

Добавляем пользовательское поле с типом выражение (СтрокаПоШаблону). Текст выражения будет установлен позже.

 

 

Создаем форму с необходимыми реквизитами:

 

 

Код модуля формы

Сначала добавляем значения параметров шаблона:

&НаСервере
Процедура СтрокаПоШаблонуНаСервере()
	ДанныеЗаполнения = СоздатьДанныеЗаполнения();
	Результат = ПолучитьСтрокуПоШаблону(ТекстШаблона, ДанныеЗаполнения);
КонецПроцедуры

&НаСервере
Функция СоздатьДанныеЗаполнения()
	// Создаем таблицу параметров шаблона
	ДанныеЗаполнения = Новый ТаблицаЗначений;
	ДанныеЗаполнения.Колонки.Добавить("Фамилия", Новый ОписаниеТипов("Строка",,,,Новый КвалификаторыСтроки(100,ДопустимаяДлина.Переменная)));
	ДанныеЗаполнения.Колонки.Добавить("Имя", Новый ОписаниеТипов("Строка",,,,Новый КвалификаторыСтроки(100,ДопустимаяДлина.Переменная)));
	ДанныеЗаполнения.Колонки.Добавить("Отчество", Новый ОписаниеТипов("Строка",,,,Новый КвалификаторыСтроки(100,ДопустимаяДлина.Переменная)));
	ДанныеЗаполнения.Колонки.Добавить("ДатаРождения", Новый ОписаниеТипов("Дата",,,,,Новый КвалификаторыДаты(ЧастиДаты.Дата)));
	
	// Добавляем значения параметров
	СтрокаДанныхЗаполнения = ДанныеЗаполнения.Добавить();
	СтрокаДанныхЗаполнения.Фамилия = Фамилия;
	СтрокаДанныхЗаполнения.Имя = Имя;
	СтрокаДанныхЗаполнения.Отчество = Отчество;
	СтрокаДанныхЗаполнения.ДатаРождения = ДатаРождения;
	
	Возврат ДанныеЗаполнения;
КонецФункции // СоздатьДанныеЗаполнения()

И сама функция получения результата:

Функция ПолучитьСтрокуПоШаблону(ТекстШаблона, ДанныеЗаполнения)
	СтрокаПоШаблону = "";
	
	ОбработкаОбъект = РеквизитФормыВЗначение("Объект");
	
	СхемаСКД = ОбработкаОбъект.ПолучитьМакет("ПараметрыШаблона");
	
	// Настройки
	КомпоновщикНастроек = Новый КомпоновщикНастроекКомпоновкиДанных;
	КомпоновщикНастроек.Инициализировать(Новый ИсточникДоступныхНастроекКомпоновкиДанных(СхемаСКД));
	КомпоновщикНастроек.ЗагрузитьНастройки(СхемаСКД.НастройкиПоУмолчанию);
	
	Настройка = КомпоновщикНастроек.Настройки;
	
	// Устанавливаем строку шаблона
	ПолеСтрокаПоШаблону = Настройка.ПользовательскиеПоля.Элементы[0];
	
	Попытка
		ПолеСтрокаПоШаблону.УстановитьВыражения(ТекстШаблона, ТекстШаблона);
	Исключение
		Инфо = ИнформацияОбОшибке();
		Сообщить(КраткоеПредставлениеОшибки(Инфо), "ТекстШаблона");
		Возврат Результат;
	КонецПопытки;
		
	РезультатПодстановкиДанныхВШаблон = Новый ТаблицаЗначений;
	
	КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
	ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных;
	ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВКоллекциюЗначений;
		
	ПроцессорВывода.УстановитьОбъект(РезультатПодстановкиДанныхВШаблон);
				
	МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаСКД, Настройка,,,Тип("ГенераторМакетаКомпоновкиДанныхДляКоллекцииЗначений"));
	ПроцессорКомпоновки.Инициализировать(МакетКомпоновки, Новый Структура("ПараметрыШаблона", ДанныеЗаполнения));
	
	Попытка
		ПроцессорВывода.Вывести(ПроцессорКомпоновки);
	Исключение
		Инфо = ИнформацияОбОшибке();
		Сообщить(КраткоеПредставлениеОшибки(Инфо), "ТекстШаблона");
		Возврат Результат;
	КонецПопытки;
	
	Если РезультатПодстановкиДанныхВШаблон.Количество() > 0 Тогда
		СтрокаПоШаблону = РезультатПодстановкиДанныхВШаблон[0]["ПользовательскиеПоляПоле1"];
	КонецЕсли; 
	
	Возврат СтрокаПоШаблону;
КонецФункции // ПолучитьСтрокуПоШаблону()

Для проверки работы использовался следующий текст шаблона:

Фамилия + " " + Имя + " " + Отчество + ": Дата рождения = " + ФОРМАТ(ДатаРождения, "ДФ=дд/ММ/гггг") + ". Празднование дня рождения " +
ВЫБОР КОГДА ДОБАВИТЬКДАТЕ(ДатаРождения, "Год", ГОД(ТЕКУЩАЯДАТА())-ГОД(ДатаРождения)) = НАЧАЛОПЕРИОДА(ТЕКУЩАЯДАТА(),"ДЕНЬ") 
	ТОГДА "в самом разгаре сегодня. Бегом, еще можно успеть."
	ИНАЧЕ 
		ВЫБОР КОГДА ДОБАВИТЬКДАТЕ(ДатаРождения, "Год", ГОД(ТЕКУЩАЯДАТА())-ГОД(ДатаРождения)) < НАЧАЛОПЕРИОДА(ТЕКУЩАЯДАТА(),"ДЕНЬ") 
			ТОГДА ", к сожалению уже было. Прошло уже " + ФОРМАТ(РАЗНОСТЬДАТ(ДОБАВИТЬКДАТЕ(ДатаРождения, "Год", ГОД(ТЕКУЩАЯДАТА())-ГОД(ДатаРождения)), НАЧАЛОПЕРИОДА(ТЕКУЩАЯДАТА(),"ДЕНЬ"), "ДЕНЬ"), "ЧДЦ=5") + " дней."
			ИНАЧЕ "еще только предстоит через " + Строка(РАЗНОСТЬДАТ(НАЧАЛОПЕРИОДА(ТЕКУЩАЯДАТА(),"ДЕНЬ"), ДОБАВИТЬКДАТЕ(ДатаРождения, "Год", ГОД(ТЕКУЩАЯДАТА())-ГОД(ДатаРождения)), "ДЕНЬ")) + " дней. Готовьте подарки." 
		КОНЕЦ
КОНЕЦ

Результаты работы показаны на скриншоте.

Обработка была протестирована на платформе 8.3.16.1296, но может работать и на платформе 8.2.

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

Обработка СКД шаблон пользовательские поля

См. также

Инструментарий разработчика Роли и права Запросы СКД Программист Руководитель проекта 1С:Предприятие 8 Платные (руб)

Инструменты для разработчиков 1С 8.3: Infostart Toolkit. Автоматизация и ускорение разработки на управляемых формах. Легкость работы с 1С.

16500 руб.

02.09.2020    256429    1417    421    

1160

Инструментарий разработчика СКД Программист 1С 8.3 Бесплатно (free)

В этой статье представлен СКДБилдер — общий модуль-обёртка над объектной моделью СКД, который сокращает код в 3-4 раза и делает его читаемым.

29.01.2026    6482    338    shapa_pro    27    

69

СКД Программист 1С:Предприятие 8 Бесплатно (free)

Статья написана по результатам проведенного внутреннего обучающего вебинара для разработчиков ГК «СофтБаланс». Если осилить 25 000 знаков - задача для вас непосильная, где-то на бескрайних просторах интернета видео есть (или будет). Но здесь информация точнее. Разберем, чем запрос для СКД принципиально отличается от обычного запроса и как модифицируется в зависимости от настроек. Изучим «базовый рецепт» написания запроса для СКД, сформируем чек-лист. Полезно будет всем – от стажеров до тех. лидов. Всем, кто не снимает галку «автозаполнение» и пишет запросы для отчетов в консоли запросов – читать (вдумчиво) обязательно.

29.10.2025    18976    ovetgana    112    

112

СКД Программист 1С:Предприятие 8 Бесплатно (free)

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

01.07.2025    10989    krasnoshchekovpavel    5    

68

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

Несколько способов управления формами выбора параметров и отборов СКД.

10.04.2025    10548    Neti    0    

41

СКД Программист 1С:Предприятие 8 Бесплатно (free)

Хорошая отчетная форма - сродни искусству. Есть какое-то невероятное эстетическое удовольствие в том, чтобы разобраться в логике учета и анализируемых показателях, спроектировать архитектуру хранения данных так, чтобы оптимально собрать эти показатели вместе с аналитическими разрезами в запросе, а затем настроить отображение так, чтобы, глядя на результат, сразу было понятно, что это за отчет и какие задачи он призван решать. Система компоновки данных - это моя первая, главная и, наверное, единственная "рабочая" любовь. Ее я использую везде, где только можно и где нельзя тоже. Хочу поделиться с вами некоторыми практическими приемами в работе с отчетами на СКД, которые, надеюсь, будут полезны.

27.02.2025    16554    ovetgana    50    

93

СКД Программист 1С:Предприятие 8 Бесплатно (free)

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

24.12.2024    14206    Akcium    17    

46

СКД Механизмы типовых конфигураций Запросы Программист 1С:Предприятие 8 1С:Зарплата и кадры государственного учреждения 3 1С:Зарплата и Управление Персоналом 3.x Россия Бесплатно (free)

Работая с типовыми отчетами в конфигурациях «Зарплата и управление персоналом, редакция 3», «Зарплата и кадры государственного учреждения, редакция 3» и подобных, в схемах компоновки данных можно встретить конструкции запросов, которые обращаются к некоторым виртуальным таблицам.

20.08.2024    11044    AlexeyPROSTO_1C    1    

32
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. asg.aleks 68 29.08.20 12:07 Сейчас в теме
СтрШаблон, СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВШаблон из БСП не? Проще же.
2. Keyman 3 31.08.20 08:17 Сейчас в теме
(1) В данном случае возможно использование различных функций, например различного форматирования или конструкции ВЫБОР. И все это в пользовательском режиме.
Для отправки сообщения требуется регистрация/авторизация