Процедура СформироватьНалоговыеНакладные() знаходиться в модулі менеджера обробки та працює.
Я хочу перенести її в модулі об'екта, але тоді отримую помилку "Метод обїекта не обнаружен".
Як це зробити?
&НаСервере
Функция ВыполнитьФоновоеЗаданиеНаСервере(ПараметрыЗапуска, УникальныйИдентификатор)
НаименованиеЗадания = "Формування податкових накладних";
ВыполняемыйМетод = "Обработки.ФормированиеНалоговыхНакладных_Новая.СформироватьНалоговыеНакладные";
ПараметрыВыполнения = ДлительныеОперации.ПараметрыВыполненияВФоне(УникальныйИдентификатор);
ПараметрыВыполнения.НаименованиеФоновогоЗадания = НаименованиеЗадания;
ПараметрыВыполнения.ЗапуститьВФоне = Истина;
ПараметрыВыполнения.Вставить("ИдентификаторФормы", УникальныйИдентификатор);
СтруктураФоновогоЗадания = ДлительныеОперации.ВыполнитьВФоне(ВыполняемыйМетод, ПараметрыЗапуска, ПараметрыВыполнения);
Возврат СтруктураФоновогоЗадания;
КонецФункции
Slon747 @ Сегодня, 10:51
,
1) А зачем?
2) Волшебное слово: "Экспорт"
3) А надо ли: "&НаСервере"?
4) Её можно вызвать только для СУЩЕСТВУЮЩЕГО объекта (открыт или получен)
ОбработкаОбъект = РеквизитФормыВЗначение("Объект");
ОбработкаОбъект.МояПроцедураВМодулеОбъекта();
AnryMc,
1. Затем, что модуль менеджера не сохраняется во внешней обработке, а только в конфигурации.
2. Если бы не было Экспорт, то и из модуля менеджера не выполнялась бы
4. Речь про выполнение в фоне через "ДлительныеОперации.ВыполнитьВФоне"
Не уверен лучшее ли это решение, но что если создать где-то в общем модуле процедуру, в которой будет что-то типа:
Обработка = Обработки.ФормированиеНалоговыхНакладных_Новая.ПолучитьОбъект();
Обработка.СформироватьНалоговыеНакладные();
ВыполняемыйМетод = "Обработки.ФормированиеНалоговыхНакладных_Новая.СформироватьНалоговыеНакладные";
Vofka @ Сегодня, 12:18
,
В бухгалтерии BAS сделано так:
ВыполнитьБезФоновогоЗадания = Не ПараметрыВыполнения.БезРасширений
И (ОбщегоНазначенияКлиентСервер.РежимОтладки() Или ПараметрыВыполнения.ЗапуститьНеВФоне
Или (ЕстьФоновыеЗаданияВФайловойИБ() И Не ПараметрыВыполнения.ЗапуститьВФоне)
Или Не ВозможноВыполнитьВФоне(ИмяПроцедуры));
Функция ВозможноВыполнитьВФоне(ИмяПроцедуры)
ЧастиИмени = СтрРазделить(ИмяПроцедуры, ".");
Если ЧастиИмени.Количество() = 0 Тогда
Возврат Ложь;
КонецЕсли;
ЭтоВнешняяОбработка = (ВРег(ЧастиИмени[0]) = "ВНЕШНЯЯОБРАБОТКА");
ЭтоВнешнийОтчет = (ВРег(ЧастиИмени[0]) = "ВНЕШНИЙОТЧЕТ");
Возврат Не (ЭтоВнешняяОбработка Или ЭтоВнешнийОтчет);
КонецФункции
Slon747 @ Сегодня, 12:45
,
Кусок рабочего кода:
&НаКлиенте
Процедура Печать(ИдентификаторКоманды, ОбъектыНазначенияМассив) Экспорт
ДлительнаяОперация=ПечатьВФоне(ОбъектыНазначенияМассив[0]);
ПараметрыОжидания = ДлительныеОперацииКлиент.ПараметрыОжидания(ЭтотОбъект);
ПараметрыОжидания.ВыводитьПрогрессВыполнения = Истина;
ПараметрыОжидания.Интервал = 10; //Небольшое значение - для теста
ДлительныеОперацииКлиент.ОжидатьЗавершение(
ДлительнаяОперация,
Новый ОписаниеОповещения("ПечатьЗавершение", ЭтотОбъект),
ПараметрыОжидания);
КонецПроцедуры
&НаСервере
Функция ПечатьВФоне(СсылкаНаОбъект)
ОбъектВПФ=РеквизитФормыВЗначение("Объект");
////////////СсылкаНаВПФ=Справочники.ДополнительныеОтчетыИОбработки.НайтиПоРеквизиту("ИмяОбъекта","ВПФФоном");
СсылкаНаВПФ=Параметры.ДополнительнаяОбработкаСсылка;
Макет=ОбъектВПФ.ПолучитьМакет("МакетПечати");
//Это что вызываем
ПараметрыЗадания = Новый Структура;
ПараметрыЗадания.Вставить("ИмяОбработки", "ВнешняяОбработка.ВПФФономИсторияОбъекта");
ПараметрыЗадания.Вставить("ИмяМетода", "Печать");
ПараметрыЗадания.Вставить("ПараметрыВыполнения", Новый Структура("СсылкаНаОбъект,Макет", СсылкаНаОбъект,Макет));
ПараметрыЗадания.Вставить("ЭтоВнешняяОбработка", Истина);
ПараметрыЗадания.Вставить("ДополнительнаяОбработкаСсылка",СсылкаНаВПФ);
//Это как вызываем
ПараметрыВыполнения = ДлительныеОперации.ПараметрыВыполненияВФоне(УникальныйИдентификатор);
ПараметрыВыполнения.НаименованиеФоновогоЗадания = "Запуск длительного формирования ВПФ";;
ПараметрыВыполнения.ЗапуститьВФоне = Истина;
ПараметрыВыполнения.ОжидатьЗавершение=0.1; //Нет смысла ждать!!!
//запускаем выполнение фонового задания
Возврат ДлительныеОперации.ВыполнитьВФоне("ДлительныеОперации.ВыполнитьПроцедуруМодуляОбъектаОбработки", ПараметрыЗадания, ПараметрыВыполнения);
КонецФункции // ЗапуститьФормированиеВПФ()
&НаКлиенте
Процедура ПечатьЗавершение(Результат, ДополнительныеПараметры) Экспорт
Если Результат = Неопределено Тогда
Возврат;
ИначеЕсли Результат.Статус = "Ошибка" Тогда
ОбщегоНазначенияКлиентСервер.СообщитьПользователю(Результат.ПодробноеПредставлениеОшибки);
ИначеЕсли Результат.Статус = "Выполнено" Тогда
ТабДок=ПолучитьИзВременногоХранилища(Результат.АдресРезультата);
ТабДок.Показать();
КонецЕсли;
КонецПроцедуры
AnryMc, спасибо, почти заработало.
Только не понял, как передать параметры в выполняемую функцию.
В моем изначальном коде так:
ПараметрыЗапуска = Новый Структура("Период", Период);
//тут передаю параметры для использования в функции СформироватьНалоговыеНакладные() менеджера обработки
СтруктураФоновогоЗадания = ВыполнитьФоновоеЗаданиеНаСервере(ПараметрыЗапуска, УникальныйИдентификатор);
&НаСервере
Функция ВыполнитьФоновоеЗаданиеНаСервере(ПараметрыЗапуска, УникальныйИдентификатор)
НаименованиеЗадания = "Формування податкових накладних";
ВыполняемыйМетод = "Обработки.ФормированиеНалоговыхНакладных_Новая.СформироватьНалоговыеНакладные";
ПараметрыВыполнения = ДлительныеОперации.ПараметрыВыполненияВФоне(УникальныйИдентификатор);
ПараметрыВыполнения.НаименованиеФоновогоЗадания = НаименованиеЗадания;
ПараметрыВыполнения.ЗапуститьВФоне = Истина;
ПараметрыВыполнения.Вставить("ИдентификаторФормы", УникальныйИдентификатор);
Возврат ДлительныеОперации.ВыполнитьВФоне(ВыполняемыйМетод, ПараметрыЗапуска, ПараметрыВыполнения);
КонецФункции
Vofka @ Вчера, 19:57
,
Строка поиска GOOGLE
Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7
https://pro1c.org.ua