Имя: Пароль:
1C
1С v8
Помогите с выгрузкой данных из SQL-базы в 1С.
,
0 _stay true_
 
30.10.13
08:35
Здравствуйте. Нужно средствами 1С подрубиться к SQL-ной базе, прочитать пару таблиц и загрузить данные из них в 1С. Я разобрался как подрубиться к базе с помощью СОМ-объектов, как прочитать таблицы(прочитал одну пробную таблицу и методом "Сообщить" эска мне выводит в служебные сообщение результат). Вопрос в следующем: как теперь это всё загрузить в 1С(УПП)? ЗАранее спасибо.

Коды процедур и функций:

Процедура ЗагрузитьДанные() Экспорт
    SQLСервер = "(local)";
    ПользовательSQLСервера = "";
    ПарольSQLСервера = "";
    БазаДанныхSQLСервера = "RK7_SHOWROOM";
    
    
    //Подключаемся к SQL серверу
    Попытка
        Connection = Новый COMОбъект("ADODB.Connection");
    Исключение
        Возврат;
    КонецПопытки;
    
    Connection.ConnectionString =  "driver={SQL Server}; server="+СокрЛП(SQLСервер)+
                        "; uid="+СокрЛП(ПользовательSQLСервера)+
                        "; pwd="+СокрЛП(ПарольSQLСервера)+
                        "; Database="+СокрЛП(БазаДанныхSQLСервера);    
    Попытка
        Connection.Open();
    Исключение
        Сообщить(ОписаниеОшибки());
        Возврат;
    КонецПопытки;
    
    
    
    //Выполним запрос
     МассивПолей = Новый ТаблицаЗначений;
     МассивПолей.Добавить("NAME");
     МассивПолей.Добавить("ALTNAME");
    
    СтруктураОтбор = Новый Структура;
    СтруктураОтбор.Вставить("Status","3");
    
    ВыполнитьЗапросSQL(МассивПолей, СтруктураОтбор,"EMPLOYEES");
    
                                    
        
    
    Попытка
        Connection.Close();
    Исключение
        Возврат;
    КонецПопытки;
    
                                    
КонецПроцедуры

Функция ВыполнитьЗапросSQL(МассивПолей, СтруктураОтбор,ИдТаблицыSQL)
    //Объявляем таблицу значений
    
    ТЗ_SQL = Новый ТаблицаЗначений;
        
    
    //Создаем необходимые объекты для записи в базу
    ADO_CMD = Новый COMОбъект("ADODB.Command");
    ADO_CMD.ActiveConnection     = Connection;
    
    ADO_RS = Новый COMОбъект("ADODB.Recordset");    
    
    //Сформируем строку выбираемых полей
    ТекстSelect = "";
    ВсегоПолей  = МассивПолей.Количество();
    н = 0;
    Для Каждого ТекПоле Из МассивПолей Цикл
        н = н + 1;
        ТекстSelect = ТекстSelect + ТекПоле + ?(н=ВсегоПолей,"",",");        
    КонецЦикла;
    
    //Сформируем строку условия
    ТекстWhere = "";
    ВсегоОтборов  = СтруктураОтбор.Количество();
    н = 0;
    Для Каждого ТекОтбор Из СтруктураОтбор Цикл
        н = н + 1;
        ТекстWhere = ТекОтбор.Ключ + " = " + ТекОтбор.Значение + ?(н=ВсегоОтборов,""," AND ");
    КонецЦикла;
    
    //ДЛЯ КАЖДОЙ ТАБЛИЦЫ ОТДЕЛЬНЫЙ ЗАПРОС И ЗАПИХИВАТЬ РЕЗУЛЬТАТ В ТАБЛИЦУ ЗНАЧЕНИЙ!!!!
    
    ADO_CMD.CommandText = "
    |SELECT "+ТекстSelect+"
    |FROM "+ИдТаблицыSQL+"
    |WHERE "+ТекстWhere;
    
    Попытка
        ADO_RS = ADO_CMD.Execute();
    Исключение
        //ЗаписьЖурналаРегистрации("ЗагрузкаДанныхFrontol.SQLServer",
        //                            УровеньЖурналаРегистрации.Ошибка, , ,
        //                            "Не удалось выполнить запрос по таблице """+ИдТаблицыSQL+""". Возможная причина :"+ИнформацияОбОшибке().Описание);
        Сообщить(ОписаниеОшибки());
    КонецПопытки;
    Если ADO_RS.BOF() И ADO_RS.EOF() Тогда
        //пустой
    Иначе
        ADO_RS.MoveFirst();
        Пока НЕ ADO_RS.EOF() do
            
            Для Каждого ТекПоле Из МассивПолей Цикл
                Возврат МассивПолей;
                Сообщить(СокрЛП(ТекПоле) + " равно " + СокрЛП(ADO_RS.Fields(ТекПоле).Value));
            КонецЦикла;
            
            ADO_RS.MoveNext();  
        КонецЦикла;
    КонецЕсли;
    ADO_RS.Close();

КонецФункции
1 Wobland
 
30.10.13
08:36
сферические данные в вакууме?
2 _stay true_
 
30.10.13
08:39
(1) я раньше слышал только "сферический конь в ваккуме")))
3 Wobland
 
30.10.13
08:44
>"EMPLOYEES"
это мы за тебя должны додумывать, что тебе требуется загрузить наименования сотрудников в базу 1С?
4 Infsams654
 
30.10.13
08:45
(0) создаешь необходимые объекты, заполняешь их из полученных данных и записываешь
5 Rovan
 
гуру
30.10.13
08:46
(0) //ДЛЯ КАЖДОЙ ТАБЛИЦЫ ОТДЕЛЬНЫЙ ЗАПРОС И ЗАПИХИВАТЬ РЕЗУЛЬТАТ В ТАБЛИЦУ ЗНАЧЕНИЙ!!!!

ээээ...там вроде тоже можно пакетные запросы делать !
6 _stay true_
 
30.10.13
08:48
(5) (3) Извиняюсь, не проснулся ещё.

(5)Пойду пробовать.
7 _stay true_
 
30.10.13
09:02
(5)Вот теперь не совсем понимаю как запихнуть результат в таблицу значений. Выдает "Слишком много фактических параметров"
8 _stay true_
 
30.10.13
09:04
Я днище, только запросы 1С-овские могу запихивать туда, а с SQL-ным как быть?)))
9 Wobland
 
30.10.13
09:15
можно внешний источник заюзать. будут 1Сные запросы
10 _stay true_
 
30.10.13
09:17
(9) Вот в этом то и проблема что нельзя внешние источники юзать. Как быть?
11 Wobland
 
30.10.13
09:17
(10) аллах запрещает?
12 _stay true_
 
30.10.13
09:19
(11) Типа того. Можно ведь как-то обойтись без внешнего источника?
13 Wobland
 
30.10.13
09:21
тупо перебрать результат и построчно добавлять в ТЗ уже было?
14 ДенисЧ
 
30.10.13
09:22
а сегодня точно не пятница?
15 Серго62
 
30.10.13
09:22
(8) Врукопашную создать ТЗ, что мешает?
16 _stay true_
 
30.10.13
09:24
(14)У меня каждый день пятница:)
(13) Дайте, пожалуйста, какой-нибудь пример кода чтобы я из ступора вышел и проснулся наконец(((
17 ДенисЧ
 
30.10.13
09:25
Я не понял, в чёи проблема....
18 Wobland
 
30.10.13
09:25
(16) а пожалуйста, просыпайся

    // Выводим результат в табличный документ
    ПроцессорВывода=Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
    ПроцессорВывода.УстановитьДокумент(ДокументРезультат);
    ПроцессорВывода.Вывести(ПроцессорКомпоновки);
19 Wobland
 
30.10.13
09:26
(17) Рован углядел какую-то возможность оптимизации. а в целом, как я понял, нужно понасоздавать элементов справочника с воон теми наименованиями
20 Серго62
 
30.10.13
09:38
(16) Вот тебе пример:
    Для НомКол = 0 По RS.Fields.Count-1 Цикл
        Выборка.Колонки.Добавить(RS.Fields(НомКол).Name);
    КонецЦикла;
    //
    RS.MoveFirst();
    Пока НЕ RS.EOF Цикл
        //Сообщить(RS.Fields(1).Value);
        НовСтр = Выборка.Добавить();
        Для НомКол = 0 По RS.Fields.Count-1 Цикл
            НовСтр[НомКол] = RS.Fields(НомКол).Value;
        КонецЦикла;
        //Сообщить(RS.Fields("nm2").Value);
        //
        RS.MoveNext();
    КонецЦикла;

RS - это твой рекордсет
21 _stay true_
 
30.10.13
11:32
(20) Таки домучил, спасибо тебе огромное))

Теперь вопрос такой: у меня в примере указан запрос по двум полям, где легко распихиваем по колонкам ТЗ значения полей.

Попробовал обкатать на выборке из четырех полей по другой таблице, выходит такое: Создается по 4 одинаковые строки в ТЗ для каждого элемента. Как бороться с этим? Код


Функция ВыполнитьЗапросSQL(МассивПолей, ИдТаблицыSQL)
    
        
    
    //Создаем необходимые объекты для записи в базу
    ADO_CMD = Новый COMОбъект("ADODB.Command");
    ADO_CMD.ActiveConnection     = Connection;
    
    ADO_RS = Новый COMОбъект("ADODB.Recordset");    
    
    //Сформируем строку выбираемых полей
    ТекстSelect = "";
    ВсегоПолей  = МассивПолей.Количество();
    н = 0;
    Для Каждого ТекПоле Из МассивПолей Цикл
        н = н + 1;
        ТекстSelect = ТекстSelect + ТекПоле + ?(н=ВсегоПолей,"",",");        
    КонецЦикла;
    
    
    
    
    ADO_CMD.CommandText = "
    |SELECT "+ТекстSelect+"
    |FROM "+ИдТаблицыSQL;
    
     //Объявляем таблицу значений для сохранения результата    
     Выборка = Новый ТаблицаЗначений;
     Выборка.Колонки.Добавить("CHECKNUM");
     Выборка.Колонки.Добавить("STARTDATETIME");
     Выборка.Колонки.Добавить("CLOSEDATETIME");
     Выборка.Колонки.Добавить("BINDEDSUM");


    
    Попытка
        ADO_RS = ADO_CMD.Execute();
    Исключение
        //ЗаписьЖурналаРегистрации("ЗагрузкаДанныхFrontol.SQLServer",
        //                            УровеньЖурналаРегистрации.Ошибка, , ,
        //                            "Не удалось выполнить запрос по таблице """+ИдТаблицыSQL+""". Возможная причина :"+ИнформацияОбОшибке().Описание);
        Сообщить(ОписаниеОшибки());
    КонецПопытки;
    Если ADO_RS.BOF() И ADO_RS.EOF() Тогда
        //пустой
    Иначе
        ADO_RS.MoveFirst();
        
        
        Пока НЕ ADO_RS.EOF() do
            
            
            //Заполняем таблицу значений
            

            
            Для Каждого ТекПоле Из МассивПолей Цикл
                
                
                НовСтр = Выборка.Добавить();
                НовСтр.CHECKNUM = СокрЛП(ADO_RS.Fields("CHECKNUM").Value);
                НовСтр.STARTDATETIME = СокрЛП(ADO_RS.Fields("STARTDATETIME").Value);
                НовСтр.CLOSEDATETIME = СокрЛП(ADO_RS.Fields("CLOSEDATETIME").Value);
                НовСтр.BINDEDSUM = СокрЛП(ADO_RS.Fields("BINDEDSUM").Value);
                                
                Сообщить(СокрЛП(ТекПоле) + " равно " + СокрЛП(ADO_RS.Fields(ТекПоле).Value));
                
            КонецЦикла;
            
            
            ADO_RS.MoveNext();  
            
            
        КонецЦикла;
        
        Возврат Выборка;
        
    КонецЕсли;
    
    ADO_RS.Close();
КонецФункции
22 _stay true_
 
30.10.13
11:41
(21) Решено..Господи, ну я и днище ;(
23 _stay true_
 
30.10.13
11:53
На этом история не заканчивается))Я к вам за помощью ещё не раз обращусь:) Благодарю всех, кто не остался равнодушным:)
24 _stay true_
 
30.10.13
15:56
Кто-нибудь шарит в SQL-запросах? Пытаюсь соединить 4 таблицы вот таким запросом:

    ADO_CMD.CommandText = "
    |SELECT ORDERS.MIDSERVER, PRINTCHECKS.UNI, CASHGROUPS.SIFR, PRINTCHECKS.CHECKNUM, SHIFTS.MIDSERVER, PRINTHECKS.MIDSERVER, PRINTCHECKS.DRAWERDATETIME, PRINTCHECKS.BILLDATETIME, PRINTCHECKS.GUESTCNT, PRINTCHECKS.ICREATOR, PRINTCHECKS.IAUTHOR, PRINTCHECKS.BINDEDSUM, PRINTCHECKS.IVOID,ORDERS.OPENTIME,ORDERS.ENDSERVICE, ORDERS.LastCheckUNI, ORDERS.TABLEID, SHIFTS.ICLOSEMANAGER
    |FROM PRINTCHECKS LEFT OUTER JOIN ORDERS LEFT OUTER JOIN SHIFTS LEFT OUTER JOIN CASHGROUPS
    |ON PRINTCHECKS.MIDSERVER=ORDERS.MIDSERVER AND SHIFTS.MIDSERVER=CASHGROUPS.SIFR";

При выполнении запроса вылетает вот такая ошибка:
ВнешняяОбработка.PRINTCHECKS.МодульОбъекта(105)}: Ошибка при вызове метода контекста (Execute): Произошла исключительная ситуация (Microsoft OLE DB Provider for ODBC Drivers): [Microsoft][ODBC SQL Server Driver][SQL Server]Неправильный синтаксис около конструкции "SIFR".

Опытным путем установил, что ругается на последнее условие соединения. Никак не могу понять почему.
25 sda553
 
30.10.13
16:13
(24) На каждый join должен быть свой on. У тебя 3 join и всего 1 On
26 sda553
 
30.10.13
16:14
join и on - это как скобки, одна открывает, другая закрывает
27 _stay true_
 
30.10.13
16:25
(26) Спасибо. Пойду попыхтю наж этим
28 МихаилМ
 
30.10.13
16:27
LEFT OUTER JOIN .. LEFT OUTER JOIN .. LEFT OUTER JOIN

может уволитесь за такое перемножение таблиц сами?
29 _stay true_
 
30.10.13
16:33
(28)Я с SQL впервые столкнулся. Вот и туплю.

Немного поправил запрос. теперь функция выглядит вот так

