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

Почему запрос работает неправильно?

Автор Белкет, 28 мая 2017, 08:27

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

Белкет

Здравствуйте.

У меня есть Справочник Учащиеся с реквизитами: Наименование, Организация, Индивидуальный бонус. Также есть Документ с Табличной частью Список. В ТЧ есть след. реквизиты: Учащийся(Тип СправочникСсылка.Учащиеся), Индивидуальный бонус(Тип Число), Сумма(Тип Число), Сумма с бонусом(Тип Число).

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

Однако, при отладке в ТЧ загружается только бонус учащегося, а вот сам учащийся нет. Но если я поменяю тип реквизита Учащийся на Строка, то все работает нормально.

Подскажите пожалуйста, как сделать так чтобы тип реквизита Учащийся оставался СправочникСсылка.Учащиеся, но при этом в ТЧ загружался и учащийся и его бонус?

ilnur75

вот так будет работать: организацию вытащим из табчасти в реквизит.
для Организации применяем обработчик ПриИзменении - это на клиенте, далее вызываем процедуру НаСервере, из нее вызываем процедуру в модуле объекта.
&НаКлиенте
Процедура ОрганизацияПриИзменении(Элемент)
     СделатьЧтоТоНаСервере();
КонецПроцедуры

&НаСервере
Процедура СделатьЧтоТоНаСервере()
Документ = РеквизитФормыВЗначение("Объект");
Документ.СделатьЧтоТо();
ЗначениеВРеквизитФормы(Документ,"Объект");
КонецПроцедуры


в модуле объекта в процедуре СделатьЧтоТо создаем запрос,
результат выгружаем в таблицу значений,
очищаем таб.часть от предыдущих записей,
загружаем новую таблицу значений, полученную запросом.

Белкет

Цитата: ilnur75 от 28 мая 2017, 09:30
вот так будет работать: организацию вытащим из табчасти в реквизит.
У меня нет в табличной части Организации. Видимо я нет так описал. Прилагаю скрин формы.

Код, который Вы написали, я применил. Но вылетает такая ошибка:{Документ.Оплата.Форма.ФормаДокумента.Форма(16)}: Метод объекта не обнаружен (СделатьЧтоТо)
        Документ.СделатьЧтоТо(Объект.Организация);

DmitriyF

Цитата: Белкет от 28 мая 2017, 10:25
Цитата: ilnur75 от 28 мая 2017, 09:30
вот так будет работать: организацию вытащим из табчасти в реквизит.
У меня нет в табличной части Организации. Видимо я нет так описал. Прилагаю скрин формы.

Код, который Вы написали, я применил. Но вылетает такая ошибка:{Документ.Оплата.Форма.ФормаДокумента.Форма(16)}: Метод объекта не обнаружен (СделатьЧтоТо)
        Документ.СделатьЧтоТо(Объект.Организация);

У вас Учащийся поля различаются в выборке и ТЧ.

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

Белкет

Цитата: DmitriyF от 28 мая 2017, 10:31
У вас Учащийся поля различаются в выборке и ТЧ.

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

DmitriyF

Цитата: Белкет от 28 мая 2017, 10:37
Цитата: DmitriyF от 28 мая 2017, 10:31
У вас Учащийся поля различаются в выборке и ТЧ.

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

Белкет

Цитата: DmitriyF от 28 мая 2017, 10:40
Цитата: Белкет от 28 мая 2017, 10:37
Цитата: DmitriyF от 28 мая 2017, 10:31
У вас Учащийся поля различаются в выборке и ТЧ.

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

DmitriyF

Я имел ввиду хранить реквизит организация в справочнике учащиеся

Отправлено с моего ViewSonic V500 через Tapatalk


Белкет

Цитата: DmitriyF от 28 мая 2017, 10:55
Я имел ввиду хранить реквизит организация в справочнике учащиеся
Создать такой реквизит в справочнике Учащиеся тоже было в задании :D Но все же вопрос остается в силе: Почему неправильно?

DmitriyF

Ну хотя бы потому что организация может измениться и возможен будет нужен перерасчет какой-либо.  и как ты потом узнаешь с какого времени произошло изменение. Но это уже лирика.

Отправлено с моего ViewSonic V500 через Tapatalk


Теги:

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

Рейтинг@Mail.ru Rambler's Top100

Поиск