Модераторы: stron

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как вызвать функцию написанную в 1С 
:(
    Опции темы
Delphist
  Дата 24.2.2009, 10:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Delphist Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2145
Регистрация: 3.2.2004
Где: всегда в сети

Репутация: нет
Всего: 3



Здравствуйте! Я программист (Delphi). Столкнулся со следующей проблемой:
в "1С:Предприятие" была сконфигурирована база данных, и там была написана некая функция, 
стоит задача вызывать эту функцию из внешней программы, т.е. как должен
выглядеть код в частности на Delphi (можно на С++), который позволял бы вызывать эту
функцию.


--------------------
ProcessInfo 1-ая моя программа (аналог spyxx.exe с гораздо большим функц-ом - внедрение dll в адр. простр. процесса, перехват API-функций, разбор приложения на окна мн.др).
Когда-то давным-давно использовал это...
PM MAIL ICQ   Вверх
AkelaSQL
Дата 24.2.2009, 14:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 392
Регистрация: 14.9.2007
Где: Москва

Репутация: 6
Всего: 7



О какой платформе идёт речь? Где расположена функция (какой модуль)? Как соединяетесь с 1С?


--------------------
user posted image
PM MAIL ICQ   Вверх
Delphist
  Дата 24.2.2009, 14:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Delphist Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2145
Регистрация: 3.2.2004
Где: всегда в сети

Репутация: нет
Всего: 3



Цитата(AkelaSQL @  24.2.2009,  15:00 Найти цитируемый пост)
О какой платформе идёт речь?  Как соединяетесь с 1С? 

Меня интересует и для v7.7 и для v8.1

Цитата(AkelaSQL @  24.2.2009,  15:00 Найти цитируемый пост)

Как соединяетесь с 1С? 

Соединяюсь, ну например для v8.1
Код

function
  Create1CObject(s1cAppProgID: string; var UseInstance1C: boolean):
  Variant;
var
  GUID: TGUID;
  IU: IUnknown;
begin

  try
    GUID := ProgIDToClassID(s1cAppProgID);
    if UseInstance1C and SUCCEEDED(GetActiveObject(GUID, nil, IU)) then
      Result := IU
    else
    begin
      UseInstance1C := False;
      Result := CreateOleObject(Trim(s1cAppProgID));
    end;
  except
    Result := Unassigned;
  end;
end;

function ConnectTo1C8_COM( s1cAppProgID,
                           InitLine : string;
                           var UseInstance1C: boolean) : Variant;
begin

  if Length(Trim(s1cAppProgID))<=0 then
    s1cAppProgID:='v8.COMConnector';
  Result := Create1CObject(s1cAppProgID, UseInstance1C);
  if not VarIsEmpty(Result) then
    Result:=Result.Connect(Trim(InitLine));
end;


Цитата(AkelaSQL @  24.2.2009,  15:00 Найти цитируемый пост)

Где расположена функция (какой модуль)?

Я особенно не шарю в 1С, знаю лишь то, что есть собственная конфигурация в 1С:Предприятие, ну и функция написанная 1С программистами. Знаю лишь то, что они ее разместят в то место, чтобы ее можно было вызвать из внешней программы



--------------------
ProcessInfo 1-ая моя программа (аналог spyxx.exe с гораздо большим функц-ом - внедрение dll в адр. простр. процесса, перехват API-функций, разбор приложения на окна мн.др).
Когда-то давным-давно использовал это...
PM MAIL ICQ   Вверх
AkelaSQL
Дата 24.2.2009, 15:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 392
Регистрация: 14.9.2007
Где: Москва

Репутация: 6
Всего: 7



Для 8.1
Тогда они должны поместить её в модуль внешнего соединения (желательно). Далее, после установки ком-соединения, выполняем: КомОбъект.ИмяФункции();

ИЛИ КомОбъект.EvalExpr("ИмяФункции()");

Для выполнения куска 1С - ного кода можно использовать:

КомОбъект.ExecuteBatch("ОтветСервера = КаталогПользователя() + "01.tmp";
        ТекстЗагружаемыеДанные    = СоздатьОбъект("AddIn.V7TextFile");    
        ИнтернетОбъект    = СоздатьОбъект("AddIn.V7HttpReader");
        ИнтернетОбъект.КоличествоПопытокАвторизации = 0;")


Для 7.7 аналогично, только процедуру нужно расположить в глобальном модуле.



--------------------
user posted image
PM MAIL ICQ   Вверх
Delphist
  Дата 24.2.2009, 17:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Delphist Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2145
Регистрация: 3.2.2004
Где: всегда в сети

Репутация: нет
Всего: 3



Цитата(AkelaSQL @  24.2.2009,  16:41 Найти цитируемый пост)
Тогда они должны поместить её в модуль внешнего соединения (желательно). Далее, после установки ком-соединения, выполняем: КомОбъект.ИмяФункции();

Спасибки. Тут еще одна проблема, чтобы протестить все это дело, мне нужно написать функцию в 1С, которую я бы вызывал. В 1С я не великий спец  smile, поэтому нужна помощь - помоги написать функцию  пусть это будет функция с названием SaveToDBF(aDate: TDate), которая просто выводит на экран дату указанная в параметре aDate и возвращает значение -1. 

И еще а как я через EvalExpr узнаю результат, который вернула SaveToDBF?


--------------------
ProcessInfo 1-ая моя программа (аналог spyxx.exe с гораздо большим функц-ом - внедрение dll в адр. простр. процесса, перехват API-функций, разбор приложения на окна мн.др).
Когда-то давным-давно использовал это...
PM MAIL ICQ   Вверх
AkelaSQL
Дата 25.2.2009, 09:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 392
Регистрация: 14.9.2007
Где: Москва

Репутация: 6
Всего: 7



Ф
Код

ункция SaveToDBF(aDate) Экспорт
    aDate = Дата(aDate);
    Предупреждение(Строка(aDate),60);
    Возврат -1;
КонецФункции //SaveToDBF(aDate)



Далее если вызвать

Код

Результат = КомОбъект.EvalExpr("SaveToDBF("25.02.09") ")


тогда Результат будет равен -1


    Только я не рекомендую работать с интерактивными объектами и методами на стороне КомОбъекта. В качестве передаваемых параметров могут использоваться только переменные примитивных типов (строка, число, булево). Так что окошки диалога с пользователем лучше выводи в дельфях.


--------------------
user posted image
PM MAIL ICQ   Вверх
Delphist
  Дата 25.2.2009, 10:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Delphist Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2145
Регистрация: 3.2.2004
Где: всегда в сети

Репутация: нет
Всего: 3



Цитата(AkelaSQL @  25.2.2009,  10:55 Найти цитируемый пост)
Только я не рекомендую работать с интерактивными объектами и методами на стороне КомОбъекта. В качестве передаваемых параметров могут использоваться только переменные примитивных типов (строка, число, булево). 

Спасибо!!!Вообщем создал я новую конфигурацию, затем создал в нем справочник, теперь хочу в 1С сделать форму с одной кпопкой при клике на которую должна вызываться SaveToDBF. Ток вот не фига не получается.

AkelaSQL у меня к тебе огромная просьба, добавить, пожалуйста, в мою конфигурацию, которую я прикрепил, форму с кнопокой вызывающая SaveToDBF. А то я до кузькиной зимы в этом конструкторе буду ковыряться

Это сообщение отредактировал(а) Delphist - 25.2.2009, 11:03

Присоединённый файл ( Кол-во скачиваний: 3 )
Присоединённый файл  MyDB1C.rar 8,10 Kb


--------------------
ProcessInfo 1-ая моя программа (аналог spyxx.exe с гораздо большим функц-ом - внедрение dll в адр. простр. процесса, перехват API-функций, разбор приложения на окна мн.др).
Когда-то давным-давно использовал это...
PM MAIL ICQ   Вверх
AkelaSQL
Дата 25.2.2009, 11:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 392
Регистрация: 14.9.2007
Где: Москва

Репутация: 6
Всего: 7



Размещение кнопки в форме справочника в твоём случае - это плохой подход. Создал тебе обработку и общий модуль, вызывай её.

У тебя релиз платформы какой-то старый, так что конфа может не открыться, обновляй платформу 1С

Присоединённый файл ( Кол-во скачиваний: 2 )
Присоединённый файл  MyDB1C.rar 17,77 Kb


--------------------
user posted image
PM MAIL ICQ   Вверх
Delphist
  Дата 25.2.2009, 14:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Delphist Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2145
Регистрация: 3.2.2004
Где: всегда в сети

Репутация: нет
Всего: 3



Цитата(AkelaSQL @  25.2.2009,  12:45 Найти цитируемый пост)
Размещение кнопки в форме справочника в твоём случае - это плохой подход. Создал тебе обработку и общий модуль, вызывай её.

Поставил 8.1, все ок, твоя конфигурация открывается, спасибки - увидел твою формочку

Но возникла следующая проблема, при коннекте к 1С через v81.COMConnector из под Delphi 
выдается ошибка 
{ОбщийМодуль.МодульВнешнегоСоединения(3,2)}: Процедура или функция с указанным именем не определена
{Предупреждение}

Может нужно добавлять эту функцию в модуль внешнего соединения, который не вручную создается, а вызывается через контекстное меню (правой кнопкой мыши) на слове Конфигуратор? smile 

Это сообщение отредактировал(а) Delphist - 25.2.2009, 14:34

Присоединённый файл ( Кол-во скачиваний: 5 )
Присоединённый файл  pic.JPG 15,65 Kb


--------------------
ProcessInfo 1-ая моя программа (аналог spyxx.exe с гораздо большим функц-ом - внедрение dll в адр. простр. процесса, перехват API-функций, разбор приложения на окна мн.др).
Когда-то давным-давно использовал это...
PM MAIL ICQ   Вверх
AkelaSQL
Дата 25.2.2009, 14:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 392
Регистрация: 14.9.2007
Где: Москва

Репутация: 6
Всего: 7



1. В свойствах внешнего модуля должны быть установленны галочки: Глобальный, Клиент, Внешнее соединение.
2. Пользователь, под которым конектишься к 1С должен иметь право: Дополнительное право внешнего подключения (соединения), устанавливается на закладке "Прочее" в "Меню-Администрирование-Пользователи"

Добавлено через 2 минуты и 49 секунд
Цитата

Может нужно добавлять эту функцию в модуль внешнего соединения, который не вручную создается, а вызывается через контекстное меню (правой кнопкой мыши) на слове Конфигуратор? 


можно и так, это монопенисуально...

Добавлено через 4 минуты и 33 секунды
Воронеж - хер догонишь....


Я кстати родом из Борисоглебска


--------------------
user posted image
PM MAIL ICQ   Вверх
Delphist
Дата 25.2.2009, 15:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Delphist Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2145
Регистрация: 3.2.2004
Где: всегда в сети

Репутация: нет
Всего: 3



Цитата(AkelaSQL @  25.2.2009,  15:57 Найти цитируемый пост)

на закладке "Прочее" в "Меню-Администрирование-Пользователи"

Так у меня этот список вообще пустой, я без пользователя подключаюсь - скорее всего по умолчанию как админ


--------------------
ProcessInfo 1-ая моя программа (аналог spyxx.exe с гораздо большим функц-ом - внедрение dll в адр. простр. процесса, перехват API-функций, разбор приложения на окна мн.др).
Когда-то давным-давно использовал это...
PM MAIL ICQ   Вверх
AkelaSQL
Дата 25.2.2009, 15:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 392
Регистрация: 14.9.2007
Где: Москва

Репутация: 6
Всего: 7



Заведи пользователя.


--------------------
user posted image
PM MAIL ICQ   Вверх
Delphist
  Дата 25.2.2009, 16:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Delphist Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2145
Регистрация: 3.2.2004
Где: всегда в сети

Репутация: нет
Всего: 3



Цитата(AkelaSQL @  25.2.2009,  16:40 Найти цитируемый пост)
Заведи пользователя. 

1. Да нет, дело не в этом. Я тут начал разбираться выясняется, что если мы работаем через v81.COMConnector (через com), то внешней функции 1С запрещено использовать функции интерфейса (т.е. вызывать диалоговые окна и прочее)

2. Результат = КомОбъект.EvalExpr("SaveToDBF("25.02.09") ") вызаывать так нельзя, потому что нужно передавать параметр даты в котором указано не только дата, но и время 25.02.09 00:00:00 (где в качестве нулей может стоять реальные часы:минуты:секунды), а иначе выдается ошибка невозможно провести преобразование даты.




--------------------
ProcessInfo 1-ая моя программа (аналог spyxx.exe с гораздо большим функц-ом - внедрение dll в адр. простр. процесса, перехват API-функций, разбор приложения на окна мн.др).
Когда-то давным-давно использовал это...
PM MAIL ICQ   Вверх
AkelaSQL
Дата 25.2.2009, 17:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 392
Регистрация: 14.9.2007
Где: Москва

Репутация: 6
Всего: 7



Я частично тебя об этом предупреждал:

 
Цитата

Только я не рекомендую работать с интерактивными объектами и методами на стороне КомОбъекта. В качестве передаваемых параметров могут использоваться только переменные примитивных типов (строка, число, булево). Так что окошки диалога с пользователем лучше выводи в дельфях.


Добавлено через 34 секунды
Но это уже детали...


--------------------
user posted image
PM MAIL ICQ   Вверх
Delphist
Дата 25.2.2009, 17:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Delphist Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2145
Регистрация: 3.2.2004
Где: всегда в сети

Репутация: нет
Всего: 3



Цитата(Delphist @  25.2.2009,  17:08 Найти цитируемый пост)
Результат = КомОбъект.EvalExpr("SaveToDBF("25.02.09") ") вызаывать так нельзя, потому что нужно...

А что нужно подправить в SaveToDBF чтобы ее можно было вызывать именно так SaveToDBF("25.02.09")  а не 
SaveToDBF("25.02.09 00:00:00") 



--------------------
ProcessInfo 1-ая моя программа (аналог spyxx.exe с гораздо большим функц-ом - внедрение dll в адр. простр. процесса, перехват API-функций, разбор приложения на окна мн.др).
Когда-то давным-давно использовал это...
PM MAIL ICQ   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "1C: Предприятие, SAP, ERP и учётные системы"
stron

Запрещается!

1. Обсуждение крэков, кейгенов и других подобных программ

Пробуйте искать сами или обращайтесь в приват к участникам форума.

Темы с подобными вещами будут немедленно удаляться, а нарушители - получать предупреждения.

Также запрещается обсуждение проблем работы этих программ (что куда вписать, куда что скопировать и т.п...)

2. Давать ссылки на взломанные продукты

  • Пожалуйста, пользуйтесь поиском перед тем, как задать вопрос - возможно ответ уже есть на форуме.
  • Название темы должно отражать её суть
  • Действия модераторов можно обсудить здесь

С уважением, stron, Pegas.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | 1C: Предприятие, SAP, ERP и учётные системы | Следующая тема »


 




[ Время генерации скрипта: 0.0886 ]   [ Использовано запросов: 20 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.