powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / [игнор отключен] [закрыт для гостей] / Выпольнить запрос SQL из 1С
25 сообщений из 78, страница 3 из 4
Выпольнить запрос SQL из 1С
    #35877549
VladimirKr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Егоров Александрkharkov_max,
Для нескольких рекордсетов вам уже ответили....

+1

Вообще, при ADODB чтении выходных данных из процедуры нужно иметь ввиду следующее:
Любая строчка информацонного сообщения порождает закрытый рекордсет (ЗаписиSQL.State=0)
для каждого select в теле ХП возвращается свой рекордсет.
все рекордсеты можно получить методом NextRecordset
В вашем случае лучше всего оформить процедуру так:

Код: plaintext
Create Proc MyProc(...)\nas\nbegin\n  set nocount on -- давим информационные сообщения (не совсем так, но для данного случая)\n  что-то делаем;\n  select данные1\n  ...\n  select данныеN\nend

При чтении делаем следующее:
Код: plaintext
...\n//в вашем случае при set nocout on не будет неоткрытых рекордсетов\n\nЗаписиSQL = СоединениеSQL.Execute();  //читаем результат первого select (данные  1 )\nЗаписиSQL=Записи.NextRecordset(); // читаем результат второго select (данные  2 )
после последнего select метод NextRecordset выдаст ошибку
...
Рейтинг: 0 / 0
Выпольнить запрос SQL из 1С
    #35877585
kharkov_max
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Возможно Вы меня не так поняли.

У меня есть хранимая процедура, в которую я из 1С должен передать данные.
Запускаю в SQL ее вот в таком виде:
exec ЕЕ.dbo.ПН 333,'20090301','20090314'
и она дает результат.

Теперь мне необходимо из 1С обратится к ней со своими переменными не (333,'20090301','20090314' ), а какими нибудь другими...

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

Если вот это:
Код: plaintext
1.
2.
3.
4.
5.
Для i =  1  По txtSQL.Количество()- 1  Цикл  			// Заполняем запрос SQL переменными
		Сообщить (txtSQL[i][ 0 ]+" "+txtSQL[i][ 1 ]+ " "+ txtSQL[i][ 2 ]+" "+txtSQL[i][ 3 ]+ " "+ txtSQL[i][ 4 ]);  // Тестовая срока
		СоединениеSQL.Parameters.Append(СоединениеSQL.CreateParameter(txtSQL[i][ 0 ],txtSQL[i][ 1 ],txtSQL[i][ 2 ],txtSQL[i][ 3 ],txtSQL[i][ 4 ])); 
	КонецЦикла;


не верно, я уберу, только вот вопрос как тогда передать мои параметры в хранимку ?
...
Рейтинг: 0 / 0
Выпольнить запрос SQL из 1С
    #35877595
kharkov_max
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Егоров Александрkharkov_max,


Для нескольких рекордсетов вам уже ответили. С хранимкой надобность в выполнении именно параметризированого запроса отпадает, так как параметры можно указать прямо в тескте запроса, выигрыша от использования sp_executesql уже не будет.

Дабы не молоть чепуху, покажите код вашей процедуры, или хотя бы заголовок с парметрами (от "create procedure" до "as")

Код: plaintext
\nUSE [eee]\nGO\n\nSET ANSI_NULLS ON\nGO\nSET QUOTED_IDENTIFIER ON\nGO\nALTER PROCEDURE [dbo].[ПН] \n\t\t@Поставщик int,\n\t\t@ДатаПриходС datetime,\n\t\t@ДатаПриходПо datetime\nAS\n
...
Рейтинг: 0 / 0
Выпольнить запрос SQL из 1С
    #35877799
kharkov_max
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Нашел ошибку....

Для упрощения проверки работы обработки, вставил период за который не было документов, соответственно мне поля выводило а данные нет. ))

Извините что по этому поводу вам голову морочил.
В данный момент процедура имеет такой вид:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
Функция ЗапросSQL (SQLServer,Login,Password,txtSQL)   //Функция выборки данных из SQL сервера и передача во временную таблицу 1С
	
	СтрокаСоединения = ("Provider=SQLOLEDB;Driver={SQL Server}; Deleted=No; Data Source = ") + SQLServer + 
					(";UID=") + Login + ("; PWD=") + Password + (";");
		              
    Подключение = Новый ComObject("ADODB.Connection");
	Подключение.ConnectionString=СтрокаСоединения;
	// Подключение.Mode =  3 ;
		Попытка
			Подключение.Open(СтрокаСоединения);
			Состояние ("Подключение к серверу SQL...");
		Исключение
			Сообщить(ОписаниеОшибки());
			Возврат Ложь;
		КонецПопытки;
		
	
	СоединениеSQL = Новый COMObject("ADODB.Command");
	СоединениеSQL.ActiveConnection = Подключение;
	СоединениеSQL.CommandType =  4 ; 
	СоединениеSQL.NamedParameters = True;
	//СоединениеSQL.CommandText = ("sp_executesql");  	// Запуск для select 
	СоединениеSQL.CommandText = (txtSQL[ 0 ][ 0 ]);  		// Имя хранимой процедуры на сервере 	
		
	Для i =  1  По txtSQL.Количество()- 1  Цикл  			// Заполняем запрос SQL переменными
		//Сообщить (txtSQL[i][ 0 ]+" "+txtSQL[i][ 1 ]+ " "+ txtSQL[i][ 2 ]+" "+txtSQL[i][ 3 ]+ " "+ txtSQL[i][ 4 ]);  // Тестовая срока
		СоединениеSQL.Parameters.Append(СоединениеSQL.CreateParameter(txtSQL[i][ 0 ],txtSQL[i][ 1 ],txtSQL[i][ 2 ],txtSQL[i][ 3 ],txtSQL[i][ 4 ])); 
	КонецЦикла;
		
	Состояние ("Выполнение запроса SQL...");
	ЗаписиSQL = Новый ComObject("ADODB.RecordSet");
	ЗаписиSQL = СоединениеSQL.Execute();
				
	Таблица = Новый ТаблицаЗначений;
	Состояние ("Заполнение временной таблицы...");
		
	Для НомерСтолбца =  0  По ЗаписиSQL.Fields.Count- 1  Цикл 		//Создание и добавление колонок во временную таблицу
		ИмяСтолбца =ЗаписиSQL.Fields.Item(НомерСтолбца).Name; 
		Таблица.Колонки.Добавить(ИмяСтолбца);
		//Сообщить(ИмяСтолбца);
	КонецЦикла;
	
	Если ЗаписиSQL.EOF = Ложь Тогда
		
		Пока ЗаписиSQL.EOF  =  0  Цикл								// Заполнение созданной таблицы
		
			НоваяСтрока =  Таблица.Добавить();
			Для НомерСтолбца =  0  По ЗаписиSQL.Fields.Count- 1  Цикл
				НоваяСтрока.Установить(НомерСтолбца,ЗаписиSQL.Fields(НомерСтолбца).Value);
				//Сообщить ("Test " + ЗаписиSQL.Fields(ИмяСтолбца).Value + ИмяСтолбца);
			КонецЦикла;
								
			ЗаписиSQL.MoveNext();
		КонецЦикла;
		
		Состояние ("Закрываем соединение с SQL...");
	    ЗаписиSQL.Close();
		Подключение.Close();
	   	Возврат Таблица;   // Возврат таблицы значений запроса SQL

	Иначе
		
		Сообщить ("Нет Данных для обработки....");
		Состояние ("Закрываем соединение с SQL...");
	    ЗаписиSQL.Close();
		Подключение.Close();
        Возврат Ложь;
		
	КонецЕсли;
			
КонецФункции


И она работает....
Параметры для передачи в хранимую процедуру, необходимы!!!

Осталась одна проблема.
Хранимая процедура выводит 2 таблицы, как мне получить данные из этих таблиц.
Как я понимаю мне необходимо Recordset установить в нужную таблицу и провести цикл?
...
Рейтинг: 0 / 0
Выпольнить запрос SQL из 1С
    #35877820
VladimirKr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kharkov_max...В данных момент, как я понимаю, я процедуру запускаю, но в нее не передаются параметры, поэтому у меня наименования столбцов есть, а данных нет.

Раз наименования столбцов есть - значит параметры передаются, но, возможно, не те.

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

(в примере с sp_execute дата передается как varchar(8), а уж sp_execute сам преобразует дату в datetime).

Объявите даты-параметры как varchar(8) в хранимой процедуре - при сравнении с датами строка yyyymmdd преобразуется к дате неяво, и передавайте даты как строки (см пример с sp_execute)
Если ошибки - посмотрите профайлером, что передается при вызове execute.
...
Рейтинг: 0 / 0
Выпольнить запрос SQL из 1С
    #35878184
Егоров Александр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kharkov_maxИ она работает....
Параметры для передачи в хранимую процедуру, необходимы!!!

Ну, главное чтобы работало. :)
По поводу параметров. Они нужны когда вам нужно быстро и много раз выполнять один и тот же запрос с разными условиями. Использование параметров позволяет в этом случае более эффективно использовать ресурсы сервера. У вас же - открывается соединение, исполняется единственный раз запрос и соединение закрывается. Использование параметризированных запросов теряет всякий смысл. А раз так - много проще сфоримровать готовую строку запроса внутри 1С.

kharkov_max
Осталась одна проблема.
Хранимая процедура выводит 2 таблицы, как мне получить данные из этих таблиц.
Как я понимаю мне необходимо Recordset установить в нужную таблицу и провести цикл?

ну ведь уже было. Я так понимаю вам надо как-то так:
Код: plaintext
...\nПока ЗаписиSQL.EOF= 0  Цикл \n  // заполнение первой таблицы\nКонецЦикла;\n\nЗаписиSQL=ЗаписиSQL.NextRecordset;\n\nПока ЗаписиSQL.EOF= 0  Цикл \n  // заполнение второй таблицы\nКонецЦикла;\n...
...
Рейтинг: 0 / 0
Выпольнить запрос SQL из 1С
    #35878191
kharkov_max
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Егоров Александрkharkov_maxИ она работает....

[quot kharkov_max]
Осталась одна проблема.
Хранимая процедура выводит 2 таблицы, как мне получить данные из этих таблиц.
Как я понимаю мне необходимо Recordset установить в нужную таблицу и провести цикл?

ну ведь уже было. Я так понимаю вам надо как-то так:
Код: plaintext
...\nПока ЗаписиSQL.EOF= 0  Цикл \n  // заполнение первой таблицы\nКонецЦикла;\n\nЗаписиSQL=ЗаписиSQL.NextRecordset;\n\nПока ЗаписиSQL.EOF= 0  Цикл \n  // заполнение второй таблицы\nКонецЦикла;\n...


Такое
ЗаписиSQL=ЗаписиSQL.NextRecordset;
Не понимает, ошибка ....

Если кто знает как, подскажите пожалуйста.
...
Рейтинг: 0 / 0
Выпольнить запрос SQL из 1С
    #35878202
Егоров Александр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kharkov_max,

А ошибку не прведете? в васике используется
Код: plaintext
 set  objRs=objRs.NextRecordset
...
Рейтинг: 0 / 0
Выпольнить запрос SQL из 1С
    #35878210
Егоров Александр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kharkov_max,

И еще... вам бы это в отдельную процедуру выделить, например:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
Процедура ПолучитьТЗИзРекордсета(ЗаписиSQL, Таб)
  Состояние ("Заполнение временной таблицы...");

  Для НомерСтолбца =  0  По ЗаписиSQL.Fields.Count- 1  Цикл
    ИмяСтолбца =ЗаписиSQL.Fields.Item(НомерСтолбца).Name; 
    Таб.Колонки.Добавить(ИмяСтолбца);
  КонецЦикла;
	
  Пока ЗаписиSQL.EOF  =  0  Цикл		
    НоваяСтрока =  Таб.Добавить();
    Для НомерСтолбца =  0  По ЗаписиSQL.Fields.Count- 1  Цикл
      НоваяСтрока.Установить(НомерСтолбца,ЗаписиSQL.Fields(НомерСтолбца).Value);
    КонецЦикла;
    ЗаписиSQL.MoveNext();
  КонецЦикла;
КонецПроцедуры
Тогда в коде будет красивее :)
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
Функция ЗапросSQL
...
  ЗаписиSQL = СоединениеSQL.Execute();

  ТЗ1 = Новый Таблица;
  ПолучитьТЗИзРекордсета(ЗаписиSQL, ТЗ1);

  ЗаписиSQL=ЗаписиSQL.NextRecordset;

  ТЗ2 = Новый Таблица;
  ПолучитьТЗИзРекордсета(ЗаписиSQL, ТЗ2);
...
...
Рейтинг: 0 / 0
Выпольнить запрос SQL из 1С
    #35878217
kharkov_max
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вроде вот так
ЗаписиSQL = ЗаписиSQL.NextRecordset();

Работает ))

Буду ковырять дальше.
...
Рейтинг: 0 / 0
Выпольнить запрос SQL из 1С
    #35878218
Егоров Александр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kharkov_max,

Ой! Извините, на работе запарка.... скобки забыл! Это же метод, а не свойство! на скобки только васику наплевать... :)
Код: plaintext
ЗаписиSQL.NextRecordset () ;
...
Рейтинг: 0 / 0
Выпольнить запрос SQL из 1С
    #35878219
kharkov_max
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Егоров Александрkharkov_max,

И еще... вам бы это в отдельную процедуру выделить, например:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
Процедура ПолучитьТЗИзРекордсета(ЗаписиSQL, Таб)
  Состояние ("Заполнение временной таблицы...");

  Для НомерСтолбца =  0  По ЗаписиSQL.Fields.Count- 1  Цикл
    ИмяСтолбца =ЗаписиSQL.Fields.Item(НомерСтолбца).Name; 
    Таб.Колонки.Добавить(ИмяСтолбца);
  КонецЦикла;
	
  Пока ЗаписиSQL.EOF  =  0  Цикл		
    НоваяСтрока =  Таб.Добавить();
    Для НомерСтолбца =  0  По ЗаписиSQL.Fields.Count- 1  Цикл
      НоваяСтрока.Установить(НомерСтолбца,ЗаписиSQL.Fields(НомерСтолбца).Value);
    КонецЦикла;
    ЗаписиSQL.MoveNext();
  КонецЦикла;
КонецПроцедуры
Тогда в коде будет красивее :)
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
Функция ЗапросSQL
...
  ЗаписиSQL = СоединениеSQL.Execute();

  ТЗ1 = Новый Таблица;
  ПолучитьТЗИзРекордсета(ЗаписиSQL, ТЗ1);

  ЗаписиSQL=ЗаписиSQL.NextRecordset;

  ТЗ2 = Новый Таблица;
  ПолучитьТЗИзРекордсета(ЗаписиSQL, ТЗ2);
...


Где то так и хочу сделать ))
...
Рейтинг: 0 / 0
Выпольнить запрос SQL из 1С
    #35878221
kharkov_max
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
В итоге хочу получить на выходе функции массив таблиц

Т.е. если в другой хранимке их будет 5
то получится Т1,Т2,Т3 .....
...
Рейтинг: 0 / 0
Выпольнить запрос SQL из 1С
    #35878223
Егоров Александр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kharkov_max,

Ну можно результат функции возвращать как СписокЗначений, или как оно сейчас в 8-ке называется? :)
...
Рейтинг: 0 / 0
Выпольнить запрос SQL из 1С
    #35878396
kharkov_max
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Продолжая тему...
А как узнать количесво мной получаемых объектов Recordset ?

Нужно для цикла по объектам ...
...
Рейтинг: 0 / 0
Выпольнить запрос SQL из 1С
    #35878672
kharkov_max
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Не уже ли никто не знает?
...
Рейтинг: 0 / 0
Выпольнить запрос SQL из 1С
    #35878691
Егоров Александр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kharkov_max,

в АДО вроде нет счетчика рекордсетов, но могу и ошибаться...
попробуйте так (правда код семерки):
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
СписокТаблиц=СоздатьОбъект("СписокЗначений");
...
ЗаписиSQL = СоединениеSQL.Execute();
Пока ПустоеЗначение(ЗаписиSQL)= 0  Цикл
  // в рекордсете что-то есть
  тз=СоздатьОбъект("Таблица");
  ПолучитьТЗИзРекордсета(ЗаписиSQL, тз);
  СписокТаблиц.ДобавитьЗначение(тз);

  ЗаписиSQL=ЗаписиSQL.NextRecordset;
КонецЦикла
...
...
Рейтинг: 0 / 0
Выпольнить запрос SQL из 1С
    #35878846
kharkov_max
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Пока ПустоеЗначение(ЗаписиSQL)=0 Цикл
Сообщить (ЗаписиSQL.Properties.Count);
ЗаписиSQL=ЗаписиSQL.NextRecordset();
КонецЦикла;

Так не работает, буду искать дальше..
...
Рейтинг: 0 / 0
Выпольнить запрос SQL из 1С
    #35878873
VladimirKr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kharkov_max,

счетчиков NextRecordset нет.
поэтому нужно оборачивать вызов NextRecordset в "попытка;исключение;КонецПопытки"
...
Рейтинг: 0 / 0
Выпольнить запрос SQL из 1С
    #35878888
VladimirKr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да, и не надо этого - Записи.Close().
...
Рейтинг: 0 / 0
Выпольнить запрос SQL из 1С
    #35878912
kharkov_max
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Мне цикл нужен

Как это дело реализовать ?
Может цикл с выходом по ошибке ?
...
Рейтинг: 0 / 0
Выпольнить запрос SQL из 1С
    #35879047
kharkov_max
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Сделал..
вроде работает ...
...
Рейтинг: 0 / 0
Выпольнить запрос SQL из 1С
    #35879115
kharkov_max
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
После долгих вояний вот что получилось.
Функция универсальна, может кому нить пригодится.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
Функция ЗапросSQL (SQLServer,Login,Password,txtSQL)   //Функция выборки данных из SQL сервера и передача в массив временных таблиц 1С
	СтрокаСоединения = ("Provider=SQLOLEDB;Driver={SQL Server}; Deleted=No; Data Source = ") + SQLServer + 
					(";UID=") + Login + ("; PWD=") + Password + (";");
	Подключение = Новый ComObject("ADODB.Connection");
	Подключение.ConnectionString=СтрокаСоединения;
	// Подключение.Mode =  3 ;
		Попытка
			Подключение.Open(СтрокаСоединения);
			Состояние ("Подключение к серверу SQL...");
		Исключение
			Сообщить(ОписаниеОшибки());
			Возврат Ложь;
		КонецПопытки;
	СоединениеSQL = Новый COMObject("ADODB.Command");
	СоединениеSQL.ActiveConnection = Подключение;
	СоединениеSQL.CommandType =  4 ; 
	СоединениеSQL.NamedParameters = True;
	//СоединениеSQL.CommandText = ("sp_executesql");  					// Запуск для select 
	СоединениеSQL.CommandText = (txtSQL[ 0 ][ 0 ]);  						// Имя хранимой процедуры на сервере 	
	Для i =  1  По txtSQL.Количество()- 1  Цикл  							// Заполняем запрос SQL переменными
		//Сообщить (txtSQL[i][ 0 ]+" "+txtSQL[i][ 1 ]+ " "+ txtSQL[i][ 2 ]+" "+txtSQL[i][ 3 ]+ " "+ txtSQL[i][ 4 ]);  // Тестовая срока
		СоединениеSQL.Parameters.Append(СоединениеSQL.CreateParameter(txtSQL[i][ 0 ],txtSQL[i][ 1 ],txtSQL[i][ 2 ],txtSQL[i][ 3 ],txtSQL[i][ 4 ])); 
	КонецЦикла;
	Состояние ("Выполнение запроса SQL...");
	ЗаписиSQL = Новый ComObject("ADODB.RecordSet");
	ЗаписиSQL = СоединениеSQL.Execute();
	
	k= 0 ;
	МассТаб = Новый Массив;
	Пока k= 0  Цикл
	// 	Сообщить (ЗаписиSQL.Properties.Count);  						// Тестовая строка
				
			Таблица = Новый ТаблицаЗначений;
			Состояние ("Заполнение временной таблицы...");
	
			Для НомерСтолбца =  0  По ЗаписиSQL.Fields.Count- 1  Цикл 		//Создание и добавление колонок во временную таблицу
				
				ИмяСтолбца =ЗаписиSQL.Fields.Item(НомерСтолбца).Name; 
				Таблица.Колонки.Добавить(ИмяСтолбца);
				//Сообщить(ИмяСтолбца);     							// Тестовая строка
				
			КонецЦикла;
			
			Пока ЗаписиSQL.EOF  =  0  Цикл								// Заполнение созданной таблицы
				НоваяСтрока =  Таблица.Добавить();
				Для НомерСтолбца =  0  По ЗаписиSQL.Fields.Count- 1  Цикл
					НоваяСтрока.Установить(НомерСтолбца,ЗаписиSQL.Fields(НомерСтолбца).Value);
					//Сообщить ("Test " + ЗаписиSQL.Fields(НомерСтолбца).Value +  ЗаписиSQL.Fields(НомерСтолбца).Name);
				КонецЦикла;
				ЗаписиSQL.MoveNext();
			КонецЦикла;
				    				
		МассТаб.Добавить(Таблица);	
		ЗаписиSQL=ЗаписиSQL.NextRecordset();							 // Выбираем следующий select
		Попытка 
			i = ЗаписиSQL.Properties.Count; 							 // Проверка на доступность объекта RecordSet.
		Исключение 
		k =  1 
		КонецПопытки;
		
	КонецЦикла;
			
	Состояние ("Закрываем соединение с SQL...");
	Подключение.Close();
	Возврат МассТаб;  													 // Возврат массива таблиц значений запроса SQL
	
	КонецФункции

