1с универсальный обмен удаление объекта

Обновлено: 07.07.2024

Возможность непосредственного удаления объектов без пометки на удаление и контроля ссылочной целостности

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

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

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

Для избежания ошибок стандартное действие, вызываемое в списках по клавише Del, выполняет пометку на удаление, а для непосредственного удаления используется комбинация клавиш Shift+Del.

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

Таким образом, возможность непосредственного удаления (без контроля ссылочной целостности) должна определяться разработчиком конфигурации при настройке ролей и администратором при назначении ролей пользователям. В большинстве случаев имеет смысл запрещать пользователям интерактивное удаление и обеспечить, таким образом, использование механизма контроля ссылочной целостности. Однако в некоторых случаях непосредственное удаление может быть полезно. Например, для сотрудников, выполняющих первоначальное наполнение информационной базы до начала использования системы, или для объектов, на которые не создается ссылок в других объектах конфигурации.


Проблема с механизмом рисования
Недавно я написал программу "Змейка" в которой используется следующий графический механизм .

Управление исполнительным механизмом, привод
В общем, раз прошлую тему закрыли, а я обещал уведомить Grey по окончании патентования, то создаю.

Reject связанный с механизмом логина
Всем привет! Получил вчера письмо счастья о том, что мое приложение отклонено. Ругаются на.

Как пользоваться механизмом флагов в С++
объясните пожалуйста,как работает флаг в С++,его механика,максимально простым языком,если с .

Вместо УДАЛЕНИЯ ОБЪЕКТА передается регистрируется и передается полностью, а нужно чтобы передавалось УдалениеОбъекта .
Коллизий нет. __________________
Помощь в написании контрольных, курсовых и дипломных работ здесь Понятно!
Короче у таблицы регистрации вообще нет понятия удаление или там еще что то.
Объект просто передается такой какой он реально в базе.
УдалениеОбъекта - предназначен не для этого. Короче у таблицы регистрации вообще нет понятия. реально. В "понятиях" Вы наверняка разбераетесь хорошо, а о работе обсуждаемого механизма, наверняка, не читали даже в синтаксисе, поэтому не засоряйте ПОЖАЛУЙСТА тему. Dethmontt, я не буду Вам цитировать синтаксис или друбой "букварь" программистов, просто откройте и почитайте. А если появятся умные мысли - напИшите А типовая обработка обмена что делает? Поди тоже регистрирует изменения? Она главнее получается, поскольку логично сбрасывать предыдущую регистрацию. А типовая обработка обмена что делает? Поди тоже регистрирует изменения? Она главнее получается, поскольку логично сбрасывать предыдущую регистрацию.

Я, собственно, не спрашиваю, поскольку разбираться пока некогда. А Вы же какой-то пользуетесь? Есть подозрение, что её надо подрихтовать, чтоб оставляла регистрацию, содеянную руками.

Добавлено через 2 минуты
Кроме всего: ОбменДанными - с одной стороны принадлежность объекта метаданных, с другой стороны - объект "ПланыОбмена.ПрЛ1". Они должны отличаться в использовании. Обменданными вообще только чтение, по-моему

Добавлено через 5 минут
Этак через пару дней мы разберёмся с обменом досконально

Я, собственно, не спрашиваю, поскольку разбираться пока некогда. А Вы же какой-то пользуетесь? Есть подозрение, что её надо подрихтовать, чтоб оставляла регистрацию, содеянную руками.

Я никакой не пользуюсь - я с ноля его пишу. Сейчас в базе используется тоже не стандартный механизм, который работает так криво, что страшно становится.

Добавлено через 4 минуты
Возможно.

старый будет быстрее чем писать новый.
Но от этого вопрос не снимается, так как сейчас в подобной ситуации удаление не передаётся точно Идея в том, что оно (удаление) м.б. просто сносится при запуске обработки обмена, в которой изменения от последней выгрузки фиксируются заново. Её ведь тоже люди писали, а в их задачу входило как раз избежать всех раскосяков (если красиво - коллизий).
Ну лень мне залезать в эти тексты, тем более, не знаю точно в какие и времени далеко не вагон. РБД занимался года 3 назад в 81.
А!! Невнимательно прочитал, только последнюю часть. Но как можно писать с нуля. Наверняка же надо взять за основу тексты типовой: не по книжкам же колбасится Но как можно писать с нуля. Наверняка же надо взять за основу тексты типовой: не по книжкам же колбасится

В типовой используется авторегистрация и "черный ящик" - Записать/Прочитать_Изменения.

Идея в том, что оно (удаление) м.б. просто сносится при запуске обработки обмена, в которой изменения от последней выгрузки фиксируются заново. Её ведь тоже люди писали, а в их задачу входило как раз избежать всех раскосяков (если красиво - коллизий). А это натолкнуло меня на мысль, что возможно это глюк конкретного релиза плтформы. В типовой используется авторегистрация и "черный ящик" - Записать/Прочитать_Изменения.

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

Способы регистрации изменений данных в механизмах обмена данными

В платформе 1С:Предприятие 8 реализовано два механизма обмена данными: универсальный механизм обмена данными и механизм распределенной информационной базы. Оба эти механизма базируются на одних тех же технологиях. Одной из этих технологий является служба регистрации изменений данных.

Изменения данных могут регистрироваться в автоматическом режиме. Для этого необходимо при включении объекта метаданных в состав плана обмена разрешить автоматическую регистрацию: установить признак Авторегистрация в значение Разрешить .

Однако часто требуется регистрация не каждого изменения данных, или регистрация изменений смежных объектов, или зависящих от изменяемых данных. Это можно выполнить различными способами.

Для регистрации изменений всех данных для конкретного узла плана обмена необходимо вызвать метод ЗарегистрироватьИзменения() менеджера планов обмена, передав ему в качестве параметра Данные значение Неопределено .

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

Пример: регистрация изменения всех элементов справочника Номенклатура для узла Узел :

Для регистрации конкретных данных различных типов необходимо вызвать метод ЗарегистрироватьИзменения() менеджера планов обмена, передав ему в качестве параметра Данные либо сами данные, либо ссылку на них.

К объектным типам относятся справочники, документы, планы счетов, планы видов характеристик, планы расчета, бизнес-процессы, задачи. Для их регистрации необходимо вызвать метод ЗарегистрироватьИзменения() менеджера планов обмена, передав ему в качестве параметра Данные либо сам объект, либо ссылку на него.

К таким регистрам относятся регистры накопления, регистры бухгалтерии, регистры расчета и регистры сведений со свойством РежимЗаписи , установленным в значение ПодчинениеРегистратору . Для регистрации изменений наборов записей указанных регистров необходимо вызвать метод ЗарегистрироватьИзменения() менеджера планов обмена, передав ему в качестве параметра Данные набор записей с установленным отбором, в котором в элемент отбора Регистратор установлено значение регистратора данного набора записей. При этом чтение данных набора записей перед его регистрацией не обязательно.

К таким регистрам относятся регистры сведений со свойством РежимЗаписи , установленным в значение Независимый . Для регистрации изменений наборов записей данного регистра необходимо вызвать метод ЗарегистрироватьИзменения() менеджера планов обмена, передав ему в качестве параметра Данные набор записей. Состав элементов отбора, при этом, должен строго соответствовать основному отбору регистра. Выбирать поля, входящие в основной отбор регистра необходимо в соответствии с логикой работы конфигурации (см. Подготовка конфигурации к работе в распределенной информационной базе).

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

1.JPG

В статье описывается способ переноса таких объектов в контексте конфигурации "Конвертация 2.1". Во всех остальных случаях, когда используются прочие механизмы обменов - данная задача имеет различное множество решений, которые в данной статье не рассматриваются.

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

Алгоритм "ПередВыгрузкой":

