Обработка предназначена для лёгкой и удобной работы с MySQL.
обновление: 27.03.2013
- Добавлена функция ОтправитьДанныеПоСтруктуреСДанными()
В случае, когда нужно передать сразу много таблиц, заполняется структура
ключ — имя таблицы
значение — сама таблица и передается в качестве параметра в функцию. - Для функции ОтправитьДанныеПоПодготовленнойТаблице() появился не обязательный параметр ИгнорироватьДубли.
Данный параметр позволяет подавлять ошибку вставки не уникальных строк (т.е. если в приемнике уже есть такая строка, то строка будет просто пропущена). Уникальность проверяется по ключевым полям (конструкция IGNORE).
обновлено: 21.12.2012
Существенно увеличена скорость получения больших таблиц с помощью функции ПолучитьТаблицуРезультатПоЗапросу()
обновлено: 12.12.2012
Исправлена мелкая ошибка:
Функция
__ОбновитьТаблицуКлючевыъПолей() — ошибочно отнесена к экпортным.
ОбновитьТаблицуКлючевыхПолей() — исправлено имя функции.
обновлено: 10.12.2012
Исправлено:
ошибка исполнения, если вызов функции работы с БД осуществлялся до вызова функции УстановитьПараметрыПодключения()
Добавлено:
1. СоздатьБД(ИмяБД)
2. ТестПодключения()
3. УдалитьБД(ИмяБД)
Возможности:
- Получение данных
- получить таблицу значений по запросу типа «select»
- Отправка данных таблицы значений
- отправка данных в таблицу MySQL по данным переданной таблицы значений
- Удаление данных
- удаление данных в таблице MySQL по данным переданной таблицы значений
- Вспомогательные возможности
- получить список баз сервера MySQL
- получить список таблиц базы MySQL
- получить список таблиц базы MySQL с размером таблицы и количеством строк
- получить структуру, содержащую все (или выборочно) таблицы базы MySQL
- Выполнение произвольного запроса
Для подключения в системе должен быть установлен ODBC драйвер.
Пример 1:
Дано:
Ip сервера = 10.0.0.1
База = mysql
Пользователь = root
Пароль = pass
Задача: Получить данные таблицы ‘proc’
обMySQLConnect = Обработки.MySQLConnect.Создать(); ПараметрыПодключения = новый Структура; ПараметрыПодключения.Вставить("Сервер" , "10.0.0.1"); ПараметрыПодключения.Вставить("Пользователь", "root"); ПараметрыПодключения.Вставить("Пароль" , "pass"); ПараметрыПодключения.Вставить("База" , "mysql"); обMySQLConnect.УстановитьПараметрыПодключения(ПараметрыПодключения); ТаблицаРезультат = новый таблицаЗначений; Запрос = "«SELECT * FROM proc»"; Если обMySQLConnect. ПолучитьТаблицуРезультатПоЗапросу(Запрос, ТаблицаРезультат) Тогда // ТаблицаРезультат содержит нужные данные - обрабатываем Иначе
Сообщить(обMySQLConnect. ПолучитьОписаниеОшибки ()); КонецЕсли;
Пример 2: Необходимо передать данные о ценах в таблицу «ShopPrices» на MySQL сервер.
Таблица ShopPrices содержит следующие поля: Shop_ip, Nom_id, Price.
Функция ПолучитьДанныеПоЦенам() ДанныеДляОтправки = новый ТаблицаЗначений; ДанныеДляОтправки.Колонки.Добавить("Shop_ip"); ДанныеДляОтправки.Колонки.Добавить("Nom_id"); ДанныеДляОтправки.Колонки.Добавить("Price"); НСтрока = ДанныеДляОтправки.Добавить(); НСтрока.Shop_ip = "1002"; НСтрока.Nom_id = "f0013"; НСтрока.Price = "1500"; НСтрока = ДанныеДляОтправки.Добавить(); НСтрока.Shop_ip = "1002"; НСтрока.Nom_id = "f0014"; НСтрока.Price = "950"; возврат ДанныеДляОтправки; КонецФункции Процедура ОтправитьДанные() ИмяТаблицы = "ShopPrices"; ДанныеДляОтправки = ПолучитьДанныеПоЦенам(); обMySQLConnect = Обработки.MySQLConnect.Создать(); ПараметрыПодключения = новый Структура; ПараметрыПодключения.Вставить("Сервер" , "10.0.0.1"); ПараметрыПодключения.Вставить("Пользователь", "root"); ПараметрыПодключения.Вставить("Пароль" , "pass"); ПараметрыПодключения.Вставить("База" , "mysql"); обMySQLConnect.УстановитьПараметрыПодключения(ПараметрыПодключения); Если Не обMySQLConnect.ОтправитьДанныеПоПодготовленнойТаблице(ДанныеОтправки, ИмяТаблицы) Тогда Сообщить(обMySQLConnect. ПолучитьОписаниеОшибки ()); КонецЕсли; КонецПроцедуры;
Функция «ОтправитьДанныеПоПодготовленнойТаблице» автоматически разбивает данные на порции по 1000 строк (параметр настраивается).
Более подробную информацию можно посмотреть в комментариях кода обработки.
Этот код можно использовать для чтения баз MySQL на хостинге?
Я использую для работы с локальным MySQL, но никакой особой разницы нет.
Если Вам понадобиться для подключения указать какую-нибудь хитрую строку подключения, то никаких проблем.
Вы можете передать в функцию УстановитьПараметрыПодключения() непосредственно строку подключения (вторым параметром, первый в таком случае указывать не обязательно).
Обращаю Ваше внимание, что колонки ТЗ типизированные (строка(1024)) т.е. полученную таблицу можно использовать в качестве параметра запроса.
Полезная штука, применял подобное в процессе прикрутки 7.7 к asterisk.
Я использую для работы с кассовым сервером УКМ4.
Я подобную обработку делал для 7.7 и joomshoping:1с77-1c8x.ru . А недавно перешел на 8.1 и сейчас как раз задача стоит по настройке обмена с сайтом. Вовремя Ваша разработка здесь появилась! Спасибо!
Пользуйтесь. Будут вопросы/пожелания готов помочь 🙂
Тема интересная, но пишу тут только для подписки на тему . Сорри.
(6) aszoriy, а не пробовали под Linux?
(8) неа, но работать под linux без допила (или перепила) не будет. Это факт.
Благодарю!)
Пригодилось, когда стали внедрять УКМ 4
(11) coollerinc, выражаю свое глубочайшее соболезнование!
Компании с таким скотским отношением к клиентам как «Сервис+» с ее «УКМ4» стоит еще поискать.
огромное количество ошибок, крайне низкое знание своего продукта тех. поддержкой, релизы выпускают так, что вообще ничего не работает.
Наше желание в матрице скидок сравнивать % скидки (а не сумму вычисленную, зависящую от порядка применения скидок при последовательном применении) назвали «порочным». Так и написали нам (!) «Ваше желание порочно и мы не будем его реализовывать».
Наше желание получить скидку вида «Номер карты — %скидки» — по их словам «взорвало им мозг»
За доработку, которая бы предупреждала продавца о том, что он пытается применить 100% скидку запросили 200 т.р. — и еще по 100 т.р. за перенос этой доработки в каждый следующий релиз.
Если чек которым продается подарочная карта АННУЛИРОВАТЬ, то карта все равно АКТИВИРУЕТСЯ т.е. ею можно расплатиться. Что на это тех. поддержка ответила? «Не обращайте внимания, у нас таких ошибок много»
и много много много чего еще. Один сплошной негатив.
(12) aszoriy, спасибо за обработку. А можно ли сделать обновление данных ? Добавление и удаление нашел. Спасибо.
(13) fillipok, обновление данных, к сожалению, не реализовано (в прямом виде).
Сейчас есть два варианта обновления данных:
1. Вы можете выполнять обновление путем удаление данных (УдалитьДанныеПоПодготовленнойТаблице), а потом вставки новых (ОтправитьДанныеПоПодготовленнойТаблице). Не забываем про то, что таблицы должны в таком случае содержать все данные. Так же, такой подход не очень хорош если таблицы большие.
2. Вы можете сами собрать запрос типа «UPDATE» и выполнить его с помощью функции «ВыполнитьSQLЗапрос»
т.е. если вы знаете какое поле (поля) в каких таблицах (и по каким условиям) нужно обновить задача решается легко.
(14) aszoriy, понял, спасибо, попробую почитать, как это делается в MySQL по UPDATE.
Посмотрел синтаксис запроса, он оказался очень простой, так что можно и самому сделать ). Спасибо за наводку.