Имя: Пароль:
1C
1C 7.7
v7: ADO
0 ShadowCoder
 
17.12.13
16:58
Ребята, доброго времени суток ! Столкнулся с надобностью изучения прямого обращения к таблицам через адо, до этого в 1ске только писал овощные отчетики и типовые доработки, максимум используя внутренний язык. Сейчас изучаю этот вопрос, и вот что хочу спросить: почему он мне из набора записей не возвращает нифига ? Вот текст, текст, вроде, простейший. А Value1 - пустое ... :( Направьтие, пожалуйста. Буду так же очень благодарен по методам каким по изучению этого вопроса. Вот код:

//*******************************************
Процедура Сформировать()
Соединение = СоздатьОбъект("ADODB.Connection");
ConnectionString = "driver={SQL Server}; server=абк-ПК; uid=1; pwd= ; Database = ";
Соединение.ConnectionTimeOut =600;
Соединение.CursorLocation = 3;
Попытка
    Соединение.Open(ConnectionString);  
Исключение
    Предупреждение("!");
КонецПопытки;

//сделаем через команду
Cmd = СоздатьОбъект("ADODB.Command");
Cmd.ActiveConnection = Соединение;

Cmd.CommandText = "SELECT * FROM SC16";

Rs = CreateObject("ADODB.RecordSet");
Rs = Cmd.Execute;

Rs.MoveFirst();                
Пока Rs.EOF() = 0 do  
  Value1 = Rs.Fields("NAME").Value;  
  Сообщить(Value1);
  Rs.MoveNext();  
КонецЦикла;

RS.Close();


КонецПроцедуры
1 sapphire
 
17.12.13
17:02
Пока Rs.EOF() = 0 do  
  Value1 = Rs.Fields("DESCR").Value;  
  Сообщить(Value1);
  Rs.MoveNext();  
КонецЦикла;
2 sapphire
 
17.12.13
17:03
(0) Там нет такого поля, если напрямую читаешь таблицы.
+ если для 77, то, ИМХО, используй 1С++ и не мучайся.
3 ShadowCoder
 
17.12.13
17:07
(2) Спасибо большое ! Сработало !:)

Да с 1с++ проще, я вообще не вижу целесообразности использования такого метода. Но, увы, каприз куратора службы айти .. Не я придумываю. Не подскажешь, где вообще про адо почитать ?
4 sapphire
 
17.12.13
17:18
5 sapphire
 
17.12.13
17:19
(3) Куратору пинка под зад, 1cpp на сервер.
6 ShadowCoder
 
17.12.13
17:23
(5) На прошло работе был 1спп, все отлично работало, у меня даже была консолька по написанию запросов. И все были счастливы. Ясно, спасибо еще раз большое :)
7 ShadowCoder
 
17.12.13
17:25
(5) И еще просто вопросик: а как обратиться, допустим, в этом обходе к реквизиту справочника ? сц16 - это справочник сотрудники, и обратиться, например, к инн ?
8 Ёпрст
 
17.12.13
17:27
(7) ИНН в типовой тис, вообще не реквизит справочника клиентосов.. а реквизит справочника Юр или Физ лиц..
:)
9 Ёпрст
 
17.12.13
17:27
у тя как ?
:)
10 ShadowCoder
 
17.12.13
17:27
(7) Это зряплата и кадры.
11 sapphire
 
17.12.13
17:34
(7) парсить dds надо
12 ShadowCoder
 
17.12.13
17:34
(9) Мне понять суть, как обратиться к реквизиту элемента, не важно, инн, или нет.
13 sapphire
 
17.12.13
17:34
говорю же, через 1сpp проще все намного
14 ShadowCoder
 
17.12.13
17:35
(11) 1cv7.dd, искать как обозван ИНН, допустим, и к нему обращаться, как Fields("INNNAME") ?
15 Ёпрст
 
17.12.13
17:36
(12)
ну так

select spr.id,spr.descr,spr.sp12345,spr.sp123 from sc16 as spr
16 Ёпрст
 
17.12.13
17:37
твой инн, это sp123, к примеру
17 sapphire
 
17.12.13
17:38
(14) у SQL баз файл называется 1cv7.dds
1cv7.dd - для баз в dbf
18 ShadowCoder
 
17.12.13
17:39
(16) Это понятно, что выбрать так. А из набора записей как получить ?
19 sapphire
 
17.12.13
17:39
(14) Короче, в 1с77 имена таблиц и полей называются иначе нежели в конфигураторе. Все имена хранятся в словаре данных (dd/dds)
20 sapphire
 
17.12.13
17:40
(18) Получать значение полей из объекта RecordSet
21 ShadowCoder
 
17.12.13
17:41
(20) (19) Ага, понял, нашел, переписал. Одно осталось непонятно: как будет именоваться это поле ?
22 sapphire
 
17.12.13
17:41
аналогично (1), можно, конечно еще и прочитать имена полей, только что это даст?
23 ShadowCoder
 
17.12.13
17:42
Спасибо за терпение при объяснении :) Понимаю, что тупости спрашиваю.
Я вообще не 1с-ник, если честно.
24 sapphire
 
17.12.13
17:42
(21) Посмотри в dds, всё станет ясно.
25 sapphire
 
17.12.13
17:42
(23) Не играет особой роли.
26 ShadowCoder
 
17.12.13
17:42
(22) Все, понял, иду курить ! Спасибо за объяснения !
27 Serginio1
 
17.12.13
17:45
Я иногда что бы не загружать MD шник при соединении с другой базой пишу напрямую.
Для получения текста запроса используй отладка(1)

http://www.1cpp.ru/docum/icpp/html/ODBC.html#debug

А вообще вот главная страница http://www.1cpp.ru/index.php/Main
28 Serginio1
 
17.12.13
17:48
29 ShadowCoder
 
17.12.13
17:51
(28) Данке ! Но это немного не то, но спасибо :)
30 Serginio1
 
17.12.13
17:51
31 Serginio1
 
17.12.13
17:54
(29) Ты из 1С++ используя например qryMaker быстро слепить запрос, с помощью отладка(1) получить запрос и использовать его в ADO.
32 Serginio1
 
17.12.13
17:58
Выбрать все элементы спр. Номенклатура, у которых реквизит ТипНоменклатуры = Перечисление.ТипыНоменклатуры.Товар
RS = СоздатьОбъект("ODBCRecordset");
RS.УстБД1С();
ТекстЗапроса = "
|SELECT
|    Спр.ID as [Элемент $Справочник.Номенклатура]
|FROM
|    $Справочник.Номенклатура as Спр
|WHERE
|    $Спр.ТипНоменклатуры = :Товар";

RS.УстановитьТекстовыйПараметр("Товар", Перечисление.ТипыНоменклатуры.Товар);
ТЗ = RS.ВыполнитьИнструкцию(ТекстЗапроса);
ТЗ.ВыбратьСтроку();



Что бы посмотреть, какой же запрос в итоге уйдет на сервер у объекта ODBCRecordset существует метод Отладка(Вкл).

RS.Отладка(1);
ТЗ = RS.ВыполнитьИнструкцию(Текст);


В окно сообщений выведется текст

SELECT
    Спр.ID as [Элемент $Справочник.Номенклатура]
FROM
    sc433 as Спр
WHERE
    Спр.SP3456 = ‘   C3A ‘
33 ShadowCoder
 
17.12.13
18:13
(32) Спасибо большое ! Вот это вообще по делу !
34 Serginio1
 
17.12.13
18:25
(33) Просто это наглядный пример использования того, что я тебе выше написал.
35 varelchik
 
17.12.13
18:59
(34) Только действительно зачем городить огород?
на текущий момент 1С++ не требует регистрации в реестре.
Есно нет проблем с ее использованием.
Кажуть же бери и не заморачивай себе голову.