Тип: Булево. Пометка объекта на удаление. Истина - пометка удаления установлена.
Полное описание, параметры и ограничения
ПланВидовРасчетаСсылка.<Имя плана видов расчета>.ПометкаУдаления (ChartOfCalculationTypesRef.<Chart of calculation types name>.DeletionMark)
ПланВидовРасчетаСсылка.<Имя плана видов расчета> (ChartOfCalculationTypesRef.<Chart of calculation types name>)
ПометкаУдаления (DeletionMark)
Доступен, начиная с версии 8.0.
Использование:
Только чтение.
Описание:
Тип: Булево.
Пометка объекта на удаление.
Истина - пометка удаления установлена.
Доступность:
Сервер, толстый клиент, внешнее соединение.
Использование в версии:
Доступен, начиная с версии 8.0.
Методическая информация
Практические примеры
Ссылка на премию: прочитать связи, восстановить по UUID и изменить только копию
Различим ссылку на существующий вид расчёта и новый объект: прочитаем паспорт B, восстановим его UUID и подготовим черновик D без записи.
Где и как запускать
Полный обычный клиентский общий модуль УчебныеВиды85, только толстый клиент. Пульт и модуль объекта отдельными полными блоками ниже; не выполнялся.
Подготовка
Создайте НОВУЮ отдельную файловую базу 8.5.1.1343: имя конфигурации УчебныеМенеджерыРасчетов85, совместимость НеИспользовать, обычное приложение и толстый клиент. Не используйте рабочие ЗУП/КА/УТ/УНФ/БП. Здесь код, стенд и формы не выполнялись: runtimeVerifiedScenarios=0.
План видов расчёта Уч85Начисления: Код Строка(10), переменная длина, наименование 100, уникальность кода включена. ИспользованиеПериодаДействия=Да, ЗависимостьОтВидовРасчета=ПоПериодуДействия, в базовых планах только сам Уч85Начисления. Собственный реквизит Уч85Ключ Строка(8), Индексировать. Нет предопределённых элементов, общих реквизитов, разделителей, регистров расчёта или расчётных алгоритмов. Модули пустые.
В стандартном списке своего плана вручную создайте ровно три обычных вида: A — код 10, имя Учебный оклад, ключ A, ПериодДействияБазовый=Истина; B — код 20, имя Учебная премия, ключ B, ПериодДействияБазовый=Ложь; C — код 30, имя Учебное отсутствие, ключ C, ПериодДействияБазовый=Ложь. Все без пометки удаления и не предопределённые.
У B вручную заполните три стандартные таблицы: БазовыеВидыРасчета содержит только ссылку A; ВедущиеВидыРасчета только A; ВытесняющиеВидыРасчета только C. У A/C все три таблицы пустые. Сохраните только эту собственную подготовку. Это технический граф связей, не утверждённая методика начисления зарплаты.
Общий модуль УчебныеВиды85: неглобальный, Клиент (обычное приложение)=Да, Сервер=Нет, Привилегированный=Нет, другие клиентские флаги=Нет. Вставляйте полный модуль одного выбранного урока целиком, не внутрь обработчика и не все варианты одновременно.
Создайте собственную обработку УчебныеВиды85 с обычной основной формой Пульт. Кнопка Выполнить, действие ВыполнитьНажатие; отдельный полный модуль формы приведён ниже. F7 и обновление только своего стенда, запуск Пульта в толстом клиенте.
Для основных опытов используется одна сессия, никаких фоновых обменов, расширений, сторонних обработчиков или других пользователей, меняющих записи. Код читает собственные виды и изменяет полученный объект только в памяти. Записать, удаление, проведение, расчёт регистров, файлы и сеть не вызываются.
Процедура ВыполнитьПример() Экспорт
ПроверитьСвойСтенд();
Свои = ПолучитьСвоиВиды();
B = Свои.B;
ТипСсылки = Тип("ПланВидовРасчетаСсылка.Уч85Начисления");
Пустая = Новый(Тип("ПланВидовРасчетаСсылка.Уч85Начисления"));
Если ТипЗнч(Пустая) <> ТипСсылки Или Не Пустая.Пустая()
Или Пустая <> Свои.Менеджер.ПустаяСсылка() Тогда
ВызватьИсключение "Без аргумента конструктор должен дать пустую ссылку своего плана";
КонецЕсли;
Параметры = Новый Массив;
Параметры.Добавить(B.УникальныйИдентификатор());
Восстановленная = Новый(Тип("ПланВидовРасчетаСсылка.Уч85Начисления"), Параметры);
Если Восстановленная <> B Или Восстановленная.Пустая() Тогда
ВызватьИсключение "UUID своего записанного B должен восстановить ту же ссылку";
КонецЕсли;
Если B.Ссылка <> B Или B.Код <> "20" Или B.Наименование <> "Учебная премия"
Или B.ПометкаУдаления Или B.Предопределенный Или B.ИмяПредопределенныхДанных <> ""
Или B.ПериодДействияБазовый Тогда
ВызватьИсключение "Паспорт ссылки B отличается от своей сохранённой подготовки";
КонецЕсли;
ВерсияДо = B.ВерсияДанных;
Если ТипЗнч(ВерсияДо) <> Тип("Строка") Тогда
ВызватьИсключение "ВерсияДанных ссылки должна иметь тип Строка";
КонецЕсли;
Базовые = B.БазовыеВидыРасчета;
Ведущие = B.ВедущиеВидыРасчета;
Вытесняющие = B.ВытесняющиеВидыРасчета;
Если Базовые.Количество() <> 1 Или Ведущие.Количество() <> 1 Или Вытесняющие.Количество() <> 1 Тогда
ВызватьИсключение "Читаем три настоящие сохранённые таблицы зависимостей B";
КонецЕсли;
Если Базовые.Получить(0).ВидРасчета <> Свои.A Или Ведущие.Получить(0).ВидРасчета <> Свои.A
Или Вытесняющие.Получить(0).ВидРасчета <> Свои.C Тогда
ВызватьИсключение "В сохранённом B нужны базовый A, ведущий A и вытесняющий C";
КонецЕсли;
Копия = B.Скопировать();
Если ТипЗнч(Копия) <> Тип("ПланВидовРасчетаОбъект.Уч85Начисления") Или Не Копия.ЭтоНовый() Тогда
ВызватьИсключение "Скопировать должен вернуть новый объект, не ещё одну ссылку B";
КонецЕсли;
Если Копия.Наименование <> B.Наименование Или Копия.Уч85Ключ <> "B" Тогда
ВызватьИсключение "Копия не содержит исходные учебные данные";
КонецЕсли;
ПроверитьСвоиСвязи(Копия, "B", Свои);
Копия.Код = "40";
Копия.Наименование = "Черновик новой премии";
Копия.Уч85Ключ = "D";
Копия.БазовыеВидыРасчета.Очистить();
Если Копия.БазовыеВидыРасчета.Количество() <> 0 Или Не Копия.ЭтоНовый() Тогда
ВызватьИсключение "Редактируем только новый объект в памяти";
КонецЕсли;
Повторно = ПолучитьСвоиВиды();
Если Повторно.B <> B Или Повторно.B.ВерсияДанных <> ВерсияДо Тогда
ВызватьИсключение "Сохранённый B должен сохранить ссылку, имя, зависимости и версию";
КонецЕсли;
Сообщить(СтрШаблон("B: код %1, имя %2, версия %3; базовый A, ведущий A, вытесняющий C",
B.Код, B.Наименование, ВерсияДо));
Сообщить("UUID восстановил существующую ссылку. Черновик D изменён только в памяти; в базе по-прежнему A,B,C.");
КонецПроцедуры
Процедура ПроверитьСвойКонтекст()
Если Метаданные.РежимСовместимости <> Метаданные.СвойстваОбъектов.РежимСовместимости.НеИспользовать Тогда
ВызватьИсключение "Нужен собственный стенд УчебныеМенеджерыРасчетов85 платформы 8.5.1.1343";
КонецЕсли;
Если ТранзакцияАктивна() Тогда
ВызватьИсключение "Учебный вывод не должен выполняться внутри чужой транзакции";
КонецЕсли;
КонецПроцедуры
Процедура ПроверитьСвойОсновнойПлан()
Описание = Метаданные.ПланыВидовРасчета.Найти("Уч85Начисления");
Если Описание = Неопределено Тогда
ВызватьИсключение "Создайте собственный план Уч85Начисления";
КонецЕсли;
Если Описание.ТипКода <> Метаданные.СвойстваОбъектов.ТипКодаПланаВидовРасчета.Строка
Или Описание.ДлинаКода <> 10 Или Описание.ДлинаНаименования <> 100
Или Не Описание.ИспользованиеПериодаДействия
Или Описание.ЗависимостьОтВидовРасчета <> Метаданные.СвойстваОбъектов.ИспользованиеБазыПланаВидовРасчета.ПоПериодуДействия Тогда
ВызватьИсключение "Настройки учебного плана не соответствуют подготовке";
КонецЕсли;
Если Описание.БазовыеВидыРасчета.Количество() <> 1
Или Не Описание.БазовыеВидыРасчета.Содержит(Описание) Тогда
ВызватьИсключение "Выберите только собственный план как базовый";
КонецЕсли;
КонецПроцедуры
Функция ПолучитьСвоиВиды()
ПроверитьСвойОсновнойПлан();
Менеджер = ПланыВидовРасчета.Уч85Начисления;
A = Менеджер.НайтиПоРеквизиту("Уч85Ключ", "A");
B = Менеджер.НайтиПоРеквизиту("Уч85Ключ", "B");
C = Менеджер.НайтиПоРеквизиту("Уч85Ключ", "C");
Если A.Пустая() Или B.Пустая() Или C.Пустая() Или A = B Или A = C Или B = C Тогда
ВызватьИсключение "Подготовьте три разные реальные ссылки своего основного плана";
КонецЕсли;
Коды = Новый Структура("A,B,C", "10", "20", "30");
Имена = Новый Структура("A,B,C", "Учебный оклад", "Учебная премия", "Учебное отсутствие");
Свои = Новый Структура("Менеджер,A,B,C,Коды,Имена", Менеджер, A, B, C, Коды, Имена);
Ключи = Новый Массив;
Выборка = Менеджер.Выбрать(, "Код Возр");
Пока Выборка.Следующий() Цикл
Ключ = Выборка.Уч85Ключ;
ОжидаемыйКод = Неопределено;
ОжидаемоеИмя = Неопределено;
Если Не Коды.Свойство(Ключ, ОжидаемыйКод) Или Не Имена.Свойство(Ключ, ОжидаемоеИмя) Тогда
ВызватьИсключение "В основной выборке есть лишний учебный вид";
КонецЕсли;
Если Выборка.Код <> ОжидаемыйКод Или Выборка.Наименование <> ОжидаемоеИмя
Или Выборка.ПометкаУдаления Или Выборка.Предопределенный Или Выборка.ИмяПредопределенныхДанных <> ""
Или Выборка.Ссылка <> Свои[Ключ] Тогда
ВызватьИсключение "Поля собственного вида не совпали с подготовкой";
КонецЕсли;
ПроверитьСвоиСвязи(Выборка, Ключ, Свои);
Ключи.Добавить(Ключ);
КонецЦикла;
Если СтрСоединить(Ключи, ",") <> "A,B,C" Тогда
ВызватьИсключение "Основной план должен содержать ровно A,B,C в порядке кода";
КонецЕсли;
Возврат Свои;
КонецФункции
Процедура ПроверитьСвоиСвязи(Выборка, Ключ, Свои)
Если ТипЗнч(Выборка.ПериодДействияБазовый) <> Тип("Булево") Или Выборка.ПериодДействияБазовый <> (Ключ = "A") Тогда
ВызватьИсключение "Только собственный A имеет подготовленный признак базового периода";
КонецЕсли;
Если Ключ = "B" Тогда
Если Выборка.БазовыеВидыРасчета.Количество() <> 1 Или Выборка.ВедущиеВидыРасчета.Количество() <> 1
Или Выборка.ВытесняющиеВидыРасчета.Количество() <> 1 Тогда
ВызватьИсключение "У B нужны три реальные подготовленные строки зависимостей";
КонецЕсли;
Если Выборка.БазовыеВидыРасчета.Получить(0).ВидРасчета <> Свои.A
Или Выборка.ВедущиеВидыРасчета.Получить(0).ВидРасчета <> Свои.A
Или Выборка.ВытесняющиеВидыРасчета.Получить(0).ВидРасчета <> Свои.C Тогда
ВызватьИсключение "У B базовый/ведущий A и вытесняющий C, не плановые случайные ссылки";
КонецЕсли;
Иначе
Если Выборка.БазовыеВидыРасчета.Количество() <> 0 Или Выборка.ВедущиеВидыРасчета.Количество() <> 0
Или Выборка.ВытесняющиеВидыРасчета.Количество() <> 0 Тогда
ВызватьИсключение "У A/C таблицы зависимостей должны быть пустыми";
КонецЕсли;
КонецЕсли;
КонецПроцедурыУчебныеВиды85.Пульт
УчебныеМенеджерыРасчетов85 → Обработки → УчебныеВиды85 → Формы → Пульт → Модуль
Полный модуль собственной обычной формы, не выполнялся.
Процедура ВыполнитьНажатие(Кнопка)
УчебныеВиды85.ВыполнитьПример();
КонецПроцедурыРазбор по шагам
Используем общий стенд A/B/C из подготовки. Проверка всего набора исключает случайную ссылку на отсутствующий вид; B имеет реальные сохранённые зависимости A/A/C.
ТипСсылки задаёт конкретный прикладной тип своего плана. Функциональный Новый без аргументов создаёт пустую ссылку, равную ПустаяСсылка менеджера; строкой GUID она не заменяется.
Передаём в массив аргументов настоящий УникальныйИдентификатор B, не случайный GUID. Новый(ТипСсылки, Параметры) восстанавливает то же значение ссылки и не создаёт новую запись.
Ссылка.Ссылка равна самой ссылке. Код здесь Строка, поскольку это определено своим планом. Проверяем имя, отсутствие пометки, Предопределенный=Ложь и пустое имя предопределения.
В установленной справке ПериодДействияБазовый ссылки отмечен Чтение и запись. В этом опыте только читаем Ложь для B, не распространяем readonly остальных полей на весь тип.
ВерсияДанных — строка платформы, не дата и не количество изменений. Сохраняем исходную версию и сравниваем после опыта в своей единственной сессии; не разбираем её формат.
Базовые/ведущие/вытесняющие списки доступны из-за настроек собственного плана. Читаем их реальные строки: базовый и ведущий A, вытесняющий C. Это граф определений, не результат начисления зарплаты.
Скопировать возвращает новый ПланВидовРасчетаОбъект. Проверяем ЭтоНовый, имя, реквизит и три таблицы. Не предполагаем сохранение кода: явно задаём код 40 и собственный ключ D.
У копии меняем имя и очищаем только её БазовыеВидыРасчета. ПолучитьСвоиВиды заново проверяет три сохранённые записи и их связи: исходный B не изменился. Записать нигде не вызывается.
Как проверить результат
Будущий ручной тест в новом стенде: F7, открыть свой Пульт, Выполнить. Не должно быть исключений при неизменной подготовке A/B/C.
Пустая имеет прикладной тип своего плана и Пустая()=Истина; Восстановленная равна реальной B. UUID не превращается в новый сохранённый вид.
Паспорт B: код 20, Учебная премия, не предопределённый, не помеченный, базовый период Ложь, версия имеет тип Строка.
До копирования реальные зависимости B: A/A/C. У нового черновика D базовая таблица очищена, ЭтоНовый остаётся Истина.
Повторное чтение подтверждает A/B/C, исходные имя/зависимости B и прежнюю версию. В списке нет D; не следует сохранять его стандартной формой.
Ожидаемый результат
Пустая ссылка и восстановленная B различены; паспорт и связи B прочитаны. Новый черновик D существует только в памяти, сохранённый B и три записи не изменены.
На что обратить внимание
Прикладная запись Новый ПланВидовРасчетаСсылка.Имя может ошибаться при проверке модулей: справка рекомендует функциональный Новый, который здесь и используется.
Пустая ссылка, несуществующая непустая ссылка и сохранённый объект — разные состояния. Здесь UUID получен именно от проверенного сохранённого B.
Код зависит от метаданных. Связи не читаются в плане без требуемых периодов/зависимости; защитная проверка выполняется раньше.
Изменять readonly паспорт через ссылку нельзя; редактируем только объект копии. Скопировать сам не записывает его в базу.
Проверка версии имеет смысл в выделенном однопользовательском стенде без фоновых писателей. Это не стратегия конкурентного редактирования.
Статические проверки не означают запуск в 1С: runtimeVerifiedScenarios=0.
Пример не запускался в вашей базе. Перед применением проверьте его в указанном учебном контексте.