8.х WEB Вызов функции ВнешнейПечатнойФормы через веб-сервис

Тема в разделе ""1C:Web-Сервер"", создана пользователем XXL, 20 окт 2017.

  1. TopicStarter Overlay
    XXL
    Offline

    XXL Опытный в 1С Команда форума

    Регистрация:
    22 янв 2007
    Сообщения:
    1.209
    Симпатии:
    19
    Баллы:
    29
    Здрасьте.
    Даже не знаю как спросить.
    У меня база на 8.3, режим совместимости с 8.2. Обычные формы.
    Есть приложение на планшете, которое общается с 1С через вэб-сервисы.
    С планшета можно печатать документы двумя способами:
    Первый - данные о печати записываются в регистр и потом из него печатаются.
    Второй - печать сразу на принтер. Из модуля вэб-сервиса вызывается функция общего модуля, из неё функция модуля объекта Документа, из неё функция печати модуля объекта ВнешнейПечатнойФормы. Вот с ней и проблемы, пишет "Метод объекта не обнаружен". Вызов через ПолучитьОбект().Печать().
    Если в документе делаю тестовую кнопку, которая вызывает также из модуля Документа функцию печати модуля объекта ВнешнейПечатнойФормы. Работает!
    Чё делать-то???
  2. Dem0lisher
    Offline

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

    Регистрация:
    4 авг 2009
    Сообщения:
    1.108
    Симпатии:
    70
    Баллы:
    54
    Ну если у вас так и написано ПолучитьОбEкт() - тогда понятно.
    Ну если нет - тогда код в студию
  3. TopicStarter Overlay
    XXL
    Offline

    XXL Опытный в 1С Команда форума

    Регистрация:
    22 янв 2007
    Сообщения:
    1.209
    Симпатии:
    19
    Баллы:
    29
    Код:
    Функция иднПечать(ЭтотОбъект, НазваниеПечатнойФормы, КоличествоЭкземпляров, НаПринтер, Документ, ИмяПринтера) Экспорт
        ОбработкаЗащиты = "";
        СтрокаПечати = Неопределено;
       
        Внешняя = Ложь;
       
        ПечатныеФормы = Новый Структура();
        ПечатныеФормы.Вставить("АктОсмотра", "Акт осмотра");
        ПечатныеФормы.Вставить("Квитанция", "Квитанция к заказ-наряду");
        ПечатныеФормы.Вставить("ЗаказНаряд", "Заказ-наряд");
        ПечатныеФормы.Вставить("ТОРГ12", "ТОРГ-12 (Товарная накладная)");
        ПечатныеФормы.Вставить("АктОбОказанииУслуг", "Акт об оказании услуг");
        ПечатныеФормы.Вставить("АктОбОказанииУслугУслугиИМатериалы", "Акт об оказании услуг(услуги + материалы)");
    
        ПечатнаяФорма = Неопределено;
        Если Не обЗначениеНеЗаполнено(НазваниеПечатнойФормы) Тогда
            ПечатнаяФорма = дкПолучитьПечатнуюФорму(ПечатныеФормы, НазваниеПечатнойФормы);
        КонецЕсли;
       
        Если ПечатнаяФорма = Неопределено И Найти(НазваниеПечатнойФормы, "(внешняя)") = 0 Тогда
            СтрокаПечати = "ошибка печати"
        КонецЕсли;
       
        ФормыЕстьВСправочнике = Ложь;
        ТипОбъекта = "Документ." + ЭтотОбъект.Метаданные().Имя;
       
        Если Метаданные.НайтиПоПолномуИмени("Перечисление.ВидыВнешнихОбработок") = Неопределено Тогда
            ЗапросПоВнешнимФормам = Новый Запрос("
            |ВЫБРАТЬ ПЕРВЫЕ 1
            |    ВнешниеПечатныеФормы.Ссылка КАК Ссылка
            |ИЗ
            |    Справочник.ВнешниеПечатныеФормы КАК ВнешниеПечатныеФормы
            |ГДЕ
            |    ВнешниеПечатныеФормы.Объект = &ТипОбъекта
            |    И ВнешниеПечатныеФормы.Наименование = &ИмяПечатнойФормы");
            ЗапросПоВнешнимФормам.УстановитьПараметр("ТипОбъекта", ТипОбъекта);
            ЗапросПоВнешнимФормам.УстановитьПараметр("ИмяПечатнойФормы", СокрЛП(СтрЗаменить(НазваниеПечатнойФормы, "(внешняя)", "")));
        Иначе
            ЗапросПоВнешнимФормам = Новый Запрос("
            |ВЫБРАТЬ ПЕРВЫЕ 1
            |    ВнешниеПечатныеФормы.Ссылка КАК Ссылка
            |ИЗ
            |    Справочник.ВнешниеПечатныеФормы КАК ВнешниеПечатныеФормы
            |ЛЕВОЕ СОЕДИНЕНИЕ
            |    Справочник.ВнешниеПечатныеФормы.Принадлежность КАК ВнешниеПечатныеФормыПринадлежность
            |ПО
            |    ВнешниеПечатныеФормы.Ссылка = ВнешниеПечатныеФормыПринадлежность.Ссылка
            |ГДЕ
            |    ВнешниеПечатныеФормы.ВидОбработки = &ВидОбработки И
            |    (ВнешниеПечатныеФормы.ДляВсехДокументов = ИСТИНА ИЛИ
            |    ЕСТЬNULL(ВнешниеПечатныеФормыПринадлежность.ИмяОбъекта, """") = &ТипОбъекта)
            |    И ВнешниеПечатныеФормы.Наименование = &ИмяПечатнойФормы");
            ЗапросПоВнешнимФормам.УстановитьПараметр("ТипОбъекта", ТипОбъекта);
            ЗапросПоВнешнимФормам.УстановитьПараметр("ИмяПечатнойФормы", СокрЛП(СтрЗаменить(НазваниеПечатнойФормы, "(внешняя)", "")));
            ЗапросПоВнешнимФормам.УстановитьПараметр("ВидОбработки", Перечисления.ВидыВнешнихОбработок.ПечатнаяФорма);
        КонецЕсли;
        Выборка = ЗапросПоВнешнимФормам.Выполнить().Выбрать();
        Если Выборка.Следующий() Тогда
            ПечатнаяФорма = Выборка.Ссылка;
            Внешняя = Истина;
            ФормыЕстьВСправочнике = Истина;
        КонецЕсли;
       
        Если ПечатнаяФорма = Неопределено Тогда
            Для каждого ТекМакет Из ПечатныеФормы Цикл
               
                НазваниеПечатнойФормы = ТекМакет.Значение;
                ПечатнаяФорма = ТекМакет.Ключ;
                Прервать;
            КонецЦикла;
        КонецЕсли;
       
        Если Не (ПечатнаяФорма = Неопределено) Тогда
            Попытка
                Если Внешняя Тогда
                   
                    Если Документ = Неопределено Тогда
                        Документ = Новый ТабличныйДокумент;
                        Документ.ОтображатьЗаголовки = Ложь;
                        Документ.ОтображатьСетку = Ложь;
                        Документ.Защита = обПраво("ЗащитаПечатныхФорм", ЭтотОбъект.Права, , ЭтотОбъект);
                        Документ.ТолькоПросмотр = обПраво("ОткрытиеПечатныхФормДокументовВРежимеПросмотра", ЭтотОбъект.Права, , ЭтотОбъект);
                        Документ.ПолеСлева = 9;
                        Документ.ПолеСправа = 6;
                    КонецЕсли;
                     Документ = ПечатнаяФорма.ПолучитьОбъект().Печать(ЭтотОбъект, Документ);
                ИначеЕсли Документ = Неопределено Тогда
                   
                    Документ = Новый ТабличныйДокумент;
                    Документ.ОтображатьЗаголовки = Ложь;
                    Документ.ОтображатьСетку = Ложь;
                    Документ.Защита = обПраво("ЗащитаПечатныхФорм", ЭтотОбъект.Права, , ЭтотОбъект);
                    Документ.ТолькоПросмотр = обПраво("ОткрытиеПечатныхФормДокументовВРежимеПросмотра", ЭтотОбъект.Права, , ЭтотОбъект);
                    Документ.ПолеСлева = 9;
                    Документ.ПолеСправа = 6;
                    Документ = Вычислить("ЭтотОбъект.Печать" + ПечатнаяФорма + "(Документ)");
                КонецЕсли;
            Исключение
                Сообщить("При печати " + СокрЛП(ЭтотОбъект) + " обнаружены ошибки :", СтатусСообщения.Внимание);
                Сообщить("Обработчик печатной формы " + НазваниеПечатнойФормы + ": " + ОписаниеОшибки());
                Возврат ОписаниеОшибки();
                Возврат Документ;
            КонецПопытки;
    Ну и собственно вот тут ругается

    Код:
              Если Внешняя Тогда
                  
                    Если Документ = Неопределено Тогда
                        Документ = Новый ТабличныйДокумент;
                        Документ.ОтображатьЗаголовки = Ложь;
                        Документ.ОтображатьСетку = Ложь;
                        Документ.Защита = обПраво("ЗащитаПечатныхФорм", ЭтотОбъект.Права, , ЭтотОбъект);
                        Документ.ТолькоПросмотр = обПраво("ОткрытиеПечатныхФормДокументовВРежимеПросмотра", ЭтотОбъект.Права, , ЭтотОбъект);
                        Документ.ПолеСлева = 9;
                        Документ.ПолеСправа = 6;
                    КонецЕсли;
                     Документ = ПечатнаяФорма.ПолучитьОбъект().Печать(ЭтотОбъект, Документ);
  4. Dem0lisher
    Offline

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

    Регистрация:
    4 авг 2009
    Сообщения:
    1.108
    Симпатии:
    70
    Баллы:
    54
    Вот по последней строке трудно догадаться какой метод не проходит: получение объекта или печать. Разбить бы, тогда ясно будет.
    ДокОбъект = ПечатнаяФорма.ПолучитьОбъект();
    ДокОбъект.Печать()...
    Кстати, ПечатнаяФорма - какое значение принимает? Может это не ссылка на документ вообще?
    И сам контекст не совсем уяснил - это все инициируется на мобильном устройстве, а в центральной базе формируется
    ТабличныйДокумент и возвращается на устройство, чтобы устройство его показало?
  5. TopicStarter Overlay
    XXL
    Offline

    XXL Опытный в 1С Команда форума

    Регистрация:
    22 янв 2007
    Сообщения:
    1.209
    Симпатии:
    19
    Баллы:
    29
    Не работает именно Печать()
    ПечатнаяФорма это Справочник.ВнешниеОтчётыИОбработки. ПолучитьОбъект() тоже получает.
    --- Объединение сообщений, 20 окт 2017 ---
    Сейчас выложу ошибку.
  6. 1с-ник
    Offline

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

    Регистрация:
    5 окт 2014
    Сообщения:
    988
    Симпатии:
    159
    Баллы:
    104
    Напоминаю, что функция печать внешней ПФ принимает 2 обязательных параметра.
  7. TopicStarter Overlay
    XXL
    Offline

    XXL Опытный в 1С Команда форума

    Регистрация:
    22 янв 2007
    Сообщения:
    1.209
    Симпатии:
    19
    Баллы:
    29
    Да да, параметры есть, не написала просто. Параметры заполняются нужными значениями, проверяла. Этот код отрабатывает, если вызывать его из Документа (данный код в ОбщемМодуле)
  8. 1с-ник
    Offline

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

    Регистрация:
    5 окт 2014
    Сообщения:
    988
    Симпатии:
    159
    Баллы:
    104
    Если метод не обнаружен, то варианты:
    • в данном контексте он не виден (проверь, стоят ли необходимые флаги у модуля);
    • отличается количеством/значениями передаваемых параметров, мб. не указан, что экспортный и пр.
    Как из формы документа вызываешь? ОбщийМодуль.Печать()?
    --- Объединение сообщений, 20 окт 2017 ---
    мб. контекст внешнего соединения:)?
  9. TopicStarter Overlay
    XXL
    Offline

    XXL Опытный в 1С Команда форума

    Регистрация:
    22 янв 2007
    Сообщения:
    1.209
    Симпатии:
    19
    Баллы:
    29
    upload_2017-10-20_14-11-20.png

    Склоняюсь к тому, что в данном контексте не виден.

    Вызов из Модуля веб сервиса
    Код:
    СтрокаПечати = waНаПечать(СтруктураДанных);
    Вызов из Общего модуля
    Код:
    Функция waНаПечать(Выборка) Экспорт
        ...
        СтрокаПечати = ДокОбъект.иднПечать(ДокОбъект,"Заказ-наряд (внешняя)",Выборка.КоличествоЭкземпляров,Истина,,ИмяПринтера);
        ...
    КонецФункции
    
    
    Вызов из Документа
    Код:
    Функция иднПечать(ЭтотОбъект, НазваниеПечатнойФормы, КоличествоЭкземпляров, НаПринтер, Документ, ИмяПринтера) Экспорт
        ...
        Документ = ПечатнаяФорма.ПолучитьОбъект().Печать(ЭтотОбъект, Документ);
        ...
    КонецФункции
    Ну и собственно функция в модуле объекта внешней печатной формы
    Код:
    Функция Печать(ДокументОбъект, ТабДокумент) Экспорт
    --- Объединение сообщений, 20 окт 2017 ---
    Если вызываю печать по кнопке из самого Документа

    Модуль формы Документа
    Код:
    Процедура ОсновныеДействияФормыТестоваяПечать(Кнопка)
        ...
        СтрокаПечати = ЭтотОбъект.иднПечать(ЭтотОбъект,"Заказ-наряд (внешняя)",1,Истина,,ИмяПринтера);
        ...
    КонецПроцедуры
    Модуль объекта Документа
    Код:
    Функция иднПечать(ЭтотОбъект, НазваниеПечатнойФормы, КоличествоЭкземпляров, НаПринтер, Документ, ИмяПринтера) Экспорт
        ...
        Документ = ПечатнаяФорма.ПолучитьОбъект().Печать(ЭтотОбъект, Документ);
        ...
    КонецФункции
    Ну и собственно функция в модуле объекта внешней печатной формы
    Код:
    Функция Печать(ДокументОбъект, ТабДокумент) Экспорт
  10. 1с-ник
    Offline

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

    Регистрация:
    5 окт 2014
    Сообщения:
    988
    Симпатии:
    159
    Баллы:
    104
    А дкПечать(ЭтотОбъект, НазваниеПечатнойФормы, КоличествоЭкземпляров, НаПринтер, Документ) пашет?
    --- Объединение сообщений, 20 окт 2017 ---
    И проблема только в печати внешней пф или вообще?
  11. TopicStarter Overlay
    XXL
    Offline

    XXL Опытный в 1С Команда форума

    Регистрация:
    22 янв 2007
    Сообщения:
    1.209
    Симпатии:
    19
    Баллы:
    29
    До этого момента пашет всё.
    С планшета печатаю только внешние, если это имеется ввиду.
  12. Dem0lisher
    Offline

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

    Регистрация:
    4 авг 2009
    Сообщения:
    1.108
    Симпатии:
    70
    Баллы:
    54
    1с-ник нравится это.
  13. 1с-ник
    Offline

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

    Регистрация:
    5 окт 2014
    Сообщения:
    988
    Симпатии:
    159
    Баллы:
    104
    Погоди, так ты печать то какую вызываешь?!
    Обычно, чтобы распечатать внешнюю пф, сначала во временный файл создают, подключают, а потом уже печатают.
    А ты вызываешь модуль объекта справочника "ВнешниеПечатныеФормы".
    Тыкай туда отладчиком и смотри, что там не так.
    --- Объединение сообщений, 20 окт 2017 ---
    Видимо переписать печать придётся =)
  14. TopicStarter Overlay
    XXL
    Offline

    XXL Опытный в 1С Команда форума

    Регистрация:
    22 янв 2007
    Сообщения:
    1.209
    Симпатии:
    19
    Баллы:
    29
    Отладчик никак не могу настроить, чтоб из веб сервиса работал(((


    Этот код отрабатывает, если вызов делать из модуля формы документа, а если из модуля веб-сервиса, то нет. Поэтому, я так полагаю, что не надо его временный файл. Или я ошибаюсь?
    --- Объединение сообщений, 20 окт 2017 ---
    переписывать печать из внешних на внутренние?
  15. Dem0lisher
    Offline

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

    Регистрация:
    4 авг 2009
    Сообщения:
    1.108
    Симпатии:
    70
    Баллы:
    54
    Отладчик - нужно если серверная база - отладку на сервере включать через службы (debug дописать параметром.)
    Кроме этого при публикации сервера перейти на закладку отладка (дословно не помню) и там указать адрес сервера отладки.
    Затем upload_2017-10-20_14-57-53.png
  16. 1с-ник
    Offline

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

    Регистрация:
    5 окт 2014
    Сообщения:
    988
    Симпатии:
    159
    Баллы:
    104
    Попробуй печать из модуля справочника внешних пф перенести в свой общий модуль.
    Код:
    // Печатаем прицепленный объект
    //
    // Параметры:
    //  ДокументОбъект     – ДокументОбъект    – Документ для печати.
    //
    // Возвращаемое значение:
    //  ТабДокумент     – ТабличныйДокумент    – Печатная форма документа.
    //
    Функция Печать(ДокументОбъект=Неопределено,ТабДокумент=Неопределено) Экспорт
        Если ХранитьВоВнешнемФайле Тогда
            ИмяФайлаПечатнойФормы=ПутьКВнешнемуФайлу;
            Если обЗначениеНеЗаполнено(ИмяФайлаПечатнойФормы) Тогда
                Предупреждение("Отсутствует внешняя печатная форма!");
                Возврат Неопределено;
            КонецЕсли;
        Иначе
            ИмяФайлаПечатнойФормы = ПолучитьИмяВременногоФайла();
            Попытка
                Хранилище.Получить().Записать(ИмяФайлаПечатнойФормы);
            Исключение
                Предупреждение("Внешняя печатная форма не загружена в базу!");
                Возврат Неопределено;
            КонецПопытки;
        КонецЕсли;
        Попытка
            ТабДокумент = ВнешниеОбработки.Создать(ИмяФайлаПечатнойФормы).Печать(ДокументОбъект,ТабДокумент);
        Исключение
            ТабДокумент = ВнешниеОтчеты.Создать(ИмяФайлаПечатнойФормы).Печать(ДокументОбъект,ТабДокумент);
        КонецПопытки;
       
        Попытка
            Если НЕ ХранитьВоВнешнемФайле Тогда
                УдалитьФайлы(ИмяФайлаПечатнойФормы);
            КонецЕсли;
        Исключение
        КонецПопытки;
        Возврат ТабДокумент;
    КонецФункции // Печать()
    
  17. TopicStarter Overlay
    XXL
    Offline

    XXL Опытный в 1С Команда форума

    Регистрация:
    22 янв 2007
    Сообщения:
    1.209
    Симпатии:
    19
    Баллы:
    29
    делала, ничерта не получается. Сервер я правильно указываю, тот, на котором стоит 1с, а не тот, на котором сторонняя программа?

    Попробую,спасибо.
  18. TopicStarter Overlay
    XXL
    Offline

    XXL Опытный в 1С Команда форума

    Регистрация:
    22 янв 2007
    Сообщения:
    1.209
    Симпатии:
    19
    Баллы:
    29
    Можно тупой вопрос - Хранилище, это что? у меня на него ругается.
    --- Объединение сообщений, 20 окт 2017 ---
    Сдаётся мне, что для вызова через веб сервер какая-то хитрость нужна
  19. 1с-ник
    Offline

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

    Регистрация:
    5 окт 2014
    Сообщения:
    988
    Симпатии:
    159
    Баллы:
    104
    Хранилище - реквизит справочника внешние пф :)
  20. TopicStarter Overlay
    XXL
    Offline

    XXL Опытный в 1С Команда форума

    Регистрация:
    22 янв 2007
    Сообщения:
    1.209
    Симпатии:
    19
    Баллы:
    29
    ООО, кажется я что-то начинаю понимать)))
    Голова уже не варит...

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