Имя: Пароль:
1C
 
Получение таблицы запросом SQL
0 nAPACEHAK
 
20.06.24
17:59
Фрагмент получения таблицы:

    Таблица = Новый ТаблицаЗначений;

    // Создание объекта команды и установка параметров
    cmd = Новый COMОбъект("ADODB.Command");
    cmd.CommandTimeout = 0;
    cmd.ActiveConnection = Con;    
    cmd.CommandText = ТекстЗапроса;

    // Выполнение запроса и получение результатов
    Попытка
        rs = cmd.Execute();
    Исключение
        Сообщить("Ошибка выполнения запроса: " + ОписаниеОшибки());
        Возврат Таблица;
    КонецПопытки;

    // Проверка, что объект Recordset открыт
    Если rs.State <> 1 Тогда
        Сообщить("Ошибка: Recordset не открыт.");
        Возврат Таблица;
    КонецЕсли;

если взять простой ТекстЗапроса, например,
SELECT TOP (10) [_IDReceipt]  FROM [test_db_pbi].[dbo].[fc_sale]

то по результату я получу таблицу, но при попытке выполнения более сложного запроса (прикреплю ко 2му сообщению) - rs.State = 0  и соответственно таблицы нет
трассировка rs вся пестрит таким: EditMode    Произошла исключительная ситуация (ADODB.Recordset): Операция не допускается, если объект закрыт.

по точке останова, если скопировать сформированный ТекстЗапроса и вставить его в MS SQL Studio - запрос отрабатывает корректно, получает таблицу данных

Подскажите, куда копнуть?
1 nAPACEHAK
 
20.06.24
17:36
IF OBJECT_ID('tempdb..#втТаб') IS NOT NULL DROP TABLE #втТаб;

DECLARE @Таб TABLE (
ut_guid_articul NCHAR(300),
ut_guid_size CHAR(36),
SellingPrice NUMERIC(15,2),
QuantitySold NUMERIC(5,0),
RetailValue NUMERIC(15,2),
TransactionNumber NCHAR(150),
DateTime DATETIME2(7),
SalesAssistant NCHAR(300)
);

INSERT INTO @Таб (ut_guid_articul, ut_guid_size, SellingPrice, QuantitySold, RetailValue, TransactionNumber, DateTime, SalesAssistant )
VALUES
('6810dd1c-51fd-11ee-bcaa-7c10c9c21623', '7837e268-5e00-11ee-bcaa-7c10c9c21623', '15223.93', '1', '15223.93', 'Отчет комиссионера о продажах Т0000000058 от 17.03.2024 23:59:59', '17.03.2024 23:59:59', 'Михаил Евгеньевич'),
('f4f31534-b123-11ea-8141-000c297b8a84', '444260ed-b138-11ea-8141-000c297b8a84', '19029', '1', '19029', 'Реализация товаров и услуг SP000002603 от 01.04.2024 23:59:59', '01.04.2024 23:59:59', 'Арина Николаевна');

CREATE TABLE #втТаб (
ut_guid_articul NCHAR(300),
ut_guid_size CHAR(36),
SellingPrice NUMERIC(15,2),
QuantitySold NUMERIC(5,0),
RetailValue NUMERIC(15,2),
TransactionNumber NCHAR(150),
DateTime DATETIME2(7),
SalesAssistant NCHAR(300)
);

INSERT INTO #втТаб (ut_guid_articul, ut_guid_size, SellingPrice, QuantitySold, RetailValue, TransactionNumber, DateTime, SalesAssistant)
SELECT
ut_guid_articul,
ut_guid_size,
SellingPrice,
QuantitySold,
RetailValue,
TransactionNumber,
DateTime,
SalesAssistant
FROM @Таб;

    
-- Проверяем, существует ли временная таблица #TabResultsProduct, и если существует, удаляем её
IF OBJECT_ID('tempdb..#TabResultsProduct') IS NOT NULL DROP TABLE #TabResultsProduct;
-- Создаем временную таблицу #TabResultsProduct
CREATE TABLE #TabResultsProduct (
    ut_guid_articul CHAR(36),
    ut_guid_size CHAR(36),
    _IDProductArticle CHAR(36),
    _IDProductSize CHAR(36),
    ProductArticle NVARCHAR(100),
    ProductName NVARCHAR(100),
    SellingPrice NUMERIC(15,2),
    QuantitySold NUMERIC(5,0),
    RetailValue NUMERIC(15,2),
    TransactionNumber NCHAR(150),
    DateTime DATETIME2(7),
    SalesAssistant NCHAR(300)
);
-- Вставляем данные в временную таблицу #TabResultsProduct
INSERT INTO #TabResultsProduct (ut_guid_articul, ut_guid_size, _IDProductArticle, _IDProductSize, ProductArticle, ProductName, SellingPrice, QuantitySold, RetailValue, TransactionNumber, DateTime, SalesAssistant)
SELECT
    #втТаб.ut_guid_articul,
    #втТаб.ut_guid_size,
    mapping_guid_retail_ut.retail_guid_articul AS _IDProductArticle,
    mapping_guid_retail_ut.retail_guid_size AS _IDProductSize,
    dim_product.ProductArticle,
    dim_product.ProductName,
    #втТаб.SellingPrice,
    #втТаб.QuantitySold,
    #втТаб.RetailValue,
    #втТаб.TransactionNumber,
    #втТаб.DateTime,
    #втТаб.SalesAssistant
FROM #втТаб
LEFT JOIN mapping_guid_retail_ut
     ON #втТаб.ut_guid_articul = mapping_guid_retail_ut.ut_guid_articul AND #втТаб.ut_guid_size = mapping_guid_retail_ut.ut_guid_size
LEFT JOIN dim_product
    ON mapping_guid_retail_ut.retail_guid_articul = dim_product._IDProductArticle;    

select * from #TabResultsProduct

DROP TABLE #втТаб;
DROP TABLE #TabResultsProduct;

да, на текущий момент в конце там ВТ, т.к. есть продолжение, роли не играет
там в конце даже если SELECT TOP (10) [_IDReceipt]  FROM [test_db_pbi].[dbo].[fc_sale] поставить - то точно такое же поведение

use вначале и drop в конце - убирал, изменений нет
2 H A D G E H O G s
 
20.06.24
20:08
SET NOCOUNT ON
3 Franchiser
 
21.06.24
00:52
(0) set nocount on, каждую инструкцию можно выполнять отдельным execute(), не обязательно делать длинный запрос, не задан commandtype
4 Franchiser
 
21.06.24
01:03
И зачем ты делаешь дополнительно переменную @Таб не понятно: можно стразу писать в #ВтТаб
5 nAPACEHAK
 
21.06.24
08:07
(2) (3) Спасибо, мил человек
(4) это от недостатка опыта в SQL запросах ((