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

Получение макета во внешней обработке

Автор syncX, 14 авг 2017, 20:08

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

syncX

Здравствуйте.
Есть вот такая внешняя обработка.
Над самой обработкой еще не работал, была вырвана из 8.2. Застрял на моменте с макетом. Никак не могу его получить, выдает ошибку. Обработку приложил. Перечитал много тем с получением макета и ни одна не сработала. Всегда ошибки.
Работа внешней обработки идет таким образом, что он берет счета фактуры и сравнивает поступление дату поступления ТМЗ и услуг и сравнивает эту дату с счетом-фактурой, где несовпадения - он выводит

oleg-x

В обычных приложениях все просто, с управляемыми сложнее:

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

Функция МакетПечатнойФормы(ПолныйПутьКМакету) Экспорт

ЧастиПути = СтрЗаменить(ПолныйПутьКМакету, ".", Символы.ПС);

Если СтрЧислоСтрок(ЧастиПути) = 3 Тогда
ПутьКМетаданным = СтрПолучитьСтроку(ЧастиПути, 1) + "." + СтрПолучитьСтроку(ЧастиПути, 2);
ПутьКОбъектуМетаданных = СтрПолучитьСтроку(ЧастиПути, 3);
ИначеЕсли СтрЧислоСтрок(ЧастиПути) = 2 Тогда
ПутьКМетаданным = СтрПолучитьСтроку(ЧастиПути, 1);
ПутьКОбъектуМетаданных = СтрПолучитьСтроку(ЧастиПути, 2);
Иначе
ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Макет ""%1"" не найден. Операция прервана.'"), ПолныйПутьКМакету);
КонецЕсли;

Запрос = Новый Запрос;

Запрос.Текст = "Выбрать Макет КАК Макет, Использование КАК Использование
|ИЗ
| РегистрСведений.ПользовательскиеМакетыПечати
|ГДЕ
| Объект=&Объект
| И ИмяМакета=&ИмяМакета
| И Использование";

Запрос.Параметры.Вставить("Объект", ПутьКМетаданным);
Запрос.Параметры.Вставить("ИмяМакета", ПутьКОбъектуМетаданных);

УстановитьПривилегированныйРежим(Истина);

Выборка = Запрос.Выполнить().Выбрать();

УстановитьПривилегированныйРежим(Ложь);

Результат = Неопределено;

Если Выборка.Следующий() Тогда
Результат = Выборка.Макет.Получить();
Иначе
Если СтрЧислоСтрок(ЧастиПути) = 3 Тогда
Результат = ОбщегоНазначения.МенеджерОбъектаПоПолномуИмени(ПутьКМетаданным).ПолучитьМакет(ПутьКОбъектуМетаданных);
Иначе
Результат = ПолучитьОбщийМакет(ПутьКОбъектуМетаданных);
КонецЕсли;
КонецЕсли;

Если Результат = Неопределено Тогда
ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Макет ""%1"" не найден. Операция прервана.'"), ПолныйПутьКМакету);
КонецЕсли;

Возврат Результат;

КонецФункции

Добавлено: 14 авг 2017, 23:11


Соответственно, этот макет должен быть записан в регистре пользовательские макеты
Помог, нажми спасибо. Не помог, нажми спасибо :-)
Если у Вас есть проблема, то её уже кто то решил @Yandex, @Google

pavl_vs

Цитата: syncX от 14 авг 2017, 20:08
Над самой обработкой еще не работал, ... Застрял на моменте с макетом. Никак не могу его получить, выдает ошибку.
Очень плохо, что над обработкой не работали.

Судя по всему у Вас управляемое приложение (БП 3.0, УТ, УНФ или ???).

oleg-x

Ради интереса загуглил и все просто:

&НаСервере
Функция ПолучитьМакетНаСервере()
    Объект1 =РеквизитФормыВЗначение("Объект");
    Макет = Объект1.ПолучитьМакет("Макет");
    Возврат Макет;
КонецФункции

И все заработает   
Помог, нажми спасибо. Не помог, нажми спасибо :-)
Если у Вас есть проблема, то её уже кто то решил @Yandex, @Google

pavl_vs

Цитата: oleg-x от 15 авг 2017, 00:05
Ради интереса загуглил и все просто:

&НаСервере
Функция ПолучитьМакетНаСервере()
    Объект1 =РеквизитФормыВЗначение("Объект");
    Макет = Объект1.ПолучитьМакет("Макет");
    Возврат Макет;
КонецФункции

И все заработает   
ТС тоже гуглил и в его варианте такое было, но не работает!? Нет сведений о внешней обработке.

oleg-x

Цитата: pavl_vs от 15 авг 2017, 10:28
Цитата: oleg-x от 15 авг 2017, 00:05
Ради интереса загуглил и все просто:

&НаСервере
Функция ПолучитьМакетНаСервере()
    Объект1 =РеквизитФормыВЗначение("Объект");
    Макет = Объект1.ПолучитьМакет("Макет");
    Возврат Макет;
КонецФункции

И все заработает   
Но не работает. В варианте ТС такое было!?

У него было так:
&НаСервере
Функция ПолучитьМакетНаСервере()
    //ОтчетОбъект =РеквизитФормыВЗначение("Объект");  //Строчку он законектил, но обрати внимание, что присваивает в ОтчетОбъект, а потом обращается в ЭтотОбъект
    Макет = ЭтотОбъект.ПолучитьМакет("Макет");
    Возврат Макет;
КонецФункции


Один из вариантов который нашел в интернете, но так не работает, возможно чего то не хватает
&НаСервере
Функция ПолучитьМакетНаСервере()
    ЭтотОбъект =РеквизитФормыВЗначение("Объект"); //Здесь выдает ошибку,что то типа объект не доступен для записи
    Макет = ЭтотОбъект.ПолучитьМакет("Макет");
    Возврат Макет;
КонецФункции
Помог, нажми спасибо. Не помог, нажми спасибо :-)
Если у Вас есть проблема, то её уже кто то решил @Yandex, @Google

pavl_vs

Цитата: oleg-x от 15 авг 2017, 10:34
Один из вариантов который нашел в интернете, но так не работает, возможно чего то не хватает

Чего не хватает я написал, дополнив свой пост; почему-то принимаются изменения при имеющемся ответ на пост.

oleg-x

Цитата: pavl_vs от 15 авг 2017, 10:42
Цитата: oleg-x от 15 авг 2017, 10:34
Один из вариантов который нашел в интернете, но так не работает, возможно чего то не хватает

Чего не хватает я написал, дополнив свой пост; почему-то принимаются изменения при имеющемся ответ на пост.
Это если ты уже начал писать, пока ни кто не написал.

Тот пример кода который я привел, работает в обработке. по крайне мере в сообщение выдало что я получил табличный документ. Главное использовать не ЭтотОбъект как в примерах, а любое имя переменной.
Помог, нажми спасибо. Не помог, нажми спасибо :-)
Если у Вас есть проблема, то её уже кто то решил @Yandex, @Google

syncX

Цитата: oleg-x от 15 авг 2017, 10:56
Это если ты уже начал писать, пока ни кто не написал.

Тот пример кода который я привел, работает в обработке. по крайне мере в сообщение выдало что я получил табличный документ. Главное использовать не ЭтотОбъект как в примерах, а любое имя переменной.
Спасибо. Пробовал до этого так - выдавало ошибку. Пробовал плохо, видимо.
Сразу возник еще один вопрос. Как получить счет фактуру и передать на клиент?

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

Рейтинг@Mail.ru

Поиск