выгрузить из 1с в mysql

1. user1951498 30.05.23 08:18 Сейчас в теме
Добрый день! уважаемые участники, я первый раз работаю в 1С. помогите решить задачу выгрузке некоторых данных с 1С Документы в mysql
в общем Задача такая Каждый день после заполнения данных выгружает в mysql
Но у меня выгрузить данные не получается
&НаКлиенте
Процедура ДействияФормыВыгрузкаГород(Кнопка)
	
	СтрокаПодключения = "DRIVER={MySQL ODBC 8.0 ANSI Driver};SERVER=localhost;DATABASE=btu;USER=root;PASSWORD=;";
	Соединение = Новый COMОбъект("ADODB.Connection");
	Попытка 
	Соединение.Open(СтрокаПодключения); 
	Исключение
	Сообщить("Ошибка подключение - " + ОписаниеОшибки());
	КонецПопытки;
	 
	Запрос = Новый Запрос;
	ТекущаяДата = ТекущаяДата();
	Запрос.Текст ="ВЫБРАТЬ 
	|бту_ПутевойЛист.Дата,
	|бту_ПутевойЛист.Депо.Наименование,
	|бту_ПутевойЛист.НомерМаршрута,
	|бту_ПутевойЛист.НомерВыхода,
	|бту_ПутевойЛист.ТипРасписания,
	|бту_ПутевойЛист.Троллейбус1,
	|бту_ПутевойЛист.Троллейбус2,
	|бту_ПутевойЛист.Водитель1.ФизЛицо,
	|бту_ПутевойЛист.Водитель2.ФизЛицо
	|ИЗ
	|Документ.бту_ПутевойЛист КАК бту_ПутевойЛист"; 
	

	
	Выбрать = Запрос.Выполнить().Выбрать();
	
		//Выборка=РезультатЗапроса.Выбрать();
		Пока Выбрать.Следующий() Цикл
        ЗапросInsert = Новый Запрос;
	    ЗапросInsert.Текст = "INS ERT IN TO btu_waybill (date, depo, route_number, exit_number, schedule_type, trolleybus1, trolleybus2, driver1, driver2 )VALUES (:Дата, :Депо, :НомерМаршрута, :НомерВыхода, :ТипРасписания, :Тролейбус1, :Тролейбус2, :Водитель1, :Водитель2 )";
		ЗапросInsert.УстановитьПараметр("Дата", Выбрать.Дата);                         
		ЗапросInsert.УстановитьПараметр("Депо", Выбрать.Выбрать());
		ЗапросInsert.УстановитьПараметр("НомерМаршрута", Выбрать.НомерМаршрута);
		ЗапросInsert.УстановитьПараметр("НомерВыхода", Выбрать.НомерВыхода);
		ЗапросInsert.УстановитьПараметр("ТипРасписания", Выбрать.ТипРасписания);
		ЗапросInsert.УстановитьПараметр("Троллейбус1", Выбрать.Троллейбус1);
		ЗапросInsert.УстановитьПараметр("Троллейбус2", Выбрать.Троллейбус2);
		//ЗапросInsert.УстановитьПараметр("Водитель1", Выбрать.());
		//ЗапросInsert.УстановитьПараметр("Водитель2", Выбрать.Водитель2())                   
      		
	КонецЦикла;

    Сообщить("Выгрузка данных в MySQL завершена.");
КонецПроцедуры
Показать
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. RustamZz 30.05.23 08:45 Сейчас в теме
(1) Ошибка-то хоть какая?
4. user1951498 30.05.23 08:54 Сейчас в теме
(3) Выгрузка данных в MySQ. выгрузка успешно но без данных
Еще вопрос я правильно указываю тёкшую дату?
(2)
6. RustamZz 30.05.23 09:09 Сейчас в теме
(4) Вы ее не используете. Возможно документов для выгрузки нет. Ну и ваш код не должен пройти синтаксический контроль, а не то что бы работать.
5. nomad_irk 72 30.05.23 09:09 Сейчас в теме
(1)Выполнять ЗапросInsert кто за вас будет?

судя по коду, оно вообще не будет работать, потому что нужно использовать инициированное Соединение и весь код должен пройти синтаксический контроль.
user1671936; +1 Ответить
3. user1951498 30.05.23 08:48 Сейчас в теме
там без ошибки, код срабатывает но данные не отображается в БД mysql
7. anton13m 2 30.05.23 10:05 Сейчас в теме
(3)
ЗапросInsert = Новый Запрос;
Это вы делаете в 1С. Вам же через com-объект нужно.
Результат = Соединение.Execute(ТекстЗапроса); 
user1671936; +1 Ответить
8. user1951498 30.05.23 10:18 Сейчас в теме
(7)
Результат = Соединение.Execute(ТекстЗапроса);


Щас попробую
9. user1951498 30.05.23 11:31 Сейчас в теме
Не получилось. Слишком туплю
10. anton13m 2 30.05.23 11:35 Сейчас в теме
(9)
Ну почитай документацию для начала, первая ссылка в поиске
11. user1951498 31.05.23 12:51 Сейчас в теме
запрос я чуть поменял

