Имя: Пароль:
1C
1С v8
Внешние источники данных, можно ли вытянуть данные запросом?
, , ,
0 Ёхан Палыч
 
16.05.12
05:46
8.2.15. Внешние источники данных. Можно ли вытянуть данные запросом, состоящим из нескольких таблиц? Пока вижу только возможность тягать по одной таблице.
1 Ёхан Палыч
 
16.05.12
05:59
интересует oracle
2 IamAlexy
 
16.05.12
06:18
тянуть из вьюхи ?
3 Ёхан Палыч
 
16.05.12
06:21
(2) да.
а средствами 1с создать запрос не получится, я так понял.
4 Живой Ископаемый
 
16.05.12
06:21
непонятно на каком уровне ограничение самого ВИДа или драйвера ОДБС. но только одну.
Еще там LIKE регистрозависим.
5 Ёхан Палыч
 
16.05.12
06:24
ок, спасибо
6 Ёхан Палыч
 
16.05.12
10:58
а передать параметр в функцию, которая учавствует в оракл-запросе во вьюшке наверное нельзя, так?
7 Rizhij_Nikitos
 
16.05.12
11:00
Можно тока нужно писать SQL запрос и использовать com объекте. Как тебе мо
8 Rizhij_Nikitos
 
16.05.12
11:00
Как тебе мой вариант (0)
9 Ёхан Палыч
 
16.05.12
11:02
(7) об этом и думаю. через ADO, наверное надо
10 Rizhij_Nikitos
 
16.05.12
11:14
Скинуть пример я как тащил данные с помощью ADO?
11 Ёхан Палыч
 
16.05.12
11:18
(10) скинь пожалйста, буду очень признателен
12 Ёхан Палыч
 
16.05.12
11:25
(10) не пропадай
13 Rizhij_Nikitos
 
