30.06.2021 Аскер Жансуев 31529
Поиск битых ссылок в 1С

Содержание:

  1. Выборка объектов с помощью запроса
  2. Использование объектной модели
  3. Поиск подстроки 1С «Объект не найден» в представлении ссылки

   

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

 

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

 

Существуют несколько способов выявления "битых" ссылок в 1С в таблицах информационной базы.  


1.    Выборка объектов с помощью запроса

 

Первый способ: выборка объектов информационной базы с "битыми" ссылками в 1С с помощью запроса.

 

ТекстЗапроса =

    "ВЫБРАТЬ

    |       ПеремещениеТоваров.Ссылка КАК Ссылка

    |ИЗ

    |       Документ.ПеремещениеТоваров КАК ПеремещениеТоваров

    |ГДЕ

    |       НЕ ПеремещениеТоваров.СкладОтравитель ЕСТЬ NULL

    |       И ПеремещениеТоваров.СкладОтравитель.Ссылка ЕСТЬ NULL".

 

В данном случае мы с помощью запроса производим поиск документов «Перемещение товаров», у которых "битая" ссылка на склад-отправитель. Для этого в условии отбора убеждаемся, что ссылка на склад-отправитель в принципе не пустая(часть условия "ГДЕ": "НЕ ПеремещениеТоваров.СкладОтравитель ЕСТЬ NULL") и, если это так, то проверяем ссылку на "битость"(часть условия "ГДЕ": "ПеремещениеТоваров.СкладОтравитель.Ссылка ЕСТЬ NULL").

 

Во второй части условия "ГДЕ" ("ПеремещениеТоваров.СкладОтравитель.Ссылка ЕСТЬ NULL") вместо "Ссылка" можно использовать другие реквизиты склада-отправителя, например, "Код" ("ПеремещениеТоваров.СкладОтравитель.Код ЕСТЬ NULL") – в таком случае мы также сможем отобрать перемещения с "битыми" ссылками на склад-отправитель.

 

Следует оговорить ситуацию, когда нужно произвести выборку объектов с битыми ссылками в 1С, но при этом поле объекта, в котором возможна "битая" ссылка, имеет составной тип, а нам требуется найти "битые" ссылки только определенного типа. Например, если в нашем случае склад-отправитель имеет составной тип "Склады" + "Подразделения организаций", а нам нужно отобрать только перемещения с "битыми" складами-отправителями типа "Подразделения организаций", в текст нашего запроса в условие "ГДЕ" добавится часть "ПеремещениеТоваров.СкладОтравитель ССЫЛКА Справочник.ПодрадзделенияОрганизаций". Запрос примет следующий вид:

  

"ВЫБРАТЬ

    |       ПеремещениеТоваров.Ссылка КАК Ссылка

    |ИЗ

    |       Документ.ПеремещениеТоваров КАК ПеремещениеТоваров

    |ГДЕ

    |       ПеремещениеТоваров.СкладОтравитель ССЫЛКА Справочник.ПодрадзделенияОрганизаций

    |       И НЕ ПеремещениеТоваров.СкладОтравитель ЕСТЬ NULL

    |       И ПеремещениеТоваров.СкладОтравитель.Ссылка ЕСТЬ NULL".  


2.    Использование объектной модели

 

Второй способ: определение "битой" ссылки с использованием объектной модели данных 1С.

 

При данном способе для поиска "битых" ссылок используется метод ПолучитьОбъект() платформы 1С по ссылке на объект информационной базы, который возвращает «Неопределено» в случаях с "битыми" ссылками:

   

Если ЗначениеЗаполнено(ДокументПеремещения.СкладОтправитель) И (ДокументПеремещения.СкладОтправитель.ПолучитьОбъект() = Неопределено) Тогда

// Здесь выполняется требуемый код обработки найденного объекта с "битой" ссылкой.

КонецЕсли;

 

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

 

Если (ТипЗнч(Объект.СкладОтравитель) = Тип("СправочникСсылка.ПодрадзделенияОрганизаций")) И ЗначениеЗаполнено(ДокументПеремещения.СкладОтправитель) И (ДокументПеремещения.СкладОтправитель.ПолучитьОбъект() = Неопределено) Тогда

        // Здесь выполняется требуемый код обработки найденного объекта с "битой" ссылкой.

    КонецЕсли.  


3.    Поиск подстроки «Объект не найден» в представлении ссылки

 

