Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Удаление строк из ТЗ по условию
Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 > Программисту > Программирование в 1С Предприятие 8.2 > Программирование обычных форм 1С 8.2 и не интерфейсной логики
bolobol
Доброго времени суток!

Задачка тут возникла актуальностью своей поражая:

НайтиПоСсылкам(...) возвращает ТЗ в которой третья колонка - объект метаданных, которому соответствуют данные в которых найдена ссылка.

Я могу использовать только справочники и документы, как из ТЗ правильно удалить всё остальное?

Как создать ТЗ уже без лишних данных, таких как запись регистра?

Спасибо.
Fynjy
Запросом.
Vofka
Если Метаданные.Справочники.Найти(МетаданныеИЗТЗ) = Неопределено И Метаданные.Документы.Найти(МетаданныеИЗТЗ) = Неопределено Тогда
   // Строка подлежит удалению
КонецЕсли;
ignsv
вот так можно удалить сстроки ТабЗнач по условию:
Индекс = 0;
    Пока Индекс < Таблица.Количество() Цикл

        СтрокаТаблицы = Таблица.Получить(Индекс);

        Если Условие Тогда
            Индекс = Индекс + 1;
        Иначе
            Таблица.Удалить(СтрокаТаблицы);
        КонецЕсли;

         КонецЦикла;
bolobol
Запросом, к сожалению, а может - к счастью, не получается - "Тип не может быть выбран в запросе", а красивое и правильное решение в обход данной ошибки не придумалось. А "Метаданные.Справочники.Содержит(МетаданныеИЗТЗ) = Неопределено" - это решение, спасибо!

Всем спасибо! crazy.gif
logist
Цитата(bolobol @ 11.09.13, 14:34) необходимо зарегистрироваться для просмотра ссылки
"Тип не может быть выбран в запросе"

Запрос покажите.
bolobol
Цитата(Fynjy @ 11.09.13, 7:18) необходимо зарегистрироваться для просмотра ссылки
Запросом.


Да, кстати, покажите - какой должен быть запрос? Может, я неверно его напрямки собираю?
logist
Цитата(bolobol @ 11.09.13, 15:26) необходимо зарегистрироваться для просмотра ссылки
Да, кстати

Это вы покажите, какой у вас запрос, что выдает ошибку.
bolobol
?

Выбрать * из &ТЗ как ТЗ

А может быть другим этот запрос?
logist
А дальше? Т.е. весь код давайте. Вам же надо как-то обработать таблицу...
Ardi
Цитата(bolobol @ 11.09.13, 16:08) необходимо зарегистрироваться для просмотра ссылки
Выбрать * из &ТЗ как ТЗ

А с другими данными так работает?
Vofka
Посоны, палю тему: необходимо зарегистрироваться для просмотра ссылки . bolobol, поиск по форуму - классная штука!
Petre
Цитата(bolobol @ 11.09.13, 16:08) необходимо зарегистрироваться для просмотра ссылки
Выбрать * из &ТЗ как ТЗ

А может быть другим этот запрос?

Проблема скорее всего в самой ТЗ. Она должна иметь типизированные колонки. При создании этой ТЗ устанавливайте тип колонок принудительно.
bolobol
Да какой тут код может быть, когда вся задача из двух строк(?)

    Запрос= новый Запрос;
    Запрос.Текст= "ВЫБРАТЬ
                  |    *
                  |ПОМЕСТИТЬ ВТ_ТЗ
                  |ИЗ
                  |    &ТЗ КАК ТЗ
                  |;
                  |
                  |////////////////////////////////////////////////////////////////////////////////
                  |ВЫБРАТЬ
                  |    1 КАК ЧЧ";
    Запрос.УстановитьПараметр("ТЗ", НайтиПоСсылкам(МассивСсылок));
    Запрос.Выполнить().Выгрузить().ВыбратьСтроку();



Кхм... кажется - проблема ясна crazy.gif Либо задачу не читаем, либо подразумеваем известным, и потому не освещаем, способ приведения ТЗ из НайтиПоСсылка(...) к ТЗ с типизированными колонками за сложность, не превышающую полный перебор этой самой ТЗ циклом.
?
Petre
Все зависит от конкретной задачи. Может оказаться так, что проще перебрать ТЗ, или наборот, проще готовую ТЗ получить запросом...
logist
ТЗ = НайтиПоСсылкам(МассивСсылок);
Если ТЗ.Количество() Тогда
   Запрос= новый Запрос;
   МВТ = Новый МенеджерВременныхТаблиц;
    Запрос.МенеджерВременныхТаблиц = МВТ;
    Запрос.Текст= "ВЫБРАТЬ * ПОМЕСТИТЬ ВТ ИЗ ТЗ КАК ТЗ";
    Запрос.УстановитьПараметр("ТЗ", ТЗ);
   Запрос.Выполнить();

    Запрос.Текст = "ВЫБРАТЬ 1 КАК ЧЧ";
    Запрос.Выполнить().Выгрузить().ВыбратьСтроку();
Иначе
Сообщить("В ТЗ нифига нет, поэтому запрос выполнять бессмысленно");
КонецЕсли
bolobol
МВТ = Новый МенеджерВременныхТаблиц;

От этой строки колонки ТЗ не становятся типизированными.


Косяк в самой возвращаемой ТЗ. Если отладчиком смотреть тип колонки, то там описание типов присутствует, но как получить состав описанных типов колонки - я не разобрался. Может, кстати, знаете?
bolobol
Итогом изысканий решение пришло на 6 секунд, взамен 32-ух при полном переборе от Vofka, который, в свою очередь, отправил в утиль тупой 17-ти минутный неправильный полный перебор:

    ТЗ.Колонки.Добавить("Данные1", Новый ОписаниеТипов(Справочники.ТипВсеСсылки(), Документы.ТипВсеСсылки().Типы()));
    ТЗ.ЗагрузитьКолонку(ТЗ.ВыгрузитьКолонку("Данные"), "Данные1");
    ТЗ.Свернуть("Данные1");
    МассУд= ТЗ.НайтиСтроки(новый Структура("Данные1", Неопределено));
    Для каждого Эл из МассУд Цикл
        ТЗ.Удалить(Эл);
    КонецЦикла;


ТЗ действительно работает ооочень быстро! 1С не обманывает, с чем всех и поздравляю! Всем спасибо!
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.