Выгрузка из 1С в SQL одной процедурой

11.10.21

Интеграция - Внешние источники данных

Выгрузка данных в SQl. Обработка получает колонки и типы sql по названию таблицы. Формирует запрос к sql для выгрузки данных. Запрос 1С название колонок должен соответствовать названию колонок таблицы sql. Не надо отдельно обрабатывать строки, даты для выгрузки. Потому что они передаются в запрос как параметром.

Скачать файл

ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.

Наименование SM По подписке [?] Купить один файл
Выгрузка из 1с в SQL одной процедурой. :
.epf 9,08Kb
47
47
1 SM
Скачать Купить за 1 850 руб.

Процедура по выгрузке данных из 1C (таблица значений) в таблицу MS SQL SERVER

ВыгрузитьSQL(Connection,"Имя Таблици в SQL",ТаблицаЗначений,"Имя колонки в SQL для отбора where Имя колонки = значение");

И все!!! 

Сказки, не думаю!!!

Прикладываю вам обработку, где все процедуры описаны. Сама обработка не работает. В ней лежат только процедуры и функции. для личного использования и переноса их в свою базу.    

Данный код разработан на платформе 1С:Предприятие 8.3 (8.3.12.1924) ну предполагаю что данный код будет работать на всех платформах!!

Суть данного кода: 

Запросом обратиться к sql получить название и типы колонок. 

Для сопоставления колонок sql и 1с. для генерации запроса к sql. 

Подготовить таблицу значение для выгрузки в sql,  название колонок одинаковое. 

Генерируется запрос к sql

Вам не требуется обрабатывать строки для выгрузки (ООО "Спер'пупер"). Не надо обрабатывать даты. 

Все данные передаются параметром. Что и является большим плюсом данной обработки. 

После ознакомление с данными процедурами последующие выгрузки в sql у вас будет уходить не больше 5 минут. Для подготовки ТЗ для выгрузки. 

Последняя процедура по ТекстЗапросаSQLДобавлениеДанных. Но также вы найдете процедуры

 ТекстЗапросаSQLЗаписьДанных и ТекстЗапросаSQLУдалениеДанных.  

См. также

Внешние источники данных Программист Бизнес-аналитик Пользователь Платформа 1С v8.3 Управляемые формы Анализ и прогнозирование Конфигурации 1cv8 Узбекистан Беларусь Кыргызстан Молдова Россия Казахстан Платные (руб)

Готовое решение для автоматической выгрузки данных из 1С 8.3 в базу данных ClickHouse, PostgreSQL или Microsoft SQL для работы с данными 1С в BI-системах. «Экстрактор данных 1С в BI» работает со всеми типовыми и нестандартными конфигурациями 1С 8.3 и упрощает работу бизнес-аналитиков. Благодаря этому решению, специалистам не требуется быть программистами, чтобы легко получать данные из 1С в вашей BI-системе.

15.11.2022    18916    17    SQV0    49    

37

Зарплата Внешние источники данных Бюджетный учет Перенос данных 1C Системный администратор Программист Платформа 1С v8.3 Сложные периодические расчеты 1С:Зарплата и кадры государственного учреждения 3 Государственные, бюджетные структуры Россия Бухгалтерский учет Бюджетный учет Платные (руб)

Обработка позволяет перенести кадровую информацию и данные по заработной плате, фактических удержаниях, НДФЛ, вычетах, страховых взносах из базы Парус 8 учреждений в конфигурацию 1С:Зарплата и кадры государственного учреждения ред. 3 (ЗГУ) и начать с ней работать с любого месяца года.

84000 руб.

19.08.2020    24018    22    1    

24

Внешние источники данных Кадровый учет Файловый обмен (TXT, XML, DBF), FTP Перенос данных 1C Программист Платформа 1С v8.3 Сложные периодические расчеты 1С:Зарплата и кадры государственного учреждения 3 Государственные, бюджетные структуры Россия Бухгалтерский учет Бюджетный учет Платные (руб)

Обработка позволяет перенести кадровую информацию и данные по заработной плате, фактических удержаниях, НДФЛ, вычетах, страховых взносах из базы Парус 10 учреждений в конфигурацию 1С:Зарплата и кадры государственного учреждения ред. 3 (ЗГУ) и начать с ней работать с любого месяца года.

60000 руб.