Получение пометки удаления для ссылки производится через точку. Все потому, что далее, перед исполнением кода обработчика объекта "ПриВыгрузке", будет производится чтение ссылки со всеми реквизитами и табличными частями, поэтому использовать получение значения реквизита ссылки с помощью запроса или БСП функции ОбщегоНазначения.ПолучитьЗначениеРеквизита() будет являться лишним. Мы прочитаем все реквизиты в обработчике "ПередВыгрузкой", закэшируя тем самым объект.

3.JPG

(пример трассировки в MSSQL Profiler для процедуры "ПередВыгрузкой")

6.JPG

(пример трассировки перед выполнением кода внутри процедуры "ПриВыгрузке" )

Если объект выгружается впервые, то нет смысла загружать помеченный на удаление объект в приемник. Конечно, в некоторых случаях может потребоваться переносить такие объекты, например, в случае, когда переносится набор записей регистра и наш документ содержится в измерении набора. В таком случае нужно понимать - насколько действительно в базе приемнике нужны такие записи. В моей статье я не рассматриваю такие случаи. Далее, передаем параметр конкретного объекта, который будет содержать информацию о пометке удаления.

Алгоритм "ПриВыгрузке":

ПКО.НеВыгружатьОбъектыСвойствПоСсылкам = Источник.ПометкаУдаления ;

Самый интересный момент статьи. Такой строчкой кода мы указываем, что связанные ссылки не будут тянуться с искомым объектом в файл выгрузки, если он помечен на удаление. Все дело в том, что данное свойство не так очевидно указано в справке к обработчикам. А в настройках правила свойство устанавливается на все объекты выгрузки по такому правилу.

2.JPG

Используя данное свойство мы сокращаем размер файла выгрузки, а так же избавляемся от проверки при загрузке и прописывания кода, который бы исключал при загрузке связанные ссылки (весьма не тривиальный алгоритм). В случае, если мы не используем файлы, а осуществляем обмен с помощью веб-сервисов или com-подключений - мы сокращаем объем передаваемых данных.

Алгоритм "ПриЗагрузке":

ЕстьПараметрПометкаУдаления = ( Параметры.Свойство ( "_ПометкаУдаления" ) И Параметры._ПометкаУдаления );

Если ОбщегоНазначения.ЕстьРеквизитОбъекта ( "РучнаяКорректировка" , Объект.Метаданные ()) Тогда ЕстьРучнаяКорректировка = Объект.РучнаяКорректировка ;

НеЗамещатьОбъект = ЕстьРучнаяКорректировка ИЛИ ЕстьПараметрПометкаУдаления;

Если НЕ ЕстьРучнаяКорректировка И ЕстьПараметрПометкаУдаления Тогда

При загрузке в базу приемник нам необходимо проанализировать - был ли данный объект ранее загружен и его движения были отредактированы. Для этого обратимся к реквизиту объекта "РучнаяКорректировка", если он, конечно, существует. Так же проверим параметр, который с объектом мы передали при выгрузке процедурой "ПередатьОдинПараметрВПриемник". Если движения объекта был ранее отредактированы или объект стал помеченным на удаления - мы не замещаем значения реквизитов объекта, а пометку устанавливаем принудительно в данном обработчике.

Осталось разместить вызовы данных алгоритмов в обработчиках объектов: "ПередВыгрузкой", "ПриВыгрузке", "ПриЗагрузке".

4.JPG

Конечно, пример, приведенный в моей статье, является не единственным вариантом решения задачи. Вариантов, возможно, масса. Например, можно в базе приемнике сделать веб-сервис, к которому мы могли бы обращаться из базы источника, передавая информацию об выгружаемых объектах - как вариант идентификаторы ссылок. А в ответ веб-сервис возвращал информацию - нужно ли вообще выгружать такие объекты.

С данной задачей я столкнулся "вживую", на достаточно большом объеме данных. И такой подход оказался вполне эффективным.

Надеюсь, что пример, описанный в статье, окажется полезным!

Автор статьи

Ведущий разработчик по технологическим вопросам ООО ЦС ИнфоСофт

Читайте также: