7.7 обработки

Тема в разделе "Отчеты и обработки для "1С:Предприятие 7.7"", создана пользователем ughunter, 10 фев 2012.

  1. TopicStarter Overlay
    ughunter
    Offline

    ughunter

    Регистрация:
    10 фев 2012
    Сообщения:
    5
    Симпатии:
    0
    Баллы:
    1
    Уважаемые Гуру!
    Есть внешняя обработка. В ней имеентся функция назовем ее так:

    Функция КакаятоФункция (параметр1,...,парамертn) Экспорт
    ООО = ТаблицаЗначений;


    Возврат ООО;
    КонецФункции

    Вопрос такой: как из формы (например отчета или документа) вызвать ее с параметрами и получить в переменную то что она возвращает? При этом не должны появляться какие-либо формы, она (обработка) не должна ждать нажатий киких либо кнопок. Просто выполнится, вернуть результат и покинуть мир в GarbageCollection?

    Спасибо!
  2. Requin
    Offline

    Requin Опытный в 1С

    Регистрация:
    10 май 2010
    Сообщения:
    1.911
    Симпатии:
    2
    Баллы:
    29
    Ключевое слово Экспорт имеет смысл только в глобальном модуле.
    Либо переписывайте функцию из обработки в конфигурацию, либо можно попробовать исхитриться через Форма.Параметр.
  3. TopicStarter Overlay
    ughunter
    Offline

    ughunter

    Регистрация:
    10 фев 2012
    Сообщения:
    5
    Симпатии:
    0
    Баллы:
    1
    уточню... да леший с ним с экспортом... дело в том что обработка должна вызывать из другой программы
    пример 1:
    ВидКонтрагента = v7.EvalExpr(

    "Метаданные.Перечисление(""ВидыКонтрагентов"").Значение(""" + nom.ВидКонтрагента.Идентификатор + """).Представление")

    Смысл в чем, с помощью v7.EvalExpr могу вызвать что угодно что выполнится ядром 1с
  4. WaRDeR
    Offline

    WaRDeR Модераторы Команда форума Модератор

    Регистрация:
    23 ноя 2006
    Сообщения:
    3.263
    Симпатии:
    14
    Баллы:
    29
    Поясните еще, какие формы при этом вызове появляются?
  5. TopicStarter Overlay
    ughunter
    Offline

    ughunter

    Регистрация:
    10 фев 2012
    Сообщения:
    5
    Симпатии:
    0
    Баллы:
    1
    Никаких форм вообще появлятся недолжно. Предположим обработка должна выбрать из справочника контрагентов контрагента с кодом 00000001. Мы должны вызвать обработку с параметром 00000001. Она должна выполнить поиск в справочнике и вернуть предположим в вызывающую программу ТЗ. При этом никаких форм появлятся не должно. Просто нашли контрагента вернули ТЗ и "вымерли".
  6. Хряк
    Offline

    Хряк Профессионал в 1С

    Регистрация:
    26 сен 2007
    Сообщения:
    1.447
    Симпатии:
    37
    Баллы:
    54
    При вызове
    Код:
    Конт=Сюда присваиваем что-нибудь, контекст документа, список начений с нужными параметрами...
    ОткрытьФорму ("Отчет.ТвояОбработка",Конт);
    Рез=Конт;//здесь результат функции
    
    в обработке

    Код:
    ПриОткрытии()
    Парам=Форма.Параметр;
    Если пустоеЗначение(Парам)=0 Тогда
    Парам=КакаятоФункция();
    СтатусВозврата(0);
    Возврат Парам;
    КонецЕсли;
    
  7. WaRDeR
    Offline

    WaRDeR Модераторы Команда форума Модератор

    Регистрация:
    23 ноя 2006
    Сообщения:
    3.263
    Симпатии:
    14
    Баллы:
    29
    А если используется подключение через ОЛЕ, то в вызываемой базе создается глобальная функция, а в вызывающей базе выполняется метод "EvalExpr". Никаких при этом форм открываться не будет.

    Таким образом, ваш вопрос вообще не понятен. Изначально вы все говорите правильно. В чем суть то?
  8. TopicStarter Overlay
    ughunter
    Offline

    ughunter

    Регистрация:
    10 фев 2012
    Сообщения:
    5
    Симпатии:
    0
    Баллы:
    1
    А суть вот в чем: есть бухгалтерская база данных. В ней ведется учет хозяйственной деятельности. Конфу трогать нельзя! Ибо при обновлении все накроется тазом. Есть программа для учета деятельности аэропорта. Так вот эта программа должна уметь взять из 1С контрагентов, номенклатуру и засунуть обратно счет-фактуру и акт. Да! программа (как может показаться) не дублирует 1С - она выполняет например функции формирования актов Формы С, реестров этих актов и на основании их уже создает акты (стандартные) в 1с.... мдя... вроде так если кратко
  9. TopicStarter Overlay
    ughunter
    Offline

    ughunter

    Регистрация:
    10 фев 2012
    Сообщения:
    5
    Симпатии:
    0
    Баллы:
    1
    процедура не может возвращать значение
  10. WaRDeR
    Offline

    WaRDeR Модераторы Команда форума Модератор

    Регистрация:
    23 ноя 2006
    Сообщения:
    3.263
    Симпатии:
    14
    Баллы:
    29
    Если я правильно понял, то задача интересная.
    Исходные данные:
    ВнешняяПрограмма - программа для учета деятельности аэропорта;
    - бухгалтерская конфигурация 1С;
    ВнешняяОбработка - обработка, которая должна выполнить некие действия в и вернуть результат.

    Основная проблема в том, что внешняя обработка не может вернуть напрямую значение, а возвращает его через параметр. Таким образом, все равно придется в глобальный модуль добавить функцию, пусть и простейшую.
    Примерный код функции может быть следующий:
    Код:
    Функция ВыполнениеВнешнейОбработки(Парам = "") Экспорт
    ОткрытьФорму("Отчет",Парам,<ПолныйПутьИИмяФайлаВнешнейОбработки>);
    Возврат Парам;
    КонецФункции
    Далее во внешней программе инициализируем сеанс ОЛЕ с .
    Вызываем нашу функцию, при необходимости можем передать ей параметр:
    Код:
    res = v7.EvalExpr("ВыполнениеВнешнейОбработки()");
    При выполнении функции, происходит вызов внешней обработки, в которой в предопределенной процедуре ПриОткрытии() выполняем все действия.
    Код:
    Процедура ПриОткрытии()
    Парам = Форма.Параметр;
    // Тут обрабатываем параметр, выполняем необходимые действия, формируем ответ RES
    Форма.Параметр = RES;
    СтатусВозврата(0);
    КонецПроцедуры;
    На этом, по идее, все. Внешняя обработка выполняет необходимые действия (например, можно действия закодировать числами, и при вызове функции ВыполнениеВнешнейОбработки передавать нужное число). Результат возвращает в параметр формы, который является параметром при вызове функции ОткрытьФорму, который в свою очередь возвращается во ВнешняяПрограмма.

    ЗЫ. тут еще мысль пришла. В идеале, конечно, обмениваться лучше переменными простых типов: строка, число.
    Но можно попробовать во ВнешняяПрограмма оперировать и объектами , например так:
    Код:
    ob = v7.CreateObject("Справочник.Контрагенты");
    К тому же можно попробовать напрямую выполнить функцию глобального модуля (вроде работает, пока нет возможности глянуть):
    Код:
    res = v7.ВыполнениеВнешнейОбработки();
    Если такой вариант прокатит, то можно экспериментировать, может получится обойтись без промежуточной функции:
    Код:
    TZ = v7.CreateObject("ТаблицаЗначений");
    v7.ОткрытьФорму("Отчет",TZ,<ПолныйПутьИИмяФайлаВнешнейОбработки>);
    // Далее работа с объектом [b]1С[/b] TZ.
    
  11. Бухгалтерский угодник
    Offline

    Бухгалтерский угодник Администраторы Команда форума Администратор

    Регистрация:
    29 дек 2008
    Сообщения:
    21.520
    Симпатии:
    407
    Баллы:
    104
    Не описана сама сторонняя программа. Сумеет ли она вообще работать с объектами 1С?
    Самый "тупой" вариант - обмен данными через файл....
  12. vip6374
    Offline

    vip6374

    Регистрация:
    20 май 2006
    Сообщения:
    14
    Симпатии:
    0
    Баллы:
    1
    В модуле формы Вы ставите процедуру ПриОткрытии()
    В этой процедуре Вы Ставите
    ООО=Форма.Параметр;
    Сформировать(ООО);
    В конце процедуры сформировать ставите Форма.Закрыть(0);
    То есть Вы передаете Во внешний отчет ТЗ, Отчет сам все делает, сам закрывается и вы имеете уже заполненную ТЗ

    !!!Внимание!!! Перед тем, как дать ответ, ознакомьтесь со всеми сообщениями ветки!
    Напирмер, чем этот ответ отличается, от данного выше? http://www.1c-pro.ru/topic39515.html/page__view__findpost__p__196433
    В следующий раз будет предупреждение.

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