conn = Новый COMОбъект("ADODB.Connection");
    ConnectionString = "DRIVER={MySQL ODBC 5.3 Unicode};SERVER=localhost;DATABASE=btu;USER=root;PASSWORD=;";
    Попытка 
        conn.open(ConnectionString); 
    Исключение
        Сообщить("Ошибка подключения - " + ОписаниеОшибки());
        Возврат;
	КонецПопытки;
		
	Запрос = Новый Запрос;
	Запрос.Текст = 
		"ВЫБРАТЬ
		|	ПутевойЛист.Ссылка,
		|	ПутевойЛист.Дата,
		|	ПутевойЛист.Депо,
		|	ПутевойЛист.НомерМаршрута,
		|	ПутевойЛист.НомерВыхода,
		|	ПутевойЛист.ТипРасписания,
		|	ПутевойЛист.Троллейбус1,
		|	ПутевойЛист.Троллейбус2,
		|	ПутевойЛист.Водитель1
		|ИЗ
		|	Документ.ПутевойЛист КАК ПутевойЛист";
	
	РезультатЗапроса = Запрос.Выполнить();
	
	ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
	
	Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
		КонецЦикла;
    Попытка
        conn.execute("INS ERT IN TO btu_waybill (waybill, date, depo, route_number, exit_number, schedule_type, trolleybus1, trolleybus2, driver1, driver2)VALUES (:Ссылка,:Дата, :Депо, :НомерМаршрута, :НомерВыхода, :ТипРасписания, :Тролейбус1, :Тролейбус2, :Водитель1, :Водитель2 )");
    Исключение
        Сообщить("Ошибка выполнения запроса - " + ОписаниеОшибки());
    КонецПопытки;

    conn.Close();
Показать

теперь ошибка выходить

Ошибка подключения - {Документ.ПутевойЛист.Форма.ФормаСписка.Форма(171)}: Ошибка при вызове метода контекста (Open): Произошла исключительная ситуация (Microsoft OLE DB Provider for ODBC Drivers): [Microsoft][Диспетчер драйверов ODBC] Источник данных не найден и не указан драйвер, используемый по умолчанию


какой драйвер правильный поставить ?

у меня xampp версия mysql 10.4.13-MariaDB
Прикрепленные файлы:
12. user1951498 31.05.23 12:53 Сейчас в теме
через драйвер 8.0 и 5.3 тоже попробовал не получается ошибка тоже самое
13. nomad_irk 72 31.05.23 14:58 Сейчас в теме
(12)У вас в ОС нет драйвера ODBC c именем "MySQL ODBC 5.3 Unicode", вижу, что есть с именем "MySQL ODBC 5.3 ANSI Driver.....", но он для X86 - это важно
14. user1951498 31.05.23 16:07 Сейчас в теме
(13)удалил лишний драйвера установил Х86 драйвер 5.3 но теперь выходить другая ошибка

вот само ConnectionString
conn = Новый COMОбъект("ADODB.Connection");
	ConnectionString = "DRIVER={MySQL ODBC 5.3 Unicode DRIVER};SERVER=localhost;DATABASE=btu;USER=root;PASSWORD=;";
	Попытка 
	    conn.open(ConnectionString); 
	Исключение
	    Сообщить("Ошибка подключения - " + ОписаниеОшибки());
	    Возврат;
	КонецПопытки;
Показать

вот код ошибки

Ошибка выполнения запроса - {Документ.бту_ПутевойЛист.Форма.ФормаСписка.Форма(201)}: Ошибка при вызове метода контекста (Execute): Произошла исключительная ситуация (Microsoft OLE DB Provider for ODBC Drivers): [MySQL][ODBC 5.3(w) Driver][mysqld-5.5.5-10.4.13-MariaDB]You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near ':Ссылка,:Дата, :Депо, :НомерМаршрута, :Номер...' at line 1

посоветуйте мне как исправить,
как можно проверить какая версия более подходящая ?
15. nomad_irk 72 31.05.23 16:22 Сейчас в теме
(14)не верно написан текст запроса: ":Ссылка,:Дата, :Депо, :НомерМаршрута, :Номер..." неизвестны СУБД MySQL
Вариантов решения 2:
1.Собирать текст запроса динамически, преобразовав все нужные значения к строковым
2. Написать запрос с параметрами и передавать значения в них
16. user1951498 01.06.23 10:57 Сейчас в теме
Чуток переделал запрос,

ошибка в том что нет записи в БД

но при нажатия на кнопку
минут две кружить и приходить ответ Сообщить("Выгрузка данных в MySQL завершена.");
где допустил ошибку ?

&НаКлиенте
Процедура ДействияФормыВыгрузкаГород(Кнопка)
	
	СтрокаПодключения = "DRIVER={MySQL ODBC 8.0 ANSI Driver};SERVER=localhost;DATABASE=btu;USER=root;PASSWORD=;";
	conn = Новый COMОбъект("ADODB.Connection");
	Попытка 
	conn.Open(СтрокаПодключения); 
	Исключение
	Сообщить("Ошибка подключение - " + ОписаниеОшибки());
	КонецПопытки;
	
	ТекстовыйДок = Новый ТекстовыйДокумент;
	
	Запрос = Новый Запрос; 	
	Запрос.Текст =
	"ВЫБРАТЬ
	|ПутевойЛист.Дата,
	|ПутевойЛист.Депо,
	|ПутевойЛист.НомерМаршрута,
	|ПутевойЛист.НомерВыхода,
	|ПутевойЛист.ТипРасписания,
	|ПутевойЛист.Троллейбус1,
	|ПутевойЛист.Троллейбус2,
	|ПутевойЛист.Водитель1,
	|ПутевойЛист.Водитель2
	|ИЗ
	|Документ.ПутевойЛист КАК ПутевойЛист";

	 РезультатЗапроса = Запрос.Выполнить();
	 
	 ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();

	РезультатЗапроса = Запрос.Выполнить();
	
	Выборка = РезультатЗапроса.Выбрать();
	 
	Пока Выборка.Следующий() Цикл 	
		
		ТекстовыйДок.ДобавитьСтроку("$qury1 = mysqli_query($link, ""INS ERT IN TO btu_waybill (date, depo, route_number, exit_number, schedule_type, trolleybus1, trolleybus2, driver1, driver2) VALUES ('"+Выборка.Дата+"', '"+Выборка.Депо+"' '"+Выборка.НомерМаршрута+"', '"+Выборка.НомерВыхода+"', '"+Выборка.ТипРасписания+"','"+Выборка.Троллейбус1+"', '"+Выборка.Троллейбус2+ "', '"+Выборка.Водитель1+"', '"+Выборка.Водитель2+"')"")");
		КонецЦикла;
	
	Сообщить("Выгрузка данных в MySQL завершена.");
	
	КонецПроцедуры
Показать
17. nomad_irk 72 01.06.23 11:49 Сейчас в теме
(16)сколько еще раз нужно повторить, что сформировать текст запроса - это только часть решения задачи, остальная часть - чтобы сформированный текст запроса прошел синтаксический контроль и сформированный запрос таки выполнился

Сформированный текст запроса необходимо выполнить, а не просто сохранить его в ОЗУ и надеятся на то, что 1с дальше сама догадается, что делать со всем этим добром, что написано в коде.
19. user1951498 01.06.23 12:05 Сейчас в теме
(17) я думал тут передаю в БД результат запроса


Пока Выборка.Следующий() Цикл

ТекстовыйДок.ДобавитьСтроку("$qury1 = mysqli_query($link, ""INS ERT IN TO btu_waybill (date, depo, route_number, exit_number, schedule_type, trolleybus1, trolleybus2, driver1, driver2) VALUES ('"+Выборка.Дата+"', '"+Выборка.Депо+"' '"+Выборка.НомерМаршрута+"', '"+Выборка.НомерВыхода+"', '"+Выборка.ТипРасписания+"','"+Выборка.Троллейбус1+"', '"+Выборка.Троллейбус2+ "', '"+Выборка.Водитель1+"', '"+Выборка.Водитель2+"')"")");
КонецЦикла;
20. nomad_irk 72 01.06.23 12:17 Сейчас в теме
(19)тут вы помещаете строку в некий ТекстовыйДокумент
21. user1951498 01.06.23 14:30 Сейчас в теме
(20) Большое спасибо все получилось после изменение запроса все данные передаются в БД, теперь начинается интересное по запросу надо поставить условия чтобы передавался только последний день
22. nomad_irk 72 01.06.23 15:17 Сейчас в теме
(21)
Выбрать
     Максимум(Дата) КАК Дата
ПОМЕСТИТЬ ВТСрезПоследних
ИЗ
    Документ.ПутевойЛист
;
Выбрать
    Т1.Дата,
    Т2.Депо,
    Т2.НомерМаршрута,
    Т2.НомерВыхода,
    Т2.ТипРасписания,
    Т2.Троллейбус1,
    Т2.Троллейбус2,
    Т2.Водитель1,
    Т2.Водитель2
ИЗ
     ВТСрезПоследних КАК Т1
           Левое СОЕДИНЕНИЕ Документ.ПутевойЛист КАК Т2
           ПО Т1.Дата = Т2.Дата
Показать
18. пользователь 01.06.23 12:02
Сообщение было скрыто модератором.
...
23. user1951498 01.06.23 15:27 Сейчас в теме
спасибо! теперь на реальном сервере попробую это все
24. user1951498 07.06.23 16:12 Сейчас в теме
Добрый день! В 1С select запрос на mysql БД, как можно проверить на уникальность записи в бд прежде чем делать insert в БД mysql ?
25. nomad_irk 72 07.06.23 16:33 Сейчас в теме
(24)В таблице завести Pkey, чтобы MySQL сам проверял уникальность записей в таблице

Либо в запросе 1с использовать конструкцию ВЫБРАТЬ РАЗЛИЧНЫЕ
26. user1951498 08.06.23 11:00 Сейчас в теме
Можете рассказать подробнее пожалуйста ?
27. nomad_irk 72 08.06.23 11:33 Сейчас в теме
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот