С удалить объект

Для этого необходимо воспользоваться обработкой Удаление помеченных объектов.

Для этого в разделе Администрирование — Поддержка и обслуживание необходимо перейти по гиперссылке Удаление помеченных объектов.

Обработка позволяет удалить все объекты, помеченные на удаление или же выборочные. Для этого в открывшемся диалоговом окне пользователь выбирает один из вариантов удаления:

  • автоматическое удаление всех помеченных объектов — удаляются все объекты, которые были ранее помечены на удаление;

  • выборочное удаление объектов — у пользователя будет возможность отметить необходимые объекты для удаления.

Удаление выполняется с контролем ссылочной целостности. Это значит, что если на тот или иной объект программы (документ, элемент справочника и т.д.) ссылаются другие объекты (связаны с ним, введены на основании этого документа и т.д.), то удаление объекта не будет выполнено.

Важно

Удаление помеченных объектов — необратимая операция.

Помеченные на удаление объекты могут быть безвозвратно удалены только пользователем с административными правами.

Материал расскажет вам о механизме поддержки в 1С, в каких случаях нужно снимать либо ставить конфигурацию на поддержку, и как это сделать.

Поддержка — это стандартный механизм платформы «1С:Предприятие», позволяющий обновлять информационные базы (ИБ) с помощью официальных файлов обновлений от поставщиков конфигураций.

При установке заранее подготовленного комплекта обновлений механизм поддержки не используется.

Снятие с поддержки

Снятие с поддержки выполняется в следующих случаях:

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


Сообщение о наличии заблокированных объектов

2. Перед установкой конфигурации сравнением/объединением. Если в этом случае не снять конфигурацию с поддержки, то заблокированные объекты не обновятся, что может в дальнейшем вызвать серьезные ошибки.

В остальных случаях снятие с поддержки не требуется.

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


Объекты, поставленные на поддержку

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

Для снятия конфигурации с поддержки нужно выполнить следующие действия в режиме Конфигуратор:

1. Выбрать пункт меню «Конфигурация > Поддержка > Настройка поддержки…».


Открытие настроек поддержки

2. В появившемся окне нажать на кнопку «Снять с поддержки», на вопрос ответить «Да».


Снятие конфигурации с поддержки

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


Несколько конфигураций поддержки

После этого можно закрыть окно настройки поддержки.

Постановка на поддержку

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

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

Для постановки конфигурации на поддержку нужно выполнить следующие действия в режиме Конфигуратор:

1. Выбрать пункт меню «Конфигурация > Сравнить, объединить с конфигурацией из файла…».


Пункт меню для сравнения/объединения с конфигурацией

2. Выбрать необходимый файл конфигурации поддержки (с расширением .cf). Информацию о расположении этого файла можно узнать в разделе «Комплект обновления».

3. Должно появиться окно с вопросом о постановке на поддержку и с информацией о названии конфигурации, ее версии и поставщике. В этом окне нужно нажать «Да» и затем дождаться окончания процесса сравнения.


Окно с вопросом о постановке на поддержку

4. В появившемся окне с деревом объектов необходимо нажать на верхнюю галочку в дереве объектов, что должно привести к снятию всех галочек.


Снятие всех галочек в дереве

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

5. При желании можно снять галочку «Сохранять настройки автоматически» в нижней части окна (это не обязательно, просто в данном случае галочка не нужна). Затем необходимо нажать на кнопку «Выполнить».

Выполнение объединения

6. Дождаться появления окна настройки правил поддержки и нажать на кнопку «ОК».

Окно настройки правил поддержки

7. Дождаться сообщения об успешном объединении и нажать на кнопку «ОК».

Сообщение об успешном объединении

8. Дождаться, пока окно «отвиснет», затем выбрать пункт меню «Конфигурация > Поддержка > Настройка поддержки…».

Открытие настроек поддержки

9. Дважды кликнуть по правому столбцу в верхней строке таблицы. В появившемся окне выбрать «Объект поставщика редактируется с сохранением поддержки» и поставить галочку «Установить для подчиненных объектов», затем нажать на кнопки «ОК» и «Закрыть».

Установка правила поддержки для всех объектов конфигурации

10. В некоторых конфигурациях (например, CRM) возможно появление окна с предупреждением о запрете установки правила «Редактируется с сохранением поддержки». В этом случае достаточно нажать на кнопку «Закрыть».

Окно предупреждения о запрете установки правила поддержки

11. Обновить конфигурацию базы данных, нажав клавишу F7 или кнопку на панели инструментов.

Кнопка обновления конфигурации БД

Запускать ИБ в режиме «1С:Предприятие» после принятия изменений в данном случае не требуется. Поскольку постановка на поддержку является последним этапом обновления, окно режима Конфигуратор можно закрыть.

Доброго времени суток всем.
Столкнуться с такой проблемой — надо удалить экземпляр объекта :

