Заказы на доработку 1С (сервис удаленной работы)

Хранилище

База знаний
Неназначенных незавершенных заказов: 4
Бесплатные отчеты, обработки, конфигурации, внешние компоненты для 1С Статьи, описание работы, методики по работе с 1С

Здравствуйте, гость ( Вход | Зарегистрироваться )



> Выгрузка в базу MySQL          
kayfatuch Подменю пользователя
сообщение 18.07.24, 18:46
Сообщение #1

Общительный
**
Группа: Пользователи
Сообщений: 38
Из: Кривой Рог
Спасибо сказали: 2 раз
Рейтинг: 2

Приветствую дорогие форумчане, прошу помощи. Накатал код по данным из нета на выгрузку справочника в базу MySQL но уже не знаю как менять эту конструкцию. Основная проблема это цикл для записи данных. Прошу помощи, 1с 7.7 ТиС для Украины пример кода прилагаю.
Процедура Выполнить()
    Попытка
        DB = СоздатьОбъект("ADODB.Connection");
    Исключение
        Сообщить("Ошибка создания объекта ADODB.Connection: " + ОписаниеОшибки());
        Возврат;
    КонецПопытки;
    
    СтрокаСоединения = "DSN=Kontakt_x86;UID=***;PWD=***;CHARSET=cp1251";
    
    Попытка
        DB.Open(СтрокаСоединения);
    Исключение
        Сообщить("Ошибка соединения с базой данных: " + ОписаниеОшибки());
        Возврат;
    КонецПопытки;
    
    // Получение данных из справочника "Дисконт"
    Запрос = СоздатьОбъект("Запрос");
    Запрос.Текст =
        "ВЫБРАТЬ Код, ШтрихКод, ФИО, Телефон, ID_TG " +
        "ИЗ Справочник.Дисконт";
    
    Попытка
        Результат = Запрос.Выполнить();
    Исключение
        Сообщить("Ошибка выполнения запроса: " + ОписаниеОшибки());
        Возврат;
    КонецПопытки;

    Если Результат.Пустой() Тогда
        Сообщить("Справочник 'Дисконт' пуст.");
        Возврат;
    КонецЕсли;

    Выборка = Результат.Выбрать();
    
    Пока Выборка.НайтиСледующий() = 1 Цикл
        Код = Выборка.Код;
        ШтрихКод = Выборка.ШтрихКод;
        ФИО = Выборка.ФИО;
        Телефон = Выборка.Телефон;
        ID_TG = Выборка.ID_TG;

        // Формирование SQL-запроса для вставки данных
        SQL = "INSERT INTO discont (code, barcode, full_name, phone_number, tg_id) " +
              "VALUES ('" + Код + "', '" + ШтрихКод + "', '" + ФИО + "', '" + Телефон + "', '" + ID_TG + "')";
        
        Попытка
            DB.Execute(SQL);
        Исключение
            Сообщить("Ошибка выполнения SQL-запроса: " + ОписаниеОшибки());
        КонецПопытки;
    КонецЦикла;
    
    Сообщить("Выгрузка данных завершена успешно.");
КонецПроцедуры

kayfatuch Подменю пользователя
сообщение 18.07.24, 23:27
Сообщение #2

Общительный
**
Группа: Пользователи
Сообщений: 38
Из: Кривой Рог
Спасибо сказали: 2 раз
Рейтинг: 2

Прошу прощения можно закрывать тему. Вопрос решил по другому. Всем спасибо

Спасибо сказали: AnryMc,

kayfatuch Подменю пользователя
сообщение 23.07.24, 11:33
Сообщение #3

Общительный
**
Группа: Пользователи
Сообщений: 38
Из: Кривой Рог
Спасибо сказали: 2 раз
Рейтинг: 2

Я не позиционирую это как 100% верный код но он рабочий и может кому-то пригодится в разработке.
Процедура Выполнить()
    Попытка
        DB = СоздатьОбъект("ADODB.Connection");
    Исключение
        Сообщить("Ошибка создания объекта ADODB.Connection: " + ОписаниеОшибки());
        Возврат;
    КонецПопытки;
    
    СтрокаСоединения = "DSN=ваш DSN;UID=логин;PWD=пароль;CHARSET=cp1251";
    
    Попытка
        DB.Open(СтрокаСоединения);
    Исключение
        Сообщить("Ошибка соединения с базой данных: " + ОписаниеОшибки());
        Возврат;
    КонецПопытки;
    
    Запрос = СоздатьОбъект("Запрос");
    ТекстЗапроса =
    "//{{ЗАПРОС(Выполнить)
    |ОбрабатыватьДокументы все;
    |Код = Справочник.Дисконт.Код;
    |ШтрихКод = Справочник.Дисконт.ШтрихКод;
    |ФИО = Справочник.Дисконт.Наименование;
    |Телефон = Справочник.Дисконт.Телефон;
    |Группировка Код;
    |"//}}ЗАПРОС
;
    // Если ошибка в запросе, то выход из процедуры
    Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда
        Возврат;
    КонецЕсли;
    
    Пока Запрос.Группировка(1) = 1 Цикл
        Код = Запрос.Код;
        ШтрихКод = Запрос.ШтрихКод;
        ФИО = Запрос.ФИО;
        Телефон = Запрос.Телефон;

        // Формирование SQL-запроса для вставки данных
        SQL = "INSERT INTO discont (code, barcode, full_name, phone_number) " +
              "VALUES ('"+Код+"', '"+ШтрихКод+"', '"+ФИО+"', '"+Телефон+"')";
        
        Попытка
            DB.Execute(SQL);
        Исключение
            Сообщить("Ошибка выполнения SQL-запроса: " + ОписаниеОшибки());
        КонецПопытки;
    КонецЦикла;
    
    Сообщить("Выгрузка данных завершена успешно.");
КонецПроцедуры

sava1 Подменю пользователя
сообщение 23.07.24, 12:54
Сообщение #4

Живет на форуме
Иконка группы
Группа: Местный
Сообщений: 2717
Из: Проскуров
Спасибо сказали: 693 раз
Рейтинг: 671.9

вообще-то уходим от цикла так -

ТекстЗапрос = "UPDATE orders SET `status`="+Выборка.Статус+ " WHERE id = ";
        Сч = 0;
        Пока ВыборкаДетЗаписи.Следующий() Цикл
            Если Сч <> 0 Тогда
                ТекстЗапрос = ТекстЗапрос +  " OR id= ";    
            КонецЕсли;
            ТекстЗапрос = ТекстЗапрос + ВыборкаДетЗаписи.ВебЗаказ;            
            Сч = Сч + 1;    
        КонецЦикла;
        
        Command.CommandText = ТекстЗапрос;
        Command.ActiveConnection = Connection;
        Command.CommandType = 1;
        Command.Execute();


Не нашли ответа на свой вопрос?
Зарегистрируйтесь и задайте новый вопрос.


Ответить Новая тема
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 

RSS Текстовая версия Сейчас: 08.12.24, 21:09
1С Предприятие 8.3, 1С Предприятие 8.2, 1С Предприятие 8.1, 1С Предприятие 8.0, 1С Предприятие 7.7, Литература 1С, Общие вопросы по администрированию 1С, Методическая поддержка 1С - всё в одном месте: на Украинском 1С форуме!