Sql-запрос Из 1с

SeverBap

Well-Known Member
18.09.2007
451
0
34
г. Брянск
#1
Нужно на SQL выполнить запрос, результатом которого будет строковое значение хранимое в @filename
Код:
	Если НЕ ПодключитьCOMОбъект(Путь) Тогда 
Возврат "";	
КонецЕсли;
Команда = Новый COMОбъект("ADODB.Command");
Команда.CommandTimeOut = 150000;
Команда.NamedParameters = True;
Команда.CommandType =1;
Команда.ActiveConnection = COMСоединение;
СтрокаКоманда=
"declare @aln nvarchar(10)
|declare @bln nvarchar(10)
|declare @idrecdir int
|declare @ts nvarchar(50)
|declare @path nvarchar(1000)
|declare @id nvarchar(50)
|declare @filename nvarchar(150)
|SET @id='407B9434-8B92-4A23-9725-32297F14B11E'
|select top 1 @aln=case when [ALineNum]<[BLineNum] then [ALineNum] else [BLineNum] end,
|@bln=case when [BLineNum]>[ALineNum] then [BLineNum] else [ALineNum] end,
|@idrecdir=[IdRecDir], 
|@ts=replace(convert(nvarchar(10), [TimeStart], 121),'-','_')+'__'+replace(convert(nvarchar(20), [TimeStart], 114),':','_') FROM [oktell].[dbo].[A_Stat_Connections_1x1]
|where Id=@id and isrecorded=1
|set @path='C:\Program Files (x86)\oktell\Server\RecordedFiles\'
|if (@idrecdir>0)
|select @path=path from [oktell].[dbo].[A_Stat_RecordDirectories] where id=@idrecdir
|set @filename=@path+replace(substring(@ts, 1, 10),'_','')+'\'+substring(@ts, 13, 2)+substring(@ts, 16, 2)+'\mix_'+@aln+'_'+@bln+'__'+@ts+'.wav';
|";
Команда.CommandText = СтрокаКоманда;	 //"SELECT [TimeStart] FROM [oktell].[dbo].[A_Stat_Connections_1x1] WHeRE ID ='6A001395-1278-46A6-AE85-57F69A991CAB'";	//"+ВРег(СокрЛП(Результат))+"'";  //6A001395-1278-46A6-AE85-57F69A991CAB
rs = Новый COMОбъект("ADODB.Recordset");
RS = Команда.Execute();
Для сч=1 по RS.Fields.Count Цикл
сообщить(RS.Fields(0).Value);
КонецЦикла; 
COMСоединение.close();
Запрос выполняется но результат незнаю как получить!
 

SeverBap

Well-Known Member
18.09.2007
451
0
34
г. Брянск
#4
Рабочий вариант с хранимой процедурой:
в 1С
Код:
Команда = Новый COMОбъект("ADODB.Command");
Команда.ActiveConnection = COMСоединение;
Команда.CommandTimeOut	 = 150000;
Команда.CommandType	 = 4;
Команда.CommandText = "MyGetRecordPatch";
Команда.Parameters(1).value=СокрЛП(ИдентификаторЗвонка);
Команда.Prepared = true; 
Команда.NamedParameters	= true; 
RS=Команда.Execute();
ЗначениеВозврата="";
Если RS.State=1 Тогда 
ЗначениеВозврата=СокрЛП(RS.Fields(0).value);
КонецЕсли;	
COMСоединение.close();
Возврат ЗначениеВозврата;
в хранимой процедуре:
Код:
USE [oktell]
GO
/****** Object: StoredProcedure [dbo].[MyGetRecordPatch]	Script Date: 11/13/2012 16:52:30 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
-- Author:		Afonkin
-- Create date: 13.11.2012
-- Description:	Получение пути к файлу записи разговора
-- =============================================
ALTER PROCEDURE [dbo].[MyGetRecordPatch] 
-- Add the parameters for the stored procedure here
@id nvarchar(50)
AS
BEGIN
declare @aln nvarchar(10)
declare @bln nvarchar(10)
declare @idrecdir int
declare @ts nvarchar(50)
declare @path nvarchar(1000)
declare @filename nvarchar(1000)
select top 1 @aln=case when [ALineNum]<[BLineNum] then [ALineNum] else [BLineNum] end,
@bln=case when [BLineNum]>[ALineNum] then [BLineNum] else [ALineNum] end,
@idrecdir=[IdRecDir], 
@ts=replace(convert(nvarchar(10), [TimeStart], 121),'-','_')+'__'+replace(convert(nvarchar(20), [TimeStart], 114),':','_') FROM [oktell].[dbo].[A_Stat_Connections_1x1]
where Id=@id and isrecorded=1
set @path='C:\Program Files (x86)\oktell\Server\RecordedFiles\'
if (@idrecdir>0)
select @path=path from [oktell].[dbo].[A_Stat_RecordDirectories] where id=@idrecdir
set @filename=@path+replace(substring(@ts, 1, 10),'_','')+'\'+substring(@ts, 13, 2)+substring(@ts, 16, 2)+'\mix_'+@aln+'_'+@bln+'__'+@ts+'.wav';
SELECT @filename
END
Вот и все!