Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
12 дек 2024, 02:30

создание функции

Автор BotMan, 17 мар 2015, 12:22

0 Пользователей и 1 гость просматривают эту тему.

BotMan

подскажите с таким моментом, создаю функцию и хочу чтобы она отработав возвращала результат, например :      

текстзапроса = ("select * from mybase");
текстзапроса.подключение();

функция подключение(ТекстЗапроса)
Соединение=СоздатьОбъект("ADODB.Connection");
Соединение.ConnectionString = "DRIVER={Microsoft ODBC for Oracle};бла бла бла";
Соединение.ConnectionTimeout = 15;
Соединение.CursorLocation= 3;
Соединение.Open(Соединение.ConnectionString);
НаборЗаписей = Соединение.Execute(ТекстЗапроса);   
возврат   НаборЗаписей.MoveFirst();
конецфункции


после выполнения ругается на : Значение не представляет агрегатный объект (подключение) :dfbsdfbsdf:

спасибо!


has

почитайте про ADODB.Connection

НаборЗаписей=Соединение.Execute(ТекстЗапроса);
НаборЗаписей.MoveFirst();
//и так далее

BotMan

Цитата: has от 17 мар 2015, 13:19
почитайте про ADODB.Connection

НаборЗаписей=Соединение.Execute(ТекстЗапроса);
НаборЗаписей.MoveFirst();
//и так далее


так у меня с ним все нормально, он работает. ест задумка отправлять запрос в функцию, да подключается , получает результат и возвращает его, вот!
покажите плз простейший пример такой функции. я только учусь 1с. что можно вообще отправлять в функцию?

Herby

Цитата: BotMan от 17 мар 2015, 12:22текстзапроса.подключение()

текстзапроса - это текстовая переменная.
у текстовых переменных нет никаких свойств и методов.
вот и ругается на это..

как должно быть:

функция подключение(ТекстЗапроса)
  Соединение=СоздатьОбъект("ADODB.Connection");   
  Соединение.ConnectionString = "DRIVER={Microsoft ODBC for Oracle};бла бла бла";
  Соединение.ConnectionTimeout = 15;
  Соединение.CursorLocation= 3;
  Соединение.Open(Соединение.ConnectionString);
  НаборЗаписей = Соединение.Execute(ТекстЗапроса);   
  возврат   НаборЗаписей.MoveFirst();
конецфункции

Результат = Подключение(ТекстЗапроса);


has

Цитата: BotMan от 17 мар 2015, 13:57
Цитата: has от 17 мар 2015, 13:19
почитайте про ADODB.Connection

НаборЗаписей=Соединение.Execute(ТекстЗапроса);
НаборЗаписей.MoveFirst();
//и так далее


так у меня с ним все нормально, он работает. ест задумка отправлять запрос в функцию, да подключается , получает результат и возвращает его, вот!
покажите плз простейший пример такой функции. я только учусь 1с. что можно вообще отправлять в функцию?
Я ерунду написал, голова не работала. Возвращайте просто НаборЗаписей, а потом уже работайте с ним, ну и как написал Herby.

Результат = Подключение("select * from mybase");

функция подключение(ТекстЗапроса)
Соединение=СоздатьОбъект("ADODB.Connection");   
Соединение.ConnectionString = "DRIVER={Microsoft ODBC for Oracle};бла бла бла";
Соединение.ConnectionTimeout = 15;
Соединение.CursorLocation= 3;
Соединение.Open(Соединение.ConnectionString);
НаборЗаписей = Соединение.Execute(ТекстЗапроса);   
возврат   НаборЗаписей;
конецфункции

BotMan

подскажите плз как правильно разместить функцию в коде:

перем текстзапроса;
Процедура приоткрытии()
конецпроцедуры

процедура сформировать()
текстзапроса = "select * from mubase";
результат = подключение(текстзапроса);

конецпроцедуры
   функция подключение(ТекстЗапроса)
  Соединение=СоздатьОбъект("ADODB.Connection");   
  Соединение.ConnectionString = "DRIVER={Microsoft ODBC for Oracle};UID=sys;PWD=qqq;SERVER=tmbrest";
  Соединение.ConnectionTimeout = 15;
  Соединение.CursorLocation= 3;
  Соединение.Open(Соединение.ConnectionString);
  НаборЗаписей = Соединение.Execute(ТекстЗапроса);   
  возврат   НаборЗаписей.MoveFirst();
конецфункции


подскажите пож, где как правило распологают процедуры???
Добавлено: 18 мар 2015, 14:34


ругается Значение не представляет агрегатный объект (EOF) :dfbbdrfb:

перем текстзапроса2;
                     
      функция подключение(ТекстЗапроса2)
  Соединение=СоздатьОбъект("ADODB.Connection");   
  Соединение.ConnectionString = "DRIVER={Microsoft ODBC for Oracle};бла, бла, бла";
  Соединение.ConnectionTimeout = 15;
  Соединение.CursorLocation= 3;
  Соединение.Open(Соединение.ConnectionString);
  НаборЗаписей = Соединение.Execute(ТекстЗапроса2);   
  возврат   НаборЗаписей.MoveFirst();
конецфункции


текстзапроса2 = "select name from mybase";

Результат = Подключение(ТекстЗапроса2);
  пока результат.EOF() = 0 цикл
тзМестоХранения.НоваяСтрока();
тзМестоХранения.НеУчитывая =  результат.Fields("name").Value;
результат.MoveNext();
  сообщить(результат.Fields("name").Value);
  КонецЦикла;
    результат.Cancel();
    результат.Close();


Herby

Функция которую вызывают, должна быть выше места, откуда эта функция вызывается. Иначе ее 1С не видит.

Если не хотите перемещать функцию то можно воспользоваться ключевым словом Далее (см. справку)
Добавлено: 18 мар 2015, 16:23


И возвращать нужно не НаборЗаписей.MoveFirst();

а просто НаборЗаписей;

BotMan

да спасибо, уже разобрался, методом тыка.
получается когда пишут код, то функции пишут в самом начале?

Herby

Цитата: BotMan от 18 мар 2015, 16:45получается когда пишут код, то функции пишут в самом начале?

необязательно. я же написал, что можно объявить название функции в начале модуля с ключевым словом далее (в справке все подробно расписано)

Теги:

Похожие темы (5)

Рейтинг@Mail.ru

Поиск