Функция ВыполнитьЗапросSQL_Acheck()
       
    
    //Создаем необходимые объекты для записи в базу
    ADO_CMD = Новый COMОбъект("ADODB.Command");
    ADO_CMD.ActiveConnection     = Connection;
    //|FROM PRINTCHECKS LEFT JOIN ORDERS LEFT JOIN SHIFTS LEFT JOIN CASHGROUPS
    ADO_RS = Новый COMОбъект("ADODB.Recordset");    
    
    ADO_CMD.CommandText = "
    |SELECT ORDERS.MIDSERVER, PRINTCHECKS.UNI, CASHGROUPS.SIFR, PRINTCHECKS.CHECKNUM, SHIFTS.MIDSERVER, PRINTHECKS.MIDSERVER,
    |PRINTCHECKS.DRAWERDATETIME, PRINTCHECKS.BILLDATETIME, PRINTCHECKS.GUESTCNT, PRINTCHECKS.ICREATOR, PRINTCHECKS.IAUTHOR,
    |PRINTCHECKS.BINDEDSUM, PRINTCHECKS.IVOID,ORDERS.OPENTIME,ORDERS.ENDSERVICE, ORDERS.LastCheckUNI, ORDERS.TABLEID, SHIFTS.IMANAGER
    |FROM PRINTCHECKS
    |LEFT JOIN ORDERS ON PRINTCHECKS.MIDSERVER=ORDERS.MIDSERVER,
    |LEFT JOIN SHIFTS ON PRINTCHECKS.MIDSERVER=SHIFTS.MIDSERVER,
    |LEFT JOIN CASHGROUPS ON PRINTCHECKS.MIDSERVER=CASHGROUPS.SIFR";
    
     //Объявляем таблицу значений для сохранения результата    
     Выборка = Новый ТаблицаЗначений;
    
     Выборка.Колонки.Добавить("UNI");
     Выборка.Колонки.Добавить("CHECKNUM");
     Выборка.Колонки.Добавить("DRAWERDATETIME");
     Выборка.Колонки.Добавить("BILLDATETIME");
     Выборка.Колонки.Добавить("GUESTCNT");
     Выборка.Колонки.Добавить("ICREATOR");
     Выборка.Колонки.Добавить("IAUTHOR");
     Выборка.Колонки.Добавить("BINDEDSUM");
     Выборка.Колонки.Добавить("IVOID");
     Выборка.Колонки.Добавить("OPENTIME");
     Выборка.Колонки.Добавить("ENDSERVICE");
     Выборка.Колонки.Добавить("TableID");
     Выборка.Колонки.Добавить("IMANAGER");
     Выборка.Колонки.Добавить("OPENDATE");
     //НУЛИ И ЕДИНИЦЫ
     Выборка.Колонки.Добавить("NACKURS");
     Выборка.Колонки.Добавить("TAXSUM");
     Выборка.Колонки.Добавить("TAXRATE");
     Выборка.Колонки.Добавить("BASEKURS");
        
    Попытка
        ADO_RS = ADO_CMD.Execute();
    Исключение
        Сообщить(ОписаниеОшибки());
    КонецПопытки;
    Если ADO_RS.BOF() И ADO_RS.EOF() Тогда
        //пустой
    Иначе
        ADO_RS.MoveFirst();
        
        
        Пока НЕ ADO_RS.EOF() do
            
            
            //Заполняем таблицу значений
            
               НовСтр = Выборка.Добавить();
            
            //Для Каждого ТекПоле Из МассивПолей Цикл
                
                НовСтр.UNI = СокрЛП(ADO_RS.Fields("UNI").Value);
                НовСтр.CHECKNUM = СокрЛП(ADO_RS.Fields("CHECKNUM").Value);
                НовСтр.DRAWERDATETIME = СокрЛП(ADO_RS.Fields("DRAWERDATETIME").Value);
                НовСтр.BILLDATETIME = СокрЛП(ADO_RS.Fields("BILLDATETIME").Value);
                НовСтр.GUESTCNT = СокрЛП(ADO_RS.Fields("GUESTCNT").Value);
                НовСтр.ICREATOR = СокрЛП(ADO_RS.Fields("ICREATOR").Value);
                НовСтр.IAUTHOR =   СокрЛП(ADO_RS.Fields("IAUTHOR").Value);
                НовСтр.BINDEDSUM = СокрЛП(ADO_RS.Fields("BINDEDSUM").Value);
                НовСтр.IVOID = СокрЛП(ADO_RS.Fields("IVOID").Value);
                НовСтр.OPENTIME = СокрЛП(ADO_RS.Fields("OPENTIME").Value);
                НовСтр.ENDSERVICE = СокрЛП(ADO_RS.Fields("ENDSERVICE").Value);
                НовСтр.TableID = СокрЛП(ADO_RS.Fields("TableID").Value);
                НовСтр.IMANAGER = СокрЛП(ADO_RS.Fields("IMANAGER").Value);
                НовСтр.OPENTIME = СокрЛП(ADO_RS.Fields("OPENDATE").Value);
                НовСтр.NACKURS = "1";
                НовСтр.BASEKURS = "1";
                НовСтр.TAXRATE = "0";
                НовСтр.TAXRATE = "0";
                
                
                
                
                //Сообщить(СокрЛП(ТекПоле) + " равно " + СокрЛП(ADO_RS.Fields(ТекПоле).Value));
                
            //КонецЦикла;
            
            
            ADO_RS.MoveNext();  
            
            
        КонецЦикла;
        
        Возврат Выборка;
        
    КонецЕсли;
    
    ADO_RS.Close();
