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

11.10.21

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

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

Скачать исходный код

Наименование Файл Версия Размер
Выгрузка из 1с в SQL одной процедурой. :
.epf 9,08Kb
41
.epf 1.2 9,08Kb 41 Скачать

Процедура по выгрузке данных из 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УдалениеДанных.  

См. также

Перенос данных из Парус 8 в ЗГУ 3

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

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

84000 руб.

19.08.2020    22663    19    1    

22

Экстрактор данных 1С в BI - выгрузка данных из 1С в BI-аналитику

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

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

15.11.2022    13952    12    SQV0    47    

30

Перенос данных из Парус 10 в ЗГУ ред.3

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

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

60000 руб.

05.10.2022    9332    9    8    

11

Перенос данных из Парус 7.хх в ЗГУ ред.3

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

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

24000 руб.

24.04.2017    48932    97    163    

86

Перенос данных из Парус 10 (Торнадо) в ЗГУ ред.3 через Excel

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

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

24000 руб.

16.11.2018    30112    20    31    

21

Загрузка в БГУ из УРМ "Криста"

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

Обработки для загрузки данных из УРМ "Криста" в бухгалтерию государственного учреждения редакция 2.0. Есть Демо доступ на вкладке Бесплатные файлы на 1 месяц со дня получения демонстрационного ключа регистрации. Поддерживает ПО "Web-исполнение" от НПО "Криста".

4800 руб.

19.06.2013    38612    136    90    

30
Отзывы
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) поздравляю )
Рад что у Вас все получилось
Оставьте свое сообщение