8.х Открыть форму внешней обработки через кнопку

Тема в разделе "Общие вопросы "1С:Предприятие 8"", создана пользователем AleksP, 31 июл 2012.

  1. TopicStarter Overlay
    AleksP
    Offline

    AleksP

    Регистрация:
    17 июл 2012
    Сообщения:
    44
    Симпатии:
    0
    Баллы:
    1
    Здраствуйте, люди добрые помогите пожалуйста. Суть проблемы такова: имеется внешняя обработка, которая должна подключатся через "Сервис - Дополнительные ... - Обработки" и имеется документ на котором добавлена кнопка, которая должна открывать форму обработки. Подскажите пожалуста что нужно прописать в процедуре кнопки для того что бы форма открылась. Конфигурация системы 1С: 8.2.
  2. Yuriy_Alexandrovich
    Offline

    Yuriy_Alexandrovich Профессионал в 1С Команда форума

    Регистрация:
    15 сен 2011
    Сообщения:
    1.275
    Симпатии:
    76
    Баллы:
    54
    Если документ типовой, то нужно обработку прописать в "внешние обработки - заполнение табличных частей", в этом случае не понадобиться курочить типовую конфигурацию
  3. TopicStarter Overlay
    AleksP
    Offline

    AleksP

    Регистрация:
    17 июл 2012
    Сообщения:
    44
    Симпатии:
    0
    Баллы:
    1
    да конфигурация типовая - УПП, подключения я поменяю, но мне все равно не понятно, как в таком случае получать доступ к форме в документе.
  4. Yuriy_Alexandrovich
    Offline

    Yuriy_Alexandrovich Профессионал в 1С Команда форума

    Регистрация:
    15 сен 2011
    Сообщения:
    1.275
    Симпатии:
    76
    Баллы:
    54
    Если не умничать то можно попробовать использовать такой код в теле процедуры обработчике нажатия кнопки
    Код:
    ЭлементСправочника = Справочники.ВнешниеОбработки.НайтиПоНаименованию("РегламентСмещениеДатыБлокировки");
    Если ЭлементСправочника <> Неопределено Тогда
    
    ХранилищеОбработки = ЭлементСправочника.ХранилищеВнешнейОбработки.Получить();
    
    ИмяВременногоФайла = ПолучитьИмяВременногоФайла("epf");
    ВыполнитьДействия = Ложь;
    
    // Сохраним обработку в файл
    Попытка
    ХранилищеОбработки.Записать(ИмяВременногоФайла);
    ВыполнитьДействия = Истина;
    Исключение
    Сообщить(ОписаниеОшибки(),СтатусСообщения.Важное);
    КонецПопытки;
    
    // Получим объект обработки и выполним процедуры
    Если ВыполнитьДействия Тогда
    
    ВнешняяОбработка = ВнешниеОбработки.Создать(ИмяВременногоФайла);
    
    // Выполним процедуру обработки, экспортную !
    ВнешняяОбработка.ВыполнитьОбработку();
    
    // Удалим файл обработки
    Попытка
    УдалитьФайлы(ИмяВременногоФайла);
    Исключение
    Сообщить(ОписаниеОшибки(),СтатусСообщения.Важное);
    КонецПопытки;
    
    КонецЕсли;
    
    КонецЕсли;
    
    Естественно ВыполнитьОбработку() - экспортная процедура с которой стартует внешняя обработка (может содержать тупо открытие основной формы обработки)

    И да
    РегламентСмещениеДатыБлокировки
    - пример названия внешней обработки, естественно нужно написать название своей обработки

    Критика кода приветствуется :)

    в справке к справочнику "Внешние обработки" расписано как подключить,
    кнопка в документе появиться "автоматически"
  5. TopicStarter Overlay
    AleksP
    Offline

    AleksP

    Регистрация:
    17 июл 2012
    Сообщения:
    44
    Симпатии:
    0
    Баллы:
    1
    что б совсем не ошибиться процедура ВыполнитьОбработку() - это процедура, хранящаяся в модуле формы внешней обработки, которая выполняющая те действия, которые должна выполнять обработка, у меня там процедура КнопкаВыполнитьНажатие(Кнопка), это то?
  6. Yuriy_Alexandrovich
    Offline

    Yuriy_Alexandrovich Профессионал в 1С Команда форума

    Регистрация:
    15 сен 2011
    Сообщения:
    1.275
    Симпатии:
    76
    Баллы:
    54
    ВыполнитьОбработку() - В модуле объекта
    В ней можно написать напримар так :
    Код:
    ФормаОбработки = ЭтотОбъект.ПолучитьФорму("Форма");
    Если НЕ ФормаОбработки.Открыта() Тогда
    ФормаОбработки.Открыть();
    КонецЕсли;
    Но лучше пойти типовым путем, в внешней обработке, в модуле объекта создать
    Код:
    Процедура Инициализировать(Объект,ИмяТабличнойЧасти,ТабличноеПолеОбъекта) Экспорт
    // код запуска алгоритмов обработки ->
    // .........
    // <-
    КонецПроцедуры
    а саму обработку поместить в справочник "внешние обработки, обработки заполнения табличных частей"
  7. TopicStarter Overlay
    AleksP
    Offline

    AleksP

    Регистрация:
    17 июл 2012
    Сообщения:
    44
    Симпатии:
    0
    Баллы:
    1
    запускается, но при нажатии на кнопку, которая должна выводить форму с внешней обработки выводит ошибку: Значение не является значением объектного типа (Записать)
  8. Yuriy_Alexandrovich
    Offline

    Yuriy_Alexandrovich Профессионал в 1С Команда форума

    Регистрация:
    15 сен 2011
    Сообщения:
    1.275
    Симпатии:
    76
    Баллы:
    54
    Поставь точку останова на
    ВыполнитьДействия = Ложь;
    выдели "
    ХранилищеОбработки
    " и посмотри с помощью "вычислить выражение", что получено в эту переменную, скорее всего он не нашел обработку и получено значение "Неопределено", соответственно нужно обработать такую ситуацию (написать проверочное условие и выходить из процедуры если возникла исключительная ситуация)

    Такое возможно если элемент справочника "внешние обработки" создан, но не заполнен (не загружена обработка) или недостаточно прав на запись.
    Нужно получить полное описание ошибки
  9. TopicStarter Overlay
    AleksP
    Offline

    AleksP

    Регистрация:
    17 июл 2012
    Сообщения:
    44
    Симпатии:
    0
    Баллы:
    1
    я ни как не могу решить проблему с ошибкой записи, там действительно у переменной получается значение "неопределено", я попытался исправить эту ошибку, попытался подстовлять другие обработки, однако, ничего не получается. я думаю может это связано с тем что я что-то не добавил в справочник "внешние обработки" или не туда подключил обработку в конфигураторе (подключил к "обработки заполнения табличных частей").
  10. TopicStarter Overlay
    AleksP
    Offline

    AleksP

    Регистрация:
    17 июл 2012
    Сообщения:
    44
    Симпатии:
    0
    Баллы:
    1
    Эту проблему я решил. Прости за излишнюю навязчивость и не понимание, но просто очень хочется доделать. Но теперь он выводит другую ошибку. про то что не может найти метод "ВыполнитьОбработку()". По совету Yuriy_Alexandrovich я записал "Процедура ВыполнитьОбработку() Экспорт" в модуле формы внешней обработки, там же где находится "Процедура КнопкаВыполнитьНажатие(Кнопка)". Пытался сделать процедуру "инициализировать", но опять не понял где и что в ней написать, как ее потом вызвать, и где тогда в итоге написать процедуру "ВыполнитьОбработку".
  11. Yuriy_Alexandrovich
    Offline

    Yuriy_Alexandrovich Профессионал в 1С Команда форума

    Регистрация:
    15 сен 2011
    Сообщения:
    1.275
    Симпатии:
    76
    Баллы:
    54
    Нужно добавить процедуру в модуль объекта ! (не формы)
    Выше я писал об этом.
  12. TopicStarter Overlay
    AleksP
    Offline

    AleksP

    Регистрация:
    17 июл 2012
    Сообщения:
    44
    Симпатии:
    0
    Баллы:
    1
    все равно не может найти
    {Документ.УстановкаЦенНоменклатуры.Форма.ФормаДокумента.Форма(2602)}: Метод объекта не обнаружен (ВыполнитьОбработку)
    ВнешняяОбработка.ВыполнитьОбработку();
  13. TopicStarter Overlay
    AleksP
    Offline

    AleksP

    Регистрация:
    17 июл 2012
    Сообщения:
    44
    Симпатии:
    0
    Баллы:
    1
    не знаю поможет или нет. проверил через точку оставнова. переменной ВнешнняяОбработка значение не присвоено.
  14. Yuriy_Alexandrovich
    Offline

    Yuriy_Alexandrovich Профессионал в 1С Команда форума

    Регистрация:
    15 сен 2011
    Сообщения:
    1.275
    Симпатии:
    76
    Баллы:
    54
    Покажи текст модуля обработки

    и процедуру обработки события "нажатие кнопки" в модуле формы документа
  15. TopicStarter Overlay
    AleksP
    Offline

    AleksP

    Регистрация:
    17 июл 2012
    Сообщения:
    44
    Симпатии:
    0
    Баллы:
    1
    Текст модуля
    Процедура ВыполнитьОбработку() Экспорт
    ФормаОбработки = ЭтотОбъект.ПолучитьФорму("Форма");
    Если Не ФормаОбработки.Открыта() Тогда
    ФормаОбработки.Открыть();
    КонецЕсли;
    КонецПроцедуры
    ТекстПроцедуры
    Код:
    Процедура КоманднаяПанельТаблицыТиповЦенВыводГруппы(Кнопка)
    
    ЭлементСправочника = Справочники.ВнешниеОбработки.НайтиПоНаименованию("Внешняя обработка уставнова цен");
    Если ЭлементСправочника <> Неопределено Тогда
    ХранилищеОбработки = ЭлементСправочника.ХранилищеВнешнейОбработки.Получить();
    ИмяВременногоФайла = ПолучитьИмяВременногоФайла("epf");
    ВыполнитьДействия = Ложь;
    Попытка
    ХранилищеОбработки.Записать(ИмяВременногоФайла);
    ВыполнитьДействия = Истина;
    Исключение
    Сообщить(ОписаниеОшибки(),СтатусСообщения.Важное);
    КонецПопытки;
    Если ВыполнитьДействия Тогда
    ВнешняяОбработка = ВнешниеОбработки.Создать(ИмяВременногоФайла);
    ВнешняяОбработка.ВыполнитьОбработку();
    Попытка
    УдалитьФайлы(ИмяВременногоФайла);
    Исключение
    Сообщить(ОписаниеОшибки(),СтатусСообщения.Важное);
    КонецПопытки;
    КонецЕсли;
    КонецЕсли;
    
    КонецПроцедуры
    
  16. Yuriy_Alexandrovich
    Offline

    Yuriy_Alexandrovich Профессионал в 1С Команда форума

    Регистрация:
    15 сен 2011
    Сообщения:
    1.275
    Симпатии:
    76
    Баллы:
    54
    Покажи скрин элемента справочника "внешние обработки", как он заполнен ?
  17. TopicStarter Overlay
    AleksP
    Offline

    AleksP

    Регистрация:
    17 июл 2012
    Сообщения:
    44
    Симпатии:
    0
    Баллы:
    1
    Я тут кое-что переделал вроде заработало.
    ВнешняяОбработка = ВнешниеОбработки.Создать("ВнешняяОбработка_УставноваЦен.epf");
    ВнешняяОбработка.ВыполнитьОбработку();
  18. Yuriy_Alexandrovich
    Offline

    Yuriy_Alexandrovich Профессионал в 1С Команда форума

    Регистрация:
    15 сен 2011
    Сообщения:
    1.275
    Симпатии:
    76
    Баллы:
    54
    Молодцом !

    если заработало, в оригинальном коде проверь, что в переменной "ИмяВременногоФайла"
  19. TopicStarter Overlay
    AleksP
    Offline

    AleksP

    Регистрация:
    17 июл 2012
    Сообщения:
    44
    Симпатии:
    0
    Баллы:
    1
    Если я все правильно понял. То ошибка могла заключатся в том, что когда использовалась сторока
    Код:
     ВнешняяОбработка = ВнешниеОбработки.Создать(ИмяВременногоФайла);
    ВнешняяОбработка.ВыполнитьОбработку();  
    Процедура ВыполнитьОбработку() обращалась к какому-то временному файлу на локальном диске, с большим непонятным именем, и ,возможно, отуда либо не могла найти, либо не могла получить доступ к процедуре. А при исполнении
    Код:
     ВнешняяОбработка = ВнешниеОбработки.Создать("ВнешняяОбработка_УставноваЦен.epf");
    Процедура обращается напрямую к файлу обработки где все нормально задано.
  20. Yuriy_Alexandrovich
    Offline

    Yuriy_Alexandrovich Профессионал в 1С Команда форума

    Регистрация:
    15 сен 2011
    Сообщения:
    1.275
    Симпатии:
    76
    Баллы:
    54
    Там идея была в получении имени временного файла в переменную "ИмяВременногоФайла",
    далее под этим именем сохранить обработку и запустить ее, понятно, что если имени нет то получаем ошибку

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