Добрый день конфигурация УНФ редакция 1.4 (1.4.2.22) на УФ.
Если например печатать печатную форму МХ-18 для документа производство, то макет выводится в типовую фрму печати документов (скрин приложил).
Создаю внешний отчет. Хочу, чтобы при печати макет выводился в аналогичную форму.
Код следующий:
&НаКлиенте
Процедура Сформировать(Команда)
ТабДок = Данные();
ТабДок.Показать();
КонецПроцедуры
&НаСервере
Функция Данные()
перем ТекущийДокумент;
ТабличныйДокумент = Новый ТабличныйДокумент;
ТабличныйДокумент.КлючПараметровПечати = "ПараметрыПечати_МХ-18";
НомерСтрокиНачало = ТабличныйДокумент.ВысотаТаблицы + 1;
Запрос = Новый Запрос();
Запрос.Текст =
"ВЫБРАТЬ
| СборкаЗапасов.Дата КАК ДатаДокумента,
| СборкаЗапасов.Организация КАК Организация,
| СборкаЗапасов.Организация.Префикс КАК Префикс,
| СборкаЗапасов.Номер КАК Номер,
| СборкаЗапасовПродукция.НомерСтроки,
| СборкаЗапасовПродукция.Номенклатура КАК Номенклатура,
| СборкаЗапасовПродукция.Характеристика КАК Характеристика,
| СборкаЗапасовПродукция.Партия,
| СборкаЗапасовПродукция.Количество КАК КоличествоМест,
| СборкаЗапасовПродукция.ЕдиницаИзмерения КАК ЕдиницаИзмерения,
| СборкаЗапасовПродукция.Спецификация,
| СборкаЗапасовПродукция.Номенклатура.Код КАК НоменклатураКод,
| СборкаЗапасовПродукция.ЕдиницаИзмерения.Код КАК ЕдиницаИзмеренияКод,
| ВЫБОР
| КОГДА СборкаЗапасовПродукция.ЕдиницаИзмерения ССЫЛКА Справочник.ЕдиницыИзмерения
| ТОГДА СборкаЗапасовПродукция.ЕдиницаИзмерения.Коэффициент
| ИНАЧЕ 1
| КОНЕЦ КАК КоличествоВОдномМесте,
| СборкаЗапасовПродукция.ЕдиницаИзмерения.Наименование КАК ВидУпаковки,
| ВЫРАЗИТЬ(СборкаЗапасовПродукция.Номенклатура.НаименованиеПолное КАК СТРОКА(250)) КАК Запас,
| СборкаЗапасовПродукция.Номенклатура.Артикул КАК Артикул
|ИЗ
| Документ.СборкаЗапасов.Продукция КАК СборкаЗапасовПродукция
| ЛЕВОЕ СОЕДИНЕНИЕ Документ.СборкаЗапасов КАК СборкаЗапасов
| ПО СборкаЗапасовПродукция.Ссылка = СборкаЗапасов.Ссылка
|ГДЕ
| СборкаЗапасов.Дата МЕЖДУ &ДатаНач И КОНЕЦПЕРИОДА(&ДатаКон, ДЕНЬ)
|ИТОГИ
| МАКСИМУМ(Организация),
| МАКСИМУМ(Префикс),
| МАКСИМУМ(Номер),
| МАКСИМУМ(Характеристика),
| МАКСИМУМ(КоличествоМест),
| МАКСИМУМ(ЕдиницаИзмерения),
| МАКСИМУМ(НоменклатураКод),
| МАКСИМУМ(ЕдиницаИзмеренияКод),
| МАКСИМУМ(КоличествоВОдномМесте),
| МАКСИМУМ(ВидУпаковки),
| МАКСИМУМ(Запас),
| МАКСИМУМ(Артикул)
|ПО
| Номенклатура";
Запрос.УстановитьПараметр("ДатаНач", Отчет.ДатаНач);
Запрос.УстановитьПараметр("ДатаКон", Отчет.ДатаКон);
Шапка = Запрос.Выполнить().Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
ТабличныйДокумент.ИмяПараметровПечати = "ПАРАМЕТРЫ_ПЕЧАТИ_СборкаЗапасов_МХ18_1";
//Макет = УправлениеПечатью.ПолучитьМакет("ПФ_MXL_МХ18");
Макет = РеквизитФормыВЗначение("Отчет").ПолучитьМакет("ПФ_MXL_МХ18"); // Макет = РеквизитФормыВЗначение("Объект").ПолучитьМакет("ПФ_MXL_МХ18");
......................................
// Выводим подвал документа
ОбластьМакета = Макет.ПолучитьОбласть("Подвал");
ОбластьМакета.Параметры.Заполнить(Шапка);
ТабличныйДокумент.Вывести(ОбластьМакета);
// Зададим параметры макета
ТабличныйДокумент.ПолеСверху = 0;
ТабличныйДокумент.ПолеСлева = 0;
ТабличныйДокумент.ПолеСнизу = 0;
ТабличныйДокумент.ПолеСправа = 0;
ТабличныйДокумент.ОриентацияСтраницы = ОриентацияСтраницы.Ландшафт;
ОбъектыПечати = Новый СписокЗначений;
УправлениеПечатью.ЗадатьОбластьПечатиДокумента(ТабличныйДокумент, НомерСтрокиНачало, ОбъектыПечати, ТекущийДокумент = неопределено);
ТабличныйДокумент.АвтоМасштаб = Истина;
Возврат ТабличныйДокумент;
КонецФункции
Показать
Тоесть у меня при таком подходе выводится некая таблица. А нужно чтобы печаталось в форму печати документов.
скорее всего нужно вызвать какую ни будь глобальную процедуру, которая выводит на общую форму печати. Могу ошибаться т.к. нет конфигурации, что бы сказать точно. Вообщем смотри как выводится типовой отчет.
посмотрите процедуру ВыполнитьКомандуПечати() общего модуля УправлениеПечатьюКлиент, там происходит открытие табличного документа в общей форме ПечатьДокументов
(5) Bukaska, кстати от этого сути не меняется к сожалению(((
вместо ПечатьДокумента у меня Функция Данные() которая возвращает ТабличныйДокумент. Тоесть
УправлениеПечатью.ВывестиТабличныйДокументВКоллекцию(КоллекцияПечатныхФорм, "ТребованиеНакладная", "ТребованиеНакладная", Данные());
вообще не выводится форма.
Попробуйте сделать следующим образом щелкните ВСЕ ДЕЙСТВИЯ, потом ВЫВЕСТИ СПИСОК, там ставите галочки где надо. В общем должно получиться как тут http://www.modber.ru/catalog/item2606.html
Всем привет. Тоже встала проблема вывода ТабличногоДокумента в общую форму «ПечатьДокументов». История такова: нужна была внешняя печатная форма, подключаемая к документу, но сначала должна была появляться форма, в которой необходимо было заполнить определенные реквизиты. Эти реквизиты использовались для заполнения макета. (Конфигурация УТ 11.1 на поддержке и снимать было нельзя). Далее нажималась кнопка и должен был появляться табличный документ в общей форме( чтобы можно было его отправить по почте или распечатать)
Чтобы открыть общую форму «ПечатьДокументов» я использовал вот такой код. Здесь только вызов формы из модуля формы моей обработки с препроцессором &НаКлиенте.
Переменная «ПараметрыОткрытия» имеет тип «Структура». В него необходимо передать переменную «КоллекцияПечатныхФорм» тип значения которой «ТаблицаЗначений». Эту переменную получил с помощью процедуры общего модуля «УправлениеПечатью.ВывестиТабличныйДокументВКоллекцию(……)». В переменной «КоллекцияПечатныхФорм» содержится наш «ТабличныйДокумент», а у общей формы есть параметры «КоллекцияПечатныхФорм». Так вот если он уже заполнен, то происходит его вывод на форму.
Казалось бы вот и всё. Внешняя печатная форма выводится в общую форму – все довольны. Единственное я упустил, что отладку я производил на управляемых формах, но на «Толстом клиенте». А когда запустил под «Тонким клиентом» вывалилась очевидная ошибка. На тонком клиенте не доступен тип значения «ТаблицаЗначений», на форме его надо преобразовать в тип «ДанныеФормыКоллекция».
И вот здесь начались мои танцы с бубном в попытке передать «Таблицузначений». Как писалось выше конфигурацию менять нельзя, да и не к чему. Метод «ОткрытьФорму» доступен только на клиенте, поэтому передать «ТаблицуЗначений» не получилось. Пришлось поступить по-варварски.
Взял и скопировал эту общую форму к себе в обработку (знаю плохо сделал) и стал туда передавать не «ДанныеФормыКоллекция» , а Структуру из таблицызначений полученную следующим образом. Этот код выполнялся в модуле моей формы.
ТзКоллекция = объектОбработка.Печать(МассивОбъектов,КоллекцияПечатныхФорм,ОбъектыПечати,ПараметрыВывода);
КолонкиТЗ = ТЗКоллекция.Колонки;
структураКоллекцияПечФорм = Новый Структура();
Для каждого строка Из тзколлекция Цикл
Для каждого колонка Из КолонкиТЗ Цикл
структураКоллекцияПечФорм.Вставить(колонка.Имя,строка[колонка.имя]);
КонецЦикла;
КонецЦикла;
Далее уже в модуле общей формы «ПечатьДокументов» в процедуре «ПриСозданииНаСервере»
Преобразовал эту структуру в таблицу значений
структураКоллекция = Параметры.КоллекцияПечатныхФорм;
ТаблицаЗначенияКоллекция = Новый ТаблицаЗначений;
Для каждого элементКоллекции Из структураКоллекция Цикл
ТаблицаЗначенияКоллекция.Колонки.Добавить(элементКоллекции.Ключ);
КонецЦикла;
Строка = ТаблицаЗначенияКоллекция.Добавить();
Для каждого элементКоллекции Из струкКолек Цикл
Строка[элементКоллекции.Ключ] = элементКоллекции.Значение;
КонецЦикла;
Показать
И заменил переменную «КоллекцияПечатныхФорм» на «ТаблицаЗначенияКоллекция». Вот после этого у меня заработало и на «тонком клиенте».
Пробовал открывать общую форму «ПечатьДокументов» и без этих параметров, что бы вызвалась экспортная процедура «Печать» из модуля внешней обработки. Вызывается всё хорошо, но она уже не видит заполненных реквизитов на форме.
Так вот вопрос, можно как то это реализовать по другому, Что бы не тащить общею форму к себе в обработку?
На тонком клиенте не доступен тип значения «ТаблицаЗначений», на форме его надо преобразовать в тип «ДанныеФормыКоллекция».
Создаем в форме реквизит типа ТаблицаЗначений. В процедуре &НаКлиенте вызываем процедуру на &НаСервере, в которой формируем таблицу значений и преобразуем в реквизит формы ЗначениеВРеквизитФормы. &НаКлиенте используем заполненный реквизит типа «ДанныеФормыКоллекция».
(16) Aleksandr, Весь вечер убил на то, чтобы вывести печатную форму из внешней обработки в стандартную форму печати. Так бы и до утра сидел, если бы не наткнулся на Ваш пример. Спасибо большое! Вы сделали мой сегодняшний сон)))
В версии БСП 2.3.4 ТабличныйДокумент передается в коллекции печатных форм и не требуется описание печатной формы, также ОбластиОбъектов можно не указывать:
помогите у меня ошибка УТ 3.1
и постояно ошыбка
{ОбщийМодуль.ОбщегоНазначенияКлиентСервер.Модуль(684)}: Итератор для значения не определен
Для Каждого Элемент Из МассивИсточник Цикл
помогите пожалуста
ИдентификаторПечатнойФормы = "МаршрутныйЛист";
НазваниеПечатнойФормы = НСтр("ru = 'Приказ о переводе работника на другую работу'");
ТабДок = ПечатьМаршрутныйЛистНаСервере(МассивОбъектов);
МодульУправлениеПечатьюКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("УправлениеПечатьюКлиент");
КоллекцияПечатныхФорм = МодульУправлениеПечатьюКлиент.НоваяКоллекцияПечатныхФорм(ИдентификаторПечатнойФормы);
ПечатнаяФорма = МодульУправлениеПечатьюКлиент.ОписаниеПечатнойФормы(КоллекцияПечатныхФорм, ИдентификаторПечатнойФормы);
ПечатнаяФорма.СинонимМакета = НазваниеПечатнойФормы;
ПечатнаяФорма.ТабличныйДокумент = ТабДок;
ПечатнаяФорма.ИмяФайлаПечатнойФормы = НазваниеПечатнойФормы;
ОбластиОбъектов = Новый СписокЗначений;
МодульУправлениеПечатьюКлиент.ПечатьДокументов(КоллекцияПечатныхФорм, ОбластиОбъектов);
&НаКлиенте
Процедура РешениеОВыплатеНадбавок(Команда)
Если Не ЗначениеЗаполнено(Объект.МесяцОтчета) Тогда
ПоказатьПредупреждение(,"Введите месяц отчета.");
Возврат;
КонецЕсли;
ТабДок=РешениеОНадбавкахНаСервере();
ИдентификаторПечатнойФормы="КФ_РешениеОНадбавках";
ИмяПечатнойФормы="Надбавки_"+Формат(Объект.МесяцОтчета,"ДФ='MMMM_yyyy'");
КФ_Клиент.ПечатьДокумента(ИдентификаторПечатнойФормы,ИмяПечатнойФормы,ТабДок);
КонецПроцедуры
Показать
В общем модуле КФ_Клиент
Процедура ПечатьДокументов(КоллекцияПечатныхФорм, Знач ОбъектыПечати = Неопределено, ВладелецФормы = Неопределено, ЗаголовокФормы=Неопределено) Экспорт
Если ОбъектыПечати = Неопределено Тогда
ОбъектыПечати = Новый СписокЗначений;
КонецЕсли;
КлючУникальности = Строка(Новый УникальныйИдентификатор);
ПараметрыОткрытия = Новый Структура("ИмяМенеджераПечати,ИменаМакетов,ПараметрКоманды,ПараметрыПечати");
ПараметрыОткрытия.ПараметрКоманды = Новый Массив;
ПараметрыОткрытия.ПараметрыПечати = Новый Структура;
ПараметрыОткрытия.Вставить("КоллекцияПечатныхФорм", КоллекцияПечатныхФорм);
ПараметрыОткрытия.Вставить("ОбъектыПечати", ОбъектыПечати);
ПараметрыОткрытия.ПараметрыПечати.Вставить("ЗаголовокФормы", ЗаголовокФормы);
ОткрытьФорму("ОбщаяФорма.ПечатьДокументов", ПараметрыОткрытия, ВладелецФормы, КлючУникальности);
КонецПроцедуры
Процедура ПечатьДокумента(ИдентификаторПечатнойФормы,ИмяПечатнойФормы,ТабДок) Экспорт
КоллекцияПечатныхФорм=УправлениеПечатьюКлиент.НоваяКоллекцияПечатныхФорм(ИдентификаторПечатнойФормы);
ПечатнаяФорма=УправлениеПечатьюКлиент.ОписаниеПечатнойФормы(КоллекцияПечатныхФорм,ИдентификаторПечатнойФормы);
ПечатнаяФорма.СинонимМакета=ИмяПечатнойФормы;
ПечатнаяФорма.ТабличныйДокумент=ТабДок;
ОбластиОбъектов=Новый СписокЗначений;
ПечатьДокументов(КоллекцияПечатныхФорм,ОбластиОбъектов,Неопределено,ИмяПечатнойФормы);
КонецПроцедуры
Помогите никак немогу понять откуда взять итератор.
{ОбщийМодуль.ОбщегоНазначенияКлиентСервер.Модуль(684)}: Итератор для значения не определен
Для Каждого Элемент Из МассивИсточник Цикл
Функция СкопироватьМассив(МассивИсточник) Экспорт
МассивРезультат = Новый Массив;
Для Каждого Элемент Из МассивИсточник Цикл
МассивРезультат.Добавить(СкопироватьРекурсивно(Элемент));
КонецЦикла;
Возврат МассивРезультат;
КонецФункции
Если еще актуально и кто то не понял как выводить запрос в табличный документ. у меня работает так.
внешняя обработка. в форме создаем кнопку и нужные поля. далее событие по нажатие кнопки.
также потребуется создать макет. в нем прописать необходимые поля. (либо сразу сохранять ТабДок в файл Excel )
Ps логичнее назвать тему - как вывести результат запроса в табличный документ.
&НаКлиенте
Процедура СформироватьОтчет(Команда) //кнопка
//... тут проверка заполнения доп. полей...если НЕ Заполнено и т.д...
ТабДок = Новый ТабличныйДокумент; // создаем табличный документ
СформироватьОтчетНаСервере(); // формируем запрос на сервере
ТабДок = СформироватьОтчетНаСервере(); //возвращаем результат запроса в табличный документ
ТабДок.Показать();
КонецПроцедуры
&НаСервере
Функция СформироватьОтчетНаСервере()
//Функция ПолучитьМакет доступна только из модуля объекта
//в модуль объекта можно провалится из модуля формы через
//функцию РеквизитФормыВЗначение ("Объект")
ДокументОбъект = РеквизитФормыВЗначение("Объект");
Макет = ДокументОбъект.ПолучитьМакет ("МакетОтчета");
//формируем Запрос
ТабДок = Новый ТабличныйДокумент;
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ.............."
Результат = Запрос.Выполнить();
ТабДок.Очистить();
ОбластьЗаголовок = Макет.ПолучитьОбласть("Заголовок");
// заполняем Заголовок
ОбластьЗаголовок.Параметры.Организация = Объект.Организация;
и т.д.......
ТабДок.Вывести (ОбластьЗаголовок);
ОбластьШапкаТаблицы = Макет.ПолучитьОбласть("ШапкаТаблицы");
ТабДок.Вывести (ОбластьШапкаТаблицы);
ОбластьСтроки = Макет.ПолучитьОбласть("Строки");
// заполняем
Выборка = Результат.Выбрать();
Пока Выборка.Следующий() Цикл
ОбластьСтроки.Параметры.Дата = Выборка.Дата;
ОбластьСтроки.Параметры.Партнер = Выборка.Партнер;
..................
ТабДок.Вывести (ОбластьСтроки);
КонецЦикла;
Возврат ТабДок;
КонецФункции