Регистрация изменений объектов для выгрузки (версионирование)

11.03.12

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

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

 

 

Принцип работы по выгрузке изменений следующий. Первая выгрузка идет для всех объектов в базе, без фильтров. Далее cнекоторой периодичностью запускается выгрузка объектов из базы. При этом выгружаются только объекты, для которых есть строка в регистре мИзмененныеОбъекты. Данный регистр выступает здесь в качестве фильтра. По окончании выгрузки регистр очищается.

Просчитаем все варианты действий над объектами конфигурации, и  что мы будем записывать при этом в регистр.  Могут быть три вида операций над объектами в базе: 1.добавлен 2.изменен 3.удален.

Теперь считаем, что мы будем записывать в регистр:

 

Объект существовал перед очисткой регистра?

Действия над объектом за прошедший период

Пишем в регистр по итогам

1.Cуществовал

Изменен

Изменен

2.Существовал

Удален

Удален

3.Существовал

Изменен, Удален

Удален

4.Не существовал

Добавлен

Добавлен

5.Не существовал

Добавлен, Изменен

Добавлен

6.Не существовал

Добавлен, Удален

Удаляем запись «Добавлен»

7.Не существовал

Добавлен, Изменен,Удален

Удаляем запись «Изменен»

 

В двух последних случаях 6. и 7. необходимо очистить регистр, т.к. в базе, куда мы собираемся выгружать данные, нет данных объектов.  Соответственно, эта база и знать ничего о них не должна.

Создаем регистр, разреза «строкаУИД» нам достаточно,  сделаем его измерением. Все остальное добавим в ресурсы.  

Поле «Ссылка» в его 1с-овском представлении нам не нужно, я добавил его временно на этапе разработки.

  Как ясно из назначения регистра, нам необходима запись об удаленных объектах конфигурации .  Т. е. нам нужна ситуация, когда запись в регистре есть, хотя объекта уже нет.   Поэтому ссылочные типы данных для измерений и ресурсов нам не подходят.  Если сделать, например, поле «Ссылка» ссылочным(каламбур :) ), при удалении объекта пользователем система запретит это сделать.  Контроль ссылочной целостности никто не отменял.   Поэтому, поступаем здесь единственно возможным образом - делаем все поля строковыми. 

 

Далее добавляем подписки на события, у меня для справочников и документов получилось 4 подписки:

 

 

И пишем в глобальный модуль:

 
Процедура мСправочникиИзмененияПередЗаписью(Источник, Отказ) Экспорт
    Источник.ДополнительныеСвойства.Вставить("Новый", Источник.ЭтоНовый());
КонецПроцедуры

Процедура мДокументыИзмененияПередЗаписью(Источник, Отказ, РежимЗаписи, РежимПроведения) Экспорт
           Источник.ДополнительныеСвойства.Вставить("Новый", Источник.ЭтоНовый());
КонецПроцедуры

     
Процедура мПриЗаписи(Источник, Отказ) Экспорт
    НазваниеОбъекта = СокрЛП(Источник.Метаданные().ПолноеИмя());
            РегИзмененныеОбъекты=РегистрыСведений.мИзмененныеОбъекты.СоздатьМенеджерЗаписи();
            РегИзмененныеОбъекты.Название=НазваниеОбъекта;
            РегИзмененныеОбъекты.СтрокаУИД=Источник.Ссылка.УникальныйИдентификатор();
            РегИзмененныеОбъекты.Ссылка=Источник.Ссылка;

    Результат = ОбъектДобавлен(РегИзмененныеОбъекты.СтрокаУИД);
    Если Результат.Количество() > 0 Тогда  
    Возврат;
    КонецЕсли;
    Если Источник.ДополнительныеСвойства.Новый = Истина Тогда
           РегИзмененныеОбъекты.Статус = "Добавлен";
    ИначеЕсли Источник.ДополнительныеСвойства.Новый = Ложь Тогда
           РегИзмененныеОбъекты.Статус = "Изменен";
    КонецЕсли;    
    РегИзмененныеОбъекты.Записать();
КонецПроцедуры