КонецФункции



Эска ругается теперь вот на что:

{ВнешняяОбработка.PRINTCHECKS.МодульОбъекта(107)}: Ошибка при вызове метода контекста (Execute): Произошла исключительная ситуация (Microsoft OLE DB Provider for ODBC Drivers): [Microsoft][ODBC SQL Server Driver][SQL Server]Неправильный синтаксис около ключевого слова "LEFT".

Помогите...
30 Wobland
 
30.10.13
16:34
лефты без запятой пишутся
31 Infsams654
 
30.10.13
16:36
(29) это не "Эска ругается", это запрос неправильно написан - см. (30)
32 _stay true_
 
30.10.13
16:37
убрал запятые. Теперь вот такое вижу:
{ВнешняяОбработка.PRINTCHECKS.МодульОбъекта(96)}: Ошибка при вызове метода контекста (Execute): Произошла исключительная ситуация (Microsoft OLE DB Provider for ODBC Drivers): [Microsoft][ODBC SQL Server Driver][SQL Server]Не удалось привязать составной идентификатор "PRINTHECKS.MIDSERVER".
33 Wobland
 
30.10.13
16:39
диалог начинает напоминать о бананане...
http://www.forum.mista.ru/index.php?user_id=37701
34 1dvd
 
30.10.13
16:41
(32) "C" пропустил в слове PRINTCHECKS
35 1dvd
 
30.10.13
16:41
блин, вот чего я тут сижу и бесплатно отладчиком работаю?
36 Aprobator
 
30.10.13
16:44
(35) народ развлекаешь. Здесь уже стока с попкорном сидят )
37 _stay true_
 
30.10.13
16:45
(36)Рад стараться:)
38 Infsams654
 
30.10.13
16:46
(34) думаешь, найдет ?
39 User_Agronom
 
30.10.13
16:48
Один я заметил, что ветка ушла в сторону?
ТС же писал, что данные выцепил. Теперь же нужно всего то СоздатьОбъект, заполнить этими данными реквизиты и Записать объект.
40 UIV
 
30.10.13
16:49
(35) Ну кто то же должен.
41 Infsams654
 
30.10.13
16:50
(39) см (4)
42 Wobland
 
30.10.13
16:53
интересно, для каких реквизитов какого объекта предназначен букет выбираемых полей?
43 1dvd
 
30.10.13
16:54
(42) судя по всему продажи в сторонней программе
44 Wobland
 
30.10.13
16:57
типа ОтчётККМ? почему бы и нет
45 User_Agronom
 
30.10.13
18:17
(41) Видел (4) Пятым бы сообщением не написал. Но ветка так увлечённо ушла в сторону, я попробовал скромно напомнить.
46 _stay true_
 
