Имя: Пароль:
1C
1С v8
Подключение внешней обработки без формы (Управляемые формы)
0 Wefast
 
25.06.15
11:40
Сделал обработку. Создал форму. Поле в сыбором документа и кнопку. Все работает. Подключил ее к документу и там появилась кнопка. Все ок.

Но как мне весь этот код с модуля формы перенести в модуль объекта. И чтобы при вызове обработки из документа она фоном отрабатывала и выдавала только сообщение, ну и обновляла открытый документ или закрывала его.

Вот код модуля объекта:

Функция СведенияОВнешнейОбработке() Экспорт
    
    ИмяОтчета = ЭтотОбъект.Метаданные().Имя;
    Синоним = ЭтотОбъект.Метаданные().Синоним;
    Синоним = ?(ЗначениеЗаполнено(Синоним),Синоним, ИмяОтчета);
    
    ПараметрыРегистрации = Новый Структура;
    ПараметрыРегистрации.Вставить("Вид", "ЗаполнениеОбъекта");//может быть – ПечатнаяФорма, ЗаполнениеОбъекта (для вн.обработки), ДополнительныйОтчет, СозданиеСвязанныхОбъектов…
    ПараметрыРегистрации.Вставить("Наименование", Синоним); //имя под которым обработка будет зарегестрирована в справочнике внешних обработок
    ПараметрыРегистрации.Вставить("Версия", "1.0");
    ПараметрыРегистрации.Вставить("БезопасныйРежим", Истина);
    ПараметрыРегистрации.Вставить("Информация", "Отчет "+Синоним); //так будет выглядеть описание вн.отчета для пользователя
    //Сведения.Вставить("ВерсияБСП", "1.2.1.4");
    // ЕСЛИ это печатная форма
    //МассивНазначений = Новый Массив;
    //МассивНазначений.Добавить("Документ.<НаименованиеДокумента>);
    //ПараметрыРегистрации.Вставить("Назначение", МассивНазначений);
    
    
    // Создадим пустую таблицу команд и колонки в ней
    Команды = Новый ТаблицаЗначений;
    
    // Как будет выглядеть описание печатной формы для пользователя
    Команды.Колонки.Добавить("Представление", Новый ОписаниеТипов("Строка"));
    
    // Имя нашего макета, что бы могли отличить вызванную команду в обработке печати
    Команды.Колонки.Добавить("Идентификатор", Новый ОписаниеТипов("Строка"));
    
    // Тут задается, как должна вызваться команда обработки
    // Возможные варианты:
    // - ОткрытиеФормы - в этом случае в колонке идентификатор должно быть указано имя формы, которое должна будет открыть система
    // - ВызовКлиентскогоМетода - вызвать клиентскую экспортную процедуру из модуля формы обработки
    // - ВызовСерверногоМетода - вызвать серверную экспортную процедуру из модуля объекта обработки
    Команды.Колонки.Добавить("Использование", Новый ОписаниеТипов("Строка"));
    
    // Следующий параметр указывает, необходимо ли показывать оповещение при начале и завершению работы обработки. Не имеет смысла при открытии формы
    Команды.Колонки.Добавить("ПоказыватьОповещение", Новый ОписаниеТипов("Булево"));
    
    // Для печатной формы должен содержать строку ПечатьMXL
    Команды.Колонки.Добавить("Модификатор", Новый ОписаниеТипов("Строка"));
    
    НоваяКоманда = Команды.Добавить();
    НоваяКоманда.Представление = Синоним;
    НоваяКоманда.Идентификатор = "ЗаменаАналогами";
    НоваяКоманда.Использование = "ОткрытиеФормы"; // Для ВПФ "ВызовСерверногоМетода
    НоваяКоманда.ПоказыватьОповещение = Ложь;
    НоваяКоманда.Модификатор = ""; //Если ВПФ "ПечатьMXL"
    
    ПараметрыРегистрации.Вставить("Команды", Команды);
    
    Возврат ПараметрыРегистрации;
КонецФункции


Вот модуль формы:


&НаСервере
Процедура ВыполнитьНаСервере()
    
    Запрос = Новый Запрос;
        Запрос.Текст =
        "ВЫБРАТЬ
        |    ЗаказНаПроизводствоМатериалыИУслуги.Ссылка,
        |    ЗаказНаПроизводствоМатериалыИУслуги.НомерСтроки,
        |    ЗаказНаПроизводствоМатериалыИУслуги.Этап,
        |    ЗаказНаПроизводствоМатериалыИУслуги.Склад,
        |    ЗаказНаПроизводствоМатериалыИУслуги.СтатьяКалькуляции,
        |    ВЫБОР
        |        КОГДА ЕСТЬNULL(АналогиВПроизводствеСрезПоследних.Аналог, ""йцу"") = ""йцу""
        |            ТОГДА ЗаказНаПроизводствоМатериалыИУслуги.ИспользуетсяАвтовыбор
        |        ИНАЧЕ ЛОЖЬ
        |    КОНЕЦ КАК ИспользуетсяАвтовыбор,
        |    ЗаказНаПроизводствоМатериалыИУслуги.СведенияАвтовыбора,
        |    ЗаказНаПроизводствоМатериалыИУслуги.ПрименениеМатериала,
        |    ЗаказНаПроизводствоМатериалыИУслуги.ПроизводитсяВПроцессе,
        |    ЗаказНаПроизводствоМатериалыИУслуги.СпецификацияПолуфабриката,
        |    ЗаказНаПроизводствоМатериалыИУслуги.ВариантОбеспечения,
        |    ЗаказНаПроизводствоМатериалыИУслуги.ДатаПотребности,
        |    ЗаказНаПроизводствоМатериалыИУслуги.ЗаказатьНаСклад,
        |    ЗаказНаПроизводствоМатериалыИУслуги.КлючСвязи,
        |    ЗаказНаПроизводствоМатериалыИУслуги.КлючСвязиПродукция,
        |    ЗаказНаПроизводствоМатериалыИУслуги.КлючСвязиЭтапы,
        |    ЗаказНаПроизводствоМатериалыИУслуги.КлючСвязиСпецификация,
        |    ЗаказНаПроизводствоМатериалыИУслуги.Запланировать,
        |    ЗаказНаПроизводствоМатериалыИУслуги.СтатусУказанияСерий,
        |    ЗаказНаПроизводствоМатериалыИУслуги.УказыватьСерии,
        |    ЗаказНаПроизводствоМатериалыИУслуги.Серия,
        |    ЗаказНаПроизводствоМатериалыИУслуги.КодСтроки,
        |    ЗаказНаПроизводствоМатериалыИУслуги.СтатусУказанияСерийОтправитель,
        |    ЗаказНаПроизводствоМатериалыИУслуги.СтатусУказанияСерийПолучатель,
        |    ЗаказНаПроизводствоМатериалыИУслуги.Подразделение,
        |    ЗаказНаПроизводствоМатериалыИУслуги.КлючСвязиЭтапыСтрока,
        |    ЕСТЬNULL(АналогиВПроизводствеСрезПоследних.Аналог, ЗаказНаПроизводствоМатериалыИУслуги.Номенклатура) КАК Номенклатура,
        |    ЕСТЬNULL(АналогиВПроизводствеСрезПоследних.ХарактеристикаАналога, ЗаказНаПроизводствоМатериалыИУслуги.Характеристика) КАК Характеристика,
        |    ЕСТЬNULL(АналогиВПроизводствеСрезПоследних.УпаковкаАналога, ЗаказНаПроизводствоМатериалыИУслуги.Упаковка) КАК Упаковка,
        |    ЕСТЬNULL(АналогиВПроизводствеСрезПоследних.КоличествоАналога, ЗаказНаПроизводствоМатериалыИУслуги.Количество) КАК Количество,
        |    ЕСТЬNULL(АналогиВПроизводствеСрезПоследних.КоличествоУпаковокАналога, ЗаказНаПроизводствоМатериалыИУслуги.КоличествоУпаковок) КАК КоличествоУпаковок,
        |    АналогиВПроизводствеСрезПоследних.Аналог
        |ПОМЕСТИТЬ ВТ_врем
        |ИЗ
        |    Документ.ЗаказНаПроизводство.МатериалыИУслуги КАК ЗаказНаПроизводствоМатериалыИУслуги
        |        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.АналогиВПроизводстве.СрезПоследних(&дата, ) КАК АналогиВПроизводствеСрезПоследних
        |        ПО ЗаказНаПроизводствоМатериалыИУслуги.Номенклатура = АналогиВПроизводствеСрезПоследних.Материал
        |ГДЕ
        |    ЗаказНаПроизводствоМатериалыИУслуги.Ссылка = &Ссылка
        |;
        |
        |////////////////////////////////////////////////////////////////////////////////
        |ВЫБРАТЬ
        |    ВТ_врем.КлючСвязиПродукция,
        |    МИНИМУМ(ВТ_врем.ИспользуетсяАвтовыбор) КАК ИспользуетсяАвтовыбор
        |ПОМЕСТИТЬ ВТ_врем2
        |ИЗ
        |    ВТ_врем КАК ВТ_врем
        |
        |СГРУППИРОВАТЬ ПО
        |    ВТ_врем.КлючСвязиПродукция
        |;
        |
        |////////////////////////////////////////////////////////////////////////////////
        |ВЫБРАТЬ
        |    ВТ_врем.Ссылка,
        |    ВТ_врем.НомерСтроки,
        |    ВТ_врем.Этап,
        |    ВТ_врем.Склад,
        |    ВТ_врем.СтатьяКалькуляции,
        |    ВТ_врем.ИспользуетсяАвтовыбор,
        |    ВТ_врем.СведенияАвтовыбора,
        |    ВТ_врем.ПрименениеМатериала,
        |    ВТ_врем.ПроизводитсяВПроцессе,
        |    ВТ_врем.СпецификацияПолуфабриката,
        |    ВТ_врем.ВариантОбеспечения,
        |    ВТ_врем.ДатаПотребности,
        |    ВТ_врем.ЗаказатьНаСклад,
        |    ВТ_врем.КлючСвязи,
        |    ВТ_врем.КлючСвязиПродукция,
        |    ВТ_врем.КлючСвязиЭтапы,
        |    ВТ_врем.КлючСвязиСпецификация,
        |    ВТ_врем.Запланировать,
        |    ВТ_врем.СтатусУказанияСерий,
        |    ВТ_врем.УказыватьСерии,
        |    ВТ_врем.Серия,
        |    ВТ_врем.КодСтроки,
        |    ВТ_врем.СтатусУказанияСерийОтправитель,
        |    ВТ_врем.СтатусУказанияСерийПолучатель,
        |    ВТ_врем.Подразделение,
        |    ВТ_врем.КлючСвязиЭтапыСтрока,
        |    ВТ_врем.Номенклатура,
        |    ВТ_врем.Характеристика,
        |    ВТ_врем.Упаковка,
        |    ВТ_врем.Количество,
        |    ВТ_врем.КоличествоУпаковок,
        |    ВТ_врем.Аналог
        |ИЗ
        |    ВТ_врем КАК ВТ_врем
        |;
        |
        |////////////////////////////////////////////////////////////////////////////////
        |ВЫБРАТЬ
        |    ЗаказНаПроизводствоПродукция.Ссылка,
        |    ЗаказНаПроизводствоПродукция.НомерСтроки,
        |    ЗаказНаПроизводствоПродукция.Номенклатура,
        |    ЗаказНаПроизводствоПродукция.Характеристика,
        |    ЗаказНаПроизводствоПродукция.Упаковка,
        |    ЗаказНаПроизводствоПродукция.КоличествоУпаковок,
        |    ЗаказНаПроизводствоПродукция.Количество,
        |    ЗаказНаПроизводствоПродукция.Спецификация,
        |    ЗаказНаПроизводствоПродукция.ДатаПотребности,
        |    ЗаказНаПроизводствоПродукция.НачатьНеРанее,
        |    ЗаказНаПроизводствоПродукция.РазмещениеВыпуска,
        |    ЗаказНаПроизводствоПродукция.Склад,
        |    ЗаказНаПроизводствоПродукция.Подразделение,
        |    ЗаказНаПроизводствоПродукция.Назначение,
        |    ЗаказНаПроизводствоПродукция.ИзмененияЗапрещены,
        |    ЗаказНаПроизводствоПродукция.КодСтроки,
        |    ЗаказНаПроизводствоПродукция.КлючСвязи,
        |    ЗаказНаПроизводствоПродукция.КлючСвязиМатериалыИУслуги,
        |    ЗаказНаПроизводствоПродукция.КлючСвязиПродукция,
        |    ЗаказНаПроизводствоПродукция.ОптимальноеКоличествоПередачиМеждуЭтапами,
        |    ВЫБОР
        |        КОГДА ВТ_врем2.ИспользуетсяАвтовыбор = ЛОЖЬ
        |            ТОГДА 1
        |        ИНАЧЕ ЗаказНаПроизводствоПродукция.СостояниеСпецификации
        |    КОНЕЦ КАК СостояниеСпецификации,
        |    ЗаказНаПроизводствоПродукция.ЕстьСоответствиеСтандартнойСпецификации,
        |    ЗаказНаПроизводствоПродукция.ГрафикРассчитан
        |ИЗ
        |    Документ.ЗаказНаПроизводство.Продукция КАК ЗаказНаПроизводствоПродукция
        |        ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВТ_врем2 КАК ВТ_врем2
        |        ПО ЗаказНаПроизводствоПродукция.КлючСвязи = ВТ_врем2.КлючСвязиПродукция
        |ГДЕ
        |    ЗаказНаПроизводствоПродукция.Ссылка = &Ссылка";
    
    Запрос.УстановитьПараметр("дата", ТекущаяДата());
    Запрос.УстановитьПараметр("Ссылка",Объект.СсылкаНаОбъкт);
    ПакетыЗапросов = Запрос.ВыполнитьПакет();     
    Результат1 = ПакетыЗапросов[2].Выгрузить(); //Таб значений МатериалыИУслуги заменнная аналогами где можно
    Результат2 = ПакетыЗапросов[3].Выгрузить(); //таб значений Продукция с имзенением СостояниеСпецификации если у этой продукции изменена спецификация
    
    
    Док = Объект.СсылкаНаОбъкт.ПолучитьОбъект();
    
    ТабЧастьИсходнаяЯ    = Док.МатериалыИУслуги.Выгрузить();
    ТЧПродукция         = Док.Продукция.Выгрузить();
    
        
    Док.МатериалыИУслуги.Очистить();
    Док.МатериалыИУслуги.Загрузить(Результат1);
    
    Док.Продукция.Очистить();
    Док.Продукция.Загрузить(Результат2);
    
    Док.Записать(РежимЗаписиДокумента.Проведение,РежимПроведенияДокумента.Неоперативный);
        
    
    
    
КонецПроцедуры

&НаКлиенте
Процедура Вып(Команда)
    ВыполнитьНаСервере();
КонецПроцедуры
1 Wefast
 
25.06.15
13:52
Оказалось все куда проще. Поставил не Открытие формы а ВызовСерверногоМетода и кинул все в модуль объекта