05.10.2022    10245    11    8    

13

Производство готовой продукции (работ, услуг) Внешние источники данных Платформа 1С v8.3 1С:Управление нашей фирмой 1.6 Лесное и деревообрабатывающее хозяйство Россия Управленческий учет Платные (руб)

Обработка предназначена для загрузки файлов, выгруженных из системы Базис-мебельщик, в справочник 1С "Спецификации" для последующих процессов учета и диспетчирования полуфабрикатов и изделий.

10200 руб.

24.06.2021    20170    55    53    

33

Внешние источники данных Загрузка и выгрузка в Excel Зарплата Бюджетный учет Системный администратор Программист Платформа 1С v8.3 Сложные периодические расчеты 1С:Зарплата и кадры государственного учреждения 3 Государственные, бюджетные структуры Россия Бухгалтерский учет Бюджетный учет Платные (руб)

Обработка позволяет перенести кадровую информацию и данные по заработной плате из Парус 10(Торнадо) учреждений через файлы Excel в конфигурацию 1С:Зарплата и кадры государственного учреждения ред. 3 (ЗГУ). В принципе, обработка может быть использована для загрузки из файлов Excel, полученных из любых информационных систем.

48000 руб.

16.11.2018    30568    21    31    

22

Внешние источники данных Зарплата Бюджетный учет Программист Бухгалтер Платформа 1С v8.3 Сложные периодические расчеты 1С:Зарплата и кадры государственного учреждения 3 Государственные, бюджетные структуры Россия Бухгалтерский учет Бюджетный учет Платные (руб)

Обработка позволяет перенести кадровую информацию и данные по заработной плате, фактических удержаниях, НДФЛ, вычетах, страховых взносах из базы Парус 7.хх учреждений в конфигурацию 1С:Зарплата и кадры государственного учреждения ред. 3 (ЗГУ) и начать с ней работать с любого месяца года.

48000 руб.

24.04.2017    50110    98    165    

87
Отзывы
6. G_103584063859953842340 14 13.10.21 09:59 Сейчас в теме
(5) за место ? sql сам подставляет параметры
но вы сами можете проверить запрос заместо ? подставить параметры
посмотрите свои типы колонок

C_Char у вас тип char можно поменять на varchar(50) или varchar(MAX)

запрос должен получиться таким

SET NOCOUNT ON
IF OBJECT_ID(N'tempdb..#TT1', N'U') IS NOT NULL DR OP TABLE #TT1
Cre ate table #TT1 (C_DateTime datetime,C_Char varchar(50),C_Numeric numeric)
Ins ert in to #TT1 (C_DateTime, C_Char, C_Numeric)
VALUES
('20211003', 'Привет', 1)
INSERT Table_1 (C_Numeric, C_Char, C_DateTime) SEL ECT TT.C_Numeric, TT.C_Char, TT.C_DateTime FR OM #TT1 as TT Left JOIN Table_1 as OL on OL.C_Char = TT.C_Char
WHERE OL.C_Char IS NULL
Остальные комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. Nevskiy83 4 11.10.21 09:06 Сейчас в теме
Добрый день! Интересная разработка, спасибо. Правда не ясно при попытке использования, не находит модули АлгоритмыКлиентСервер и РаботаСMSSQL. Конфигурация ERP 2.5.6.124. 1С:Предприятие 8.3 (8.3.19.1264). Где их взять? Спасибо.
2. G_103584063859953842340 14 11.10.21 09:32 Сейчас в теме
(1)
РаботаСMSSQL


Ну хто кто та написал. На АлгоритмыКлиентСервер можете не обращать внимание и проста удалить строки.
По поводу РаботаСMSSQL прикладываю вам процедуру.

Саму обработку поправлю что бы небыло таких вопросов.

Функция ВыполнитьЗапрос(ПодключениеSQL, ТекстЗапроса, Кэшировать = Ложь, Command = Неопределено, Таймаут = 0) Экспорт 
	
	
	//возвратная переменная Command введена для случаев выполнения большого количества однотипных запросов
	Если ПодключениеSQL = Неопределено Тогда
		
		Возврат Неопределено;
		
	КонецЕсли;
	
	Попытка
		
		Если Command = Неопределено Тогда //если не инициализирован - создаем, иначе экономим на этом
			
			Command = Новый COMОбъект("ADODB.Command");
			Command.ActiveConnection = ПодключениеSQL;
			
			Если Таймаут > 0 Тогда
				
				Command.CommandTimeout = Таймаут;
				
			КонецЕсли;
			
			Command.CommandText = ТекстЗапроса;
			
		КонецЕсли;	
		
	Исключение
		
		ТекстОшибки = "Ошибка исполнения запроса к БД (" + ТекстЗапроса + ") " + Символы.ПС 
			+ СтроковыеФункцииКлиентСервер.ПолучитьПредставлениеОшибки(ИнформацияОбОшибке());
				
		ОбменСообщениямиБСП.ЗарегистрироватьОшибкуДляАдминистратора(ТекстОшибки, "Критический", "ИсточникиОшибкиЧтения");
			
		Возврат Неопределено;
		
	КонецПопытки; 
	
	Попытка
	
		Если Не Кэшировать Тогда
			
			Command.CommandText = ТекстЗапроса;
			Result = Command.Execute();
			Возврат Result;
			
		Иначе 
			
			Command.CommandText = ТекстЗапроса;
			
			Recordset = Новый COMОбъект("ADODB.Recordset");
			Recordset.CacheSize = 300;
			
			Recordset.Open(Command);
			
			Возврат Recordset;
			
		КонецЕсли;
			
	Исключение
			
		ТекстОшибки = "Ошибка исполнения запроса к БД (" + ТекстЗапроса + ") " + Символы.ПС 
			+ СтроковыеФункцииКлиентСервер.ПолучитьПредставлениеОшибки(ИнформацияОбОшибке());
			
		ОбменСообщениямиБСП.ЗарегистрироватьОшибкуДляАдминистратора(ТекстОшибки, "Критический", "ИсточникиОшибкиЧтения");
			
		Возврат Неопределено;
			
	КонецПопытки;
	
КонецФункции
Показать
3. Nevskiy83 4 11.10.21 11:10 Сейчас в теме
4. Nevskiy83 4 12.10.21 15:43 Сейчас в теме
Как-то не получается записать данные в уже существующую таблицу в SQL. Создал таблицу в SQL

C_DateTime Тип Дата
C_Char Тип Строка
C_Numeric Тип Число

Создаю ТЗ:

	
ТЗ = Новый ТаблицаЗначений;
ТЗ.Колонки.Добавить("C_DateTime", Новый ОписаниеТипов("Дата"));
ТЗ.Колонки.Добавить("C_Char", Новый ОписаниеТипов("Строка"));
ТЗ.Колонки.Добавить("C_Numeric", Новый ОписаниеТипов("Число")); 

СтрТЗ = ТЗ.Добавить();
СтрТЗ.C_DateTime 	= ДатаВSQL;
СтрТЗ.C_Char 		= СтрокаВSQL;
СтрТЗ.C_Numeric 	= Формат(ЧислоВSQL,"ЧГ=");

РаботаСВнешнимиИсточниками.ВыгрузитьSQL(Соединение,"Table_1",ТЗ,"C_Char");

Показать


В результате получаю ошибку

Ошибка исполнения запроса к БД (SET NOCOUNT ON
IF OBJECT_ID(N'tempdb..#TT1', N'U') IS NOT NULL DR OP TABLE #TT1
Cre ate table #TT1 (C_DateTime datetime,C_Char char,C_Numeric numeric)
Ins ert in to #TT1 (C_DateTime, C_Char, C_Numeric)
VALUES
(?, ?, ?)
INSERT Table_1 (C_Numeric, C_Char, C_DateTime) SEL ECT TT.C_Numeric, TT.C_Char, TT.C_DateTime FR OM #TT1 as TT Left JOIN Table_1 as OL on OL.C_Char = TT.C_Char
WHERE OL.C_Char IS NULL
)
{ОбщийМодуль.ас_РаботаСMSSQL.Модуль(45)}: Ошибка при вызове метода контекста (Execute): Произошла исключительная ситуация (Microsoft OLE DB Provider for ODBC Drivers): Отсутствует значение для одного или нескольких требуемых параметров.

Показать


Что я делаю не так?
5. Nevskiy83 4 12.10.21 18:26 Сейчас в теме
(4)По-моему вместо вопросов должны быть параметры?
6. G_103584063859953842340 14 13.10.21 09:59 Сейчас в теме
(5) за место ? sql сам подставляет параметры
но вы сами можете проверить запрос заместо ? подставить параметры
посмотрите свои типы колонок