01.11.13
09:04
И снова всем доброе утро:) У меня возник вопрос по поводу SQL-запроса. Идея такая:вытащил на форму обработки 2 реквизита "ДатаНач" и "ДатаКон" с типом Дата, дабы сделать возможным выгрузку за определенный период, а не всех данных сразу. В 1С запросах мы устанавливаем параметры и всё работает. А как быть здесь? Пробовал так:

    |declare @FirstDate datetime
    |set @FirstDate = '"+ДатаНач+"'
    |declare @LastDate datetime
    |set @LastDate = '"+ДатаКон+"'
    |SELECT PRINTCHECKS.UNI, PRINTCHECKS.CHECKNUM, PRINTCHECKS.CLOSEDATETIME, PRINTCHECKS.BILLDATETIME, ORDERS.STARTSERVICE, ORDERS.ENDSERVICE,
    |PRINTCHECKS.GUESTCNT, PRINTCHECKS.IDRAWERSHIFT,ORDERS.MAINWAITER, PRINTCHECKS.ICLOSESTATION, PRINTCHECKS.MIDSERVER, PRINTCHECKS.BINDEDSUM,
    |PRINTCHECKS.IVOID, PRINTCHECKS.ICREATOR, ORDERS.TABLEID, PRINTCHECKS.STARTDATETIME, PRINTCHECKS.TAXSUM, ORDERS.IBASICCURRENCY, ORDERS.INATIONALCURRENCY,
    |PRINTCHECKS.VISIT AS VISIT1,
    |ORDERS.VISIT AS VISIT2
    |FROM PRINTCHECKS LEFT JOIN ORDERS
    |ON PRINTCHECKS.VISIT=ORDERS.VISIT";

Выскакивает ошибка "Неправильный синтаксис около конструкции .2013"(в скюле тип данных datetime имеет несколько иной формат).

Пробовал так


    |SELECT PRINTCHECKS.UNI, PRINTCHECKS.CHECKNUM, PRINTCHECKS.CLOSEDATETIME, PRINTCHECKS.BILLDATETIME, ORDERS.STARTSERVICE, ORDERS.ENDSERVICE,
    |PRINTCHECKS.GUESTCNT, PRINTCHECKS.IDRAWERSHIFT,ORDERS.MAINWAITER, PRINTCHECKS.ICLOSESTATION, PRINTCHECKS.MIDSERVER, PRINTCHECKS.BINDEDSUM,
    |PRINTCHECKS.IVOID, PRINTCHECKS.ICREATOR, ORDERS.TABLEID, PRINTCHECKS.STARTDATETIME, PRINTCHECKS.TAXSUM, ORDERS.IBASICCURRENCY, ORDERS.INATIONALCURRENCY,
    |PRINTCHECKS.VISIT AS VISIT1,
    |ORDERS.VISIT AS VISIT2
    |FROM PRINTCHECKS LEFT JOIN ORDERS
    |ON PRINTCHECKS.VISIT=ORDERS.VISIT
        |WHERE PRINTCHECKS.STARTSERVICE= '"+ДатаНач+"                    PRINTCHECKS.ENDSERVICE = '"+ДатаКон+"';


Дату так же пробовал вводить как строку(менял тип реквизита)  в формате SQL datetime,и просто дату вида 20130931, и всё равно не работает. Кто сталкивался - как вы с этим справлялись?Заранее спасибо.
47 _stay true_
 
01.11.13
09:05
Пропустил в последней строке "AND" в предыдущем посте. Там
|WHERE PRINTCHECKS.STARTSERVICE= '"+ДатаНач+"                  AND PRINTCHECKS.ENDSERVICE = '"+ДатаКон+"';
48 Wobland
 
01.11.13
09:15
Формат тебе в помощь
49 Wobland
 
01.11.13
09:16
(48) сторно
>просто дату вида 20130931
вот и играйся с литералами, пока не получишь результат. а потом формат
50 Coldboy
 