Данная функция использует переменные SQL запроса которые описываются тут:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
Функция СтрокаЗапросаSQL (НомерЗапроса)  				// Функция возвращает текст запроса SQL
	Если НомерЗапроса =  1  Тогда	// Данные для ПН
		    					
			ИмяХранимойПроцедуры = "*.dbo.ПН";
						
			Масс = Новый Массив( 4 , 5 ); 					 //Массив переменных для SQL запроса, вторая размерность всегда равна  5 
			Масс[ 0 ][ 0 ]=ИмяХранимойПроцедуры;Масс[ 0 ][ 1 ]="";Масс[ 0 ][ 2 ]="";Масс[ 0 ][ 3 ]="";Масс[ 0 ][ 4 ]=""; 							// В стоке можно добавить еще  3  параметра				
			Масс[ 1 ][ 0 ]="@ДатаПриходС";Масс[ 1 ][ 1 ]= 200 ;Масс[ 1 ][ 2 ]= 1 ;Масс[ 1 ][ 3 ]= 8 ;Масс[ 1 ][ 4 ]=Формат(НачалоПериода,"ДФ=ггггММдд");  // Переменные запроса SQL
			Масс[ 2 ][ 0 ]="@ДатаПриходПо";Масс[ 2 ][ 1 ]= 200 ;Масс[ 2 ][ 2 ]= 1 ;Масс[ 2 ][ 3 ]= 8 ;Масс[ 2 ][ 4 ]=Формат(КонецПериода,"ДФ=ггггММдд");  //
			Масс[ 3 ][ 0 ]="@Поставщик";Масс[ 3 ][ 1 ]= 3 ;Масс[ 3 ][ 2 ]= 1 ;Масс[ 3 ][ 3 ]= 5000 ;Масс[ 3 ][ 4 ]= 4 ;                                     //
						
		Возврат Масс;
					
	Иначе
		
		Возврат False;
		
	КонецЕсли;
	
КонецФункции

Возможно кривовато выглядит, но работает.
Всем спасибо, думаю тему можно закрывать...
...
Рейтинг: 0 / 0
Выпольнить запрос SQL из 1С
    #35879251
tester2000
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Апну тему. В строке поиска в виндах вбейте *ADO*.chm (лениво полный путь приводить) и получите полное руководство по методам и свойствам ADO. Это снимет многие ваши вопросы в дальнейшем.
...
Рейтинг: 0 / 0
Выпольнить запрос SQL из 1С
    #36368848
xKIA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Прошу прощения, за то что сюда вклиниваюсь, но у меня проблема с RecordSet.
Ситуация такая, надо после получения данных запроса вывести ProgressBar в 1С в последующей работе с результатами запроса, соотвественно, я добавил в запрос select @@ROWCOUNT и на выходе у меня получилось два RecordSet. Проблема в том, что данные из второго мне нужны до начала обработки результатов первого. И вот такая вещь, не срабатывает:
Код: plaintext
1.
2.
3.
ЭлементыФормы.Индикатор.МаксимальноеЗначение=ЗаписиSQL.NextRecordset().Fields( 0 ).Value;
Пока ЗаписиSQL.EOF= 0  Цикл
...
То есть, я же не делаю ЗаписиSQL=ЗаписиSQL.NextRecordset(), но тем не менее, при комментировании первой строчки этого фрагмента работоспособность восстанавливается, то есть, что-то не то. подозреваю, что происходит-таки переключение на следующий recordSet, тогда вопрос -как вернуть взад или на входе получить recordSet'ы наоборот, ни или хотя бы что-то вроде: Recordset(1).Fields(0).value.
...
Рейтинг: 0 / 0
25 сообщений из 78, страница 3 из 4
Форумы / [игнор отключен] [закрыт для гостей] / Выпольнить запрос SQL из 1С
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]