| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > 1C: Предприятие, SAP, ERP и учётные системы > Как вызвать функцию написанную в 1С |
| Автор: Delphist 24.2.2009, 10:56 |
| Здравствуйте! Я программист (Delphi). Столкнулся со следующей проблемой: в "1С:Предприятие" была сконфигурирована база данных, и там была написана некая функция, стоит задача вызывать эту функцию из внешней программы, т.е. как должен выглядеть код в частности на Delphi (можно на С++), который позволял бы вызывать эту функцию. |
| Автор: AkelaSQL 24.2.2009, 14:00 |
| О какой платформе идёт речь? Где расположена функция (какой модуль)? Как соединяетесь с 1С? |
| Автор: Delphist 24.2.2009, 14:38 | ||
Меня интересует и для v7.7 и для v8.1 Соединяюсь, ну например для v8.1
Я особенно не шарю в 1С, знаю лишь то, что есть собственная конфигурация в 1С:Предприятие, ну и функция написанная 1С программистами. Знаю лишь то, что они ее разместят в то место, чтобы ее можно было вызвать из внешней программы |
| Автор: AkelaSQL 24.2.2009, 15:41 |
| Для 8.1 Тогда они должны поместить её в модуль внешнего соединения (желательно). Далее, после установки ком-соединения, выполняем: КомОбъект.ИмяФункции(); ИЛИ КомОбъект.EvalExpr("ИмяФункции()"); Для выполнения куска 1С - ного кода можно использовать: КомОбъект.ExecuteBatch("ОтветСервера = КаталогПользователя() + "01.tmp"; ТекстЗагружаемыеДанные = СоздатьОбъект("AddIn.V7TextFile"); ИнтернетОбъект = СоздатьОбъект("AddIn.V7HttpReader"); ИнтернетОбъект.КоличествоПопытокАвторизации = 0;") Для 7.7 аналогично, только процедуру нужно расположить в глобальном модуле. |
| Автор: AkelaSQL 25.2.2009, 09:55 | ||||
Ф
Далее если вызвать
тогда Результат будет равен -1 Только я не рекомендую работать с интерактивными объектами и методами на стороне КомОбъекта. В качестве передаваемых параметров могут использоваться только переменные примитивных типов (строка, число, булево). Так что окошки диалога с пользователем лучше выводи в дельфях. |
| Автор: Delphist 25.2.2009, 10:42 | ||
Спасибо!!!Вообщем создал я новую конфигурацию, затем создал в нем справочник, теперь хочу в 1С сделать форму с одной кпопкой при клике на которую должна вызываться SaveToDBF. Ток вот не фига не получается. AkelaSQL у меня к тебе огромная просьба, добавить, пожалуйста, в мою конфигурацию, которую я прикрепил, форму с кнопокой вызывающая SaveToDBF. А то я до кузькиной зимы в этом конструкторе буду ковыряться |
| Автор: AkelaSQL 25.2.2009, 11:45 |
| Размещение кнопки в форме справочника в твоём случае - это плохой подход. Создал тебе обработку и общий модуль, вызывай её. У тебя релиз платформы какой-то старый, так что конфа может не открыться, обновляй платформу 1С |
| Автор: Delphist 25.2.2009, 14:31 | ||
Поставил 8.1, все ок, твоя конфигурация открывается, спасибки - увидел твою формочку Но возникла следующая проблема, при коннекте к 1С через v81.COMConnector из под Delphi выдается ошибка {ОбщийМодуль.МодульВнешнегоСоединения(3,2)}: Процедура или функция с указанным именем не определена {Предупреждение} Может нужно добавлять эту функцию в модуль внешнего соединения, который не вручную создается, а вызывается через контекстное меню (правой кнопкой мыши) на слове Конфигуратор? |
| Автор: AkelaSQL 25.2.2009, 14:57 | ||
| 1. В свойствах внешнего модуля должны быть установленны галочки: Глобальный, Клиент, Внешнее соединение. 2. Пользователь, под которым конектишься к 1С должен иметь право: Дополнительное право внешнего подключения (соединения), устанавливается на закладке "Прочее" в "Меню-Администрирование-Пользователи" Добавлено через 2 минуты и 49 секунд
можно и так, это монопенисуально... Добавлено через 4 минуты и 33 секунды Воронеж - хер догонишь.... Я кстати родом из Борисоглебска |
| Автор: Delphist 25.2.2009, 15:22 |
Так у меня этот список вообще пустой, я без пользователя подключаюсь - скорее всего по умолчанию как админ |
| Автор: AkelaSQL 25.2.2009, 15:40 |
| Заведи пользователя. |
| Автор: Delphist 25.2.2009, 16:08 |
1. Да нет, дело не в этом. Я тут начал разбираться выясняется, что если мы работаем через v81.COMConnector (через com), то внешней функции 1С запрещено использовать функции интерфейса (т.е. вызывать диалоговые окна и прочее) 2. Результат = КомОбъект.EvalExpr("SaveToDBF("25.02.09") ") вызаывать так нельзя, потому что нужно передавать параметр даты в котором указано не только дата, но и время 25.02.09 00:00:00 (где в качестве нулей может стоять реальные часы:минуты:секунды), а иначе выдается ошибка невозможно провести преобразование даты. |
| Автор: AkelaSQL 25.2.2009, 17:24 | ||
Я частично тебя об этом предупреждал:
Добавлено через 34 секунды Но это уже детали... |
| Автор: Delphist 25.2.2009, 17:49 | ||
А что нужно подправить в SaveToDBF чтобы ее можно было вызывать именно так SaveToDBF("25.02.09") а не SaveToDBF("25.02.09 00:00:00") |
| Автор: Delphist 27.2.2009, 14:41 | ||
Вопрос по прежнему актуален |
| Автор: AkelaSQL 27.2.2009, 15:10 |
| 1С 8.1 замечательно понимает вот такой формат: Дата("00010101140000"), поэтому для даты 25.02.09 вызывай её так: SaveToDBF("20090225000000") Добавлено через 1 минуту и 22 секунды и плюсуй, плюсуй!!! |
| Автор: Delphist 27.2.2009, 20:45 | ||||
Не совсем понял. У меня есть функция:
Так вот если я передаю в качестве параметра aDate дату вот так ("25.02.09") , то 1С ругается, если же ("25.02.09 00:00:00") Но у меня задача такова, что время передовать мне не нужно. Так вот как 1С отучить (что нужно написать в функции), чтобы она воспринимала дату без времени нормально? |
| Автор: AkelaSQL 2.3.2009, 10:04 |
| ("25.02.09 00:00:00") - это и есть дата без времени, тебе что нулей к дате добавить трудно? |
| Автор: Delphist 2.3.2009, 11:15 | ||
НЕт не трудно - меня напрягает этот маразм, почему чтобы передать просто дату, нужно еще писать и время |
| Автор: AkelaSQL 3.3.2009, 10:09 |
| Потому что тип данных называется DateTime, а дата всего лишь составляющая данного типа. Передай "20090225" это тоже должно прокатить... Добавлено через 1 минуту и 25 секунд И вообще, есть правила преобразования типов или что? в дельфях совсем нет понятия типизации переменных? |
| Автор: Delphist 3.3.2009, 10:27 | ||
Есть, но у нас есть TDate и TDateTime |