Имя: Пароль:
1C
 
Метод недоступен на сервере
,
0 falselight
 
30.11.17
08:12
УТ 11.3 Делаю доработку обработки. Перенес в неё процедуры из
общего модуля. Но на одной процедуре выходит ошибка, -

{Обработка.ПП_РабочийСтолУпаковщика.Форма.Форма.Форма(874)}: Ошибка при вызове метода контекста (Напечатать)
    ПакетОтображаемыхДокументов.Напечатать(РежимИспользованияДиалогаПечати.НеИспользовать);
по причине:
Метод недоступен на сервере


Как это обойти? Пробовал у этой процедуры поставить &НаКлиенте, но эту процедура не находит тогда, пишет что она не определена!
1 falselight
 
30.11.17
08:13
&НаКлиенте
Процедура СоздатьКоробку(Команда)
    ТекстПредупреждения = "";
    СоздатьКоробкуНаСервере(ТекстПредупреждения);
    Если ЗначениеЗаполнено(ТекстПредупреждения) Тогда
        ПоказатьПредупреждение(,ТекстПредупреждения);
    КонецЕсли;
    МасУпакЛ = Новый Массив;
    МасУпакЛ.Добавить(ТекущаяКоробка);
    ПечатьЭтикетокУпаковочныхЛистовНаПринтер2(МасУпакЛ);
КонецПроцедуры
//
Функция ПечатьЭтикетокУпаковочныхЛистовНаПринтер2(МасУпакЛ)
    СтруктураВозврата = УправлениеПечатьюУТВызовСервера.ДанныеДляПечатиЭтикетокУпаковочныеЛисты(МасУпакЛ);
    Если Не СтруктураВозврата.ЕстьШаблонЭтикетки Тогда
        ТекстСообщения = НСтр("ru = 'Не настроен общий шаблон этикетки упаковочного листа. Обратитесь к администратору.'");
        ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстСообщения);
    КонецЕсли;
    Если НЕ СтруктураВозврата.ЕстьЭтикеткиДляПечати Тогда
        ОбщегоНазначенияКлиентСервер.СообщитьПользователю(НСтр("ru = 'Печатная форма недоступна.'"));
    КонецЕсли;
    Если СтруктураВозврата.ЕстьЭтикеткиДляПечати И СтруктураВозврата.ЕстьШаблонЭтикетки Тогда
        ВыполнитьКомандуПечатиНаПринтер(
            "Обработка.ПечатьЭтикетокИЦенников",
            "ЭтикеткаУпаковочныеЛисты",
            МасУпакЛ,
            Новый Структура(
                "АдресВХранилище, ШаблонЭтикетки, КоличествоЭкземпляров",
                СтруктураВозврата.АдресВХранилище, СтруктураВозврата.ШаблонЭтикетки, 1));
    КонецЕсли;
КонецФункции
//
// Формирует и выводит на принтер печатные формы.
//
// Параметры:
//  ИмяМенеджераПечати - Строка - менеджер печати для печатаемых объектов;
//  ИменаМакетов       - Строка - идентификаторы печатных форм;
//  МассивОбъектов     - Ссылка, Массив - объекты печати;
//  ВладелецФормы      - УправляемаяФорма - форма, из которой выполняется печать;
//  ПараметрыПечати    - Структура - произвольные параметры для передачи в менеджер печати.
//
Процедура ВыполнитьКомандуПечатиНаПринтер(ИмяМенеджераПечати, ИменаМакетов, МассивОбъектов, ПараметрыПечати = Неопределено) Экспорт
    // Проверим количество объектов.
    Если НЕ ПроверитьКоличествоПереданныхОбъектов(МассивОбъектов) Тогда
        Возврат;
    КонецЕсли;
    // Сформируем табличные документы.
#Если ТолстыйКлиентОбычноеПриложение Тогда
    ПечатныеФормы = УправлениеПечатьюВызовСервера.СформироватьПечатныеФормыДляБыстройПечатиОбычноеПриложение(
            ИмяМенеджераПечати, ИменаМакетов, МассивОбъектов, ПараметрыПечати);
    Если НЕ ПечатныеФормы.Отказ Тогда
        ОбъектыПечати = Новый СписокЗначений;
        ТабличныеДокументы = ПолучитьИзВременногоХранилища(ПечатныеФормы.Адрес);
        Для Каждого ОбъектПечати Из ПечатныеФормы.ОбъектыПечати Цикл
            ОбъектыПечати.Добавить(ОбъектПечати.Значение, ОбъектПечати.Ключ);
        КонецЦикла;
        ПечатныеФормы.ОбъектыПечати = ОбъектыПечати;
    КонецЕсли;
#Иначе
    ПечатныеФормы = УправлениеПечатьюВызовСервера.СформироватьПечатныеФормыДляБыстройПечати(
            ИмяМенеджераПечати, ИменаМакетов, МассивОбъектов, ПараметрыПечати);
#КонецЕсли
    Если ПечатныеФормы.Отказ Тогда
        ОбщегоНазначенияКлиентСервер.СообщитьПользователю(НСтр("ru = 'Нет прав для вывода печатной формы на принтер, обратитесь к администратору.'"));
        Возврат;
    КонецЕсли;
    // Распечатаем
    РаспечататьТабличныеДокументы2(ПечатныеФормы.ТабличныеДокументы, ПечатныеФормы.ОбъектыПечати);
КонецПроцедуры
2 Segate
 
30.11.17
08:23
Передать ПакетОтображаемыхДокументов на клиент и там распечатать, не?
3 falselight
 
30.11.17
08:42
(2) Пишет процедура или функция с таким именем не определоена! Почему он её не видит?

Процедура РаспечататьТабличныеДокументы2(ТабличныеДокументы, ОбъектыПечати, Знач ПечататьКомплектами = Неопределено, Знач КоличествоКопийКомплектов = 1)
    ПечататьКомплектами = ТабличныеДокументы.Количество() > 1;
    ПакетОтображаемыхДокументов = УправлениеПечатьюВызовСервера.ПакетДокументов(ТабличныеДокументы,
        ОбъектыПечати, ПечататьКомплектами, КоличествоКопийКомплектов);
    ГоуГоу(ПакетОтображаемыхДокументов);
    //ПакетОтображаемыхДокументов.Напечатать(РежимИспользованияДиалогаПечати.НеИспользовать);
КонецПроцедуры
//
&НаКлинете
Процедура ГоуГоу(ПакетОтображаемыхДокументов)
    ПакетОтображаемыхДокументов.Напечатать(РежимИспользованияДиалогаПечати.НеИспользовать);    
КонецПроцедуры
// <-
4 falselight
 
30.11.17
08:44
&НаКлиенте попрачил правильно, все равно выдает ошибку
5 igorPetrov
 
30.11.17
09:08
(4) см(2)
6 falselight
 
30.11.17
09:21
(5) Как передать на клиент?
Все выполняется в модуле формы обраблотки.
Я же передаю на клиент

ГоуГоу(ПакетОтображаемыхДокументов);
    //ПакетОтображаемыхДокументов.Напечатать(РежимИспользованияДиалогаПечати.НеИспользовать);

КонецПроцедуры
//

&НаКлинете
Процедура ГоуГоу(ПакетОтображаемыхДокументов)
    ПакетОтображаемыхДокументов.Напечатать(РежимИспользованияДиалогаПечати.НеИспользовать);    
КонецПроцедуры
// <-
7 hhhh
 
30.11.17
09:37
(6) невозможно в нашей с вами реальности передать управление с сервера на клиент.
8 falselight
 
30.11.17
09:48
(7) вы можете объяснить как нужно сделать?
И же использую инструкцию &НаКлиенте
Он вообще перестает видеть это процедуру. Как нужно сделать?
9 igorPetrov
 
30.11.17
09:55
(8) Нужно сделать правильно.
10 falselight
 
30.11.17
10:08
Подскажите как? Я перетащил процедуры из общего модула я обработку
11 falselight
 
30.11.17
10:11
(9)(2) Не обладаю знаниями, умениями, вот и пытаюсь у вас выяснить!
12 igorPetrov
 
30.11.17
10:13
(11) Пора уже обладать.
13 falselight
 
30.11.17
10:14
(12) Что я не так делаю? Вопрос же ясен!
14 hhhh
 
30.11.17
10:46
(13) ну в типовой любой посмотрите, как печатают. У них же нет таких проблем. Зачем вы постоянно отсебятину начинаете гнать и не пользуетесь проверенными методиками? Постоянно что-то выдумываете и нас будоражите всякой фигней.
15 Мимохожий Однако
 
30.11.17
10:47
(13) Нельзя вызвать клиентскую процедуру из процедуры сервера. Это ясно. Как следствие: бездумное копирование процедур из общих модулей не всегда приводит к нужному результату.
16 novichok79
 
30.11.17
11:11
почему бы не сделать Процедура РаспечататьТабличныеДокументы2 функцией, которая возвращала бы ПакетОтображаемыхДокументов на клиент и выводила бы его уже в клиентской процедуре?
17 falselight
 
30.11.17
11:39
Да согласен. Извините что я так. Да простит меня бог за все и мои предки!!!!
18 novichok79
 
30.11.17
11:39
(17) да, ладно. не все так серьезно.
19 falselight
 
30.11.17
11:40
Решилось все вот так!!! Я щел не по правильному пути...

&НаКлиенте
Процедура СоздатьКоробку(Команда)
    ТекстПредупреждения = "";
    СоздатьКоробкуНаСервере(ТекстПредупреждения);
    Если ЗначениеЗаполнено(ТекстПредупреждения) Тогда
        ПоказатьПредупреждение(,ТекстПредупреждения);
    КонецЕсли;
    МасУпакЛ = Новый Массив;
    МасУпакЛ.Добавить(ТекущаяКоробка);
    СтруктураВозврата = УправлениеПечатьюУТВызовСервера.ДанныеДляПечатиЭтикетокУпаковочныеЛисты(МасУпакЛ);
    УправлениеПечатьюКлиент.ВыполнитьКомандуПечатиНаПринтер(
            "Обработка.ПечатьЭтикетокИЦенников",
            "ЭтикеткаУпаковочныеЛисты",
            МасУпакЛ,
            Новый Структура(
                "АдресВХранилище, ШаблонЭтикетки, КоличествоЭкземпляров",
                СтруктураВозврата.АдресВХранилище, СтруктураВозврата.ШаблонЭтикетки, 1));
КонецПроцедуры
20 falselight
 
30.11.17
11:40
(18) Не у меня серьезно, Очень. Психи...
21 falselight
 
30.11.17
11:41
(19+) То ест получается что из общего модуля нужно было взять только вот это, -

    СтруктураВозврата = УправлениеПечатьюУТВызовСервера.ДанныеДляПечатиЭтикетокУпаковочныеЛисты(МасУпакЛ);
    УправлениеПечатьюКлиент.ВыполнитьКомандуПечатиНаПринтер(
            "Обработка.ПечатьЭтикетокИЦенников",
            "ЭтикеткаУпаковочныеЛисты",
            МасУпакЛ,
            Новый Структура(
                "АдресВХранилище, ШаблонЭтикетки, КоличествоЭкземпляров",
                СтруктураВозврата.АдресВХранилище, СтруктураВозврата.ШаблонЭтикетки, 1));

И все работает!
22 novichok79
 
30.11.17
11:45
(20) и все завертится, петля закрутится, сначала стерпится, потом полюбится (с) ГС
(21) аллилуйя!
Выдавать глобальные идеи — это удовольствие; искать сволочные маленькие ошибки — вот настоящая работа. Фредерик Брукс-младший