Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
21 ноя 2024, 12:26

Печать шаблона из поля ввода в макете

Автор luxnlex, 20 ноя 2013, 23:40

0 Пользователей и 1 гость просматривают эту тему.

luxnlex

Доброго времени суток, уважаемые форумчане!
Я только начинаю программировать на 1С, столкнулся с одной задачкой, но хоть убей мыслей нет как решить...
Взял за пример документ реализацию товаров и услуг, создал реквизит "параметры" с типом строка, на форме создал поле ввода, в нем указал в данных реквизит "параметры". В общем макете ТОРГ-12 в шапке у ячейки задал тип шаблон, а теперь собственно задачка...
Как мне сделать так, что бы например я ввожу в поле ввода текст вида:

"Дата формирования документа: "+#ДатаДокумента#

и что бы он подставлялся в макет (уже в виде: Дата формирования документа: 20.11.2013 00:00)?. При чем значения не оговоренные заранее, что бы можно было в любой момент написать шаблон с одним и более параметром и это все подставлялось в макет.
Как запихнуть это все в макет? Прошу помочь, спать не смогу ведь, пока задачу не решу... Хотя бы в каком направлении копать??? Интересует очень какой тип должен быть у реквизита, нужно ли параметр переводить в строку/обратно и как (были ошибки такие просто), может быть я не правильно задал шаблон...
2 дня думаю уже никак придумать не могу :dfbsdfbsdf: :(
Код приводить не буду, так как, в силу тех знаний, которыми я обладаю на данный момент по 1с, просто стыдно :nhsrm:

sdilshod


Сделайте ячейку заполнение параметром и разбирайте(parse) строку для получение нужную строку.
То есть получите строку из поля ввода на подобии "Дата формирования документа:" и "ДатаДокумента".
СтрокаИзПоляВвода = "Дата формирования документа:";
ПараметрИзПолеВвода = "ДатаДокумента";
Выполнить("СтрокаИзПоляВвода=СтрокаИзПоляВвода+Строка(ДатаДокумента)");
областьМакета.Параметры.ИмяПараметра = СтрокаИзПоляВвода;
...


luxnlex

Цитата: sdilshod от 21 ноя 2013, 13:53

Сделайте ячейку заполнение параметром и разбирайте(parse) строку для получение нужную строку.
То есть получите строку из поля ввода на подобии "Дата формирования документа:" и "ДатаДокумента".
СтрокаИзПоляВвода = "Дата формирования документа:";
ПараметрИзПолеВвода = "ДатаДокумента";
Выполнить("СтрокаИзПоляВвода=СтрокаИзПоляВвода+Строка(ДатаДокумента)");
областьМакета.Параметры.ИмяПараметра = СтрокаИзПоляВвода;
...


Спасибо вам за помощь огромное! :) Но это, к сожалению, немного не то...:trhregerhg:
В общем реализовал частично то что хотел так:

ОбластьМакетаШапка.Параметры.Пар1 = ЭтотОбъект.МойПараметр;
где Пар1 - параметр в макете, МойПараметр - реквизит