BaseClass BaseClassObj; /* Какой-то не очень важный код, который еще можно будет увидеть ниже. */ // Разумеется это работать не будет ( кстати, очень интересно почему — ведь // по идее имя объекта это указатель на него, если у кого будет возможность // объяснить этот момент — буду крайне признателен), ведь мы создали объект // экземпляр объекта не использую new и указатель на объект. delete BaseClassObj;
В итоге попробовал такой метод:
BaseClass BaseClassObj; /* Какой-то не очень важный код, который еще можно будет увидеть ниже. */ // Компилятор уже не ругается, но мы получаем очень интересный вывод в консоль. // В итоге если у нас деструктор срабатывает дважды, при одном созданном объекте, // один раз сейчас, второй раз после завершения main() delete &BaseClassObj;
Интересно получается.
Ниже — код и вывод в консоль, в общем все то, что побудило меня создать эту тему.
main.cpp :
#include «BaseClass.h» using namespace std; void BaseClassPresentation(){ BaseClass BaseClassObj; BaseClassObj.Value2 = 15; std::cout<<«Value2 after resetting Value2. Get value like BaseClass::Value2 (static member of class) — «<<BaseClass::Value2 << std::endl; BaseClassObj.OverloadedFunction(1); BaseClassObj.OverloadedFunction(1,2); BaseClassObj.OverloadedFunction(13.2, 47.1); // Мы НЕ можем таким образом удалить объект. // Потому что удаление происходит через указатель. // Объект BaseClassObj будет удален только по завершению программы. // delete BaseClassObj; // или же…. // При помощи оператора взятия ссылки (&). delete &BaseClassObj; // Код ниже иллюстрирует как создать объект, чтобы его удалить, без использования операции взятия адреса BaseClass *BaseClassObjPtr = new BaseClass(2); delete BaseClassObjPtr; } int main(){ std::cout<<«Main function start now.»<<std::endl; BaseClassPresentation(); return 0; }
BaseClass.h :
#ifndef KEYWORDS_BASECLASS_H #define KEYWORDS_BASECLASS_H #include <iostream> class BaseClass { public: // Так делать нельзя. // // static int Value2 = 10; static int Value2; int Value1 = 50; BaseClass() { std::cout << «Constructor BaseClass has been called» << std::endl; } // Конструктор тоже может быть перегружен! BaseClass(int a){ std::cout << «Constructor BaseClass has been called with argument. this->Value1 now is equal » << a << std::endl; this->Value1 = a; } // Это и функции ниже являются ПРОТОТИПАМИ! static void StaticFunction(); // Так делать нельзя, потому что типы аргументов, или количество аргументов должны отличаться // в перегруженых функциях, не только возвращаемый тип знеачения. // float OverloadedFunction(int a); int OverloadedFunction(int a); // void OverloadedFunction(int a); // Возвращаемый тип перегруженных функций может быть как одинаковый , так и различаться. int OverloadedFunction(int a, int b); float OverloadedFunction(double a, double b); // Деструктор. Не имеет аргументов. Да и не нужны они ему, на самом деле. // Вызывается при удалении объекта или при закрытии программы. // Так же деструктор НЕ МОЖЕТ быть перегружен и вообще должен быть только один. // ~BaseClass(int a){} ~BaseClass(){ std::cout << «Delete anythig used by BaseClass class» <<std::endl; } }; #endif //KEYWORDS_BASECLASS_H

BaseClass.cpp :
#include «BaseClass.h» int BaseClass::Value2 = 5; //Появляется ошибка — cannot declare member function <…> to have static linkage //Мы не можем объявлять функции статическими, только определять. В данном случае мы как раз ОБЪЯВЛЯЕМ //В свою очередь ОПРЕДЕЛЯЕМ эту функцию мы в самом теле класса, то есть в файле BaseClass.h //static void BaseClass::StaticFunction(){ — НЕ БУДЕТ РАБОТАТЬ. ПОТОМУ ЧТО. void BaseClass::StaticFunction(){ std::cout << «Call static function» <<std::endl; std::cout << «Static value of variable Value2 — » << Value2 << std::endl; Value2 = 10; std::cout << «Static value of variable Value2 after new value — » << Value2<< std::endl; } int BaseClass::OverloadedFunction(int a) { std::cout << «Overloaded function with one argument (int a). Argument value is — » << a << std::endl; return 1; } int BaseClass::OverloadedFunction(int a, int b) { std::cout << «Overloaded function with two integer arguments (int a, int b). Sum arguments — » << a+b << std::endl; return 1; } float BaseClass::OverloadedFunction(double a, double b) { std::cout << «Overloaded function with two double arguments (double a, double b). Division arguments — » << a/b << std::endl; return 1.0; }
Выше уже сказал, но заранее повторюсь — почему мы не можем удалить объект по имени объекта, разве это не есть как раз указатель на объект?
Огромное спасибо всем, кто отпишется по данному вопросу.

Открыв документ или справочник на месте реквизита, который обычно заполнен, вы обнаруживаете надпись «Объект не найден…». Это может означать только одно – кто-то из пользователей удалил данные базы данных, не проконтролировав их использование. Ситуация неприятная, но не безвыходная – подобные проблемы можно и нужно решать, не допуская в будущем. К сожалению, штатных механизмов для решения не предусмотрено, поэтому придется самостоятельно писать обработку для проверки и исправления. Описанные ниже действия требуют определенных знаний, поэтому, если вы не уверены в своих силах, обращайтесь за услугами по доработке и обслуживанию 1С к профессионалам.

