8.х Как запустить программно обработку заполнения ТЧ?

Тема в разделе "Конфигурирование на платформе "1С:Предприятие 8"", создана пользователем Serg2000, 4 сен 2012.

  1. TopicStarter Overlay
    Serg2000
    Offline

    Serg2000

    Регистрация:
    13 июл 2011
    Сообщения:
    32
    Симпатии:
    0
    Баллы:
    1
    Требуется из обработки запустить внешнюю обработку заполнения ТЧ, обработка записана в базе.

    Если обработка лежит на диске, то вот так работает:
    Код:
    Обработка = ВнешниеОбработки.Создать("E:\Рассчитать доставку.epf");
    Обработка.Инициализировать(Реализация, "Товары", "");
    Подскажите как запустить обработку если она занесена в базу?

    Так выдает ошибку "Метод объекта не обнаружен (Инициализировать)"
    Код:
    ЗапускаемаяОбработка = Справочники.ВнешниеОбработки.НайтиПоНаименованию("Рассчитать доставку", Истина);
    Обработка = ЗапускаемаяОбработка.ПолучитьФорму();
    Обработка.Инициализировать(Реализация, "Товары", "");
  2. uza
    Offline

    uza 1С, VBA (EXCEL), VB (.NET + WEB)

    Регистрация:
    10 июл 2007
    Сообщения:
    1.845
    Симпатии:
    1
    Баллы:
    29
    Читайте хелп по работе с хранилищем занчения! Посмотрите как работают внешние обрботки.
    Кратко:
    * Сначала сохраните данные из хранилища на диск в виде файла
    * Как открывать файл - вы уже знаете.
    * Не забудьте удалить файл, после того, как была открыта форма (незачем лишний раз засирать диск, и без вас его засрать есть кому. Хотя бы и ОС)
  3. 1cUserAndrew
    Offline

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

    Регистрация:
    27 май 2010
    Сообщения:
    4.949
    Симпатии:
    149
    Баллы:
    104
    Код:
    //Задаем имя временного файла
    ИмяФайла = КаталогВременныхФайлов() + "FileName.tmp";
    //Либо генерируем его автоматически:
    //ИмяФайла = ПолучитьИмяВременногоФайла();
    //В чем принципиальная разница, не знаю :-)
    
    //Находим нужную обработку в справочнике
    Обработка = Справочники.ВнешниеОбработки.НайтиПоНаименованию("Рассчитать доставку");
    
    //Достаем из хранилища обработки данные и записываем их во временный файл
    ДвоичныеДанные = Обработка.ХранилищеВнешнейОбработки.Получить();
    ДвоичныеДанные.Записать(ИмяФайла);
    
    //Открываем форму обработки
    ВнешниеОбработки.Создать(ИмяФайла).ПолучитьФорму().Открыть();
    
    //Удаляем временный файл
    УдалитьФайлы(ИмяФайла);
    Ух...это я так долго писал? ...:) (uza опередил)))
  4. 1cUserAndrew
    Offline

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

    Регистрация:
    27 май 2010
    Сообщения:
    4.949
    Симпатии:
    149
    Баллы:
    104
    Ой, Вам же не надо открывать форму обработки ))
    Тогда вместо этого:
    Код:
    ВнешниеОбработки.Создать(ИмяФайла).ПолучитьФорму().Открыть();
    Пишите:
    Код:
    ВнешниеОбработки.Создать(ИмяФайла).Инициализировать(.....);
  5. uza
    Offline

    uza 1С, VBA (EXCEL), VB (.NET + WEB)

    Регистрация:
    10 июл 2007
    Сообщения:
    1.845
    Симпатии:
    1
    Баллы:
    29
    Разница в том, что в первом случае Вы явно указываете как должен обзываться файл. А он, зараза, уже может быть такой на диске. Причем с признаком "ридонли" или установленными правами, исключающими Ваш доступ к нему - и тогда может случиться фэйл.

    В случае же ПолучитьИмяВременногоФайла(".расширение"); имя файла генерируется автоматически, и мы можем быть уверенны в уникальности имени файла в текущий момент.
    Расширение кстати в ПолучитьИмяВременногоФайла - можно задать, чтобы четка было понятно что это EPF (ERT и т.п.)

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