Авто добавление обработки в справочник Внешних обработок Чтобы не изменять типовую конфигурацию приходится использовать типовой механизм внешних печатных форм и обработок. Данный код проверяет - добавлена ли открываемая обработка в конфигурацию, если нет - задает вопрос и при положительном ответе - автоматически добавляет в конфигурацию:
Код 1C v 8.х ПолноеИмяФайлаОбработки = ЭтотОбъект. ИспользуемоеИмяФайла;
Запрос = Новый Запрос;
Запрос. УстановитьПараметр( "Наименование" , ЭтотОбъект. Метаданные( ) . Синоним) ;
Запрос. УстановитьПараметр( "ВидОбработки" , Перечисления. ВидыДополнительныхВнешнихОбработок. ПечатнаяФорма) ;
Запрос. Текст =
"ВЫБРАТЬ РАЗРЕШЕННЫЕ
| ВнешниеОбработки.Ссылка
|ИЗ
| Справочник.ВнешниеОбработки КАК ВнешниеОбработки
|ГДЕ
| ВнешниеОбработки.Наименование = &Наименование
| И ВнешниеОбработки.ВидОбработки = &ВидОбработки" ;
Если НЕ Запрос. Выполнить( ) . Пустой( ) Тогда Возврат ; КонецЕсли ;
Если Вопрос( "Зарегистрировать обработку как печатную форму для документа "" ЗарплатаКВыплатеОрганизаций"" в справочнике "" Внешние обработки"" ?" , РежимДиалогаВопрос. ДаНет) = КодВозвратаДиалога. Да Тогда
ВнешняяОбработка = Справочники. ВнешниеОбработки. СоздатьЭлемент( ) ;
ВнешняяОбработка. Наименование = ЭтотОбъект. Метаданные( ) . Синоним;
ВнешняяОбработка. ХранилищеВнешнейОбработки = Новый ХранилищеЗначения( Новый ДвоичныеДанные( ПолноеИмяФайлаОбработки) ) ;
ВнешняяОбработка. ВидОбработки = Перечисления. ВидыДополнительныхВнешнихОбработок. ПечатнаяФорма;
ВнешняяОбработка. Комментарий = "Внешняя печатная форма для документа "" ЗарплатаКВыплатеОрганизаций"" " ;
ВнешняяОбработка. КомментарийКФайлуИсточнику = ПолучитьКомментарийКФайлу( ПолноеИмяФайлаОбработки) ;
НовСтр = ВнешняяОбработка. Принадлежность. Добавить( ) ;
НовСтр. ПредставлениеОбъекта = "Документ "" Зарплата к выплате организаций"" " ;
НовСтр. ХранилищеВнешнейОбработки = Новый ХранилищеЗначения( Новый ДвоичныеДанные( ПолноеИмяФайлаОбработки) ) ;
НовСтр. СсылкаОбъекта = Документы. ЗарплатаКВыплатеОрганизаций. ПустаяСсылка( ) ;
Попытка
ВнешняяОбработка. Записать( ) ;
Исключение
Сообщить( ОписаниеОшибки( ) , СтатусСообщения. Важное) ;
КонецПопытки ;
КонецЕсли ;
Категория:
1С Общие вопросы - Обычные формы Как в запросе отобрать битые ссылки, поиск Битых Ссылок Когда объект был удален непосредственно, то все ссылки на него в справочниках, в документах, в регистрах стали битыми и отображаются следующим образом:
<Объект не найден> (16:bca8000c6efdd52111d8eaba7c9706eb)
Битая ссылка не является пустой. Т.е. метод Пустая() возвращает Ложь. Определить, что ссылка битая можно так:
Код 1C v 8.х Если Ссылка. ПолучитьОбъект( ) = Неопределено Тогда
КонецЕсли ;
Если Лев( СокрЛП( Ссылка) , 18 ) = "<Объект не найден>" Тогда
Код 1C v 8.х
Попытка
обьект= Ссылка. Ссылка;
Исключение
сообщить( "битая" ) ;
КонецПопытки ;
И последний вариант для проверки в запросах:
ГДЕ Объект.РеквизитОбъекта ЕСТЬ NULL И Не Объект=&ПустаяСсылкаОбъекта
Ниже дана программа для удаления записей регистров, у которых регистратор - битая ссылка, т.е. не существует в базе.
Код 1C v 8.х Процедура УдалениеБитыхСсылок(ИмяРегистра,ТипРегистра,ТипРегистраЗ)
МенеджерРегистра = ТипРегистра[ИмяРегистра];
Запрос = Новый Запрос( "
|ВЫБРАТЬ Регистратор
|ИЗ " + ТипРегистраЗ+ "." + ИмяРегистра+ "
|ГДЕ Регистратор.Ссылка ЕСТЬ NULL И НЕ Регистратор = &ПустаяСсылкаДокумента" ) ;
Запрос. УстановитьПараметр( "ПустаяСсылкаДокумента" , Неопределено ) ;
Выборка = Запрос. Выполнить( ) . Выбрать( ) ;
Пока Выборка. Следующий( ) Цикл
Набор = ТипРегистра[ИмяРегистра]. СоздатьНаборЗаписей( ) ;
Набор. Отбор. Регистратор. Установить( Выборка. Регистратор) ;
Набор. Записать( ) ;
ОбработкаПрерыванияПользователя( ) ;
Состояние( "" + ТипРегистра+ " " + ИмяРегистра) ;
КонецЦикла ;
КонецПроцедуры
Процедура КнопкаВыполнитьНажатие(Кнопка)
Для Каждого пРегистр из Метаданные. РегистрыСведений Цикл
Подчинен = ( пРегистр. РежимЗаписи = Метаданные. СвойстваОбъектов. РежимЗаписиРегистра. ПодчинениеРегистратору) ;
Если Подчинен Тогда
УдалениеБитыхСсылок( пРегистр. Имя, РегистрыСведений, "РегистрСведений" )
КонецЕсли ;
КонецЦикла ;
Для Каждого пРегистр из Метаданные. РегистрыБухгалтерии Цикл
УдалениеБитыхСсылок( пРегистр. Имя, РегистрыБухгалтерии, "РегистрБухгалтерии" )
КонецЦикла ;
Для Каждого пРегистр из Метаданные. РегистрыРасчета Цикл
УдалениеБитыхСсылок( пРегистр. Имя, РегистрыРасчета, "РегистрРасчета" )
КонецЦикла ;
Для Каждого пРегистр из Метаданные. РегистрыНакопления Цикл
УдалениеБитыхСсылок( пРегистр. Имя, РегистрыНакопления, "РегистрНакопления" )
КонецЦикла ;
КонецПроцедуры
Категория:
Запросы