Выводить-то выводит, но только с типом ячейки параметр (то есть грубо говоря текст), хотя нужен шаблон, там же несколько будет параметров содержаться.
Как мне донести до 1с, что нужно "Текст1: "+[параметр1]+"Текст2: "+[параметр2] заменить в макете при печати на Текст 1: ЗначениеПараметра1 Текст2: ЗначениеПараметра2
Подскажите пожалуйста, как грамотно перевести спец. символы типа [], либо ##, либо еще какой любой другой и текст содержащийся между спец. символов как параметр? Буду очень вам признателен! :)
P.S. СтрЗаменить тут поможет? Как это реализовать для нескольких параметров? Для текста еще простого я понимаю как пользоваться этой функцией, но тут идей ноль :(

sdilshod

Стр_ = "ввввввв#пар##пар1##пар2#";
ПозЭлемента = Найти(Стр_,"#");
стр = Сред(Стр_,ПозЭлемента);

ЧислоВхождение = СтрЧислоВхождений(Стр,"#");

МассивПараметров = Новый Массив;
Для с=1 По ЧислоВхождение Цикл

ПозЭлемента = Найти(Стр,"#");
Если (с%2)=0 Тогда
МассивПараметров.Добавить(Сред(Стр,1,ПозЭлемента-1));
КонецЕсли;
стр = Сред(Стр,ПозЭлемента+1);
КонецЦикла;
пар=1;
пар1=2;
пар2=3;


СтруктураПараметров = Новый Структура; //Структура с Вашими параметрами
Для Каждого Стр Из МассивПараметров Цикл
СтруктураПараметров.Вставить(Стр);
Выполнить("СтруктураПараметров[Стр]="+Стр);
КонецЦикла;



luxnlex

Цитата: sdilshod от 21 ноя 2013, 15:36
Стр_ = "ввввввв#пар##пар1##пар2#";
ПозЭлемента = Найти(Стр_,"#");
стр = Сред(Стр_,ПозЭлемента);

ЧислоВхождение = СтрЧислоВхождений(Стр,"#");

МассивПараметров = Новый Массив;
Для с=1 По ЧислоВхождение Цикл

ПозЭлемента = Найти(Стр,"#");
Если (с%2)=0 Тогда
МассивПараметров.Добавить(Сред(Стр,1,ПозЭлемента-1));
КонецЕсли;
стр = Сред(Стр,ПозЭлемента+1);
КонецЦикла;
пар=1;
пар1=2;
пар2=3;


СтруктураПараметров = Новый Структура; //Структура с Вашими параметрами
Для Каждого Стр Из МассивПараметров Цикл
СтруктураПараметров.Вставить(Стр);
Выполнить("СтруктураПараметров[Стр]="+Стр);
КонецЦикла;


Интересная реализация, учту на будущее, спасибо большое, но пока это сложновато :( но свою задумку я реализовал по-другому:
стр=МойРеквизит;
результат=СтрЗаменить(стр, "[Организация]", Организация);
результат=СтрЗаменить(стр, "[Дата]", Дата);
        результат=СтрЗаменить(стр, "[Номер]", Номер);
ОбластьМакетаШапка.Параметры.Пар1 = Результат;

Проблема только в том, что заменяется только последний параметр, то есть номер, если текст в поле ввода формы не равен [номер], то в торг12 печатать будет просто текст из поля ввода документа :dfbsdfbsdf: Объясните пожалуйста как сделать что бы происходил обход всей строки в поле ввода формы и автоматическое подставление замененных параметров в торг12? Может как-то это циклом можно сделать?
Добавлено: 22 ноя 2013, 22:33


Цитата: luxnlex от 22 ноя 2013, 00:49
Цитата: sdilshod от 21 ноя 2013, 15:36
Стр_ = "ввввввв#пар##пар1##пар2#";
ПозЭлемента = Найти(Стр_,"#");
стр = Сред(Стр_,ПозЭлемента);

ЧислоВхождение = СтрЧислоВхождений(Стр,"#");

МассивПараметров = Новый Массив;
Для с=1 По ЧислоВхождение Цикл

ПозЭлемента = Найти(Стр,"#");
Если (с%2)=0 Тогда
МассивПараметров.Добавить(Сред(Стр,1,ПозЭлемента-1));
КонецЕсли;
стр = Сред(Стр,ПозЭлемента+1);
КонецЦикла;
пар=1;
пар1=2;
пар2=3;


СтруктураПараметров = Новый Структура; //Структура с Вашими параметрами
Для Каждого Стр Из МассивПараметров Цикл
СтруктураПараметров.Вставить(Стр);
Выполнить("СтруктураПараметров[Стр]="+Стр);
КонецЦикла;


Интересная реализация, учту на будущее, спасибо большое, но пока это сложновато :( но свою задумку я реализовал по-другому:
стр=МойРеквизит;
результат=СтрЗаменить(стр, "[Организация]", Организация);
результат=СтрЗаменить(стр, "[Дата]", Дата);
        результат=СтрЗаменить(стр, "[Номер]", Номер);
ОбластьМакетаШапка.Параметры.Пар1 = Результат;

Проблема только в том, что заменяется только последний параметр, то есть номер, если текст в поле ввода формы не равен [номер], то в торг12 печатать будет просто текст из поля ввода документа :dfbsdfbsdf: Объясните пожалуйста как сделать что бы происходил обход всей строки в поле ввода формы и автоматическое подставление замененных параметров в торг12? Может как-то это циклом можно сделать?

Проблема решена без использования второй переменной, всем спасибо! :bleh:

Теги:

Похожие темы (5)

Рейтинг@Mail.ru

Поиск