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

Внешняя печатная форма

Автор BenyBlack98, 21 мар 2021, 17:50

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

BenyBlack98

Добрый день, можете подсказать? недавно занимаюсь 1с, на работе дали задание: есть внешняя печатная форма , которую можно вызвать после записи документа Реализация товаров и услуг, и распечатать по данному документу. Нужно чтоб эта же внешняя форма печатала еще и из документа Заказ клиента. Понимаю что нужно написать еще запрос для Заказа клиента, чтоб данные отобрать и заполнить ими макет, не могу сообразить как сделать так, чтоб если нахожусь в заказе клиента заполнялись данные по нему а в реализации товаров по нему.

LexaK

а вам при выполнении команды печать передается ссылка на документ
вот в одном случае это будет Реализация а в другом Заказ
если правильно настроите ВПФ по КодуКоманды определите что/откуда вам надо брать данные для печати
что-то примерно такое будет у вас (внимание: зависит от версии БСП)

// Сформировать печатные формы объектов
//
// ВХОДЯЩИЕ:
//   ИменаМакетов    - Строка    - Имена макетов, перечисленные через запятую
//   МассивОбъектов  - Массив    - Массив ссылок на объекты которые нужно распечатать
//
// ИСХОДЯЩИЕ:
//   КоллекцияПечатныхФорм - Таблица значений - Сформированные табличные документы
//   ПараметрыВывода       - Структура        - Параметры сформированных табличных документов
//
Процедура Печать(МассивОбъектов, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода) Экспорт

СтруктураТипов = ОбщегоНазначенияУТ.СоответствиеМассивовПоТипамОбъектов(МассивОбъектов);

Если УправлениеПечатью.НужноПечататьМакет(КоллекцияПечатныхФорм, "РеализацияФорма") Тогда

УправлениеПечатью.ВывестиТабличныйДокументВКоллекцию(
КоллекцияПечатныхФорм,
"РеализацияФорма",
НСтр("ru = 'Реализация товаров'"),
СформироватьПечатнуюФормуРеализация(СтруктураТипов, ОбъектыПечати));


ИначеЕсли УправлениеПечатью.НужноПечататьМакет(КоллекцияПечатныхФорм, "ЗаказФорма") Тогда

УправлениеПечатью.ВывестиТабличныйДокументВКоллекцию(
КоллекцияПечатныхФорм,
"ЗаказФорма",
НСтр("ru = 'Заказ клиента'"),
СформироватьПечатнуюФормуЗаказа(СтруктураТипов, ОбъектыПечати));


КонецЕсли;

КонецПроцедуры // Печать()


ответ Понравился? (в смысле пригодился?)

BenyBlack98


Добавлено: 22 мар 2021, 15:38


Цитата: LexaK от 22 мар 2021, 10:31
а вам при выполнении команды печать передается ссылка на документ
вот в одном случае это будет Реализация а в другом Заказ
если правильно настроите ВПФ по КодуКоманды определите что/откуда вам надо брать данные для печати
что-то примерно такое будет у вас (внимание: зависит от версии БСП)

// Сформировать печатные формы объектов
//
// ВХОДЯЩИЕ:
//   ИменаМакетов    - Строка    - Имена макетов, перечисленные через запятую
//   МассивОбъектов  - Массив    - Массив ссылок на объекты которые нужно распечатать
//
// ИСХОДЯЩИЕ:
//   КоллекцияПечатныхФорм - Таблица значений - Сформированные табличные документы
//   ПараметрыВывода       - Структура        - Параметры сформированных табличных документов
//
Процедура Печать(МассивОбъектов, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода) Экспорт

СтруктураТипов = ОбщегоНазначенияУТ.СоответствиеМассивовПоТипамОбъектов(МассивОбъектов);

Если УправлениеПечатью.НужноПечататьМакет(КоллекцияПечатныхФорм, "РеализацияФорма") Тогда

УправлениеПечатью.ВывестиТабличныйДокументВКоллекцию(
КоллекцияПечатныхФорм,
"РеализацияФорма",
НСтр("ru = 'Реализация товаров'"),
СформироватьПечатнуюФормуРеализация(СтруктураТипов, ОбъектыПечати));


ИначеЕсли УправлениеПечатью.НужноПечататьМакет(КоллекцияПечатныхФорм, "ЗаказФорма") Тогда

УправлениеПечатью.ВывестиТабличныйДокументВКоллекцию(
КоллекцияПечатныхФорм,
"ЗаказФорма",
НСтр("ru = 'Заказ клиента'"),
СформироватьПечатнуюФормуЗаказа(СтруктураТипов, ОбъектыПечати));


КонецЕсли;

КонецПроцедуры // Печать()



Ваш пример понял, но вот только у меня один макет для разных документов. Как в таком случае быть?

LexaK

у вас получаются две процедуры по заполнению ТабДока
СформироватьПечатнуюФормуРеализация(СтруктураТипов, ОбъектыПечати)
СформироватьПечатнуюФормуЗаказа(СтруктураТипов, ОбъектыПечати)

внутри код по заполнению табдока по одному макету тоже будет одинаковый
только запрос по документу будет отличаться
это самый простой случай метода разработки КопиПаст
когда вы копируете уже рабочий/отлаженный механизм печати Реализации
для печати Заказа и только меняете получение данные в запросе

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

Теги:

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

Рейтинг@Mail.ru Rambler's Top100

Поиск