16.05.12
11:27
ТЗ = Новый ТаблицаЗначений;
   ТЗ.Колонки.Добавить("НомерИзВне",ОписаниеТиповС);                            //1
   ТЗ.Колонки.Добавить("КодФилиала",ОписаниеТиповЧ1);                            //2
   ТЗ.Колонки.Добавить("НазваниеФилиала",ОписаниеТиповС);                      //3
   ТЗ.Колонки.Добавить("ДатаДанных",ОписаниеТиповД);                            //4
   
   ТЗ.Колонки.Добавить("РеализацияКомиссия",ОписаниеТиповЧ);                  //5
   ТЗ.Колонки.Добавить("РеализацияКомиссияНомер",ОписаниеТиповЧ2);              //6
   
   ТЗ.Колонки.Добавить("РеализацияСкупка",ОписаниеТиповЧ);                    //7
   ТЗ.Колонки.Добавить("РеализацияСкупкаНомер",ОписаниеТиповЧ3);                //8
   
   ТЗ.Колонки.Добавить("ВозвратСсудыЛомбарду",ОписаниеТиповЧ);                //9
   ТЗ.Колонки.Добавить("ВозвратСсудыЛомбардуНомер",ОписаниеТиповЧ3);            //10
   
   ТЗ.Колонки.Добавить("ПроцентыПоЛомбарду",ОписаниеТиповЧ);                  //11
   ТЗ.Колонки.Добавить("ПроцентыПоЛомбардуНомер",ОписаниеТиповЧ3);              //12
   
   ТЗ.Колонки.Добавить("ХранениеКомиссионногоТовара",ОписаниеТиповЧ);          //13
   ТЗ.Колонки.Добавить("ХранениеКомиссионногоТовараНомер",ОписаниеТиповЧ3);    //14
   
   ТЗ.Колонки.Добавить("ПолученоИзКассыСобственник",ОписаниеТиповЧ);          //15
   ТЗ.Колонки.Добавить("ПолученоИзКассыСобственникНомер",ОписаниеТиповЧ3);    //16
   
   ТЗ.Колонки.Добавить("ПринятоЗаймов",ОписаниеТиповЧ);                      //17
   ТЗ.Колонки.Добавить("ПринятоЗаймовНомер",ОписаниеТиповЧ3);                  //18
   
   ТЗ.Колонки.Добавить("ВыплатаЗадолженностиКомитентам",ОписаниеТиповЧ);      //19
   ТЗ.Колонки.Добавить("ВыплатаЗадолженностиКомитентамНомер",ОписаниеТиповЧ3);    //20
   
   ТЗ.Колонки.Добавить("Скупка",ОписаниеТиповЧ);                              //21
   ТЗ.Колонки.Добавить("СкупкаНомер",ОписаниеТиповЧ3);                          //22
   
   ТЗ.Колонки.Добавить("ПереданоВкассуСобственник",ОписаниеТиповЧ);            //23
   ТЗ.Колонки.Добавить("ПереданоВкассуСобственникНомер",ОписаниеТиповЧ3);      //24
   
   ТЗ.Колонки.Добавить("ВыданоЗаймов",ОписаниеТиповЧ);                        //25
   ТЗ.Колонки.Добавить("ВыданоЗаймовНомер",ОписаниеТиповЧ3);                    //26
   
   ТЗ.Колонки.Добавить("ВыданоПроцентовПоЗаймам",ОписаниеТиповЧ);              //27
   ТЗ.Колонки.Добавить("ВыданоПроцентовПоЗаймамНомер",ОписаниеТиповЧ3);        //28                                            
   
   ТЗ.Колонки.Добавить("ВыданоСсуд",ОписаниеТиповЧ);                          //29
   ТЗ.Колонки.Добавить("ВыданоСсудНомер",ОписаниеТиповЧ3);                      //30                                
   
   ТЗ.Колонки.Добавить("ОстатокН",ОписаниеТиповЧ);                            //31
   ТЗ.Колонки.Добавить("ОстатокК",ОписаниеТиповЧ);                            //32
   ТЗ.Колонки.Добавить("Возврат",ОписаниеТиповЧ);                              //33
   
   //создание соединения с помощью ADO
   Соединение = Новый COMОбъект("ADODB.Connection");
   //заполнение текущих настроек подключения
   ТекСервер = "MY-PK\SQLEXPRESS";
   ТекБаза = "store_temp";
   //заполнение строки запроса к серверу
   СтрокаКоннекта ="driver={SQL Server};server="+ТекСервер+";Database="+ТекБаза;
   Соединение.ConnectionTimeOut = 6000; //время ожидания для коннекта, если коннект больше данной цифры, то все гг, все указывается мс что ли, 6000=10 мин
       //попытка соединения
   Попытка
       Соединение.Open(СтрокаКоннекта);
   Исключение
       Сообщить("Невозможно установить соединение с базой данных MS SQL! " + ОписаниеОшибки()+"!!!");
       ЗаписатьВФ("Невозможно установить соединение с базой данных MS SQL! "+ ОписаниеОшибки());
       Возврат;
   КонецПопытки;
   // запрос к объекту ADO
   //ЗапросАДО = Новый COMОбъект("ADODB.Command");
   //Попытка
   //    ЗапросАДО.ActiveConnection = Соединение;
   //Исключение
   //    Сообщить("Ошибка при инициализации соединения! " + ОписаниеОшибки());
   //    ЗаписатьВФ("Ошибка при инициализации соединения! " + ОписаниеОшибки());
   //    Возврат;
   //КонецПопытки;
   //запрос на вывод необходимых данных из таблицы    
   //т.к. АДО не понимает тип данных decimal то на стороне сервера преобразуем данные
   //с помощью CAST(имя_поля AS новый_тип_данных) AS новое_имя_поля
   СтрокаЗапроса=
   "select
   |GUID,
   |To1C,
   |filial,  
   |data,
   |CAST(Pr_Kom_Sr AS varchar(20)) AS Pr_Kom_Sr,  
   |N_Pr_Kom_Sr,  
   |CAST(Pr_Real AS varchar(20)) AS Pr_Real,
   |N_Pr_Real,
   |CAST(Pr_Real_Lombard AS varchar(20)) AS Pr_Real_Lombard,  
   |N_Pr_Real_Lombard,
   |CAST(Pr_Real_Lombard_Percent AS varchar(20)) AS Pr_Real_Lombard_Percent,
   |N_Pr_Real_Lombard_Percent,
   |CAST(Pr_hr_kom AS varchar(20)) AS Pr_hr_kom,
   |CAST(Pr_Cash AS varchar(20)) AS Pr_Cash,
   |N_Pr_Cash,
   |CAST(Pr_Credit AS varchar(20)) AS Pr_Credit,
   |N_Pr_Credit,
   |CAST(R_Zad_Kom AS varchar(20)) AS R_Zad_Kom,
   |CAST(R_Skupka AS varchar(20)) AS R_Skupka,
   |N_R_Skupka,
   |CAST(R_Cash AS varchar(20)) AS R_Cash,
   |N_R_Cash,
   |CAST(R_Credit AS varchar(20)) AS R_Credit,
   |N_R_Credit,
   |CAST(R_Credit_Percent AS varchar(20)) AS R_Credit_Percent,
   |N_R_Credit_Percent,
   |CAST(R_Lombard AS varchar(20)) AS R_Lombard,
   |N_R_Lombard,
   |CAST(BeginCashRegister AS varchar(20)) AS BeginCashRegister,
   |CAST(EndCashRegister AS varchar(20)) AS EndCashRegister,    
   |CAST(Pr_Total AS varchar(20)) AS Pr_Total
   |from dbo.CASH_REPORT
   |where To1C = 1
   |order by data asc";    
   Попытка
       Выборка=Соединение.Execute(СтрокаЗапроса);
   Исключение                                                          
       Сообщить ("Ошибка выполнения запроса к БД: "+ОписаниеОшибки()+"!!!");
       ЗаписатьВФ("Ошибка выполнения запроса к БД: "+ОписаниеОшибки());
       Возврат;
   КонецПопытки;
       СчетчикКол = 0;
   //выборка из результата запроса
   Если Выборка.EOF()=-1 Тогда
   Иначе
       //установка указателя на первую строку
       Попытка
           Выборка.MoveFirst();
       Исключение
           Выборка.Close();
           Сообщить ("Ошибка установки указателя на первую строку или записей в базе данных до сегодняшнего дня нет или выгружены "+ОписаниеОшибки());
           ЗаписатьВФ("Ошибка установки указателя на первую строку или записей в базе данных до сегодняшнего дня нет или выгружены "+ОписаниеОшибки());
           Возврат;
       КонецПопытки;
// Заполненяем данными нашу ТЗ из Выборки с SQL Сервера
   Пока Выборка.EOF()=0 Цикл    
           Поле = Выборка.Fields;
           
           Если НайтиТорговуюТочку(Выборка.Fields("filial").Value) = -1 Тогда
               //установка указателя на следующую строку    
               Попытка
                   Выборка.MoveNext();
           Исключение
                   Выборка.Close();
                   Сообщить ("Ошибка установки указателя на следующее поле: "+ОписаниеОшибки(),"!!!");
                   ЗаписатьВФ("Ошибка установки указателя на следующее поле: "+ОписаниеОшибки());
                   Возврат;
               КонецПопытки;
               Продолжить;
           КонецЕсли;
           стрТЗ = ТЗ.Добавить();    
           стрТЗ.НомерИзВне = Выборка.Fields("GUID").Value;
           стрТЗ.КодФилиала = Выборка.Fields("filial").Value;
           стрТЗ.НазваниеФилиала = НайтиТорговуюТочку(стрТЗ.КодФилиала).Наименование;
           стрТЗ.ДатаДанных = Выборка.Fields("data").Value;  
                                                                                                     
           стрТЗ.РеализацияКомиссия = Число(Выборка.Fields("Pr_Kom_Sr").Value);
           стрТЗ.РеализацияКомиссияНомер = Число(Выборка.Fields("N_Pr_Kom_Sr").Value);
           
           стрТЗ.РеализацияСкупка = Число(Выборка.Fields("Pr_Real").Value);
           стрТЗ.РеализацияСкупкаНомер = Число(Выборка.Fields("N_Pr_Real").Value);
           
           стрТЗ.ВозвратСсудыЛомбарду = Число(Выборка.Fields("Pr_Real_Lombard").Value);
           стрТЗ.ВозвратСсудыЛомбардуНомер =  Число(Выборка.Fields("N_Pr_Real_Lombard").Value);
           
           стрТЗ.ПроцентыПоЛомбарду = Число(Выборка.Fields("Pr_Real_Lombard_Percent").Value);
           стрТЗ.ПроцентыПоЛомбардуНомер = Число(Выборка.Fields("N_Pr_Real_Lombard_Percent").Value);
           
           стрТЗ.ХранениеКомиссионногоТовара = Число(Выборка.Fields("Pr_hr_kom").Value);
           стрТЗ.ХранениеКомиссионногоТовараНомер = 0;
           
           стрТЗ.ПолученоИзКассыСобственник = Число(Выборка.Fields("Pr_Cash").Value);
           стрТЗ.ПолученоИзКассыСобственникНомер = Число(Выборка.Fields("N_Pr_Cash").Value);;
           
           стрТЗ.ПринятоЗаймов = Число(Выборка.Fields("Pr_Credit").Value);
           стрТЗ.ПринятоЗаймовНомер = Число(Выборка.Fields("N_Pr_Credit").Value);
           
           стрТЗ.ВыплатаЗадолженностиКомитентам = Число(Выборка.Fields("R_Zad_Kom").Value);
           стрТЗ.ВыплатаЗадолженностиКомитентамНомер = 0;
           
           стрТЗ.Скупка = Число(Выборка.Fields("R_Skupka").Value);
           стрТЗ.СкупкаНомер = Число(Выборка.Fields("N_R_Skupka").Value);
           
           стрТЗ.ПереданоВкассуСобственник = Число(Выборка.Fields("R_Cash").Value);
           стрТЗ.ПереданоВкассуСобственникНомер = Число(Выборка.Fields("N_R_Cash").Value);
           
           стрТЗ.ВыданоЗаймов = Число(Выборка.Fields("R_Credit").Value);
           стрТЗ.ВыданоЗаймовНомер = Число(Выборка.Fields("N_R_Credit").Value);
           
           стрТЗ.ВыданоПроцентовПоЗаймам = Число(Выборка.Fields("R_Credit_Percent").Value);
           стрТЗ.ВыданоПроцентовПоЗаймамНомер = Число(Выборка.Fields("N_R_Credit_Percent").Value);
           
           стрТЗ.ВыданоСсуд = Число(Выборка.Fields("R_Lombard").Value);
           стрТЗ.ВыданоСсудНомер = Число(Выборка.Fields("N_R_Lombard").Value);
           
           стрТЗ.ОстатокН = Число(Выборка.Fields("BeginCashRegister").Value);
           стрТЗ.ОстатокК = Число(Выборка.Fields("EndCashRegister").Value);
           
           стрТЗ.Возврат = стрТЗ.ОстатокК - стрТЗ.ОстатокН - Число(Выборка.Fields("Pr_Total").Value);  
           //запрос изменения в таблице cash_report параметра To1C на  1
           СтрокаЗапроса1="update dbo.CASH_REPORT set To1C = 0 where GUID = '" + стрТЗ.НомерИзВне+ "'";
           //выполнение запроса  
       Попытка
               Выборка1 = Соединение.Execute(СтрокаЗапроса1);
       Исключение                                                          
               Сообщить ("Ошибка обновления данных на сервере БД: "+ОписаниеОшибки(),"!!!");
               ЗаписатьВФ("Ошибка обновления данных на сервере БД: "+ОписаниеОшибки());
               Возврат;
       КонецПопытки;
       //установка указателя на следующую строку    
           Попытка
               Выборка.MoveNext();
           Исключение
               Выборка.Close();
               Сообщить ("Ошибка установки указателя на следующее поле: "+ОписаниеОшибки()+"!!!");
               ЗаписатьВФ("Ошибка установки указателя на следующее поле: "+ОписаниеОшибки());
               Возврат;
           КонецПопытки;
       КонецЦикла;
   КонецЕсли;
       ТЗ.Свернуть("НомерИзВне,КодФилиала,НазваниеФилиала,ДатаДанных,ОстатокН,ОстатокК,Возврат","РеализацияКомиссия,РеализацияСкупка,
           |ВозвратСсудыЛомбарду,ПроцентыПоЛомбарду,ХранениеКомиссионногоТовара,ПолученоИзКассыСобственник,
           |ПринятоЗаймов,ВыплатаЗадолженностиКомитентам,Скупка,ПереданоВкассуСобственник,ВыданоЗаймов,ВыданоПроцентовПоЗаймам,
           |ВыданоСсуд,РеализацияКомиссияНомер,
           |РеализацияСкупкаНомер,ВозвратСсудыЛомбардуНомер,ПроцентыПоЛомбардуНомер,
           |ХранениеКомиссионногоТовараНомер,ПолученоИзКассыСобственникНомер,ПринятоЗаймовНомер,
           |ВыплатаЗадолженностиКомитентамНомер,СкупкаНомер,ПереданоВкассуСобственникНомер,ВыданоЗаймовНомер,
           |ВыданоПроцентовПоЗаймамНомер,ВыданоСсудНомер");
   //Закрытие  выборки
Выборка.Close();
//Закрытие соединения
Соединение.Close();


Ну дальше собственно и работая с моей ТЗ уже в 1С.
14 Ёхан Палыч
 
16.05.12
11:34
ок, спасибо, щас посмотрю