8.х ОБМЕН Подключение к mysql для загрузки данных

Тема в разделе "Обмен данными в "1С:Предприятие 8"", создана пользователем Davids_777, 18 июн 2012.

  1. TopicStarter Overlay
    Davids_777
    Offline

    Davids_777

    Регистрация:
    6 авг 2011
    Сообщения:
    25
    Симпатии:
    0
    Баллы:
    1
    Товарищи!!! Подскажите пожалуйста!!! Как правильно устанавливаються параметры для sql-запроса??? В моём случае надо установить два параметра типа Дата! Вот код:


    Процедура Подключение(ДрайверПодключенияСУБД, database_name, login, parol, server_ip, port, Дата1, Дата2)

    Перем driver, server, database, user, user_parol, data_port;

    driver = ДрайверПодключенияСУБД;
    //"{MySQL ODBC 3.51 Driver}";
    server = server_ip;
    //"127.0.0.1";
    database = database_name;
    //"azs";
    user = login;
    //"AZSUSER";
    user_parol = parol;
    //"azs";
    data_port = port;
    //"3306"

    Connection = Новый COMОбъект("ADODB.Connection");
    ConnectionString = "DRIVER="+driver+";"+"SERVER="+server+";DATABASE="+database+";UID="
    +user+";PWD="+user_parol+";OPTION="+3+";"+"PORT="+data_port+";"+"STMT=set character_set_results=cp1251;";
    //support_odbc_query = true;
    Попытка
    Connection.open(ConnectionString);
    //Сообщить("Соединение установлено!!!");
    Исключение
    Сообщить(ОписаниеОшибки());
    КонецПопытки;

    ТекстЗапроса="
    |Select
    |SESSIONS.SESSION as SESSION2,
    |SESSIONS.DT1,
    |SESSIONS.DT2,
    |SALES.DOC,
    |SALES.SESSION,
    |SALES.PRODUCTID,
    |SUM(SALES.AMOUNT) as AMOUNT,
    |SUM(SALES.CASH) as CASH,
    |SALES.CASHFLAG,
    |SALES.PRICE,
    |SALES.DISCOUNT,
    |SUM(SALES.COST) as COST,
    |SUM(SALES.CASHCOST) as CASHCOST,
    |PRODUCT.PRODUCTGROUP,
    |PRODUCT.PRODUCTID as PRODUCTID2,
    |PRODUCT.NAME,
    |CASHFORM.ID,
    |CASHFORM.NAME as NAME2
    |from SESSIONS JOIN SALES JOIN PRODUCT JOIN CASHFORM
    |where SESSIONS.SESSION=SALES.SESSION and SESSIONS.DT1 > @Дата1 and SESSIONS.DT1<@Дата2 and SALES.PRODUCTID=PRODUCT.PRODUCTID and SALES.CASHFLAG=CASHFORM.ID and SALES.CASHFLAG = 1 and PRODUCT.PRODUCTGROUP = 10
    |group by NAME,PRODUCTID2, PRODUCTID, CASHFLAG, SESSION2, DT1, DT2, DOC, SESSION, PRICE, DISCOUNT, ID, NAME2";

    СоединениеSQL = Новый COMObject("ADODB.Command");
    СоединениеSQL.ActiveConnection = Connection;
    СоединениеSQL.CommandType = 4;
    СоединениеSQL.NamedParameters = True;
    СоединениеSQL.CommandText = ТекстЗапроса;
    СоединениеSQL.Prepared=Истина;
    //ТекстЗапроса;
    //("sp_executesql");

    ПараметыЗапроса="@Дата1 datetime,@Дата2 datetime";

    ParamSqlText=СоединениеSQL.CreateParameter(,130,1,5000,ТекстЗапроса);
    СоединениеSQL.Parameters.Append(ParamSqlText);

    ParamParamText=СоединениеSQL.CreateParameter(,130,1,5000,ПараметыЗапроса);
    СоединениеSQL.Parameters.Append(ParamParamText);

    Param1 = СоединениеSQL.CreateParameter("@Дата1",200,1,8,Формат(Дата1,"ДФ=гг.ММ.дд"));
    СоединениеSQL.Parameters.Append(Param1);

    Param2 = СоединениеSQL.CreateParameter("@Дата2",200,1,8,Формат(Дата2,"ДФ=гг.ММ.дд"));
    СоединениеSQL.Parameters.Append(Param2);

    Состояние ("Выполнение запроса SQL...");
    ЗаписиSQL = Новый COMObject("ADODB.RecordSet");
    ЗаписиSQL = СоединениеSQL.Execute();

    Сообщить (ЗаписиSQL.Fields.Count());

    Объект.ТаблицаТопливаРасход_TandT.Очистить();
    Пока ЗаписиSQL.State=0 цикл
    ЗаписиSQL = ЗаписиSQL.NextRecordset();
    КонецЦикла;
    Пока ЗаписиSQL.EOF = 0 Цикл // Заполнение созданной таблицы

    НоваяСтрока = Объект.ТаблицаТопливаРасход_TandT.Добавить();
    НоваяСтрока.КодСмены = ЗаписиSQL.fields("SESSION").value;
    НоваяСтрока.ДатаНачалаСмены = ЗаписиSQL.fields("DT1").value;
    НоваяСтрока.ДатаКонцаСмены = ЗаписиSQL.fields("DT2").value;
    НоваяСтрока.НаименованиеТовара = ЗаписиSQL.fields("NAME").value;
    НоваяСтрока.КодТоварнойГруппы = ЗаписиSQL.fields("PRODUCTGROUP").value;
    НоваяСтрока.НаименованиеФормыОплаты = ЗаписиSQL.fields("NAME2").value;
    НоваяСтрока.Цена = ЗаписиSQL.fields("PRICE").value;
    НоваяСтрока.КоличествоОтпущенное = ЗаписиSQL.fields("AMOUNT").value;
    НоваяСтрока.КоличествоОплаченное = ЗаписиSQL.fields("CASH").value;
    НоваяСтрока.Скидка = ЗаписиSQL.fields("DISCOUNT").value;
    НоваяСтрока.СтоимостьОтпущенного = ЗаписиSQL.fields("COST").value;
    НоваяСтрока.СтоимостьОплаченная = ЗаписиSQL.fields("CASHCOST").value;

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

    КонецЦикла;

    Состояние ("Закрываем соединение с SQL...");
    ЗаписиSQL.Close();
    Connection.Close();

    КонецПроцедуры
  2. TopicStarter Overlay
    Davids_777
    Offline

    Davids_777

    Регистрация:
    6 авг 2011
    Сообщения:
    25
    Симпатии:
    0
    Баллы:
    1
    Фишка в том что я юзал форумы по этому поводу и до решения так и не дошел, я коннекчусь к mysql. Все отрабатывает, но таблица не заполняеться, но и ошибок нет! Хрен пойму!
  3. Эмин
    Offline

    Эмин Руководитель проектов

    Регистрация:
    25 май 2007
    Сообщения:
    1.178
    Симпатии:
    1
    Баллы:
    26
    То есть все коннектится, а рекордсет пустой?
    Может параметры в запросе неправильно передали?
    Попробуйте сначала простенький запрос сделать либо без параметров либо с передачей параметров прямо внутри текста запроса

    Ну и руками генерить строку подключения - это, конечно круто, но я так обычно не делаю. Впрочем - тут кому как.
  4. TopicStarter Overlay
    Davids_777
    Offline

    Davids_777

    Регистрация:
    6 авг 2011
    Сообщения:
    25
    Симпатии:
    0
    Баллы:
    1
    Да! Так и есть!!! Все коннектится, а вот рекордсет пустой((( Без долбанных параметров все работает аж бегом, но с ними начинаються адские муки бытия((((

    Да действительно, получается что неправильно передаются параметры, подскажите пожалуйста как правильно их передавать???
    И если не трудно подскажите еще как это "с передачей параметров прямо внутри текста запроса"???
  5. TopicStarter Overlay
    Davids_777
    Offline

    Davids_777

    Регистрация:
    6 авг 2011
    Сообщения:
    25
    Симпатии:
    0
    Баллы:
    1
    Закоментил передачу параметров и в запросе задал вместо параметров просто SESSIONS.DT1 > '12.06.02' - такого плана. Таким образом все работает! Но мне надо чтобы Юзвер взял своей обезьяньей лапкой тыкнул на форме дату и она в запросик поскакала!!!)

    ТекстЗапроса="
    |Select
    |SESSIONS.SESSION as SESSION2,
    |SESSIONS.DT1,
    |SESSIONS.DT2,
    |SALES.DOC,
    |SALES.SESSION,
    |SALES.PRODUCTID,
    |SUM(SALES.AMOUNT) as AMOUNT,
    |SUM(SALES.CASH) as CASH,
    |SALES.CASHFLAG,
    |SALES.PRICE,
    |SALES.DISCOUNT,
    |SUM(SALES.COST) as COST,
    |SUM(SALES.CASHCOST) as CASHCOST,
    |PRODUCT.PRODUCTGROUP,
    |PRODUCT.PRODUCTID as PRODUCTID2,
    |PRODUCT.NAME,
    |CASHFORM.ID,
    |CASHFORM.NAME as NAME2
    |from SESSIONS JOIN SALES JOIN PRODUCT JOIN CASHFORM
    |where SESSIONS.SESSION=SALES.SESSION and SESSIONS.DT1 > '12.06.02' and SESSIONS.DT1<'12.06.03' and SALES.PRODUCTID=PRODUCT.PRODUCTID and SALES.CASHFLAG=CASHFORM.ID and SALES.CASHFLAG = 1 and PRODUCT.PRODUCTGROUP = 10
    |group by NAME,PRODUCTID2, PRODUCTID, CASHFLAG, SESSION2, DT1, DT2, DOC, SESSION, PRICE, DISCOUNT, ID, NAME2";

    СоединениеSQL = Новый COMObject("ADODB.Command");
    //Param1 = Новый COMObject("ADODB.Parameter");
    //Param2 = Новый COMObject("ADODB.Parameter");
    СоединениеSQL.ActiveConnection = Connection;
    СоединениеSQL.CommandType = 1;
    //СоединениеSQL.NamedParameters = True;
    СоединениеSQL.CommandText = ТекстЗапроса;
    СоединениеSQL.Prepared=Истина;
    //ТекстЗапроса;
    //("sp_executesql");

    //ПараметыЗапроса="@Дата1 datetime,@Дата2 datetime";

    //ParamSqlText=СоединениеSQL.CreateParameter(,130,1,5000,ТекстЗапроса);
    //СоединениеSQL.Parameters.Append(ParamSqlText);

    //ParamParamText=СоединениеSQL.CreateParameter(,130,1,5000,ПараметыЗапроса);
    //СоединениеSQL.Parameters.Append(ParamParamText);

    //Param1 = СоединениеSQL.CreateParameter("@Дата1",200,1,8,Формат(Дата1,"ДФ=гг.ММ.дд"));
    //СоединениеSQL.Parameters.Append(Param1);

    //Param2 = СоединениеSQL.CreateParameter("@Дата2",200,1,8,Формат(Дата2,"ДФ=гг.ММ.дд"));
    //СоединениеSQL.Parameters.Append(Param2);
  6. TopicStarter Overlay
    Davids_777
    Offline

    Davids_777

    Регистрация:
    6 авг 2011
    Сообщения:
    25
    Симпатии:
    0
    Баллы:
    1
    Ребят ну помогите!!!
  7. Эмин
    Offline

    Эмин Руководитель проектов

    Регистрация:
    25 май 2007
    Сообщения:
    1.178
    Симпатии:
    1
    Баллы:
    26
    Да сделайте вы тогда просто в тексте запроса куски вида
    Код:
    // Перед запросом присвойте значения
    ДАТАНАЧАЛО = Формат(ВыбраннаяПользователемДата, "ДФ=dd.MM.yy");
    // Кусок запроса с передачей дат
    "SESSIONS.DT1 > "+ДАТАНАЧАЛО+" and SESSIONS.DT1<"+ДАТАКОНЕЦ+" and"
    
    Ну не работает у вас передача параметров как вы делаете, может в форматах беда :)
    Поэтому просто сгенерите текст запроса с учетом ваших дат-параметров
  8. TopicStarter Overlay
    Davids_777
    Offline

    Davids_777

    Регистрация:
    6 авг 2011
    Сообщения:
    25
    Симпатии:
    0
    Баллы:
    1
    Ура! Спасибо!!! Заработало))) и действительно нахрена этот геморой с установкой параметров))) Всё, проблема устранена в кратчайшие сроки!!! Эмин, ещё раз спасибо!!! Респект!!!
  9. Эмин
    Offline

    Эмин Руководитель проектов

    Регистрация:
    25 май 2007
    Сообщения:
    1.178
    Симпатии:
    1
    Баллы:
    26
    Да не за что! Удачи!

Поделиться этой страницей