|
Получить результат (таблицу) процедуры с параметрами (Внешний источник данных) H A D G E H O G s, Климов Сергей, dimasad, denk32, Garykom, RomanYS, Мультук, ReaLg, КонецЕсли, palsergeich, privetik, АгентБезопаснойНацио, Rovan, , Timon1405, arsik, takefive, maxar, skafandr, Галахад, X Leshiy, SleepyHead, zurge, ass1c, who respawn, ДенисСмирнов, Homer, RVN, trooba, ГдеСобакаЗарыта, DemonShinji2, Niveus, unenu, JohnGilbert, Crusher, 1cVandal, torgm, toypaul, Fish, vicof, alexis_nov, integer, bolder, zenik, Бычье сердце, b_ru, elka302, nick86, Kigo_Kigo, ads55, PuhUfa
| ☑ | |||
|---|---|---|---|---|---|
|
0
dimasad
24.03.26
✎
23:03
|
Стоит задача использовать в различных отчетах данные из сторонней СУБД.
Просто подключить таблицу ВИД - не проблема, а вот получить результат процедуры из ВИД - фиг. ВИД подключал согласно документации ( https://its.1c.ru/db/v8321doc#bookmark:dev:TI000001645 ) Вызов процедуры в скуле такой: exec dbo.rep_on ID, DateOn, DateOff exec dbo.rep_on 31, '20260101', '20260201' В ВИД создал ручками таблицу описал все поля, Вид таблицы - выражение: rep_on(&1, &2, &3). Даже явное указание параметров выдает ошибки: dbo.rep_on(36159, '20260101', '20260201') - объект не найден; [dbo].[report_on] (31, '20260101', '20260201') - неправильная конструкция "(" [dbo].[report_on] 31, '20260101', '20260201') - неправильный синтаксис "31"; Кто знает как заставить это г... взлететь, да еще и передавать туда параметры? ПС/тестил в консоле запросов. ППС/ странная оссобенность нашел эту процедуру при подключении функции синтаксис странный: rep_on;1(&1, &2, &3) |
||||
|
1
Garykom
гуру
25.03.26
✎
00:01
|
(0) Через хранимки уже пробовал?
Через них можно даже INSERT делать https://infostart.ru/1c/articles/1019947/ |
||||
|
2
H A D G E H O G s
25.03.26
✎
00:06
|
Тыц, тыц, тыц.
|
||||
|
3
bolder
25.03.26
✎
00:20
|
(0) Вызов хранимых процедур недокументирован.Поэтому только через грабли и набитые шишки.ВИД подключает физические таблицы внешней БД.В (1) про это есть.(2)собственные функции - да пожалуйста.
|
||||
|
4
Garykom
гуру
25.03.26
✎
02:01
|
(3) Дык в (2) как раз сначала создание хранимки на SQL
А затем вызов ее |
||||
|
5
bolder
25.03.26
✎
08:51
|
(4) Ну ОК.Отстал от жизни.Из (0):
"В зависимости от того, какой объект СУБД описывает создаваемая объект в «1С:Предприятие», следует корректно установить свойство Вид таблицы. Если свойство установлено в значение Таблица ‑ то объект конфигурации будет выступать аналогом реальной таблицы базы данных или представления (view). В остальных случаях свойство Вид таблицы следует установить в значение Выражение. Если таблица внешнего источника данных имеет вид Таблица, то в свойство Имя в источнике данных необходимо указать имя реальной таблицы или не параметризованного представления, например dbo.ErrorLog. Для таблицы вида Выражение, следует указать свойство Выражение в источнике данных. В простейшем случае это будет вызов функции, возвращающей табличные данные, например dbo.ufnGetContactInformation(&1). Если в это поле записывается выражение, то рекомендуется указать его в скобках, для минимизации различных конфликтов при реальном выполнении запроса к СУБД." В таком виде ВИД еще не использовал... В (2) отличный пример скалярной функции. |
||||
|
6
dimasad
25.03.26
✎
12:03
|
(2) Когда Функция возвращает значение - понятно (с таким игрался).
У меня даже не вьюшка поэтому стопанул на проблеме как получить таблицу... инфы очень мало. Код процедуры в MSSQL^ IS NOT NULL DROP TABLE #FinalReport; CREATE TABLE #FinalReport ( [КАТЕГОРИЯ уровень 1] NVARCHAR(600), [Месяц] NVARCHAR(50), ............... [Дополнительно] FLOAT ); -- ============================================================================ -- Предварительная загрузка справочников, не зависящих от месяца -- ============================================================================ IF OBJECT_ID('tempdb..#AllCategories') IS NOT NULL DROP TABLE #AllCategories; SELECT ............... -- ============================================================================ -- Цикл по месяцам от @data_start до @data_end -- ============================================================================ DECLARE @dt1 DATETIME = @data_start; DECLARE @dt2 DATETIME; DECLARE @CurrentMonth DATETIME; WHILE @dt1 <= @data_end BEGIN SET @dt2 = EOMONTH(@dt1); SET @CurrentMonth = @dt1; -- ============================================================================ -- Получаем обороты за текущий месяц -- ============================================================================ IF OBJECT_ID('tempdb..#Footing') IS NOT NULL DROP TABLE #Footing; SELECT ............... -- ============================================================================ -- Список договоров месяца для получения истории категорий -- ============================================================================ IF OBJECT_ID('tempdb..#ContractList') IS NOT NULL DROP TABLE #ContractList; SELECT DISTINCT ДогНомЗап AS Договор ............... -- ============================================================================ -- История категорий для договоров месяца -- ============================================================================ IF OBJECT_ID('tempdb..#Categories') IS NOT NULL DROP TABLE #Categories; CREATE TABLE #Categories ( ............... -- Индексы на #Categories для быстрого поиска CREATE CLUSTERED INDEX IX_MonthCategories_Contract ON #Categories (Договор, ДатНач, ДатКнц); CREATE INDEX IX_MonthCategories_Dates ON #Categories (Договор, ДатКнц DESC) INCLUDE (идКатегории); -- ============================================================================ -- Основная таблица с данными договоров за месяц + категории -- ============================================================================ IF OBJECT_ID('tempdb..#data') IS NOT NULL DROP TABLE #data; SELECT ............... -- ============================================================================ -- Вставка результатов месяца в итоговую таблицу -- ============================================================================ INSERT INTO #FinalReport SELECT ............... -- ============================================================================ -- Итоги -- ============================================================================ SELECT [ИНН], [Договор], ............... [Дополнительно] FROM #FinalReport ORDER BY [Договор], [Месяц], [КАТЕГОРИЯ] END |
||||
|
7
Garykom
гуру
25.03.26
✎
12:58
|
(6) Не надо так делать!
Напиши лучше микросервис на Go И тупо дергай его из 1С через HTTPСоединение Микросервис будет выглядеть примерно так https://github.com/Garykom/psql/blob/main/main.go У меня там под PostgreSQL, переделать на MSSQL простейше И даже не микросервис а консольная утилита командной строки с параметрами, для макета 1С У меня все руки не дойдут сделать универсально и через командную строку и http-сервис |
||||
|
8
H A D G E H O G s
25.03.26
✎
13:00
|
(6) Тыц, Тыц, Тыц.
Выражение именно вооот так, в скобочках, ибо многомудрая 1С заключит его в подзапрос MSSQL (select * from dbo.Table_TestFunc())
|
||||
|
9
dimasad
25.03.26
✎
14:00
|
(7) Интересно... но не вариант JSON тянуть с 200+тыр записями .
Тут еще и ресурсы и время надо учитывать. Но, за идею спасибо! |
||||
|
10
dimasad
25.03.26
✎
14:12
|
(8) В SQL-Клиенте я ее вызвать могу только так:
EXEC dbo.report_on 36159,'20260101','20260201' обернуть это в SELECT не получается: select * FROM (EXEC dbo.report_osv 36159,'20260101','20260201') по-ходу останется мне с ADODB страдать... |
||||
|
11
H A D G E H O G s
25.03.26
✎
14:26
|
(10) Что такое у вас
dbo.report_on ? |
||||
|
12
dimasad
25.03.26
✎
14:46
|
(11) хранимая Процедура, предоставленная админами сторонней БД.
Вот ее лист - (6) |
||||
|
13
Мультук
гуру
25.03.26
✎
14:52
|
(12)
Он у вас пытается спросить почему вот тут вы делаете EXEC одной процедуры EXEC dbo.report_on 36159,'20260101','20260201' а тут в select оборачиваете совсем другую: select * FROM (EXEC dbo.report_osv 36159,'20260101','20260201') |
||||
|
14
Garykom
гуру
25.03.26
✎
14:53
|
(10) >по-ходу останется мне с ADODB страдать...
это хуже чем работать через http-сервис или утилиту на Go жесткая привязка к Win и ADO |
||||
|
15
Garykom
гуру
25.03.26
✎
15:26
|
(9) >не вариант JSON тянуть с 200+тыр записями
Платформа 1С с JSON весьма шустро работает В массив структур прочитает за разумное время Если хочется реально быстро данные в базу 1С засовывать Предлагаю создать в конфе 1С отдельный РС И туда внешними средствами СУБД переливать данные напрямую Затем просто читаешь из этого РС в 1С |
||||
|
16
dimasad
25.03.26
✎
15:28
|
(13) Эт я уже туплю... ее переименовывали по сто раз, а я ctr+c/ctrl+v и не проверил...
Все норм... сейчас она report_osv |
||||
|
17
dimasad
25.03.26
✎
15:32
|
(14) Согласен.
(15) да и вообще, цель была использовать именно ВИД, без переноса его в ИБ 1С. |
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |