выгрузить из 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 Сейчас в теме
4. user1951498 30.05.23 08:54 Сейчас в теме
(3) Выгрузка данных в MySQ. выгрузка успешно но без данных
Еще вопрос я правильно указываю тёкшую дату?
(2)
6. RustamZz 30.05.23 09:09 Сейчас в теме
(4) Вы ее не используете. Возможно документов для выгрузки нет. Ну и ваш код не должен пройти синтаксический контроль, а не то что бы работать.
5. nomad_irk 67 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 Сейчас в теме
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 67 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 67 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 67 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 67 01.06.23 12:17 Сейчас в теме
(19)тут вы помещаете строку в некий ТекстовыйДокумент
21. user1951498 01.06.23 14:30 Сейчас в теме
(20) Большое спасибо все получилось после изменение запроса все данные передаются в БД, теперь начинается интересное по запросу надо поставить условия чтобы передавался только последний день
22. nomad_irk 67 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 67 07.06.23 16:33 Сейчас в теме
(24)В таблице завести Pkey, чтобы MySQL сам проверял уникальность записей в таблице

Либо в запросе 1с использовать конструкцию ВЫБРАТЬ РАЗЛИЧНЫЕ
26. user1951498 08.06.23 11:00 Сейчас в теме
Можете рассказать подробнее пожалуйста ?
Оставьте свое сообщение
Вакансии
Разработчик 1С (от middle до senior), до 300 К gross
Санкт-Петербург
зарплата от 195 000 руб. до 300 000 руб.
Полный день

Аналитик
Москва
зарплата от 150 000 руб.
Полный день

Разработчик 1С
Москва
зарплата от 150 000 руб.
Полный день

Программист 1С
Кемерово
зарплата от 80 000 руб. до 180 000 руб.
Полный день

Аналитик 1С:ЗУП
Москва
зарплата от 150 000 руб.
Полный день