C_Char у вас тип char можно поменять на varchar(50) или varchar(MAX)

запрос должен получиться таким

SET NOCOUNT ON
IF OBJECT_ID(N'tempdb..#TT1', N'U') IS NOT NULL DR OP TABLE #TT1
Cre ate table #TT1 (C_DateTime datetime,C_Char varchar(50),C_Numeric numeric)
Ins ert in to #TT1 (C_DateTime, C_Char, C_Numeric)
VALUES
('20211003', 'Привет', 1)
INSERT Table_1 (C_Numeric, C_Char, C_DateTime) SEL ECT TT.C_Numeric, TT.C_Char, TT.C_DateTime FR OM #TT1 as TT Left JOIN Table_1 as OL on OL.C_Char = TT.C_Char
WHERE OL.C_Char IS NULL
7. Nevskiy83 4 13.10.21 10:16 Сейчас в теме
(6) Спасибо с char разобрался. Запрос работает, если его проверить в студии заменив ? на параметры, но не выполняется из 1С, хотя параметры устанавливаются.

Ошибка исполнения запроса к БД (SET NOCOUNT ON
IF OBJECT_ID(N'tempdb..#TT1', N'U') IS NOT NULL DR OP TABLE #TT1
Cre ate table #TT1 (C_DateTime datetime,C_Char char(50),C_Numeric numeric)
Ins ert in to #TT1 (C_DateTime, C_Char, C_Numeric)
VALUES
(?, ?, ?)
INSERT Table_1 (C_Numeric, C_Char, C_DateTime) SEL ECT TT.C_Numeric, TT.C_Char, TT.C_DateTime FR OM #TT1 as TT Left JOIN Table_1 as OL on OL.C_Char = TT.C_Char
WHERE OL.C_Char IS NULL
)
{ОбщийМодуль.РаботаСMSSQL.Модуль(45)}: Ошибка при вызове метода контекста (Execute): Произошла исключительная ситуация (Microsoft OLE DB Provider for ODBC Drivers): Произошли ошибки во время выполнения многошаговой операции OLE DB. По возможности, проверьте значения всех состояний OLE DB. Работа не выполнена.
8. G_103584063859953842340 14 13.10.21 10:36 Сейчас в теме
(7)
Microsoft OLE DB Provider for ODBC Drivers

скорей всего проблема с драйвером
Посмотрите вот тут может найдете решение
https://forum.infostart.ru/forum9/topic80735/
9. Nevskiy83 4 13.10.21 10:40 Сейчас в теме
(8)При этом запрос на получение структуры таблицы отрабатывает
10. G_103584063859953842340 14 13.10.21 11:04 Сейчас в теме
в общем когда что-то пытаешься передать не перевариваемое драйвером...
все от драйвера еще зависит ....
например 1с использует драйвер, в котором именованные параметры не работают - только по номеру параметра
Гуглить и пытаться разобраться
какой драйвер вы используете?
11. Nevskiy83 4 13.10.21 14:40 Сейчас в теме
(10)Строку соединения прописывал так
Соединение.ConnectionString =
            "driver={SQL Server};" +
            "server="+ИмяСервераSQL+";"+
            "uid="+ПользовательSQL+";"+
            "pwd="+ПарольSQL+";"+
            "database="+БазаДанныхSQL+";"
12. Nevskiy83 4 13.10.21 15:19 Сейчас в теме
(11)Изменил на
        Соединение.ConnectionString =
			//"driver={SQL Server};" +
			"driver={ODBC Driver 17 for SQL Server};" +
            "server="+ИмяСервераSQL+";"+
            "uid="+ПользовательSQL+";"+
            "pwd="+ПарольSQL+";"+
            "database="+БазаДанныхSQL+";"+
			"Trusted_Connection=yes;";
Показать


Драйвер последней версии 178.01.01. Результат тот же
13. Nevskiy83 4 13.10.21 15:49 Сейчас в теме
(12)Разобрался. Не нравился тип numeric. Поменял на integer и все заработало :)
14. G_103584063859953842340 14 13.10.21 17:36 Сейчас в теме
(13) поздравляю )
Рад что у Вас все получилось
Оставьте свое сообщение