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

Выборка данных в ТЗ

Автор CrIsSaLiT, 12 фев 2019, 14:28

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

CrIsSaLiT

Добрый день! Имеется справочник "Игроки", из реквизитов которого мы создаём таблицу значений. Таблица заполняется всеми записями из справочника, но требуется заполнить только определёнными записями, которые соответствуют условию: если значение в ячейке "Команда" равно Название_Команды, то внести запись". Как это сделать?

antoneus

В вопросе кроется ответ) Есть в 1С оператор "Если". Применить его можно так:

Пока Выб.Следующий() Цикл
    Если Выб.Команда <> Название_Команды Тогда
        Продолжить
    КонецЕсли;
    ЗаполнитьЗначенияСвойств(ТЗ.Добавить(), Выб);
КонецЦикла;


Но это тупиковая ветвь развития. Запрос - вот путь истинного джедая.

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

CrIsSaLiT

antoneus, antoneus, antoneus,
Цитата: antoneus от 12 фев 2019, 15:36В вопросе кроется ответ) Есть в 1С оператор "Если". Применить его можно так:

Код: [Выделить]
Пока Выб.Следующий() Цикл
    Если Выб.Команда <> Название_Команды Тогда
        Продолжить
    КонецЕсли;
    ЗаполнитьЗначенияСвойств(ТЗ.Добавить(), Выб);
КонецЦикла;

Цитата: antoneus от 12 фев 2019, 15:36В вопросе кроется ответ) Есть в 1С оператор "Если". Применить его можно так:

Код: [Выделить]
Пока Выб.Следующий() Цикл
    Если Выб.Команда <> Название_Команды Тогда
        Продолжить
    КонецЕсли;
    ЗаполнитьЗначенияСвойств(ТЗ.Добавить(), Выб);
КонецЦикла

Цитата: antoneus от 12 фев 2019, 15:36В вопросе кроется ответ) Есть в 1С оператор "Если". Применить его можно так:

Цитата: antoneus от 12 фев 2019, 15:36
В вопросе кроется ответ) Есть в 1С оператор "Если". Применить его можно так:

Пока Выб.Следующий() Цикл
    Если Выб.Команда <> Название_Команды Тогда
        Продолжить
    КонецЕсли;
    ЗаполнитьЗначенияСвойств(ТЗ.Добавить(), Выб);
КонецЦикла;


Но это тупиковая ветвь развития. Запрос - вот путь истинного джедая.

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


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

antoneus

Это как - "либо все, либо ни одной"?
У реквизита "Команда" какой тип?

CrIsSaLiT

СправочникСсылка.Команда - тип реквизита.
Данные в таблицу берутся из справочника, и он не делает выборку по этим данным, а просто или вносит все строки из справочника, либо не вносит не одной.

antoneus

Вот, я и спрашиваю - какой у этого реквизита тип)
Тип реквизита может быть строка или число или булево или ссылка на элемент другого справочника или еще что-нибудь.
Я уже понял, что программа выбирает или все или ничего. Вопрос мой был - как? При каких условиях она выбирает все, а при каких - ничего?

CrIsSaLiT

В этом случае таблица не заполняется

Выб = Справочники.Игроки.Выбрать();
Пока Выб.Следующий() Цикл
    Если Выб.Команда <> "Название_команды" Тогда
        Продолжить
    КонецЕсли;
    ЗаполнитьЗначенияСвойств(ТЗ.Добавить(), Выб);
КонецЦикла;


В этом случае таблица заполняется, но не происходит выборка по названию команды


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

antoneus

Название_Команды - это должна быть переменная, в которую нужно поместить реальное название команды, а не строка "Название_Команды". Ну или строка в кавычках с реальным названием команды.

CrIsSaLiT

Цитата: antoneus от 13 фев 2019, 15:51
Название_Команды - это должна быть переменная, в которую нужно поместить реальное название команды, а не строка "Название_Команды". Ну или строка в кавычках с реальным названием команды.
А как можно поместить  реальное название команды в переменную?

antoneus

А как вы поместили в переменную Выб выборку из справочника? А таблицу значений в переменную ТЗ? А добавленную в ТЗ строку в переменную НоваяСтрока? С помощью знака равенства, конечно.

Название_Команды = "Название команды, по которой мне нужно отобрать игроков";

Или

Если Выб.Команда = "Название команды, по которой мне нужно отобрать игроков" Тогда

Теги:

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

Рейтинг@Mail.ru

Поиск