|
получение данных из sql | ☑ | ||
---|---|---|---|---|
0
Ученик2012
04.10.18
✎
13:15
|
Добрый день.
В веб-сервисе 1С пытаюсь получить данные из sql и сохранить в таблицу данных XDTO, но выходит Ошибка:"Произошла исключительная ситуация (ADODB.Recordset): Operation is not allowed when the object is closed." на строке DateTable.Close();. Подключение проходит хорошо. У программиста, который писал хранимую процедуру, в sql видит таблицу, которая должна быть у меня и которую я пытаюсь перебрать. Вот мой код: cmd = Новый COMОбъект("ADODB.Command"); cmd.ActiveConnection = Подключение; cmd.CommandText = "SFForSAP"; cmd.CommandType = 4; prm = cmd.CreateParameter("@intWhs", 3, 1,, Whs); cmd.Parameters.Append(prm); prm = cmd.CreateParameter("@dtStartDate",7, 1,, StartDate); cmd.Parameters.Append(prm); prm = cmd.CreateParameter("@dtEndDate ",7, 1,, EndDate); cmd.Parameters.Append(prm); DateTable = Новый COMОбъект("ADODB.Recordset"); Попытка DateTable = cmd.Execute(); Пока DateTable.Eof()=0 Цикл Строка = ФабрикаXDTO.Создать("RF_ObmenLat", "DateRowGetSF"); Строка.Nomenclature = DateTable.Fields("Nomenclature").Value; Строка.Count = DateTable.Fields("Count").Value; Строка.DatePlan = DateTable.Fields("DatePlan").Value; Строка.WarehouseID = DateTable.Fields("WarehouseID").Value; РезультатТаблица.Добавить(Строка); DateTable.MoveNext(); КонецЦикла; Исключение КонецПопытки; cmd = Неопределено; DateTable.Close(); Подключение.Close(); Подскажите, пожалуйста, куда копать? что почитать и посмотреть? |
|||
1
Cool_Profi
04.10.18
✎
13:21
|
У тебя хранимка не возвращает таблицу.
Процедура написана криво |
|||
2
vitkhv
04.10.18
✎
13:27
|
В строк еподключения ошибка.
cmd.ActiveConnection = Подключение; |
|||
3
vitkhv
04.10.18
✎
13:29
|
Еще в начало хранимки обязательно поставь
SET NOCOUNT ON |
|||
4
novichok79
04.10.18
✎
13:32
|
внешними источниками данных попробуйте подцепиться, там в OBDC видно что 1С отправляет необходимые команды.
|
|||
5
МихаилМ
04.10.18
✎
13:42
|
знак @ лишний
|
|||
6
vitkhv
04.10.18
✎
14:05
|
толькочто создал хранимку:
USE [optimaUPP] GO /****** Object: StoredProcedure [dbo].[Get_ВыходныеИзделия] Script Date: 04.10.2018 14:03:25 ******/ SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO ALTER PROCEDURE [dbo].[Get_ВыходныеИзделия] @Спецификация binary(16), @Номенклатура binary(16), @ХарактеристикаНоменклатуры binary(16) AS BEGIN SET NOCOUNT ON; DROP TABLE IF EXISTS #ОсновноеИзделие SELECT TOP 1 ВыходныеИзделия.НомерСтроки AS НомерСтроки INTO #ОсновноеИзделие FROM (SELECT --*, ВыходныеИзделияСХарактеристикой.НомерСтроки AS НомерСтроки, 1 AS Приоритет FROM [Справочник.СпецификацииНоменклатуры.ВыходныеИзделия] AS ВыходныеИзделияСХарактеристикой WHERE --[ВыходныеИзделияСХарактеристикой].[Ссылка] = 0xaa9d001e67d6040711e793bb66a30c55 ВыходныеИзделияСХарактеристикой.Ссылка = @Спецификация AND ВыходныеИзделияСХарактеристикой.Номенклатура = @Номенклатура AND ВыходныеИзделияСХарактеристикой.ХарактеристикаНоменклатуры = @ХарактеристикаНоменклатуры UNION ALL SELECT ВыходныеИзделияБезХарактеристики.НомерСтроки, 2 FROM [Справочник.СпецификацииНоменклатуры.ВыходныеИзделия] AS ВыходныеИзделияБезХарактеристики WHERE ВыходныеИзделияБезХарактеристики.Ссылка = @Спецификация AND ВыходныеИзделияБезХарактеристики.Номенклатура = @Номенклатура AND ВыходныеИзделияБезХарактеристики.ХарактеристикаНоменклатуры = dbo.ЗНАЧЕНИЕ(N'Справочник.ХарактеристикиНоменклатуры.ПустаяСсылка') UNION ALL SELECT ВыходныеИзделияБезХарактеристики.НомерСтроки, 3 FROM [Справочник.СпецификацииНоменклатуры.ВыходныеИзделия] AS ВыходныеИзделияБезХарактеристики WHERE ВыходныеИзделияБезХарактеристики.Ссылка = @Спецификация AND ВыходныеИзделияБезХарактеристики.Номенклатура = @Номенклатура) AS ВыходныеИзделия ORDER BY ВыходныеИзделия.Приоритет, НомерСтроки ; SELECT СпецификацииНоменклатурыВыходныеИзделия.Ссылка AS Ссылка, СпецификацииНоменклатурыВыходныеИзделия.НомерСтроки AS НомерСтроки, CASE WHEN @Номенклатура = NULL AND @ХарактеристикаНоменклатуры = NULL THEN CASE WHEN СпецификацииНоменклатурыВыходныеИзделия.НомерСтроки = 1 THEN 0x00 ELSE 0x01 END ELSE CASE WHEN ОсновноеИзделие.НомерСтроки = NULL THEN 0x01 ELSE 0x00 END END AS СопутствующееИзделие, СпецификацииНоменклатурыВыходныеИзделия.НомерОперацииМаршрута AS НомерОперацииМаршрута, СправочникНоменклатура.НоменклатурнаяГруппа AS НоменклатурнаяГруппа, СпецификацииНоменклатурыВыходныеИзделия.Номенклатура AS Номенклатура, CASE WHEN ОсновноеИзделие.НомерСтроки <> NULL--ЕСТЬ НЕ NULL AND @ХарактеристикаНоменклатуры <> NULL THEN @ХарактеристикаНоменклатуры ELSE СпецификацииНоменклатурыВыходныеИзделия.ХарактеристикаНоменклатуры END AS ХарактеристикаНоменклатуры, СпецификацииНоменклатурыВыходныеИзделия.Количество AS Количество, CASE WHEN СпецификацииНоменклатурыВыходныеИзделия.ЕдиницаИзмерения = dbo.ЗНАЧЕНИЕ(N'Справочник.ЕдиницыИзмерения.ПустаяСсылка') THEN СправочникНоменклатура.ЕдиницаХраненияОстатков ELSE СпецификацииНоменклатурыВыходныеИзделия.ЕдиницаИзмерения END AS ЕдиницаИзмерения, СправочникЕдиницыИзмерения.[Коэффициент], СпецификацииНоменклатурыВыходныеИзделия.МинимальнаяПартия AS МинимальнаяПартия, СпецификацииНоменклатурыВыходныеИзделия.Кратность AS Кратность, СпецификацииНоменклатурыВыходныеИзделия.ДоляСтоимости AS ДоляСтоимости, СпецификацииНоменклатурыВыходныеИзделия.ТочкаМаршрута AS ТочкаМаршрута, ISNULL(СправочникТочкиМаршрута.Подразделение, dbo.ЗНАЧЕНИЕ(N'Справочник.ЕдиницыИзмерения.ПустаяСсылка')) AS Подразделение, ISNULL(СправочникТочкиМаршрута.РабочийЦентр, NULL) AS РабочийЦентр FROM [Справочник.СпецификацииНоменклатуры.ВыходныеИзделия] AS СпецификацииНоменклатурыВыходныеИзделия LEFT JOIN #ОсновноеИзделие AS ОсновноеИзделие ON СпецификацииНоменклатурыВыходныеИзделия.НомерСтроки = ОсновноеИзделие.НомерСтроки LEFT JOIN [Справочник.ТочкиМаршрута] СправочникТочкиМаршрута ON СправочникТочкиМаршрута.Ссылка = СпецификацииНоменклатурыВыходныеИзделия.ТочкаМаршрута LEFT JOIN [Справочник.Номенклатура] СправочникНоменклатура ON СправочникНоменклатура.Ссылка = СпецификацииНоменклатурыВыходныеИзделия.Номенклатура LEFT JOIN [Справочник.ЕдиницыИзмерения] СправочникЕдиницыИзмерения ON CASE WHEN (СпецификацииНоменклатурыВыходныеИзделия.[ЕдиницаИзмерения] = dbo.ЗНАЧЕНИЕ(N'Справочник.ЕдиницыИзмерения.ПустаяСсылка')) THEN СправочникНоменклатура.ЕдиницаХраненияОстатков ELSE СпецификацииНоменклатурыВыходныеИзделия.[ЕдиницаИзмерения] END = СправочникЕдиницыИзмерения.Ссылка WHERE СпецификацииНоменклатурыВыходныеИзделия.Ссылка = @Спецификация END и вызвал ее по адо таким образом: мADOСоединение = ADOСоединениеНаСервере(); Если мADOСоединение = Ложь Тогда Возврат ; КонецЕсли; ТекстЗапросаТоваров = "EXECUTE Get_ВыходныеИзделия @Спецификация = 0xAA9D001E67D6040711E793BB66A30C55, @Номенклатура =NULL , @ХарактеристикаНоменклатуры =NULL"; ADOНаборДанныхТовары = Новый COMОбъект("ADODB.RecordSet"); ADOНаборДанныхТовары.Open(ТекстЗапросаТоваров, мADOСоединение); Пока НЕ ADOНаборДанныхТовары.eof() Цикл UID = ADOНаборДанныхТовары.Fields(0).Value; Сообщить(UID); ADOНаборДанныхТовары.MoveNext(); КонецЦикла; мADOСоединение.Close(); все четко отработало. Ищите косяк в соединении. |
|||
7
Ученик2012
04.10.18
✎
14:46
|
(6) правильно ли тогда вот так написать?
ТекстЗапроса = "EXECUTE SFForSAP @intWhs = " + Whs +", @dtStartDate = "+StartDate+" , @dtEndDate = " +EndDate; |
|||
8
wondkind
04.10.18
✎
15:15
|
(6) Вы закрываете АДО соединение.
А посмотрите, что закрывает Ученик2012 ) |
|||
9
vitkhv
04.10.18
✎
15:22
|
(7) ну а почему нет?
|
|||
10
Ученик2012
04.10.18
✎
15:34
|
(8) я же закрываю его после того как переберу таблицу и получу желаемую таблицы XDTO. Это не верно?
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |