Имя: Пароль:
1C
 
Вызов формы из модуля менеджера
0 MrPushkov
 
24.03.25
12:25
БП3.0
Нужно сформировать печатные формы путевого листа на неделю вперед.  Путевой лист из которого будет производится печать будет являться образцом для заполнения. Для того, чтоб пользователь смог задать период, за который ему нужно напечатать эти ПФ нужно вызвать форму, где он это заполнит. Как вызвать эту форму?
1 Волшебник
 
24.03.25
12:31
Форма = Документы.ПутевойЛист.ПолучитьФорму("ИмяФормы");
Результат = Форма.ОткрытьМодально();
2 MrPushkov
 
24.03.25
12:32
(1) Ругается "Интерактивные операции недоступны"
3 Мультук
 
гуру
24.03.25
12:32
(0)

1) Сформируйте путевые листы на неделю вперед
-- руками
-- или напишите обработку, в которой будет форма в которой будут выбираться "путевой лист образец" и период дат

2) Распечатайте их обычным способом
-- или в этой же обработке предусмотрите не только создание,
но и печать
4 MrPushkov
 
24.03.25
12:32
Или как то асинхронно? Или совсем чушь говорю?
5 НоваяВолна
 
24.03.25
12:34
(0) https://1clancer.ru/article/modul_obekta_i_modul_menedzhera._otlichiya_830
стоп, не то.... неправильно прочитал (0)
6 MrPushkov
 
24.03.25
12:48
(3) Я пытаюсь это сделать через расширение, нужно именно, чтоб пользователь вызвал команду печать, и ему перед печатью выскочило окно "За какой период распечатать ПЛ", он например выбрал неделю, ему вышло на печать 7 ПЛ и разными датами на всю неделю
7 DiMel_77
 
24.03.25
13:07
8 Casey1984
 
24.03.25
13:09
А почему из модуля менеджера?
9 MrPushkov
 
24.03.25
13:14
(7) Да, идея похожая, но разница в том, что это сделано через внешнюю обработку, а необходимо сделать в расширении, и при вызове печать как то асинхронно вызвать форму с периодом, и из формы передать данные обратно на модуль и там завершить формирование ПФ.
10 MrPushkov
 
24.03.25
13:16
(8) Печать же идет в модуле менеджера, а я через расширение делаю. Как то можно передать все на формуПериода, и там все заполнить, но вот как эту форму периода вызвать?
11 Мультук
 
гуру
24.03.25
13:19
(9)

Я даже не буду спрашивать, нормально ли то, что все 7 ПЛ будут с одинаковыми номерами
Я даже не буду спрашивать, каким образом вы будете засовывать в печатную форму новую дату для каждого из 7 путевых листов

Я спрошу одно -- что сложного в том, что я описал в (3) ?
12 ass1c
 
24.03.25
13:19
Ничего не понятно, но вот - делаешь свою форму выбора периода или берешь из БСП что-то:

    ПараметрыОповещения = Новый Структура;
    Оповещение = Новый ОписаниеОповещения("ВыборПериодаЗавершение", ЭтотОбъект, ПараметрыОповещения);
    
    ПараметрыФормы = Новый Структура;
    ПараметрыФормы.Вставить("ЧтоТоТут", 1);
    
    ФормаДокумента = ОткрытьФорму("ОбщаяФорма.ФормаВыбораПериодаКакаяТо", ПараметрыФормы, ЭтаФорма,,,, Оповещение, РежимОткрытияОкнаФормы.БлокироватьОкноВладельца);
    
    &НаКлиенте
    Процедура ВыборПериодаЗавершение(ВыбранноеЗначение, ДополнительныеПараметры) Экспорт
    
        Если НЕ ВыбранноеЗначение = Неопределено Тогда
        
        КонецЕсли;
    
    КонецПроцедуры
13 Casey1984
 
24.03.25
13:22
(10) Вам надо гуглить механизм печати БСП и добавлять свою процедуру массовой печати, которая будет дергать метод формирования макета
14 DiMel_77
 
24.03.25
15:20
(9) В расширении это ещё легче сделать.

Примерно так:
1) При добавлении команды печати в процедуре ДобавитьКомандыПечати(КомандыПечати), в строке нужной команды указываете функцию общего клиентского модуля, в которой будете открывать общую форму выбора периода. (по умолчанию в качестве обработчика ставится что то типа "УправлениеПечатьюБЗККлиент.ВыполнитьКомандуПечати").

КомандаПечати.Обработчик = <ИмяОбщегоКлиентскогоМодуля>.<ИмяФункцииОткрытияФормыВыбораПериода>;

2) В общем клиентском модуле делаем функции, которые будут вызваны в качестве обработчика команды печати (что то типа такого):
Функция <ИмяФункцииОткрытияФормыВыбораПериода>(КомандаПечати) Экспорт
	
        // Сохраняем команду печати, для передаяи в оповещение
        ПараметрыОповещения = Новый Массив;
	ПараметрыОповещения.Добавить(КомандаПечати);
	 
	Оповещение = Новый ОписаниеОповещения("<ИмяФункцииОткрытияФормыВыбораПериодаОбработкаОповещения>", ЭтотОбъект,ПараметрыОповещения);
	
	ОткрытьФорму("ОбщаяФорма.ВыборПериода", , , , , , Оповещение, РежимОткрытияОкнаФормы.БлокироватьОкноВладельца);
	
КонецФункции 

Процедура <ИмяФункцииОткрытияФормыВыбораПериодаОбработкаОповещения>(Результат, Параметры) Экспорт
	
        //Восстанавливаем параметры команды
        КомандаПечати = Параметры[0]; 
        
        //Результат - структура с полем "Период"
	Если Результат <> Неопределено Тогда
		КомандаПечати.ДополнительныеПараметры.Вставить("Период", Результат.Период);	
	КонецЕсли;
	
	УправлениеПечатьюБЗККлиент.ВыполнитьКомандуПечати(КомандаПечати);
КонецПроцедуры 



3) В процедуре "Печать" модуля менеджера объекта, наши дополнительные параметры будут переданы в "ПараметрыПечати" (ПараметрыПечати.ДополнительныеПараметры.Свойство("Период")).

Т.е. эти параметры будут доступны в этом параметре:
Процедура Печать(МассивОбъектов, ПараметрыПечати, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода) Экспорт
15 Anton1307
 
24.03.25
16:50
1. Модуль менеджера выполняется на сервере, о каком открытии формы на сервере вы говорите?

2. Модальные вызовы запрещены.