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

11.10.21

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

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

Скачать файл

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

Наименование По подписке [?] Купить один файл
Выгрузка из 1с в SQL одной процедурой. :
.epf 9,08Kb ver:1.2
52
52 Скачать (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 Управляемые формы Анализ и прогнозирование 1C:Бухгалтерия Узбекистан Беларусь Кыргызстан Молдова Россия Казахстан Платные (руб)

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

28500 руб.

15.11.2022    24093    29    49    

42

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

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

120000 руб.

19.08.2020    27281    26    1    

28

Розничная торговля Внешние источники данных Файловый обмен (TXT, XML, DBF), FTP Системный администратор Программист Бухгалтерский учет 1С:Бухгалтерия 3.0 Фармацевтика, аптеки Россия Бухгалтерский учет Платные (руб)

Внешняя обработка загрузки данных из файла-выгрузки, сформированного в программе F3 TAIL версии 3.4 (и выше) или еФарма версии 2.1, в базу конфигурации 1С: Бухгалтерия предприятия 8, ред. 3.0 (базовая, ПРОФ, КОРП, ФРЕШ).

13200 руб.

19.12.2016    49251    103    106    

73

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

Представлена обработка для импорта документов из розничной программы учета товара в торговых точках и аптеках, необходимых для ведения бухгалтерского и налогового учёта, в Бухгалтерию 3.0. При загрузке данных в бухгалтерию переносятся документы поступлений, реализации, возвратов и перемещений в торговых точках и формируются все бухгалтерские и налоговые отчеты с учетом этих документов для любой системы налогообложения. Обработка позволяет загрузить данные из ПО ТрейдФарм. Имеются варианты для других розничных программ (ПО Manuscript Solution, Е-Фарма и S-Market).

30000 руб.

09.04.2020    18836    13    8    

9
Отзывы
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) поздравляю )
Рад что у Вас все получилось
15. kauksi 217 11.02.25 16:22 Сейчас в теме
у меня не взлетело...

Ошибка исполнения запроса к БД (SET NOCOUNT ON
IF OBJECT_ID(N'tempdb..#TT1', N'U') IS NOT NULL DR OP TABLE #TT1
Cre ate table #TT1 (_1С_Идентификатор uniqueidentifier,_Наименование_Полное varchar,_Наименование_Краткое varchar)
Ins ert into #TT1 (_1С_Идентификатор, _Наименование_Полное, _Наименование_Краткое)
VALUES
(, , )
INSERT _т_НСИ_ЗУП_Персонал_Образование (_Наименование_Краткое, _Наименование_Полное, _1С_Идентификатор) SELE CT TT._Наименование_Краткое, TT._Наименование_Полное, TT._1С_Идентификатор
)
Ошибка при вызове метода контекста (Execute)

и зачем создавать таблицу, когда нужно просто вставить значения известных полей?

нашел гораздо более понятный пример https://infostart.ru/1c/tools/1703208/, с ним получилось
16. G_103584063859953842340 14 06.03.25 15:44 Сейчас в теме
(15) Что бы не вставлять значения. Таблицу можно получить разными способами.
Что за ошибка. Как я вижу. В приложенном запросе у вас VALUES (, , ) Должен быть VALUES(?,?,? )
Оставьте свое сообщение