Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
07 янв 2026, 04:49

Как удалить битые ссылки из табличной части определенного документа?

Автор micahbell, 20 окт 2025, 06:43

0 Пользователей и 1 гость просматривают эту тему.

micahbell

Я хочу удалить битые ссылки из табличной части документа, но мне выдаёт ошибку что Объект недоступен для изменения:

Ошибка при вызове метода контекста (Удалить)
{Документ.ВедомостьПосещения.Форма.ФормаДокумента.Форма(58)}:         Объект.Ссылка.Присутсвующие.Удалить(СтудентОбъект);
{Документ.ВедомостьПосещения.Форма.ФормаДокумента.Форма(71)}:   УдалитьПустыеСсылкиНаСервере();
по причине:
Объект недоступен для изменения

Можно ли вообще удалить битые ссылки программно?
Вот код:


&НаСервере
Процедура УдалитьПустыеСсылкиНаСервере()

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

Объект.Ссылка.Присутсвующие.Удалить(СтудентОбъект);
Объект.Ссылка.ПолучитьОбъект().Записать();
           
КонецЕсли;
КонецЦикла;

КонецПроцедуры


&НаКлиенте
Процедура УдалитьПустыеСсылки(Команда)
УдалитьПустыеСсылкиНаСервере();
КонецПроцедуры





Вот конфигурация для лучшего ознакомления. Сам этот код находится в документе ВедомостьПосещения.

Конф_20_10_2025.dt

antoneus

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

Процедура УдалитьПустыеСсылкиНаСервере()

    УдаляемыеСтроки = Новый Массив;
    Для каждого стр из Объект.Присутсвующие Цикл
        Если стр.Студент.ПолучитьОбъект() = Неопределено Тогда
            УдаляемыеСтроки.Добавить(стр)
        КонецЕсли;
    КонецЦикла;

    Для каждого стр из УдаляемыеСтроки Цикл
        Объект.Присутсвующие.Удалить(стр)
    КонецЦикла;

КонецПроцедуры

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

depb


Теги:

Похожие темы (5)

Рейтинг@Mail.ru

Поиск