Добрый день !

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

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

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

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

Код для примера и не будет работать на УФ - нужно разделение на клиент - сервер? А вообще в (3) Вам подсказали правильно - не нужен Вам макет, Вам нужен отчет :-)
---
Код для примера и не будет работать на УФ - нужно разделение на клиент - сервер?
Почему не будет работать на УФ ? Мне как раз они и нужны))
 не нужен Вам макет, Вам нужен отчет
Мне нужно, чтоб кнопка была именно на форме списка справочника, а как внешнюю печатную форму туда запихнуть- не знаю)
---
Почему не будет работать на УФ ?
Потому как ТабличныйДокумент.Показать() доступен только на клиенте

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

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

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

    Заголовок = Макет.ПолучитьОбласть("Заголовок");
    Шапка = Макет.ПолучитьОбласть("Шапка");
    Текст = Макет.ПолучитьОбласть("Текст");
    ТабДок.Очистить();

    ВставлятьРазделительСтраниц = Ложь;
    Пока Выборка.Следующий() Цикл
    Если ВставлятьРазделительСтраниц Тогда
    ТабДок.ВывестиГоризонтальныйРазделительСтраниц();
    КонецЕсли;
    Заголовок.Параметры.Заполнить(Выборка.Номер);
    Шапка.Параметры.Заполнить(Выборка.Дата);
    Текст.Параметры.Заполнить(Выборка.Организация, Выборка.ОрганизацияЮридическоеФизическоеЛицо, Выборка.Контрагент, Выборка.КонтактноеЛицо);
    ТабДок.Вывести(Заголовок);
    ТабДок.Вывести(Шапка);
    ТабДок.Вывести(Текст);

    ВставлятьРазделительСтраниц = Истина;
    КонецЦикла;
    //}}
    КонецПроцедуры
```

Но ничего не работает, ошибку пишет:
```1c
    {Справочник.ДоговорыКонтрагентов.МодульМенеджера(1157)}: Ошибка при вызове метода контекста (Заполнить)
    Заголовок.Параметры.Заполнить(Выборка.Номер);
    по причине:
    Несоответствие типов (параметр номер '1')
```
---
Шапка.Параметры.Заполнить(Выборка.Дата);
Метод заполнить ищет параметры в макете и сопоставляет их названия с результатом в строке запроса, тоесть нужно писать

```1c
    Заголовок.Параметры.Заполнить(Выборка);
```

И если У Вас в макете есть параметры Номер, дата, организация итд, то они заполнятся
---
Сообщение было скрыто модератором.
---
(9) В общем скачал учебную версию УТ 11. Куда поместить Ваш код, я так и не понял, но с помощью конструктора печати таки нашёл куда. Мне нужно распечатать Договор, макет договора набросал: макет

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

    Заголовок = Макет.ПолучитьОбласть("Заголовок");
    Шапка = Макет.ПолучитьОбласть("Шапка");
    Текст = Макет.ПолучитьОбласть("Текст");
    ТабДок.Очистить();

    ВставлятьРазделительСтраниц = Ложь;
    Пока Выборка.Следующий() Цикл
    Если ВставлятьРазделительСтраниц Тогда
    ТабДок.ВывестиГоризонтальныйРазделительСтраниц();
    КонецЕсли;
    Заголовок.Параметры.Заполнить(Выборка.Номер);
    Шапка.Параметры.Заполнить(Выборка.Дата);
    Текст.Параметры.Заполнить(Выборка.Организация, Выборка.ОрганизацияЮридическоеФизическоеЛицо, Выборка.Контрагент, Выборка.КонтактноеЛицо);
    ТабДок.Вывести(Заголовок);
    ТабДок.Вывести(Шапка);
    ТабДок.Вывести(Текст);

    ВставлятьРазделительСтраниц = Истина;
    КонецЦикла;
    //}}
    КонецПроцедуры
```

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

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

Какая у вас конфигурация 1с?
---
та нету у него никакой конфигурации...
чел учится на кошках...
---
Сообщение было скрыто модератором.