Обработка данных налету при импорте из Excel в Terrasoft

Terrasoft версия 3.3.

С помощью сервиса "Интеграции" можно настроить импорт табличных данных из MS Excel в базу Terrasoft.

В программе Terrasoft нет возможности обрабатывать данные во время импорта. Но если очень хочется, то можно. Рассмотрим следующий пример: импорт данных в таблицу "Контрагенты". Связь таблиц осуществляется через код контрагента. Необходимо, чтобы при импорте не затиралось название контрагента (Name), если этот контрагент уже есть в Террасофте.

В Terrasoft Admin открываем сервис scr_DataflowsGridArea. Находим функцию ExecuteImport и приводим ее к следующему виду (редактируемые строки отмечены комментариями):

function ExecuteImport(Dataset){
if (Dataset.IsEmptyPage){
return;
}
var DataflowTypeID =
GetFieldValueFromDisabledField(Dataset, 'DataflowTypeID');
if (!GetCanImportAllowed(DataflowTypeID)) {
return;
}
var DataflowID = Dataset.Values('ID');
var UpdateRecords = GetFieldValueFromDisabledField(Dataset, 'UpdateRecords');
switch (DataflowTypeID) {
case (edtExcel) :
var Workbook = System.EmptyValue;
ExecuteImportFromExcel(DataflowID, Workbook, UpdateRecords);
CollectGarbage();
SendNotify(Self, 'RefreshHistoryDetail');

/////////////////////////////////// Вставить вызов процедуры SQL
var SQLText = 'Exec dbo.tsp_UpdateAccountName';
var Parameters = System.CreateObject('TSObjectLibrary.Parameters');
Connector.DBEngine.ExecuteCustomSQL(SQLText, Parameters);
/////////////////////////////////

break;
case (edt1C) :
var Attributes = GetNewDictionary();
Attributes('IsMain') = true;
Attributes('IsShowError') = true;
scr_Dataflow1CUtils.ImportAllObject(DataflowID, Attributes);
SendNotify(Self, 'RefreshHistoryDetail');
break;
default:
ShowWarningDialog(msgDataflowTypeIsNotDefined);
break;
}
}

В таблицу "Контрагенты" добавляем новое поле "Название2" (NameFake), в котором будет храниться новое название контрагента. Меняем интеграцию, чтобы название контрагента заносилось не в поле "Название", а в "Название2". Поле "Название" будет заполняться только в том случае, если оно пустое.

Теперь самое интересное. В Microsoft SQL Server Management Studio добавляем новую процедуру dbo.tsp_UpdateAccountName: База данных - Programmability - Stored Procedures - New Stored Procedure.
Создание новой процедуры SQL

USE [Terrasoft]
GO
/****** Object: StoredProcedure [dbo].[tsp_UpdateAccountName] Script Date: 12/03/2015 11:08:38 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

ALTER PROCEDURE [dbo].[tsp_UpdateAccountName]
AS
BEGIN
UPDATE tbl_Account SET Name = NameFake WHERE ISNULL(Name,'') = '' AND ISNULL(NameFake,'') <> ''
UPDATE tbl_Account SET NameFake = '' WHERE ISNULL(NameFake,'') <> ''
END
GRANT execute on tsp_UpdateAccountName to public

Для сохранения процедуры делаем Parse и Execute.

Вышеприведенная процедура во время импорта записи из Excel заполняет поле "Название контрагента" (Name), если оно пустое. После чего поле "Название2" (NameFake) очищается. В этой процедуре можно выполнять любые действия с полями во время импорта, в т.ч. и с другими таблицами. Есть возможность использования переменных через DECLARE.

Добавить комментарий

Ваш e-mail не будет опубликован.

Подтвердите, что Вы не бот — выберите человечка с поднятой рукой: