Работа с MySQL из 1С через ODBC В статье описан процесс работы с MySQL базой из 1С через ODBC.
Первое что следует обязательно учесть это версия драйвера, для того чтобы всё корректно работало вам потребуется драйвер версии 3.51 (с драйвером 5-ой версии я пробился пол дня пытаясь хоть чего нибудь добиться, безрезультатно & поменял на предыдущую версию и всё заработало!
Для подключения используем вот такую строчку:
Код 1C v 8.х Соединение = "DRIVER=MySQL ODBC 3.51 Driver;Database=inventar_sm;DataSource=roman-book;UID=root;PWD=240580;STMT=set character_set_results=cp1251;" ;
Соединение = "DRIVER=MySQL ODBC 3.51 Driver;Database=inventar_sm;DataSource=roman-book;UID=root;PWD=240580;" ;
то касается кодировки то лучше её конечно задать, но на вставку записей в БД MySQL оно почемуто не влияет, и чтобы корректно всё отрабатывало и не выглядело кракозябриками после отработки скриптов, перед выполнением самих скриптов лучше выполнить вот такой вот скрипт «set names cp1251» в рамках соединения он правильно установит кодировку (так надёжнее).
Для работы с самой базой объявляем объект ADODB.Connection & это соединение с базой.
Для работы с данными можем объявить: ADODB.Recordset & для чтения данных, и ADODB.Command для изменения.
(ADODB.Command & не имеет метода ExecuteScalar, поэтому вместо него придётся обходить ся Recordset-ом и с его помощью выбирать данные, хотя возможно я чегото не доглядел).
Итак пример. Выбираем данные из таблицы:
Код 1C v 8.х Попытка
Connection = Новый COMОбъект( "ADODB.Connection" ) ;
Connection. Open( "DRIVER=MySQL ODBC 3.51 Driver;Database=inventar_sm;DataSource=roman-book;UID=root;PWD=240580;STMT=set character_set_results=cp1251;" ) ;
RS = Новый COMОбъект( "ADODB.Recordset" ) ;
RS. CursorType= 3 ;
RS. ActiveConnection= Connection;
RS. Open( "select * from market_users" ) ;
RS. MoveFirst( ) ;
Пока RS. EOF( ) = 0 Цикл
NAM = RS. Fields( "NAME" ) . Value;
Сообщить( NAM) ;
RS. MoveNext( ) ;
КонецЦикла ;
RS. Close( ) ;
Connection. Close( ) ;
Теперь изменяем данные:
Код 1C v 8.х Connection = Новый COMОбъект( "ADODB.Connection" ) ;
Connection. Open( "DRIVER=MySQL ODBC 3.51 Driver;Database=inventar_sm;DataSource=roman-book;UID=root;PWD=240580;STMT=set character_set_results=cp1251;" ) ;
Command= new COMObject( "ADODB.Command" ) ;
Command. CommandText = "set names cp1251" ;
Command. ActiveConnection = Connection;
Command. CommandType = 1 ;
Command. Execute( ) ;
Command= new COMObject( "ADODB.Command" ) ;
Command. CommandText = "update market_cards set name='Хлебушек бородинский' where articul='123'" ;
Command. ActiveConnection = Connection;
Command. CommandType = 1 ;
Command. Execute( ) ;
Connection. Close( ) ;
Все
Категория:
COM-объекты, WMI, WSH Как программно Изменить Отбор в отчете СКД Эта тема тоже достаточна распространена. Нюанс программного изменения отбора заключается в том, что коллекция:
Код 1C v 8.х КомпоновщикНастроек. Настройки. Отбор. Элементы
в отличие от аналогичной коллекции параметров, не имеет метода Найти(). Можно конечно изменять отбор «в лоб», т.е. по индексу, но это не есть хорошо. Самый оптимальный вариант,
обходить все поля отбора в цикле.
Приведу пример универсальной функции для изменения отбор компоновки данных:
Код 1C v 8.х
Процедура ИзменитьОтбор(ЭлементСтруктуры,
СоответствиеПоискаОтбора = Неопределено, СоответствиеНовогоОтбора) Экспорт
Если ТипЗнч( ЭлементСтруктуры) = Тип( "КомпоновщикНастроекКомпоновкиДанных" ) Тогда
Отбор = ЭлементСтруктуры. Настройки. Отбор;
Иначе
Отбор = ЭлементСтруктуры;
КонецЕсли ;
Если ТипЗнч( СоответствиеНовогоОтбора["ЛевоеЗначение" ]) = Тип( "Строка" ) Тогда
нПоле = Новый ПолеКомпоновкиДанных( СоответствиеНовогоОтбора. ЛевоеЗначение) ;
Иначе
нПоле = СоответствиеНовогоОтбора["ЛевоеЗначение" ];
КонецЕсли ;
Если СоответствиеНовогоОтбора. Получить( "ВидСравнения" ) = Неопределено Тогда
нВидСравнения = ВидСравненияКомпоновкиДанных. Равно;
Иначе
нВидСравнения = СоответствиеНовогоОтбора["ВидСравнения" ];
КонецЕсли ;
Если СоответствиеНовогоОтбора. Получить( "Использование" ) = Неопределено Тогда
нИспользование = Истина ;
Иначе
нИспользование = СоответствиеНовогоОтбора["Использование" ];
КонецЕсли ;
нЗначение = СоответствиеНовогоОтбора["Значение" ];
ТолькоПоЛевомуЗначению = Ложь ;
Если СоответствиеПоискаОтбора = Неопределено Тогда
ТолькоПоЛевомуЗначению = Истина ;
КонецЕсли ;
сЛевоеЗначение = СоответствиеПоискаОтбора. Получить( "ЛевоеЗначение" ) ;
Если сЛевоеЗначение = Неопределено Тогда
сЛевоеЗначение = нПоле;
КонецЕсли ;
сВидСравнения = СоответствиеПоискаОтбора. Получить( "ВидСравнения" ) ;
Если ВидСравнения = Неопределено Тогда
сВидСравнения = ВидСравнения;
КонецЕсли ;
сИспользование = СоответствиеПоискаОтбора. Получить( "Использование" ) ;
Если сИспользование = Неопределено Тогда
сИспользование = нИспользование;
КонецЕсли ;
Для каждого ЭлементОтбора Из Отбор. Элементы Цикл
Если ТолькоПоЛевомуЗначению Тогда
НайденныйОтбор = ЭлементОтбора;
Прервать ;
Иначе
Если ( ЭлементОтбора. ЛевоеЗначение = сЛевоеЗначение)
И ( ЭлементОтбора. ВидСравнения = сВидСравнения)
И ( ЭлементОтбора. Использование = сИспользование) Тогда
НайденныйОтбор = ЭлементОтбора;
Прервать ;
КонецЕсли ;
КонецЕсли ;
КонецЦикла ;
Если НайденныйОтбор < > Неопределено Тогда
НайденныйОтбор. ЛевоеЗначение = нПоле;
НайденныйОтбор. Использование = нИспользование;
НайденныйОтбор. ВидСравнения = нВидСравнения;
НайденныйОтбор. ПравоеЗначение = нЗначение;
КонецЕсли ;
КонецПроцедуры
Пример вызова процедуры:
Код 1C v 8.х СоответствиеПоискаОтбора = Новый Соответствие;
СоответствиеПоискаОтбора. Вставить( "ЛевоеЗначение" , Новый ПолеКомпоновкиДанных( "Наименование" ) ) ;
СоответствиеПоискаОтбора. Вставить( "ВидСравнения" , ВидСравненияКомпоновкиДанных. Содержит) ;
СоответствиеПоискаОтбора. Вставить( "Использование" , Истина ) ;
СоответствиеНовогоОтбора = Новый Соответствие;
СоответствиеНовогоОтбора. Вставить( "ЛевоеЗначение" , Новый ПолеКомпоновкиДанных( "Наименование" ) ) ;
СоответствиеНовогоОтбора. Вставить( "ВидСравнения" , ВидСравненияКомпоновкиДанных. Содержит) ;
СоответствиеНовогоОтбора. Вставить( "Использование" , Истина ) ;
СоответствиеНовогоОтбора. Вставить( "Значение" , "бла-бла-бла" ) ;
ИзменитьОтбор( КомпоновщикНастроек, СоответствиеПоискаОтбора, СоответствиеНовогоОтбора) ;
Автор:
also Категория:
Схема Компоновки Данных