Процедура мПередУдалением(Источник, Отказ) Экспорт
            НазваниеОбъекта = СокрЛП(Источник.Метаданные().ПолноеИмя());
            РегИзмененныеОбъекты=РегистрыСведений.мИзмененныеОбъекты.СоздатьМенеджерЗаписи();
            РегИзмененныеОбъекты.СтрокаУИД=Источник.Ссылка.УникальныйИдентификатор();
            Результат =  ОбъектДобавлен(РегИзмененныеОбъекты.СтрокаУИД);

    Если Результат.Количество() > 0 Тогда
            РегИзмененныеОбъекты.Прочитать();  
            РегИзмененныеОбъекты.Удалить();

    Иначе    
            РегИзмененныеОбъекты.Название=НазваниеОбъекта;
            РегИзмененныеОбъекты.СтрокаУИД=Источник.Ссылка.УникальныйИдентификатор();
            РегИзмененныеОбъекты.Статус =
"Удален";   
            РегИзмененныеОбъекты.Ссылка=Источник.Ссылка;
            РегИзмененныеОбъекты.Записать();

   КонецЕсли; 
   КонецПроцедуры
   
Функция ОбъектДобавлен(УИД)
 Запрос = Новый Запрос;        
        Запрос.Текст =
        "ВЫБРАТЬ
        |    ЕСТЬNULL(мИзмененныеОбъекты.СтрокаУИД, 0) КАК СтрокаУИД
        |ИЗ
        |    РегистрСведений.мИзмененныеОбъекты КАК мИзмененныеОбъекты
        |ГДЕ
        |    мИзмененныеОбъекты.СтрокаУИД = &СтрокаУИД
        |    И мИзмененныеОбъекты.Статус = ""Добавлен""";
        Запрос.УстановитьПараметр("СтрокаУИД", УИД);
        Результат = Запрос.Выполнить().Выбрать();
        Возврат Результат; 
   КонецФункции    

 

  Получаем в пользовательском режиме подобное:

 

 

Вступайте в нашу телеграмм-группу Инфостарт

Вы можете заказать платную адаптацию этой статьи под ваши задачи на «Бирже заказов».

  • 0% комиссии — оплата напрямую исполнителю;
  • Исполнители любого масштаба — от отдельных специалистов до команд под проект;
  • Прямой обмен контактами между заказчиком и исполнителем;
  • Безопасная сделка — при необходимости;
  • Рейтинги, кейсы и прозрачная система откликов.

См. также

Внешние источники данных Разработчик Аналитик Пользователь 1С:Предприятие 8 1C:Бухгалтерия Узбекистан Беларусь Кыргызстан Молдова Россия Казахстан Платные (руб)

Готовое решение для автоматической выгрузки данных из 1С 8.3 в базу данных ClickHouse, PostgreSQL или Microsoft SQL для работы с данными 1С в BI-системах. «Экстрактор данных 1С в BI» работает со всеми типовыми и нестандартными конфигурациями 1С 8.3 и упрощает работу бизнес-аналитиков. Благодаря этому решению, специалистам не требуется быть программистами, чтобы легко получать данные из 1С в вашей BI-системе.

35000 руб.

15.11.2022    33865    53    49    

51

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

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

85400 руб.

05.10.2022    14597    17    8    

17

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

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

122000 руб.

19.08.2020    30666    28    3    

29

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

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

85400 руб.

24.04.2017    57687    99    165    

91

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

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

10370 руб.

24.06.2021    26865    66    55    

48

Файловый обмен (TXT, XML, DBF), FTP Внешние источники данных Бухгалтер Пользователь 1С:Предприятие 8 1С:Бухгалтерия 3.0 Здравоохранение, медицина, стоматология Фармацевтика, аптеки Россия Платные (руб)

Внешняя обработка «Загрузка документов из eФарма» создана для программы 1С:Бухгалтерия предприятия, редакция 3.0 (версии Базовая, Проф и Корп). Обработка позволяет загружать документы в базу 1С из файлов выгрузки, имеющих формат .DBF, которые создаются в программе eФарма или eФарма2, а также из любых других программ, формирующих файлы-выгрузки с таким же расширением.

9760 руб.

15.03.2024    2891    5    0    

7
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
0. mailwood 21 19.10.11 11:39 Сейчас в теме
Стояла задача разработать выгрузку в базу на Oracle, в общем, не между 1С базами. Представляю, как реализовал регистрацию изменений с помощью подписок на события.

Перейти к публикации

1. Magister 134 19.10.11 11:39 Сейчас в теме
А почему бы просто не использовать план обмена? Зачем такие костыли?
2. fomix 33 20.10.11 10:09 Сейчас в теме
Просто использовать план обмена стремно! Там фиксируется модифицированность объекта, а все случаи, перечисленные автором в таблице, не учитываются.
Для отправки сообщения требуется регистрация/авторизация