Помогите с печатной формой справочника

1. named_Alexander 19.09.18 13:53 Сейчас в теме
Добрый день !

Помогите разобраться, нужно сделать печатную форму справочника, т.е. разместить кнопку на некотором справочнике, которая будет печатать макет, макет не в виде таблицы, а в виде текста (например Договор), только в этом тексте некоторые строки должны тянуться из базы 1С (например реквизиты, организация, контрагенты), т.е. заполняться сами. Еще ни разу не делал печатные формы и макеты.
Для себя набросал последовательность: Сначала создаю табличный макет (не знаю, как работает текстовый макет) в нужном мне справочнике, туда загоняю необходимый текст, именую области (шапка, текст, подвал) , задаю тип ячеек - параметры, на нужные мне ячейки, туда помещаю строки, которые должны тянуться из базы, остальные строки, которые изменяться не должны, задаю просто текстом в соседней ячейке. На форме справочника создаю кнопку (команда) с процедурой(на сервере или клиенте?) НапечататьТекст, и там пишу код который будет вызывать макет и заполнять его данными. Вот как-то так я себе все это представил, но как реализовать не знаю
+
По теме из базы знаний
Найденные решения
7. Doreng 27 19.09.18 14:30 Сейчас в теме
(6)
Почему не будет работать на УФ ?

Потому как ТабличныйДокумент.Показать() доступен только на клиенте

&НаКлиенте
Процедура МояНоваяКнопочка(команда)
ТабДок = ВернутьНашДок();

ТабДок.Показать()
КонецПроцедуры;


&НаСервере
Функция ВернутьНашДок()
Запрос = Новый Запрос;
Запрос.Текст = "Выбрать 
|ПустьБудетДоговоры.Организация Как Организация,
|ПустьБудетДоговоры.Контрагент Как Контрагент
|Из
|Справочник.Договоры Как ПустьБудетДоговоры";
ТабДок = Новый ТабличныйДокумент;
Результат = Запрос.Выполнить().Выбрать();
Макет = //ПолучамМакет
ОбластьСтрока = Макет .ПолучитьОбласть("Строка");
Пока Результат.Следующий() Цикл
// Заполняем параметры области
ТабДок.ВывестиОбласть(ОбластьСтрока);
КонецЦикла;
Возврат ТабДок;
КонецФункции;
Показать
+
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. Doreng 27 19.09.18 13:58 Сейчас в теме
(1)Мде......жесть....
1) Какая конфигурация
2) Какой справочник
3) Какая Форма
4) Какой текст
5) Куда выводить
+
4. named_Alexander 19.09.18 14:02 Сейчас в теме
(2)
1) да любая, я делаю в учебной, заполнив ее данными.
2) пусть будет справочник Договоры
3) это имеет значение ? я хочу сделать на форме списка )
4) пусть будет текст из 10 строк, среди которых встречается "организация ххх" и "контрагент ууу", и надо что бы именно они тянулись из базы
5) на печать
+
5. Doreng 27 19.09.18 14:11 Сейчас в теме
(4)
Запрос = Новый Запрос;
Запрос.Текст = "Выбрать 
|ПустьБудетДоговоры.Организация Как Организация,
|ПустьБудетДоговоры.Контрагент Как Контрагент
|Из
|Справочник.Договоры Как ПустьБудетДоговоры";
ТабДок = Новый ТабличныйДокумент;
Результат = Запрос.Выполнить().Выбрать();
Макет = //ПолучамМакет
ОбластьСтрока = Макет .ПолучитьОбласть("Строка");
Пока Результат.Следующий() Цикл
// Заполняем параметры области
ТабДок.ВывестиОбласть(ОбластьСтрока);
КонецЦикла;
ТабДок.Показать();
Показать

Код для примера и не будет работать на УФ - нужно разделение на клиент - сервер? А вообще в (3) Вам подсказали правильно - не нужен Вам макет, Вам нужен отчет :-)
+
6. named_Alexander 19.09.18 14:25 Сейчас в теме
(5)
Код для примера и не будет работать на УФ - нужно разделение на клиент - сервер?

Почему не будет работать на УФ ? Мне как раз они и нужны))
не нужен Вам макет, Вам нужен отчет

Мне нужно, чтоб кнопка была именно на форме списка справочника, а как внешнюю печатную форму туда запихнуть- не знаю)
+
7. Doreng 27 19.09.18 14:30 Сейчас в теме
(6)
Почему не будет работать на УФ ?

Потому как ТабличныйДокумент.Показать() доступен только на клиенте

&НаКлиенте
Процедура МояНоваяКнопочка(команда)
ТабДок = ВернутьНашДок();

ТабДок.Показать()
КонецПроцедуры;


&НаСервере
Функция ВернутьНашДок()
Запрос = Новый Запрос;
Запрос.Текст = "Выбрать 
|ПустьБудетДоговоры.Организация Как Организация,
|ПустьБудетДоговоры.Контрагент Как Контрагент
|Из
|Справочник.Договоры Как ПустьБудетДоговоры";
ТабДок = Новый ТабличныйДокумент;
Результат = Запрос.Выполнить().Выбрать();
Макет = //ПолучамМакет
ОбластьСтрока = Макет .ПолучитьОбласть("Строка");
Пока Результат.Следующий() Цикл
// Заполняем параметры области
ТабДок.ВывестиОбласть(ОбластьСтрока);
КонецЦикла;
Возврат ТабДок;
КонецФункции;
Показать
+
8. named_Alexander 19.09.18 14:46 Сейчас в теме
(7)
Потому как ТабличныйДокумент.Показать() доступен только на клиенте
Так получается Ваш код мне не подойдет ?
+
9. Doreng 27 19.09.18 14:47 Сейчас в теме
(8)я его переписал уже под УФ
+
10. named_Alexander 19.09.18 15:00 Сейчас в теме
(9)
я его переписал уже под УФ
Спасибо большое, сейчас попробую
+
12. пользователь 19.09.18 19:28
Сообщение было скрыто модератором.
...
13. пользователь 19.09.18 19:32
Сообщение было скрыто модератором.
...
16. named_Alexander 19.09.18 19:39 Сейчас в теме
(9) Поставил учебную УТ 11. в справочнике договоры с контрагентами воспользовался конструктором печати и просто создал шаблон без объектов, потом вручную все вбил.
В общем воспользовался Вашим кодом и шаблоном кода Конструктора печати, набросал макет, но почему-то не могу ссылку прикрепить на я.диск.
Вот что получилось:
Процедура Печать(ТабДок, Ссылка) Экспорт
	//{{_КОНСТРУКТОР_ПЕЧАТИ(Печать)
	Макет = Справочники.ДоговорыКонтрагентов.ПолучитьМакет("Печать");
	Запрос = Новый Запрос;
	Запрос.Текст =
	"ВЫБРАТЬ
	|	ДоговорыКонтрагентов.Номер КАК Номер,
	|	ДоговорыКонтрагентов.Дата КАК Дата,
	|	ДоговорыКонтрагентов.Организация КАК Организация,
	|	ДоговорыКонтрагентов.Контрагент КАК Контрагент,
	|	ДоговорыКонтрагентов.КонтактноеЛицо КАК КонтактноеЛицо,
	|	ДоговорыКонтрагентов.БанковскийСчет КАК БанковскийСчет,
	|	ДоговорыКонтрагентов.БанковскийСчетКонтрагента КАК БанковскийСчетКонтрагента,
	|	ДоговорыКонтрагентов.Организация.ЮридическоеФизическоеЛицо КАК ОрганизацияЮридическоеФизическоеЛицо
	|ИЗ
	|	Справочник.ДоговорыКонтрагентов КАК ДоговорыКонтрагентов";
	//|ГДЕ
	//|	ДоговорыКонтрагентов.Ссылка = &Ссылка";
	//Запрос.Параметры.Вставить("Ссылка", Ссылка);
	Выборка = Запрос.Выполнить().Выбрать();
	
	Заголовок = Макет.ПолучитьОбласть("Заголовок");
	Шапка = Макет.ПолучитьОбласть("Шапка");
	Текст = Макет.ПолучитьОбласть("Текст");
	ТабДок.Очистить();
	
	ВставлятьРазделительСтраниц = Ложь;
	Пока Выборка.Следующий() Цикл
		Если ВставлятьРазделительСтраниц Тогда
			ТабДок.ВывестиГоризонтальныйРазделительСтраниц();
		КонецЕсли;
		Заголовок.Параметры.Заполнить(Выборка.Номер);
        Шапка.Параметры.Заполнить(Выборка.Дата);
		Текст.Параметры.Заполнить(Выборка.Организация, Выборка.ОрганизацияЮридическоеФизическоеЛицо, Выборка.Контрагент, Выборка.КонтактноеЛицо);
		ТабДок.Вывести(Заголовок);
		ТабДок.Вывести(Шапка);
		ТабДок.Вывести(Текст);
		
		ВставлятьРазделительСтраниц = Истина;
	КонецЦикла;
	//}}
КонецПроцедуры
Показать


Но ничего не работает, ошибку пишет:
{Справочник.ДоговорыКонтрагентов.МодульМенеджера(1157)}: Ошибка при вызове метода контекста (Заполнить)
		Заголовок.Параметры.Заполнить(Выборка.Номер);
по причине:
Несоответствие типов (параметр номер '1')
+
17. Doreng 27 19.09.18 21:22 Сейчас в теме
(16)
Шапка.Параметры.Заполнить(Выборка.Дата);

Метод заполнить ищет параметры в макете и сопоставляет их названия с результатом в строке запроса, тоесть нужно писать
Заголовок.Параметры.Заполнить(Выборка);

И если У Вас в макете есть параметры Номер, дата, организация итд, то они заполнятся
+
18. пользователь 19.09.18 21:51
Сообщение было скрыто модератором.
...
14. named_Alexander 19.09.18 19:33 Сейчас в теме
(7)
(9) В общем скачал учебную версию УТ 11. Куда поместить Ваш код, я так и не понял, но с помощью конструктора печати таки нашёл куда. Мне нужно распечатать Договор, макет договора набросал: макет

Воспользовался вашим кодом, совместив с шаблоном кода конструктора печати :
Процедура Печать(ТабДок, Ссылка) Экспорт
	//{{_КОНСТРУКТОР_ПЕЧАТИ(Печать)
	Макет = Справочники.ДоговорыКонтрагентов.ПолучитьМакет("Печать");
	Запрос = Новый Запрос;
	Запрос.Текст =
	"ВЫБРАТЬ
	|	ДоговорыКонтрагентов.Номер КАК Номер,
	|	ДоговорыКонтрагентов.Дата КАК Дата,
	|	ДоговорыКонтрагентов.Организация КАК Организация,
	|	ДоговорыКонтрагентов.Контрагент КАК Контрагент,
	|	ДоговорыКонтрагентов.КонтактноеЛицо КАК КонтактноеЛицо,
	|	ДоговорыКонтрагентов.БанковскийСчет КАК БанковскийСчет,
	|	ДоговорыКонтрагентов.БанковскийСчетКонтрагента КАК БанковскийСчетКонтрагента,
	|	ДоговорыКонтрагентов.Организация.ЮридическоеФизическоеЛицо КАК ОрганизацияЮридическоеФизическоеЛицо
	|ИЗ
	|	Справочник.ДоговорыКонтрагентов КАК ДоговорыКонтрагентов";
	//|ГДЕ
	//|	ДоговорыКонтрагентов.Ссылка = &Ссылка";
	//Запрос.Параметры.Вставить("Ссылка", Ссылка);
	Выборка = Запрос.Выполнить().Выбрать();
	
	Заголовок = Макет.ПолучитьОбласть("Заголовок");
	Шапка = Макет.ПолучитьОбласть("Шапка");
	Текст = Макет.ПолучитьОбласть("Текст");
	ТабДок.Очистить();
	
	ВставлятьРазделительСтраниц = Ложь;
	Пока Выборка.Следующий() Цикл
		Если ВставлятьРазделительСтраниц Тогда
			ТабДок.ВывестиГоризонтальныйРазделительСтраниц();
		КонецЕсли;
		Заголовок.Параметры.Заполнить(Выборка.Номер);
        Шапка.Параметры.Заполнить(Выборка.Дата);
		Текст.Параметры.Заполнить(Выборка.Организация, Выборка.ОрганизацияЮридическоеФизическоеЛицо, Выборка.Контрагент, Выборка.КонтактноеЛицо);
		ТабДок.Вывести(Заголовок);
		ТабДок.Вывести(Шапка);
		ТабДок.Вывести(Текст);
		
		ВставлятьРазделительСтраниц = Истина;
	КонецЦикла;
	//}}
КонецПроцедуры
Показать


Но по итогу, печатать он ничего не хочет, ошибку пишет:
{Справочник.ДоговорыКонтрагентов.МодульМенеджера(1157)}: Ошибка при вызове метода контекста (Заполнить)
		Заголовок.Параметры.Заполнить(Выборка.Номер);
по причине:
Несоответствие типов (параметр номер '1')
+
3. Timur.V 78 19.09.18 13:59 Сейчас в теме
Самый простой способ, это скачать готовый отчет и изменить его под себя.
Вот например, я написал запрос для конфигурации ЗУП 3.1 и данные вывел в документ.

Вам этот пример подойдет, если у вас конфигурация на управляемых формах (Бух 3.0, ЗУП 3.1, Розница 2.2, УТ 11).
Нужно будет написать свой запрос к объектам 1с и изменить текст макета.

Какая у вас конфигурация 1с?
+
11. YannikAlx 43 19.09.18 16:16 Сейчас в теме
(3) та нету у него никакой конфигурации...
чел учится на кошках...
+
15. пользователь 19.09.18 19:34
Сообщение было скрыто модератором.
...
Внимание! Тема сдана в архив

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот