IP PBX Oktell
Рассматриваются версии 1С 8.0 и выше, с установленным сервером БД MS SQL.
ВАЖНО: Лицензионное соглашение не позволяет использовать недокументированные фирмой "1С" средства для построения решений на платформе 1С:Предприятие. Это означает, что средства СУБД (или любые другие внесистемные средства) можно использовать только в том случае, если документация по продуктам линейки "1С:Предприятие" (включая ИТС) содержит явную рекомендацию использовать данное средство для решения данной задачи.
Во всех остальных случаях лицензионное соглашение позволяет использовать для построения решений только штатные средства платформы. В частности, можно обращаться к данным информационной базы только при помощи объектов "1С:Предприятия", специально предназначенных для работы с данными (запросы, справочники, документы и т.д.). Нельзя обращаться к данным информационной базы напрямую, минуя уровень объектов работы с данными "1С:Предприятия" - например при помощи средств СУБД или при помощи внешних компонент, которые реализуют прямой доступ к СУБД. Это ограничение распространяется на любые действия с данными, в том числе на изменение их структуры, а так же на чтение или изменение самих данных информационной базы или служебных данных "1С:Предприятия".
Данное ограничение необходимо для обеспечения стабильности работы механизмов системы, осуществления поддержки и возможности перехода на новые версии "1С:Предприятия".
Получения (внесения) данных из (в) БД 1С для обработки в Oktell. В качестве примера рассмотрим задачу переключения входящего звонка на оператора Call-центра закрепленного за данным контрагентом.
- Открыть отчет в 1С с помощью которого можно сопоставить справочники 1С с таблицами в БД MS SQL.
Если открылась пустая форма, то необходимо открывать отчет через «Толстый клиент:обычное приложение». Например запустить конфигуратор 1С и в меню выбрать — «Отладка» — «Начало отладки» — «Толстый клиент (обычное приложение) : начать отладку».
Если данного пункта нет в выборе то необходимо зайти во вкладку «Сервис» - «Параметры» - вкладка «Общие» - установить точку на строке «Управляемое приложение и обычное приложение»
После чего откроется необходимый отчет.
2)Найти необходимые данные в таблицах. В нашем случае используются таблицы:
- «Справочник. Контрагенты»:
- «РегистрыСведений. Контактная информация»:
- «Справочник. Пользователи»
Данные таблицы связаны следующим образом (связи описаны через «ИмяПоля»):
«Справочник. Контрагенты».Ссылка ←→ «РегистрыСведений. Контактная информация».Объект
«Справочник. Контрагенты».ОсновнойМенеджерПокупателя ←→ «Справочник. Пользователи».Ссылка
Соответственно из таблицы «РегистрыСведений. Контактная информация» получаем содержимое поля «Представление» в котором содержатся контактные данные по контрагенту. Из таблицы «Справочник. Пользователи» получаем содержимое поля «Наименование» в котором содержатся менеджеры контрагента (в таблице «Справочник. Контрагенты» будет указан менеджер который выбран в качестве основного)
ВНИМАНИЕ! Тип контакта можно получить из таблицы «Справочник.ВидыКонтактнойИнформации» по полю «Наименование» использовать следующую связь между таблицами:
«РегистрыСведений. Контактная информация».Вид ←→ «Справочник.ВидыКонтактнойИнформации».Наименование
«РегистрыСведений. Контактная информация».Вид ←→ «Справочник.ВидыКонтактнойИнформации».Наименование
3)Составим запрос для получения имени основного менеджера, по номеру (CallerID), закрепленного за контрагентом. Настроим сценарий.
SQL запрос написанный через выражение:
"select @user_oktell_out="+[manager_1c___user]+"
from " +[table_name___user]+ "
where " +[id___user_1c]+ "=
(
select " + [manager_1c___contrag] + "
from " + [table_name___contrag] + "
where " + [id___contrag] + " in
(
select " + [id___contact] + "
from " + [table_name___contact] + "
where REPLACE (REPLACE (REPLACE (REPLACE (cast(" + [number_1c___contact] + " as nvarchar), ' ', ''), '-', ''), '(', ''), ')', '')
like '%' + cast(" + [caller_id] + " as nvarchar) + '%'
and
" + [type_number_1c___contact] + "=
(select " + [id___type_number] + " from " + [table_name___type_number] + " where "+ [number_1c___type_number] + "='" + [type_number_1c___type_number] + "')
)
)"
Пример корректно заполненного запроса:
select @user_oktell_out=[base1s].[dbo].[_Reference77].[_Description]
from[base1s].[dbo].[_Reference77]
where[base1s].[dbo].[_Reference77].[_IDRRef]=
(
select[base1s].[dbo].[_Reference62].[_Fld642RRef]
from[base1s].[dbo].[_Reference62]
where[base1s].[dbo].[_Reference62].[_IDRRef] in
(
select[base1s].[dbo].[_InfoRg6747].[_Fld6748_RRRef]
from[base1s].[dbo].[_InfoRg6747]
where REPLACE (REPLACE (REPLACE (REPLACE (cast([base1s].[dbo].[_InfoRg6747].[_Fld6754] as nvarchar), ' ', ''), '-', ''), '(', ''), ')', '')
like '%' + cast(89271231233 as nvarchar) + '%'
and
[base1s].[dbo].[_InfoRg6747].[_Fld6750_RRRef]=
(select[base1s].[dbo].[_Reference33].[_IDRRef] from[base1s].[dbo].[_Reference33] where [base1s].[dbo].[_Reference33].[_Description]='Телефон контрагента')
)
)
Для того, чтобы получить выходную переменную @user_oktell_out необходимо так же использовать дополнительный параметр Parameter_Definition, в котором укажем:
"@user_oktell_out nvarchar(50) OUTPUT"
Для выполнения данного запроса используем следующий код SQL:
exec sp_executesql @zapros,
@Parameter_Definition,
@user_oktell_out OUTPUT
ВНИМАНИЕ! После смены конфигурации 1С имена таблиц изменятся, в связи с этим запросы со стороны Oktell составляются динамические (имена таблиц и полей хранятся в таблице абонентов Oktell для удобства изменения).
4)Модифицируем процедуру выбора оператора
Процедура(ссылка на вики) устанавливает в приоритетном порядке того оператора (остальные операторы call-центра добавляются с меньшим приоритетом), который указан как основной менеджер у контрагента.
Пример:
В 1С у контрагента основной менеджер Дмитрий
Операторы Call-центра: Иван, Дмитрий, Сергей
Процедура составит список: Дмитрий, Иван, Сергей. Где порядок перечисления имен и указывает какой приоритет у операторов при распределении звонка (первое имя с наибольшим приоритетом, последнее соответственно с наименьшим)
USE [oktell]
GO
/****** Object: StoredProcedure [dbo].[A_TaskManager_OperatorsAll_Get_Custom] Script Date: 08/16/2013 03:12:38 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER OFF
GO
ALTER Procedure [dbo].[A_TaskManager_OperatorsAll_Get_Custom]
@idtask uniqueidentifier = '00000000-0000-0000-0000-000000000000',
@idlist uniqueidentifier = '00000000-0000-0000-0000-000000000000',
@idabonent int = 0,
@idline uniqueidentifier = '00000000-0000-0000-0000-000000000000',
@dtnow datetime = null
as
begin
select distinct t1.id
from
(
select ID id from a_users
where [Name]=(select top 1 number
from table_oper_switch
where callerid= (select top 1 [AbonentNumber] from [oktell_cc_temp].[dbo].[A_Cube_CC_EffortConnections]
where [IdExtLine]=@idline order by datetimestart desc )
order by id desc)
) t1 inner join
(
select u.Id
from A_Users u
Inner join A_UserParams up on u.Id = up.Iduser
where up.IsOperator = 1
) t2 on t1.id != t2.id
union all
select distinct t2.id
from
(
select ID id from a_users
where [Name]=(select top 1 number
from table_oper_switch
where callerid= (select top 1 [AbonentNumber] from [oktell_cc_temp].[dbo].[A_Cube_CC_EffortConnections]
where [IdExtLine]=@idline order by datetimestart desc )
order by id desc)
) t1 inner join
(
select u.Id
from A_Users u
Inner join A_UserParams up on u.Id = up.Iduser
where up.IsOperator = 1
) t2 on t1.id != t2.id
end
5)Выберем процедуру во вкладке «Ресурсы» при редактировании задачи.
Выберем «Вариант обхода операторов» - «Пользовательская процедура»
Создания таблиц необходимых:
Таблица table_compare:
Необходима для хранения названий полей и таблиц из БД 1С.
USE [oktell]
GO
/****** Object: Table [dbo].[table_compare] Script Date: 08/16/2013 12:17:50 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[table_compare](
[Id] [int] IDENTITY(1,1) NOT NULL,
[id_1C] [nvarchar](2000) NULL,
[number_1C] [nvarchar](2000) NULL,
[type_number_1C] [nvarchar](2000) NULL,
[name_table_1C] [nvarchar](2000) NULL,
[meaning_name_1C] [nvarchar](2000) NULL,
[manager_1C] [nvarchar](2000) NULL,
PRIMARY KEY CLUSTERED
(
[Id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
Пример заполнения таблицы:
id_1C
|
number_1C
|
type_number_1C
|
name_table_1C
|
meaning_name_1C
|
manager_1C
|
[base1s].[dbo].[_Reference62].[_IDRRef]
|
NULL
|
NULL
|
[base1s].[dbo].[_Reference62]
|
Таблица контрагентов
|
[base1s].[dbo].[_Reference62].[_Fld642RRef]
|
[base1s].[dbo].[_InfoRg6747].[_Fld6748_RRRef]
|
[base1s].[dbo].[_InfoRg6747].[_Fld6754]
|
[base1s].[dbo].[_InfoRg6747].[_Fld6750_RRRef]
|
[base1s].[dbo].[_InfoRg6747]
|
Таблица с контактными данными по контрагенту
|
NULL
|
[base1s].[dbo].[_Reference33].[_IDRRef]
|
[base1s].[dbo].[_Reference33].[_Description]
|
Телефон контрагента
|
[base1s].[dbo].[_Reference33]
|
Таблица с типами контактных данных
|
NULL
|
Таблица table_oper_switch
Необходима для связи между данными полученными из БД 1С и хранимой процедурой выбора оператора A_TaskManager_OperatorsAll_Get_Custom.
USE [oktell]
GO
/****** Object: Table [dbo].[table_oper_switch] Script Date: 08/16/2013 12:24:33 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[table_oper_switch](
[Id] [int] IDENTITY(1,1) NOT NULL,
[number] [nvarchar](2000) NULL,
[callerid] [nvarchar](2000) NULL,
PRIMARY KEY CLUSTERED
(
[Id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
Комментариев нет:
Отправить комментарий