Причины, поиск и исправление битых ссылок

При возникновении любой ошибки мы стараемся не только нивелировать ее последствия, но и предотвратить ее возникновение в будущем. Чтобы не допустить повторного появления ссылок на удаленные объекты, нам необходимо понять причины их появления в базах 1С 8.3. Обычно подобные явления, называемые битыми ссылками, возникают из-за следующих нюансов:

  1. Недостаточно безопасно настроены права, из-за чего у пользователей есть возможность прямого удаления элементов базы данных. Обычно простым пользователям не дают права на удаление во избежание подобных ситуаций;
  2. Случайное программное удаление данных. Для недопущения битых ссылок используйте функцию «УдалитьОбъекты», передавая объекты в нее в виде массива ссылок. Эта функция проверяет, есть ли в базе ссылки на удаляемые объекты, и стирает только неиспользуемые данные;
  3. Неверно настроенный обмен данными. Здесь совет один – при создании обмена между различными базами стоит быть внимательнее и проверить все ключевые реквизиты.

Рис.1 Тестирование и исправление ИБ

После того, как мы разобрались с причинами, нам предстоит исправить сложившуюся ситуацию. Для этого необходимо найти битые ссылки и удалить или исправить их. Для этих целей платформа 1С имеет функционал тестирования и исправления, встроенный в конфигуратор. Чтобы его запустить, необходимо зайти в меню «Администрирование» — «Тестирование и исправление», настроить параметры и нажать «Выполнить». Если оптимизация и ускорение работы 1С вызывает у вас сложности, обратитесь к нашим специалистам по сопровождению 1С.

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

Для программного поиска обычно используют один из двух методов – с помощью языка запросов или через функцию «ПолучитьОбъект». Рассмотрим пример, когда нам необходимо найти ссылки на удаленного поставщика в документах «ПриобретениеТоваровУслуг». Выберем все документы, где значение поля «Партнер» не равно пустой ссылке, то есть заполнено, и есть NULL. Этот метод хорош тем, что можно установить дополнительные отборы или взять сразу несколько типов документов.

Запрос = Новый Запрос; Запрос.Текст = «ВЫБРАТЬ | ПриобретениеТоваровУслуг.Ссылка КАК Ссылка | ИЗ | Документ.ПриобретениеТоваровУслуг КАК ПриобретениеТоваровУслуг | ГДЕ | ПриобретениеТоваровУслуг.Партнер = ЗНАЧЕНИЕ(Справочник.Партнеры.ПустаяСсылка) | И ПриобретениеТоваровУслуг.Партнер ЕСТЬ НЕ NULL»; РезультатЗапроса = Запрос.Выполнить(); ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать(); Пока ВыборкаДетальныеЗаписи.Следующий() Цикл ДокументДляИсправления =ВыборкаДетальныеЗаписи.Ссылка.ПолучитьОбъект(); ДокументДляИсправления.Партнер = Справочники.Партнеры.ПустаяСсылка(); // код для замены на другого партнера(предварительно он должен быть создан) //ДокументДляИсправления.Партнер = Справочники.Партнеры.НайтиПоНаименованию(«ПартнерДляБитыхСсылок»); ДокументДляИсправления.Записать() ; КонецЦикла;

Результатом запроса будет перечень документов с битыми ссылками. Чтобы их удалить, мы получаем объект каждого документа по ссылке, заменяем реквизит «Партнер» на пустую ссылку и записываем документ. Также можно заменить «.» на другого партнера или попробовать восстановить данные из резервной копии.

Использование метода «ПолучитьОбъект» постепенно уходит в прошлое, но остается достаточно эффективным решением для поиска битых ссылок. Суть в проверке каждого документа определенного типа и, если обнаружена битая ссылка в 1С, то удаляем ее или заменяем.

На практике удаление битых ссылок и их замена чаще всего осуществляются в ручном режиме ответственными пользователями. Для этого им нужен перечень документов, который мы им можем обеспечить, заменив в коде запись документа на команду «Сообщить».

ВыборкаДокументов = Документы.ПриобретениеТоваровУслуг.Выбрать() ; Для каждого элемент из ВыборкаДокументов цикл Если не элемент.Партнер.Пустая() И элемент.Партнер.ПолучитьОбъект() = неопределено тогда ДокументДляИсправления =элемент.Ссылка.ПолучитьОбъект(); ДокументДляИсправления.Партнер = Справочники.Партнеры.ПустаяСсылка(); // код для замены на другого партнера(предварительно он должен быть создан) //ДокументДляИсправления.Партнер = Справочники.Партнеры.НайтиПоНаименованию(«ПартнерДляБитыхСсылок») ДокументДляИсправления.Записать(); КонецЕсли; КонецЦикла;

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

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

С удалить объект

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

Ваш адрес email не будет опубликован. Обязательные поля помечены *