[РЕШЕНО] Из команды документа вызвать процедуру в форме этого документа

Тема в разделе "Конфигурирование на платформе "1С:Предприятие 8"", создана пользователем SkyNetYar, 13 апр 2016.

  1. TopicStarter Overlay
    SkyNetYar
    Offline

    SkyNetYar Опытный в 1С

    Регистрация:
    11 ноя 2014
    Сообщения:
    146
    Симпатии:
    0
    Баллы:
    26
    Добрый день! УТ 11.1.10
    Хочется при печати табличного документа вызываемого из команды документа,вызывать еще и печать другого документа процедура которого расположена в модуле документа,это возможно?

    Пробовал так ,в команде документа (Документ.Команды) в модуле команды попутно в процедуре обработки команды дописать

    Код:
    ДокументОбъект = ПараметрКоманды.ПолучитьОбъект();
    ДокументОбъект.ОбработкаКомандыПечатьЭтикетки(ТабДокумент);
    
    В модуле формы процедура ОбработкаКомандыПечатьЭтикетки(ТабДокумент); на клиенте экспортная.

    Ругается на ПолучитьОбъект()
  2. Николаич87
    Offline

    Николаич87 Опытный в 1С

    Регистрация:
    1 апр 2015
    Сообщения:
    122
    Симпатии:
    4
    Баллы:
    29
    1. ПолучтьОбъект доступен вне контекста НаКлиенте
    2. Процедуру печати надо перенести из модуля объекта в модуль менеджера, тогда можно будет так: Документы.Документ1.Печать() без всякого получения объекта
  3. TopicStarter Overlay
    SkyNetYar
    Offline

    SkyNetYar Опытный в 1С

    Регистрация:
    11 ноя 2014
    Сообщения:
    146
    Симпатии:
    0
    Баллы:
    26
    Замысел ясен но когда я все это переношу в модуль менеджера то тогда ругань на Объект

    Вот мои причендалы
    Код:
    &НаКлиенте
    Процедура ОбработкаКомандыПечатьЭтикетки(ТабДокумент) Экспорт
        ТабДокумент = Новый ТабличныйДокумент;
        ТабДокумент = ПечатьЭтикетки(ТабДокумент);
        ТабДокумент.ИмяПараметровПечати    = "ПАРАМЕТРЫ_ПЕЧАТИ_ПечатнаяФормаЭтикеток";
       
        ТабДокумент.ИмяПринтера = "\\DC11\ZDesigner LP 2824 Plus (ZPL)";
        ТабДокумент.КоличествоЭкземпляров = 1;
        ТабДокумент.РазмерСтраницы="Custom";
        ТабДокумент.ВысотаСтраницы=30;
        ТабДокумент.ШиринаСтраницы=58;
        ТабДокумент.ОриентацияСтраницы=ОриентацияСтраницы.Портрет;
        ТабДокумент.ПолеСлева=0;
        ТабДокумент.ПолеСправа=0;
        ТабДокумент.ПолеСверху=0;
        ТабДокумент.ПолеСнизу=0;
        ТабДокумент.АвтоМасштаб = Истина;
       
        Попытка
            ТабДокумент.Напечатать(РежимИспользованияДиалогаПечати.НеИспользовать);
        Исключение
            Сообщить("Включите принтер");
        КонецПопытки;
       
    КонецПроцедуры
    
    
    &НаСервере
    Функция ПечатьЭтикетки(ТабДокумент) Экспорт
       
        Макет = Документы.пмДокументСервиса.ПолучитьМакет("ПечатьЭтикетки");
        ОбластьМакета = Макет.ПолучитьОбласть("Шапка");
       
        ОбластьМакета.Параметры.Заголовок     = "№ "+СокрЛП(Объект.Номер)+" от "+Формат(Объект.Дата,"ДЛФ=Д");
    
       
        ТабДокумент.Вывести(ОбластьМакета);   
        Возврат ТабДокумент;
       
    КонецФункции
    В модуле формы не ругается на объект..
  4. Dem0lisher
    Offline

    Dem0lisher Профессионал в 1С

    Регистрация:
    4 авг 2009
    Сообщения:
    1.023
    Симпатии:
    51
    Баллы:
    54
    Вот SkyNetYar тоже так думал.. но у него ошибка.
    --- Объединение сообщений, 13 апр 2016 ---
    Модуль менеджера не знает про объект. Раз уж так делаете - передавайте ссылку на объект через параметр процедуры печати
  5. TopicStarter Overlay
    SkyNetYar
    Offline

    SkyNetYar Опытный в 1С

    Регистрация:
    11 ноя 2014
    Сообщения:
    146
    Симпатии:
    0
    Баллы:
    26
    Хм,не подскажите метод?
    Код:
    &НаСервере
    Функция ПечатьЭтикетки(ТабДокумент,объект) Экспорт
    
  6. TopicStarter Overlay
    SkyNetYar
    Offline

    SkyNetYar Опытный в 1С

    Регистрация:
    11 ноя 2014
    Сообщения:
    146
    Симпатии:
    0
    Баллы:
    26
    Запутался...
    В модуле команды там где у меня заполняется документ печати документа добавил СсылкаНаПечатьЭтикетки();
    Код:
    &НаКлиенте
    Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды)
        СсылкаНаПечатьЭтикетки();
        ТабДокумент = Заполнялка(ПараметрКоманды);
        ТабДокумент.Показать("Договор сервисного центра");  
    КонецПроцедуры
    
    Далее там же ниже
    Код:
    &НаСервере
    Процедура СсылкаНаПечатьЭтикетки ()
         Документы.пмДокументСервиса.ОбработкаКомандыПечатьЭтикетки();
    КонецПроцедуры
    Ругается метод объекта не обнаружен Документы.пмДокументСервиса.ОбработкаКомандыПечатьЭтикетки();
  7. Dem0lisher
    Offline

    Dem0lisher Профессионал в 1С

    Регистрация:
    4 авг 2009
    Сообщения:
    1.023
    Симпатии:
    51
    Баллы:
    54
    1.В модуле менеджера у документа "пмДокументСервиса" есть экспортная процедура ОбработкаКомандыПечатьЭтикетки()?
    2.Если она у вас там есть, как она без параметра узнает, этикетки из какого документа ей нужно печатать? Из всех документов базы?
    Как минимум
    СсылкаНаПечатьЭтикетки(ПараметрКоманды), а на сервере
    Документы.пмДокументСервиса.ОбработкаКомандыПечатьЭтикетки(ПараметрКоманды);
  8. TopicStarter Overlay
    SkyNetYar
    Offline

    SkyNetYar Опытный в 1С

    Регистрация:
    11 ноя 2014
    Сообщения:
    146
    Симпатии:
    0
    Баллы:
    26
    -Arghh-
    Сделал так
    Код:
    &НаКлиенте
    Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды)
        СсылкаНаПечатьЭтикетки(ПараметрКоманды);
        ТабДокумент = Заполнялка(ПараметрКоманды);
        ТабДокумент.Показать("Договор сервисного центра");   
    КонецПроцедуры
    
    Код:
    &НаСервере
    Процедура СсылкаНаПечатьЭтикетки (ПараметрКоманды)
         Документы.пмДокументСервиса.ОбработкаКомандыПечатьЭтикетки(ПараметрКоманды);
    КонецПроцедуры
  9. TopicStarter Overlay
    SkyNetYar
    Offline

    SkyNetYar Опытный в 1С

    Регистрация:
    11 ноя 2014
    Сообщения:
    146
    Симпатии:
    0
    Баллы:
    26
    Давайте все с начала..В форме документа у меня нормально работает код
    Код:
    &НаКлиенте
    Процедура ОбработкаКомандыПечатьЭтикетки(ТабДокумент)
        ТабДокумент = Новый ТабличныйДокумент;
        ТабДокумент = ПечатьЭтикетки(ТабДокумент);
        ТабДокумент.ИмяПараметровПечати    = "ПАРАМЕТРЫ_ПЕЧАТИ_ПечатнаяФормаЭтикеток";
       
        ТабДокумент.ИмяПринтера = "\\DC11\ZDesigner LP 2824 Plus (ZPL)";
        ТабДокумент.КоличествоЭкземпляров = 1;
        ТабДокумент.РазмерСтраницы="Custom";
        ТабДокумент.ВысотаСтраницы=30;
        ТабДокумент.ШиринаСтраницы=58;
        ТабДокумент.ОриентацияСтраницы=ОриентацияСтраницы.Портрет;
        ТабДокумент.ПолеСлева=0;
        ТабДокумент.ПолеСправа=0;
        ТабДокумент.ПолеСверху=0;
        ТабДокумент.ПолеСнизу=0;
        ТабДокумент.АвтоМасштаб = Истина;
       
        Попытка
            ТабДокумент.Напечатать(РежимИспользованияДиалогаПечати.НеИспользовать);
        Исключение
            Сообщить("Включите принтер");
        КонецПопытки;
       
    КонецПроцедуры
    
    &НаСервере
    Функция ПечатьЭтикетки(ТабДокумент) Экспорт
       
        Макет = Документы.пмДокументСервиса.ПолучитьМакет("ПечатьЭтикетки");
        ОбластьМакета = Макет.ПолучитьОбласть("Шапка");
       
        ОбластьМакета.Параметры.Заголовок     = "№ "+СокрЛП(Объект.Номер)+" от "+Формат(Объект.Дата,"ДЛФ=Д");
       
        ТабДокумент.Вывести(ОбластьМакета);   
        Возврат ТабДокумент;
       
    КонецФункции
    
    Мне надо вызывать его из Модуля команды Документ.Команды (Команда.ПечатьДокумента) - эта команда успешно печатает другую печатную форму документа.

    Код:
    &НаКлиенте
    Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды)
        ТабДокумент = Заполнялка(ПараметрКоманды);
        ТабДокумент.Показать("Договор сервисного центра");   
    КонецПроцедуры
    
    Как мне поступить? Перенести Процедура ОбработкаКомандыПечатьЭтикетки(ТабДокумент) в Менеджер документа? как перенести параметры ?
    Или есть еще способ?
  10. Николаич87
    Offline

    Николаич87 Опытный в 1С

    Регистрация:
    1 апр 2015
    Сообщения:
    122
    Симпатии:
    4
    Баллы:
    29
    Функция ПечатьЭтикетки(ТабДок, СсылкаНаОбъект) отправляется в модуль менеджера
    Соответственно в форме ее вызываете Документы.ИмяДокумента.ПечатьЭтикетки(ТабДок, Ссылка)
    Команда - Документы.ИмяДокумента.ПечатьЭтикетки(ТабДок, ПараметрКоманды)
    SkyNetYar нравится это.
  11. TopicStarter Overlay
    SkyNetYar
    Offline

    SkyNetYar Опытный в 1С

    Регистрация:
    11 ноя 2014
    Сообщения:
    146
    Симпатии:
    0
    Баллы:
    26
    Сделал как Вы сказали, но..
    Модуль команды
    Код:
    &НаКлиенте
    Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды)   
        ТабДокумент = Заполнялка(ПараметрКоманды);
        ТабДокумент.Показать("Договор сервисного центра");   
        ПечатьЭтикетки (ТабДокумент,ПараметрКоманды);
    КонецПроцедуры
    
    Там же Модуль команды
    Код:
    &НаСервере
    Процедура ПечатьЭтикетки (ТабДокумент,ПараметрКоманды)
          Документы.пмДокументСервиса.ПечатьЭтикетки(ТабДокумент,ПараметрКоманды)
    КонецПроцедуры
    
    Модуль менеджера
    Код:
    &НаСервере
    Функция ПечатьЭтикетки(ТабДокумент,ПараметрКоманды) Экспорт
       
        Макет = Документы.пмДокументСервиса.ПолучитьМакет("ПечатьЭтикетки");
        ОбластьМакета = Макет.ПолучитьОбласть("Шапка");
       
        ОбластьМакета.Параметры.Заголовок     = "№ "+СокрЛП(ПараметрКоманды.Номер)+" от "+Формат(ПараметрКоманды.Дата,"ДЛФ=Д");
       
        ТабДокумент.Вывести(ОбластьМакета);   
        Возврат ТабДокумент;
       
    КонецФункции
    Но вот это где тогда должно исполнятся?
    Код:
    &НаКлиенте
    Процедура ОбработкаКомандыПечатьЭтикетки(ТабДокумент)
        ТабДокумент = Новый ТабличныйДокумент;
        ТабДокумент = ПечатьЭтикетки(ТабДокумент);
        ТабДокумент.ИмяПараметровПечати    = "ПАРАМЕТРЫ_ПЕЧАТИ_ПечатнаяФормаЭтикеток";
       
        ТабДокумент.ИмяПринтера = "\\DC11\ZDesigner LP 2824 Plus (ZPL)";
        ТабДокумент.КоличествоЭкземпляров = 1;
        ТабДокумент.РазмерСтраницы="Custom";
        ТабДокумент.ВысотаСтраницы=30;
        ТабДокумент.ШиринаСтраницы=58;
        ТабДокумент.ОриентацияСтраницы=ОриентацияСтраницы.Портрет;
        ТабДокумент.ПолеСлева=0;
        ТабДокумент.ПолеСправа=0;
        ТабДокумент.ПолеСверху=0;
        ТабДокумент.ПолеСнизу=0;
        ТабДокумент.АвтоМасштаб = Истина;
       
        Попытка
            ТабДокумент.Напечатать(РежимИспользованияДиалогаПечати.НеИспользовать);
        Исключение
            Сообщить("Включите принтер");
        КонецПопытки;
       
    КонецПроцедуры
    
    Сейчас это исполняется в форме(модуль) документа. А мне надо этот код исполнять из модуля команды.
  12. TopicStarter Overlay
    SkyNetYar
    Offline

    SkyNetYar Опытный в 1С

    Регистрация:
    11 ноя 2014
    Сообщения:
    146
    Симпатии:
    0
    Баллы:
    26
    Все,допетрил в чем проблема была не тот ТабДокумент передавался..
    Хоть я сделал через зад,а именно сдублировал из модуля формы документа процедуру и функцию в модуль команды и обрабатываю ее полностью из модуля команды не вызывая менеджер документа..
    Про выше описанный метод все ясно, до него тоже в принципе допетрил :)
    Спасибо!

Поделиться этой страницей