1С Предприятие 8.2: Обмен данными между базами на основе инструментов SQL

06.11.13

Интеграция - Внешние источники данных

Обмен данными (сотрудники организаций) между базами (1С Предприятие 8.2: Бухгалтерия и 1С Предприятие 8.2: Зарплата и управление персоналом) на основе триггера SQL, отслеживающего изменения таблицы

Задача: организовать обмен данными между базами без использования промежуточных файлов и COM подключения к 1С приложению. Желательно использовать инструменты SQL. 

Источники:

  1. Отслеживаем изменения в таблице с помощью триггеров Transact SQL
  2. ADODB: Прямая запись и другие операции с SQL - таблицами (MS SQL server 2000)
  3. Структура хранения базы данных

 Обмениваться необходимо данными по сотрудникам организации из базы ЗиУП. При помощи обработки "Структура хранения БД" находим нужную нам таблицу SQL. После этого необходимо повесить на неё триггер, регистрирующий изменения и записывающий эти изменения в отдельную таблицу в отдельной базе. После этого при помощи Views отслеживаем и фильтруем необходимы изменения и записываем в базу.

 

Создание базы и таблицы.

Итак, приступим. Нам понадобится отдельная база.

Create DataBase ExchangeDB
Alter DataBase ExchangeDB SET Recovery Simple
Alter DataBase ExchangeDB SET Auto_Shrink ON

В этой базе создадим таблицу:

USE [ExchangeDB]
GO
/****** Object: Table [dbo].[_Employee_Changes] Script Date: 11/05/2013 10:10:29 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
SET ANSI_PADDING ON
GO
CREATE TABLE [dbo].[_Employee_Changes](
[_IDRRef] [binary](16) NOT NULL,
[_ChangeType] [nvarchar](10) NOT NULL,
[_Unload] [datetime] NOT NULL,
[_Load] [datetime] NULL,
[_Code] [nchar](10) NULL,
[_Description] [nvarchar](100) NULL
) ON [PRIMARY]
GO
SET ANSI_PADDING OFF
GO

Поясню некоторые поля таблицы. Поле "_ChangeType" предназначено для записи типа изменения ("inserted", "delited", "updated"). Поле "_Unload" показывает время изменения. Поле "_Load" используется для записи времени загрузки изменения (для разных баз можно использовать отдельное поле). Результат показан на рис. 1

Рис. 1

Теперь можно повесить триггер, регистрирующий изменения таблицы "Сотрудники организаций"


Создание триггера SQL.

Я повесил Job такого содержания:

USE [Zup]
GO
/****** Object: Trigger [dbo].[_Employee_changes_trigger] Script Date: 10/28/2013 12:00:16 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
--====================================
if exists (select * from sys.triggers where name ='_Employee_changes_trigger')
drop trigger _Employee_changes_trigger
Go
Create trigger [dbo].[_Employee_changes_trigger]
on [Zup].[dbo].[_Reference124] FOR INSERT, UPDATE, DELETE NOT FOR REPLICATION
as
-- SET NOCOUNT ON добавлен чтобы не было лишних результатов выполнения операции
set NOCOUNT ON;

-- определеяем тип произошедших изменений INSERT,UPDATE, or DELETE
declare @change_type as varchar(10)
declare @count as int
set @change_type = 'inserted'
select @count = COUNT(*) FROM DELETED
if @count > 0
  begin
       set@change_type = 'deleted'
        select @count = COUNT(*) from INSERTED
        if @Count > 0
        set @change_type = 'updated'
  end
-- обработка удаления
if @change_type = 'deleted'
  begin
        insert into ExchangeDB.dbo._Employee_Changes(
 _IDRRef, 
_ChangeType,
_Unload,
_Load,
_Code,
_Description
) select
_IDRRef,
'delited',
GETDATE(),
NULL,
_Code,
_Description from deleted
end
else
  begin
-- триггер не различает вставку и удаление, так что добавим ручную обработку
-- обработка вставки
if @change_type = 'inserted'
  begin
    insert into ExchangeDB.dbo._Employee_Changes( 
_IDRRef, 
_ChangeType,
_Unload,
_Load,
_Code,
_Description
) select
_IDRRef,
'inserted',
GETDATE(),
NULL,
_Code,
_Description from inserted
end
-- обработка обновления
else
  begin
    insert into ExchangeDB.dbo._Employee_Changes(
 _IDRRef, 
_ChangeType,
_Unload,
_Load,
_Code,
_Description
) select
_IDRRef,
'updated',
GETDATE(),
NULL,
_Code,
_Description from inserted
end
end -- завершение if
-- завершение 

 В соответствующей таблице должен появитьяс триггер, как показано на рис. 2

Рис. 2

Результат работы триггера представлен на рисунке 3.

Рис. 3

 Создание Views

Далее создаем View таблицы "Сотрудники организации" с необходимыми нам полями (далее разбор на конкретном примере со своей нетиповой спецификой):

USE [ExchangeDB]
GO
/****** Object: View [dbo].[V_Reference124] Script Date: 11/05/2013 11:48:42 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE VIEW [dbo].[V_Reference124]
AS
SELECT ZuP.dbo._Reference124._IDRRef, ZuP.dbo._Reference124._Marked, ZuP.dbo._Reference124._Code, ZuP.dbo._Reference124._Description,
ZuP.dbo._Reference53._Description AS CurrentPosition, ZuP.dbo._Reference124._Fld1812 AS HiringDate, ZuP.dbo._Reference124._Fld1813 AS TerminationDate,
ZuP.dbo._Reference124._Fld9932 AS DriverLicence, ZuP.dbo._Reference9960._Code AS GarageCode, ZuP.dbo._Reference9960._Description AS Garage
FROM ZuP.dbo._Reference124 LEFT OUTER JOIN
ZuP.dbo._Reference9960 ON ZuP.dbo._Reference124._Fld10102RRef = ZuP.dbo._Reference9960._IDRRef LEFT OUTER JOIN
ZuP.dbo._Reference53 ON ZuP.dbo._Reference124._Fld1811RRef = ZuP.dbo._Reference53._IDRRef
GO

Создаём View для таблицы изменений (различные добавленные линейные водители):

USE [ExchangeDB]
GO
/****** Object: View [dbo].[V_Distinct_Employee_ChangesLD_Inserted] Script Date: 11/05/2013 13:58:57 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE VIEW [dbo].[V_Distinct_Employee_ChangesLD_Inserted]
AS
SELECT dbo.V_Reference124._IDRRef, dbo.V_Reference124._Marked, dbo.V_Reference124._Code, dbo.V_Reference124._Description, dbo.V_Reference124.CurrentPosition,
dbo.V_Reference124.HiringDate, dbo.V_Reference124.TerminationDate, dbo.V_Reference124.DriverLicence, dbo.V_Reference124.GarageCode,
dbo.V_Reference124.Garage
FROM (SELECT DISTINCT _IDRRef
FROM dbo._Employee_Changes
WHERE (_ChangeType = 'inserted') AND (_Load IS NULL)) AS Changes LEFT OUTER JOIN
dbo.V_Reference124 ON Changes._IDRRef = dbo.V_Reference124._IDRRef
WHERE (dbo.V_Reference124.CurrentPosition = N'Линейный водитель')
GO

Создаем View для таблицы изменений (различные обновленные линейные водители)

USE [ExchangeDB]
GO
/****** Object: View [dbo].[V_Distinct_Employee_ChangesLD_Updated] Script Date: 11/05/2013 14:12:40 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE VIEW [dbo].[V_Distinct_Employee_ChangesLD_Updated]
AS
SELECT dbo.V_Reference124._IDRRef, dbo.V_Reference124._Marked, dbo.V_Reference124._Code, dbo.V_Reference124._Description, dbo.V_Reference124.CurrentPosition,
dbo.V_Reference124.HiringDate, dbo.V_Reference124.TerminationDate, dbo.V_Reference124.DriverLicence, dbo.V_Reference124.GarageCode,
dbo.V_Reference124.Garage
FROM (SELECT DISTINCT _IDRRef
FROM dbo._Employee_Changes
WHERE (_ChangeType = 'updated') AND (_Load IS NULL)) AS Changes LEFT OUTER JOIN
dbo.V_Reference124 ON Changes._IDRRef = dbo.V_Reference124._IDRRef
WHERE (dbo.V_Reference124.CurrentPosition = N'Линейный водитель')
GO

Таким образом, мы получили 3 Views (рис.4)

Рис. 4

Данные View по изменениям сотрудников представлены на рис. 5

Рис. 5

 

Регламентное задание

В базе, которая будет получать данные создаем регламентное задание, в общем модуле регламентного задания размещаем следующий код:

//SQL загрузка
//************Функции***************

Функция ВернутьЗначениеИзМассиваБулево(СомМассив)
   
Массив = Новый Массив();
   
Массив = СомМассив.Выгрузить();
   
Пометка = Массив.Получить(0);
    Если
Пометка = 0 тогда
        Возврат Ложь;
    Иначе
        Возврат Истина;
    КонецЕсли;
КонецФункции

Функция
ПреобразоватьДату(ДатаПреобразования)
    Возврат
Дата(Число(Сред(ДатаПреобразования,7,4))-2000,Сред(ДатаПреобразования,4,2),Лев(ДатаПреобразования,2));
КонецФункции

//************Процедуры*************
Процедура ТМ_ЗагрузкаВодителейСКЛ() Экспорт
   
СтрокаКоннекта = "Provider=SQLOLEDB;Password=*****;Persist Security Info=True;User ID=ExchangeDBwriter;Initial Catalog=ExchangeDB;Data Source=localhost";
   
Connection = Новый COMОбъект("ADODB.Connection");
   
Command = Новый COMObject("ADODB.Command");
   
RecordSet = Новый COMObject("ADODB.RecordSet");
    
Connection.ConnectionString = СтрокаКоннекта;
   
Connection.ConnectionTimeOut = 120;
   
Connection.CursorLocation = 3;
   
Connection.IsolationLevel = 4096;
    
ТЗ = Новый ТаблицаЗначений;
   
ТЗ.Колонки.Добавить("Код");
   
ТЗ.Колонки.Добавить("ПометкаУдаления");
   
ТЗ.Колонки.Добавить("Наименование");
   
ТЗ.Колонки.Добавить("ДатаПриема");
   
ТЗ.Колонки.Добавить("ДатаУвольнения");
   
ТЗ.Колонки.Добавить("НомерЛицензии");
   
ТЗ.Колонки.Добавить("Гараж");
    Попытка
       
Connection.Open();
    Исключение
        Возврат;
    КонецПопытки;
    
//сначала загружаем новые элементы
   
Text="select * from V_Distinct_Employee_ChangesLD_Inserted";
   
Command.ActiveConnection = Connection;
   
Command.CommandTimeout = 120;
   
Command.CommandText = Text;
    Попытка
       
RecordSet.Open(Command);
    Исключение
       
Connection.Close();
        Возврат;
    КонецПопытки;
    Пока НЕ (
RecordSet.EOF) Цикл
       
НоваяСтрока = ТЗ.Добавить();
        
НоваяСтрока.Код = RecordSet.Fields("_Code").Value();
       
ПометкаУдаления = ВернутьЗначениеИзМассиваБулево(RecordSet.Fields("_Marked").Value());
       
НоваяСтрока.ПометкаУдаления = ПометкаУдаления;
       
НоваяСтрока.Наименование = RecordSet.Fields("_Description").Value();
       
НоваяСтрока.ДатаПриема = ПреобразоватьДату(RecordSet.Fields("HiringDate").Value());
       
НоваяСтрока.ДатаУвольнения = ПреобразоватьДату(RecordSet.Fields("TerminationDate").Value());
       
НоваяСтрока.НомерЛицензии = RecordSet.Fields("DriverLicence").Value();
       
НоваяСтрока.Гараж = Справочники.ТМ_Гаражи.НайтиПоНаименованию(RecordSet.Fields("Garage").Value());
        
RecordSet.MoveNext();
    КонецЦикла;
   
Recordset.Close();

   
//записываем данные в базу
   
Для каждого стр из тз цикл
       
//ищем сотрудника
       
ВодительСсылка = Справочники.ТМ_Водители.НайтиПоКоду(стр.Код);
        Если
ВодительСсылка = Справочники.ТМ_Водители.ПустаяСсылка() тогда
           
ВодительОбъект = Справочники.ТМ_Водители.СоздатьЭлемент();
        Иначе
           
ВодительОбъект = ВодительСсылка.ПолучитьОбъект();
        КонецЕсли;
       
ВодительОбъект.Код = стр.Код;
       
ВодительОбъект.Наименование = стр.Наименование;
       
ВодительОбъект.ПометкаУдаления = стр.ПометкаУдаления;
       
ВодительОбъект.ДатаПриема = стр.ДатаПриема;
       
ВодительОбъект.ДатаУвольнения = стр.ДатаУвольнения;
       
ВодительОбъект.НомерУдостоверенияВодителя = стр.НомерЛицензии;
       
ВодительОбъект.Гараж = стр.Гараж;
        Попытка
           
ВодительОбъект.Записать();
           
//отмечаем загруженных
           
CommandText = "UPDATE _Employee_Changes Set _Load = GetDate() where _Code='"+стр.Код+"' and _Load is NULL";
           
Connection.Execute(CommandText,,128);
        Исключение
            Продолжить;
        КонецПопытки;
    КонецЦикла;

   
//теперь пишем обновленных
   
тз.Очистить();
   
Text="select * from V_Distinct_Employee_ChangesLD_Updated";
   
Command.CommandText = Text;
    Попытка
       
RecordSet.Open(Command);
    Исключение
       
Connection.Close();
        Возврат;
    КонецПопытки;
    Пока НЕ (RecordSet.EOF) Цикл
        НоваяСтрока = ТЗ.Добавить();
        
НоваяСтрока.Код = RecordSet.Fields("_Code").Value();
       
ПометкаУдаления = ВернутьЗначениеИзМассиваБулево(RecordSet.Fields("_Marked").Value());
       
НоваяСтрока.ПометкаУдаления = ПометкаУдаления;
       
НоваяСтрока.Наименование = RecordSet.Fields("_Description").Value();
       
НоваяСтрока.ДатаПриема = ПреобразоватьДату(RecordSet.Fields("HiringDate").Value());
       
НоваяСтрока.ДатаУвольнения = ПреобразоватьДату(RecordSet.Fields("TerminationDate").Value());
       
НоваяСтрока.НомерЛицензии = RecordSet.Fields("DriverLicence").Value();
       
НоваяСтрока.Гараж = Справочники.ТМ_Гаражи.НайтиПоНаименованию(RecordSet.Fields("Garage").Value());
        
RecordSet.MoveNext();
    КонецЦикла;
   
Recordset.Close();

   
//записываем данные в базу
   
Для каждого стр из тз цикл
       
//ищем сотрудника
       
ВодительСсылка = Справочники.ТМ_Водители.НайтиПоКоду(стр.Код);
        Если
ВодительСсылка = Справочники.ТМ_Водители.ПустаяСсылка() тогда
           
ВодительОбъект = Справочники.ТМ_Водители.СоздатьЭлемент();
        Иначе
           
ВодительОбъект = ВодительСсылка.ПолучитьОбъект();
        КонецЕсли;
       
ВодительОбъект.Код = стр.Код;
       
ВодительОбъект.Наименование = стр.Наименование;
       
ВодительОбъект.ПометкаУдаления = стр.ПометкаУдаления;
       
ВодительОбъект.ДатаПриема = стр.ДатаПриема;
       
ВодительОбъект.ДатаУвольнения = стр.ДатаУвольнения;
       
ВодительОбъект.НомерУдостоверенияВодителя =?(ЗначениеЗаполнено(ВодительОбъект.НомерУдостоверенияВодителя),ВодительОбъект.НомерУдостоверенияВодителя,стр.НомерЛицензии);
       
ВодительОбъект.Гараж = стр.Гараж;
        Попытка
           
ВодительОбъект.Записать();
           
//отмечаем загруженных
           
CommandText = "UPDATE _Employee_Changes Set _Load = GetDate() where _Code='"+стр.Код+"'  and _Load is NULL";
           
Connection.Execute(CommandText,,128);
        Исключение
            Продолжить;
        КонецПопытки;
    КонецЦикла;
    
Connection.Close();
КонецПроцедуры
//SQL загрузка

tregger триггер SQL View Views обмен данными регистрация изменений таблицы SQL

См. также

Перенос данных из Парус 8 в ЗГУ 3

Зарплата Внешние источники данных Бюджетный учет Платформа 1С v8.3 Сложные периодические расчеты 1С:Зарплата и кадры государственного учреждения 3 Государственные, бюджетные структуры Россия Бухгалтерский учет Бюджетный учет Платные (руб)

Обработка позволяет перенести кадровую информацию и данные по заработной плате, фактических удержаниях, НДФЛ, вычетах, страховых взносах из базы Парус 8 учреждений в конфигурацию 1С:Зарплата и кадры государственного учреждения ред. 3 (ЗГУ) и начать с ней работать с любого месяца года.

84000 руб.

19.08.2020    22447    19    1    

22

Перенос данных из Парус 10 в ЗГУ ред.3

Внешние источники данных Кадровый учет Файловый обмен (TXT, XML, DBF), FTP Обмен между базами 1C Платформа 1С v8.3 Сложные периодические расчеты 1С:Зарплата и кадры государственного учреждения 3 Государственные, бюджетные структуры Россия Бухгалтерский учет Бюджетный учет Платные (руб)

Обработка позволяет перенести кадровую информацию и данные по заработной плате, фактических удержаниях, НДФЛ, вычетах, страховых взносах из базы Парус 10 учреждений в конфигурацию 1С:Зарплата и кадры государственного учреждения ред. 3 (ЗГУ) и начать с ней работать с любого месяца года.

60000 руб.

05.10.2022    9207    9    8    

10

Перенос данных из Парус 7.хх в ЗГУ ред.3

Внешние источники данных Зарплата Бюджетный учет Платформа 1С v8.3 Сложные периодические расчеты 1С:Зарплата и кадры государственного учреждения 3 Государственные, бюджетные структуры Россия Бухгалтерский учет Бюджетный учет Платные (руб)

Обработка позволяет перенести кадровую информацию и данные по заработной плате, фактических удержаниях, НДФЛ, вычетах, страховых взносах из базы Парус 7.хх учреждений в конфигурацию 1С:Зарплата и кадры государственного учреждения ред. 3 (ЗГУ) и начать с ней работать с любого месяца года.

24000 руб.

24.04.2017    48696    97    163    

86

Перенос начальных остатков из Парус 7.71 в БГУ

Внешние источники данных Взаиморасчеты Учет ОС и НМА Логистика, склад и ТМЦ Бюджетный учет Платформа 1С v8.3 Бухгалтерский учет 1С:Бухгалтерия 2.0 1С:Бухгалтерия государственного учреждения Государственные, бюджетные структуры Россия Бюджетный учет Платные (руб)

Перенос словарей и начальных остатков из ПП Парус-Бухгалтерия Бюджет 7.71 в 1Сv8 БГУ2. Заполнение словарей и документов по вводу начальных остатков. Не требуется установка ПП Парус7. Возможна дозагрузка. Позволит автоматически и наиболее полно ввести данные в программу для начала работы. 

15600 руб.

08.12.2011    81559    128    123    

147

Перенос данных из Парус 10 (Торнадо) в ЗГУ ред.3 через Excel

Внешние источники данных Загрузка и выгрузка в Excel Зарплата Бюджетный учет Платформа 1С v8.3 Сложные периодические расчеты 1С:Зарплата и кадры государственного учреждения 3 Государственные, бюджетные структуры Россия Бухгалтерский учет Бюджетный учет Платные (руб)

Обработка позволяет перенести кадровую информацию и данные по заработной плате из Парус 10(Торнадо) учреждений через файлы Excel в конфигурацию 1С:Зарплата и кадры государственного учреждения ред. 3 (ЗГУ). В принципе, обработка может быть использована для загрузки из файлов Excel, полученных из любых информационных систем.

24000 руб.

16.11.2018    29997    20    31    

21

Загрузка спецификаций в УНФ из системы Базис-мебельщик

Производство готовой продукции (работ, услуг) Внешние источники данных Платформа 1С v8.3 1С:Управление нашей фирмой 1.6 Лесное и деревообрабатывающее хозяйство Россия Управленческий учет Платные (руб)

Обработка предназначена для загрузки файлов, выгруженных из системы Базис-мебельщик, в справочник "Спецификации" для последующих процессов учета и диспетчирования полуфабрикатов и изделий.

7200 руб.

24.06.2021    19126    52    50    

29
Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. psamt1k 06.11.13 15:14 Сейчас в теме
Изменения табличных частей, полагаю, так тоже можно сделать?
ЗЫ: поправьте пожалуйста первую ссылку, нерабочая.
2. jan27 732 06.11.13 17:03 Сейчас в теме
(1)да. у меня ссылка работает
Прикрепленные файлы:
3. EdmundoAlvares 06.11.13 21:51 Сейчас в теме
Жесть...
Vladimir Litvinenko; Famza; +2 Ответить
6. jan27 732 06.11.13 23:21 Сейчас в теме
4. awk 741 06.11.13 23:13 Сейчас в теме
(0) Все хорошо, но код на 1С делает все ненужным. Его нужно свести к:

Command.CommandText = "SELECT TOP 100
...
FROM ...
FOR XML";
...
RecordSet.Open(Command);
...
Пока НЕ (RecordSet.EOF) Цикл
Объект1С = CериализаторXML.ПрочитатьXML(ЗаписьXML);
Объект1С.Записать();


То есть делаем FOR XML получаем нативный сериализованый в XML формате объект 1С десериализуем и записываем.
zarucheisky; jan27; +2 Ответить
5. jan27 732 06.11.13 23:20 Сейчас в теме
(4) с недоверием отношусь к 1С-ому xml
7. script 128 09.11.13 21:22 Сейчас в теме
(4) awk,
Вы поселили вирус в голове человека.
Он ведь гордился своим решением, даже на инфостарт выложил.
Оно было сложным и технологичным, содержало 300 строк кода на разных языках,
а вы его .... убили своими 10 строчками. Так ведь и комплекс не полноценности развиться может.
Опасно однако ....
8. awk 741 09.11.13 23:35 Сейчас в теме
(7) script, Я то же делал такие решения:

1. Кода было много времени и мало знаний.
2. Когда было много знаний и мало времени.

Когда же ситуация типовая:

1. Нет ни времени ни знаний
2. Куча знаний и времени

То надо пользоваться типовыми методами - например КД + БСП.
9. jan27 732 10.11.13 14:51 Сейчас в теме
(8) пока окончательно не развился комплекс неполноценности, просветите что такое БСП?
:)))
10. cool.vlad4 2 10.11.13 17:12 Сейчас в теме
(9) jan27, библиотека стандартных подсистем,
jan27; awk; +2 Ответить
11. jan27 732 11.11.13 22:45 Сейчас в теме
(10)спасибо, чет не состыковал....)
12. jan27 732 13.11.13 18:04 Сейчас в теме
(4) при использовании "...FOR XML..." RecordSet содержит одно поле и одну строку типа ComSafeArray
13. awk 741 13.11.13 22:50 Сейчас в теме
14. jan27 732 14.11.13 05:32 Сейчас в теме
(13) а как вытащить xml оттуда?
24. hazyaka 16.07.15 17:45 Сейчас в теме
(4) awk, а есть поподробнее статьи для новичков? не могу дофатазировать что там..
15. xten 47 19.12.13 17:04 Сейчас в теме
Я правильно понимаю, что такой обмен возможно реализовать между любыми конфигурациями?
16. jan27 732 20.12.13 10:17 Сейчас в теме
(15) да. можно даже с другими базами (не 1С) - главное, чтобы на SQL бегали
17. dyak84 30.01.15 12:56 Сейчас в теме
А как зделать с отбором по организации в документах Реализация???????????????Зарание спасибо за ответ
18. jan27 732 30.01.15 16:15 Сейчас в теме
19. hanio 54 01.03.15 19:54 Сейчас в теме
Подскажите пожалуйста а как отключить триггеры?
20. jan27 732 02.03.15 13:21 Сейчас в теме
(19) например, так: drop trigger _Employee_changes_trigger
21. zekrus 151 16.04.15 13:39 Сейчас в теме
А что мешает выполнить полный обмен на стороне SQL (не используя идентификаторы базы источника)?
22. jan27 732 16.04.15 15:58 Сейчас в теме
(21) да, собственно, ничего не мешает... а чем Вам идентификаторы помешали?
23. zarucheisky 16.04.15 16:35 Сейчас в теме
Проще, для сериализуемых объектов включить CDC ( Change Data Capture), c независимыми РС можно использовать CDT (Change Data Tracking), но осторожно.

Остальное, в принципе, так же и ничего нового. Вплоть до создания view с человеческими именами & табличных функций.
25. sml 41 26.01.24 11:33 Сейчас в теме
ничего не написано про разрешения для пользователя базы 1С добавлять записи в базу Изменений.
Там чего должно быть с sp_CHANGEDBOWNER связано
Оставьте свое сообщение