Получить параметр из функции внешнего источника

1. NushaN 11 12.03.18 16:34 Сейчас в теме
Добрый день.
Подскажите, плиз, как получить возврат параметра из хранимой процедуры внешнего источника?
На ИТС:
"Свойство Возвращает значение фактически указывает, что описывается в объекте конфигурации:
Истина – описывается функция или выражение, возвращающее значение. В этом случае также необходимо указать, какого типа значение будет возвращаться данным выражением.
Ложь – процедура или выражение, не возвращающее значение.

Процедура или функция может принимать параметры.
Функцией может выступать выражение на языке СУБД, например функция, которое получает следующее значение последовательности (SimpleSequence), будет иметь следующий вид:
NEXT VALUE FOR dbo.SimpleSequence
Если нужно получить следующее значение последовательности из встроенного языка, то это будет выглядеть следующим образом:

ЗначениеКлюча = ВнешниеИсточникиДанных.ВнешниеДанные.СледующееЗначениеКлюча();
........"


Есть процедура
USE [t_test]
GO

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALT ER   PROCEDURE [dbo].[ххProd_хх] 
@editMode int, 
.........
@Ret int = 0 output


AS

BEGIN
	Set @Ret = 0

.............

	If @cName IS NULL
		Set @Ret = -1
............
begin
		.................
		Set @Ret = 1
	end

END
Показать


В 1С подключена внешняя функция + установлен флаг "Возвращает значение" (число 2)
Есть вызов:

Ret = ВнешниеИсточникиДанных.WMS.ххProd_хх_1(editMode, ....., Ret);


При выполнении 1С выдает ошибку:
Ошибка внешней базы данных:
ошибка при выполнении запроса
по причине:
Ошибка ODBC. SQLSTATE: 42000
Номер ошибки: 102
Описание: [Microsoft][ODBC SQL Server Driver][SQL Server]Неправильный синтаксис около конструкции ";"


А вот если снять флаг "Возвращает значение" и сделать вызов просто
ВнешниеИсточникиДанных.WMS.ххProd_хх_1(editMode, ....., Ret);

то всё отрабатывает, но я в 1С не вижу результата, поэтому хочу обратно получать параметр.

Подскажите, пожалуйста, как правильно оформить, чтобы обратно из процедуры вн.источника получить параметр?
По теме из базы знаний
Вознаграждение за ответ
Показать полностью
Ответы
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
2. qazaas 12.03.18 16:47 Сейчас в теме
(1) Что такое ххProd_хх_1 ? Процедура или функция? Исходя из приведенного вами текста следует, что это процедура, а процедуры не возвращают значений и потому выражение "Ret = ВнешниеИсточникиДанных.WMS.ххProd_хх_1(editMode, ....., Ret);" является некорректным.

И раз выражение "ВнешниеИсточникиДанных.WMS.ххProd_хх_1(editMode, ....., Ret);" отрабатывает и не выдает ошибку, значит в целом оно правильное, и не должно возвращать ничего, и значит, что она является обычной процедурой.
3. NushaN 11 12.03.18 16:53 Сейчас в теме
(2) [dbo].[ххProd_хх] - хранимая процедура с параметром output: @Ret int = 0 output
Т.е. если есть такой output параметр или, например, если использовать Return в процедуре, то выходного параметра не получу?
Нужна именно функция?
4. qazaas 12.03.18 16:56 Сейчас в теме
(3) в 1С я таким не заморачивался, не знаю как он работает с выходными параметрами, но я бы лучше переделал процедуру под функцию и не парился =)
5. NushaN 11 12.03.18 17:01 Сейчас в теме
(4) спасибо, попробуем. Но странно, что 1С не понимает выходной параметр Output или Return :-(
6. qazaas 12.03.18 17:03 Сейчас в теме
(5) Return понимает, вот только, по-моему, проверяет, чтобы это была именно функция, так как в 1С, по умолчанию, процедура ничего не возвращает, и, если в процедуре указать Возврат (он же Return), то тоже будет выдавать ошибку.
7. NushaN 11 13.03.18 12:16 Сейчас в теме
(6)
чтобы это была именно функция
- проверила = та же ошибка :-(
Всё же в лоб через
Ret = ВнешниеИсточникиДанных.WMS.ххFunc_хх(парам1, ..., парамХ); - нельзя ни с функциями, ни с процедурами.
8. qazaas 14.03.18 16:03 Сейчас в теме
(7) так стоп, ваша ошибка ("Неправильный синтаксис около конструкции ";"") говорит о том, что у вас проблема в коде этой внешней функции. Попробуйте ее отработать для начала.
9. NushaN 11 14.03.18 19:03 Сейчас в теме
(8) нет там всё ОК, т.к. без попытки вернуть ответ:
ВнешниеИсточникиДанных.WMS.ххFunc_хх(парам1, ..., парамХ);
всё работает корректно, просто я в 1С не могу увидеть результат. А проверяя результат в SQL - вижу, что всё отработало верно.
Пришлось делать не ч/з внешний источник данных, а через ADO и код гораздо длиннее :-(
10. qazaas 15.03.18 06:17 Сейчас в теме
(9) ну или как вариант, посмотрите вот эту статью, мб чем-то поможет:
Работа с процедурами и функциями внешних источников данных
12. NushaN 11 15.03.18 18:18 Сейчас в теме
(10) спасибо за попытку помочь.
Статей этого же содержания я встречала н-ное количество. Народ зачем-то дублирует текст из ИТС :-)
11. mad375 15.03.18 06:53 Сейчас в теме
(6)Не совсем корректно, Возврат в процедуре прерывает ее, только он должен быть без параметров.
13. NushaN 11 15.03.18 18:24 Сейчас в теме
(11) а у меня их 10 :-) и + всего лишь 1, который хочу получить, как результат работы процедуры.
Печально, что 1 строка ВнешниеИсточникиДанных в итоге, из-за 1 output параметра, превратилась в целый код с ADODB.Command.
Здесь выбор либо с "закрытыми глазами работать" с ВнешниеИсточникиДанных , либо подстраховаться с ADODB.

Ну неужели ч/з ВнешниеИсточникиДанных нельзя?!
Оставьте свое сообщение
Вакансии
1С аналитик
Москва
зарплата от 210 000 руб.
Полный день

Руководитель направления 1С
Москва
зарплата от 350 000 руб.
Полный день

1С Программист
Москва
зарплата от 180 000 руб.
Полный день

Программист 1С
Москва
зарплата от 180 000 руб. до 220 000 руб.
Полный день

Аналитик 1С / Бизнес-аналитик
Нижний Новгород
зарплата от 100 000 руб. до 250 000 руб.
Временный (на проект)