HelpF.pro

Запись во внешний источник данных из 1С 8.3 (без com подключения)

В 8.3.4 в свойствах объекта "Внешний источник данных" появилась вкладка "Функции". Для внешних таблиц MSSQL данный функционал позволяет подключить к 1С хранимые процедуры и функции на стороне SQL. В том числе и процедуры, содержащие запросы SQL на добавление и обновление данных внешней таблицы.

По сравнению с прошлым примером количество кода 1С уменьшится, поскольку подключение через COM-объект и формирование запросов SQL на стороне 1С нам больше не потребуется.

Для начала создадим тестовую таблицу с помощью скрипта в панели управления сервером SQL:

Код SQL
 USE [test]
GO

SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO

CREATE TABLE [dbo].[tovar](
 [id] [int] IDENTITY(1,1) NOT NULL,
 [name] [nvarchar](max) NOT NULL,
 [price] [numeric](18, 2) NULL,
 CONSTRAINT [PK_tovar] 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 

Скрипт создания процедуры insert_tovar:

Код SQL
 SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

CREATE PROCEDURE insert_tovar

 @name nvarchar(max),
 @price numeric(18, 2)

AS
BEGIN

 SET NOCOUNT ON;

 INSERT INTO test.dbo.tovar
    ([name] ,[price])
    VALUES (@name, @price)

END
GO 

Скрипт создания процедуры update_tovar:

Код SQL
 SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

CREATE PROCEDURE update_tovar

 @id int,
 @name nvarchar(max),
 @price numeric(18, 2)

AS
BEGIN

 SET NOCOUNT ON;

 UPDATE test.dbo.tovar
    SET [name] = @name
    ,[price] = @price
 WHERE id = @id 
 
END
GO

Теперь переходим в 1С и добавляем внешний источник данных. Подключаем таблицу SQL:

Подключаем процедуры:

Далее, для таблицы dbo_tovar создаем формы списка и объекта. На форму списка вешаем команду "ДобавитьТовар" и обработку оповещения:

Код 1C v 8.3
 &НаКлиенте
Процедура ДобавитьТовар(Команда)
 
 ОткрытьФорму("ВнешнийИсточникДанных.test.Таблица.dbo_tovar.ФормаОбъекта", , ЭтаФорма);
 
КонецПроцедуры


&НаКлиенте
Процедура ОбработкаОповещения(ИмяСобытия, Параметр, Источник)
 
 Если ИмяСобытия = "ОбновитьВнешнийИсточникДанных_dbo_tovar" Тогда
  Элементы.Список.Обновить();
 КонецЕсли; 
 
КонецПроцедуры

На форме объекта на командной панели размещаем команду "ЗаписатьТовар", для кнопки выставляем свойство "Кнопка по умолчанию":

Код 1C v 8.3
 &НаКлиенте
Процедура ЗаписатьТовар(Команда)
 
 ЗаписатьТоварНаСервере();
 Оповестить("ОбновитьВнешнийИсточникДанных_dbo_tovar");
 
КонецПроцедуры


&НаСервере
Процедура ЗаписатьТоварНаСервере()
 
 Если Объект.Ссылка.Пустая() Тогда
  ВнешниеИсточникиДанных.test.dbo_insert_tovar(Объект.name, Объект.price);
 Иначе
  ВнешниеИсточникиДанных.test.dbo_update_tovar(Объект.id, Объект.name, Объект.price);
 КонецЕсли;
 
КонецПроцедуры 

Для свойства реквизита "Объект" снимаем свойство "Сохраняемые данные", для поля "id" устанавливаем свойство "Только просмотр".

Готово, запускаем, тестируем. Для тестов использовался сервер MSSQL Server 2008 R2.

Источник


Опубликовано на сайте: https://HelpF.pro
Прямая ссылка: https://HelpF.pro/faq83/view/1565.html