Третий способ: поиск подстроки «Объект не найден» в представлении ссылки.

 

    Если СтрНайти(ДокументПеремещения.СкладОтправитель, "Объект не найден") > 0 Тогда

        // Здесь выполняется требуемый код обработки найденного объекта с "битой" ссылкой.

    КонецЕсли;

 

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


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


Специалист компании «Кодерлайн»

Аскер Жансуев

 

Наши проекты

ПЭК
ПЭК

Отрасль:
Грузоперевозки

Внедренное типовое решение:
«1С: Управление торговлей»

- Создание прототипа SRM-системы на базе «1С: Управление торговлей»
- Автоматизация бизнес-процессов компании, связанных с поиском постав...

АО "Нижегородский водоканал"
АО "Нижегородский водоканал"

Отрасль:
Профессиональные услуги

Внедренное типовое решение:
1С:Зарплата и управление персоналом 8. КОРП

-Кадровый учет
-Расчет зарплаты
-Регламентированная отчетность
-Подбор кадров
-Анализ кадрового состава
-Учет рабочего времен...

Автоматизация учета на базе ПП "1С:Комплексная автоматизация 8" в ЗАО "Крюгер-Гранд"
ЗАО «Крюгер-Гранд»

Отрасль:
Производство

Внедренное типовое решение:
1С:Комплексная автоматизация

- Создание интерфейсов и наборов прав пользователей;
- Отражению временных разниц по лизинговому имуществу...

ООО «Еврорадиаторы»
ООО «Еврорадиаторы»

Отрасль:
1С:ERP 2.4

Внедренное типовое решение:

Специалисты «Кодерлайн» помогли перенести базу из текущей системы «1С:ERP 2.2» в новую систему «1С:ERP 2.4». ...

Госкорпорация «Ростех»
Госкорпорация «Ростех»

Отрасль:
Производство, ТЭК >> Машиностроение, приборостроение

Внедренное типовое решение:
1С:Управление холдингом 1.3.

Специалисты «Кодерлайн» помогли разработать и внедрить автоматизированную систему управления финансовой и закупочной деятельностью (АС ФЗД) ...

АО «Вертолетная сервисная компания»
АО «Вертолетная сервисная компания»

Отрасль:
МТО эксплуатации вертолетной техники

Внедренное типовое решение:
1С:Бухгалтерия КОРП

- Консультации по сложным вопросам налогового и бухгалтерского учета;
- Разработка специализированных форм внутрикорпоративной отчетност...

ФГУП «Почта России»
ФГУП «Почта России»

Отрасль:
Почта, доставка

Внедренное типовое решение:
1С:Управление торговлей

- Оформление заказов поставщикам
- Оформление заказов покупателей
- Управление складскими запасами ...

ООО "ЛИКАРД" (Лукойл)
ООО "ЛИКАРД" (Лукойл)

Отрасль:
Нефтесервис

Внедренное типовое решение:
1С:ERP Управление предприятием 2.0

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

ООО «ПЛЮСПЭЙ»
ООО «ПЛЮСПЭЙ»

Отрасль:
Организацией расчетов посредством электронных средств платежа

Внедренное типовое решение:
1С:Комплексная автоматизация

- Разработка подсистемы оперативного учета транзакций...

ООО «Солви Пак»
ООО «Солви Пак»

Отрасль:
Торговля. Производство печати на рулонных материалах

Внедренное типовое решение:
1С:CRM+1С:Комплексная автоматизация

Управление отношениями с клиентами (CRM) ...

Фирма 1С
Фирма 1С

Отрасль:

Внедренное типовое решение:
1С:Документооборот

- Подготовка функциональной модели прикладного решения «1С:Документооборот» для сервиса «1С:Облачная карта решений»; - Возможность интеграц...

Автоматизация интеграции с информсистемами клиентов на базе «1С:Предприятие 8. WMS Логистика. Управление складом»
ОАО «Фрейт Линк»

Отрасль:
Логистика и грузоперевозки

Внедренное типовое решение:
«1С:Предприятие 8. WMS Логистика. Управление складом»

– Управление складскими запасами;
– Оформление заказов покупателей;
– Логистика адресного склада;
– Управление отношениями с пост...

Наши соц. сети

Telegram-канал «Koderline 1С» Группа в Вконтакте «Кодерлайн КОРП» Rutube

Остались вопросы - обратитесь к нам!

Впишите свои Имя и Телефон, чтобы мы ответили на все интересующие Вас вопросы.
ФИО*
E-mail*
Телефон*
Сообщение