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

sql запрос 1с 7.7

Автор RomanKatPro, 04 мар 2015, 16:33

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

RomanKatPro

Платформа 1с 7.7 (7.70.025) Конфигурация не типовая Логистика.
Добрый день!
Необходимо получить значения Шир.Кор, ВысКор, ГлбКор из подчиненного спр.Единицы.

ТекстЗапроса="Select СпрТов.Code as Артикул,Товар as [Товар $Справочник.Товары], СпрЕд.ВысКор as Высота, Спред.ГлбКор as Глубина, СпрЕд.ШирКор,as Ширина,
|КоличествоОстаток as Количество from $РегистрОстатки.РазмещениеТовара(:КонДата~,,Кладовая=:Кладовая,Товар,Количество) as Рег
|left join $Справочник.Товары as СпрТов on СпрТов.id=Рег.Товар
|left join $Справочник.Единицы as СпрЕд on СпрЕд.PARENTEXT=Рег.Товар
|order by code
|";


изначально запрос выглядел вот так:
ТекстЗапроса="Select СпрТов.Code as Артикул,Товар as [Товар $Справочник.Товары],
      |КоличествоОстаток as Количество from $РегистрОстатки.РазмещениеТовара(:КонДата~,,Кладовая=:Кладовая,Товар,Количество) as Рег
      |left join $Справочник.Товары as СпрТов on СпрТов.id=Рег.Товар
      |order by code
      |";
      
при вы полнении запроса выдает    
{P:\ОБРАБОТКИ\ВВОД ЯЧЕЕК ОДЕЖДЫ.ERT(208)}: State 42000, native 156, message [Microsoft][ODBC SQL Server Driver][SQL Server]Incorrect syntax near the keyword 'as'.
p.s. заранее спасибо      

has

1С++?
Товар as [Товар $Справочник.Товары]
Откуда это поле должно браться? Таблицу то надо указывать как минимум.
СпрЕд.ВысКор as Высота
Не стандартные реквизиты должны быть через $, т.е. $СпрЕд.ВысКор as Высота
Вообще почитайте литературу по 1с++.

RomanKatPro

Прочитал, обдумал и решил. Спасибо.   
ТекстЗапроса="Select СпрТов.Code as Артикул,Товар as [Товар $Справочник.Товары],
      |isnull($Единицы.ВысКор,0) Высота,
      |isnull($Единицы.ГлбКор,0) Глубина,
      |isnull($Единицы.ШИрКор,0) Ширина,
      |КоличествоОстаток as Количество from $РегистрОстатки.РазмещениеТовара(:КонДата~,,Кладовая=:Кладовая,Товар,Количество) as Рег
      |left join $Справочник.Товары as СпрТов on СпрТов.id=Рег.Товар
      |left join $Справочник.Единицы Единицы on Единицы.PARENTEXT=Рег.Товар
      |order by СпрТов.Code
      |";

BotMan

не являюсь программистом 1с.
подскажите как отправить запрос из 1с 7.7 в Оракл и потом отобразить результат.

Например внешняя обработка, вводим артикул жмыхаем кнопку сформировать и получаем его название!

понятия сильного в этом не имею. есть строка подключения ("DRIVER={Microsoft ODBC for Oracle};UID=***;PWD=***;SERVER=******")

запрос будет такого вида Select article, name from mybase where article = &article
=======================================================================
заранее спасибо за советы!


Herby


Connection = СоздатьОбъект("ADODB.Connection");
ConnectionString = "Provider=OraOLEDB.Oracle;Data Source=MyOracleDB;User Id=myUsername;Password=myPassword;CacheType=File";
Connection.ConnectionTimeOut = Таймаут;
Connection.Open(ConnectionString); 

ADODBCommand = СоздатьОбъект("ADODB.Command");
ADODBCommand.ActiveConnection = Connection;
ADODBCommand.CommandText      = ТекстЗапроса;

Рекордсет = СоздатьОбъект("ADODB.RecordSet");
Попытка
  Состояние("Выполнение запроса...");
  Рекордсет = ADODBCommand.Execute;
Исключение
   Сообщить(ОписаниеОшибки());
   Возврат;
КонецПопытки;



BotMan

а как вывести результат ?

сообщить (????);

Herby


Пока Рекордсет.EOF() = 0 Цикл
  Сообщить(Рекордсет.Fields("<Здесь указываешь имя колонки из селекта>").Value);
КонецЦикла;


в вашем случае:

Пока Рекордсет.EOF() = 0 Цикл
  Сообщить(Рекордсет.Fields("article").Value);
КонецЦикла;



BotMan

спасибо, все получилось! :zebzdr:
Добавлено: 10 мар 2015, 16:31


А как передать в запрос переменную из формы, например?
Where article = :article(переменная)
и перед выполнением запроса я ввожу артикул и запрос выполняется с этим значением. :nhsrm:

Herby

ну если Артикул это строковая переменная, то разве не судьба сразу в текст запроса его добавлять? ну к примеру:

ТекстЗапроса = Шаблон("тра-ля-ля Where article = '[Артикул]'");
// где Артикул это переменная или идентификатор реквизита формы, в котором
// хранится значение артикула


А передавать в параметре конечно можно, вот приблизительный пример:


ADODBCommand.Parameters.Append(ADODBCommand.CreateParameter("@article"   ,129,,,Артикул));
// и тогда в тексте запроса надо будет добавить:
|DECLARE @article varchar(9)
|SET @article = ?
|тра-ля-ля
|WHERE article =@article
// ну суть должна быть понятна, если что-то поподробней, то читайте справку в инете


BotMan

Где-то затык. в Базе артикул имеет тип Varchar2[50], выполняется с ошибкой.... :dfbsdfbsdf:
 
Соединение=СоздатьОбъект("ADODB.Connection");
Соединение.ConnectionString = "DRIVER={Microsoft ODBC for Oracle};UID=***;PWD=***;SERVER=mybase";
Соединение.ConnectionTimeout = 15;
Соединение.CursorLocation= 3;
артикул = 00022;
ТекстЗапроса = Шаблон("select name from mytable where article = '[Артикул]'");
Попытка
    Соединение.Open(Соединение.ConnectionString);
        Сообщить("Запрос...");
    Исключение       
    Сообщить("Невозможно установить соединение-"+ОписаниеОшибки());
КонецПопытки; 
       НаборЗаписей = Соединение.Execute(ТекстЗапроса);                       

НаборЗаписей.MoveFirst();

Пока НаборЗаписей.EOF()=0  цикл       
Сообщить("Товар: " + НаборЗаписей.Fields("name").Value);
НаборЗаписей.MoveNext();       
   
КонецЦикла;



       НаборЗаписей.Close();
       


Соединение успешно установлено.
НаборЗаписей.MoveFirst();
{C:\*****\******\DESKTOP\blabla.ERT(30)}: ADODB.Recordset: BOF или EOF имеет значение True, либо текущая запись удалена. Для выполняемой операции требуется текущая запись.

Теги:

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

Рейтинг@Mail.ru

Поиск