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

11.10.21

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

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

Скачать файл

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

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

28500 руб.

15.11.2022    21517    21    49    

39

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

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

84000 руб.

24.04.2017    51802    104    165    

91

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

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

120000 руб.

19.08.2020    25635    25    1    

27

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

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

84000 руб.

05.10.2022    11256    13    8    

15

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

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

13200 руб.

19.12.2016    47726    87    105    

68

Внешние источники данных Облачные сервисы, хостинг Программист Бизнес-аналитик Пользователь Руководитель проекта Платформа 1С v8.3 8.3.14 1С:Розница 2 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х 1С:Управление нашей фирмой 3.0 1С:Розница 3.0 Бытовые услуги, сервис Розничная и сетевая торговля (FMCG) Оптовая торговля, дистрибуция, логистика Гостиничный бизнес Рестораны, кафе и фаст-фуд Реклама, PR и маркетинг Легкая промышленность, мода и одежда Управленческий учет Платные (руб)

Расширение позволяет автоматизировать управление картами лояльности и взаимодействие с покупателями при помощи интеграции корпоративной системы 1С и специализированного облачного сервиса "CARDPR". Автоматическая онлайн синхронизация сведений о владельце электронной карты лояльности и баланса бонусных баллов на карте между корпоративной системой 1С и мобильным устройством покупателя. Оповещение покупателя об изменении баланса его электронной карты лояльности и проведении каких-либо маркетинговых акций в компании при помощи рассылки push-сообщений на его мобильное устройство.

36000 руб.

20.07.2023    3376    1    2    

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