01.11.13
09:19
(0) не знаю ответили тебе или нет, но я работа с SQL и загружал в 1С вот так:
    Соединение = Новый COMОбъект("ADODB.Connection");
    //заполнение текущих настроек подключения
    ТекСервер = "MY-PK\SQLEXPRESS";
    ТекБаза = "store_temp";
    //заполнение строки запроса к серверу
    СтрокаКоннекта ="driver={SQL Server};server="+ТекСервер+";Database="+ТекБаза;
    Соединение.ConnectionTimeOut = 6000;
        //попытка соединения
    Попытка
        Соединение.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();
51 hhhh
 
01.11.13
09:23
(6) попробуй просто, по-пацански

#"+Формат(ДатаКон, + "ДФ=yyyy-MM-dd") + "#

или религия не позволяет?
52 Infsams654
 
01.11.13
09:24
(50) - да, пятница видать (во накатал)
(47) что это PRINTCHECKS.STARTSERVICE= '"+ДатаНач+" ?

Надо
PRINTCHECKS.STARTSERVICE= "'" + ДатаНач + "'"
где ДатаНач должно быть строкой в удобоваримом SQL виде
53 sda553
 
01.11.13
09:24
Открой для себя это знание http://linesofcode.net/snippets/45
54 _stay true_
 
01.11.13
09:36
Спасибо вам огромное! Пойду пыхтеть над этим:)
55 Sorm
 
01.11.13
09:47
//Заполняем форму данными с запроса
    СоединениеSQL = ConnectToSQL("SQLNCLI10","serv_name","database_name","user_name","1");
    Сообщить ("Выполнение запроса SQL...");
    ЗаписиSQL = Новый ComObject("ADODB.RecordSet");
    //Стартуем процедуру
    ТекстSQL = "exec aspu_Get_Sum_Prem_For_1C '"+Формат(НачалоПериода,"ДФ=ггггММдд")+"','"+Формат(КонецПериода,"ДФ=ггггММдд")+"'";

    ЗаписиSQL = ExecuteSQLDirect(СоединениеSQL,ТекстSQL);
    
    //Колонку определим
    КС = Новый КвалификаторыСтроки(255);
    Массив = Новый Массив;
    Массив.Добавить(Тип("Строка"));
    ОписаниеТиповС = Новый ОписаниеТипов(Массив, , КС);
    
    Таблица = Новый ТаблицаЗначений;
    Сообщить ("Заполнение временной таблицы...");
    Для НомерСтолбца = 0 По ЗаписиSQL.Fields.Count-1 Цикл //Создание и добавление колонок во временную таблицу
        ИмяСтолбца =ЗаписиSQL.Fields.Item(НомерСтолбца).Name;
        Таблица.Колонки.Добавить(ИмяСтолбца,ОписаниеТиповС);
    КонецЦикла;
    Пока ЗаписиSQL.EOF=0 Цикл // Заполнение созданной таблицы

        НоваяСтрока = Таблица.Добавить();
        Для НомерСтолбца = 0 По ЗаписиSQL.Fields.Count-1 Цикл
            НоваяСтрока.Установить(НомерСтолбца,ЗаписиSQL.Fields(НомерСтолбца).Value);
        КонецЦикла;

        ЗаписиSQL.MoveNext();

    КонецЦикла;

    Сообщить ("Закрываем соединение с SQL...");
    ЗаписиSQL.Close();
    СоединениеSQL.Close();
    
    //Заполняем таблицу обработки
    Для каждого СтрокаТЗ из Таблица цикл
56 Sorm
 
01.11.13
09:49
(55)+ Ну вот как-то так... Здесь показан сам механизм заполнения данными ТЗ.
57 _stay true_
 
01.11.13
10:11
Заработал "пацанский" вариант (51)! Спасибо большое!!!
58 Mihenius
 
01.11.13
14:23
(0) А что мешало вначале запрос проверить в самом SQL?
Там же есть инструменты для отладки и прочих полезностей?
Или конструктором сделать )

А уже готовый взять в 1С.