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

как правильно написать условие обхода запроса?

Автор Yamuna, 19 июн 2020, 14:27

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

Yamuna

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

Запрос.УстановитьПараметр("Ссылка", Ссылка);

РезультатЗапроса = Запрос.Выполнить();

Выборка = РезультатЗапроса.Выбрать().;
РезОтветов = 0;
Ответ1 = 3;
Ответ2 = 4;    
Ответ3 = 1;

Пока Выборка.Следующий() Цикл
   Если  Выборка.Билет1 = Ответ1 Тогда
       РезОтветов = РезОтветов+1;
   ИначеЕсли Выборка.Билет2 = Ответ2  Тогда
       РезОтветов = РезОтветов+1;
   ИначеЕсли Выборка.Билет3 = Ответ3  Тогда
       РезОтветов = РезОтветов+1 ;
   КонецЕсли;
КонецЦикла;
   Если РезОтветов >= 2 Тогда
       Сообщить("Тест Сдан!!");
   КонецЕсли;
КонецПроцедуры

antoneus

Пока Выборка.Следующий() Цикл
    Если  Выборка.Билет1 = Ответ1 Тогда
        РезОтветов = РезОтветов+1;
    КонецЕсли;   
    Если Выборка.Билет2 = Ответ2  Тогда
        РезОтветов = РезОтветов+1;
    КонецЕсли;
    Если Выборка.Билет3 = Ответ3  Тогда
        РезОтветов = РезОтветов+1 ;
    КонецЕсли;
КонецЦикла

Yamuna

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

Запрос.УстановитьПараметр("Ссылка", Ссылка);

РезультатЗапроса = Запрос.Выполнить();

Выборка = РезультатЗапроса.Выбрать();
РезОтветов = 0;
Ответ1 = 3;
Ответ2 = 4;    
Ответ3 = 1;

Пока Выборка.Следующий() Цикл
Если  Выборка.Билет1 = Ответ1 Тогда
РезОтветов = РезОтветов+1;
КонецЕсли;

Если Выборка.Билет2 = Ответ2  Тогда
РезОтветов = РезОтветов+1;
КонецЕсли;
Если Выборка.Билет3 = Ответ3  Тогда
РезОтветов = РезОтветов+1 ;
КонецЕсли;
КонецЦикла;
ВсеБилеты = 3;
НабранныйПроцент = Цел(РезОтветов*100/ВсеБилеты);
НабраноБалов = РезОтветов;
    Если РезОтветов >= 2 Тогда
Сообщить(Наименование + "  Тест Сдан!! Набрали: "+ НабранныйПроцент+ "%  И "+ НабраноБалов+ " баллов(а)");
КонецЕсли;

текДокумент = Ссылка.ПолучитьОбъект();
текДокумент.НабранныйПроцент = НабранныйПроцент;
текДокумент.НабраноБалов = НабраноБалов;
текДокумент.Записать(РежимЗаписиДокумента.Запись);
КонецПроцедуры


АлександрВладимирович

Должно вот так работать:

//...

//текДокумент = Ссылка.ПолучитьОбъект();
//текДокумент.НабранныйПроцент = НабранныйПроцент;
//текДокумент.НабраноБалов = НабраноБалов;
//текДокумент.Записать(РежимЗаписиДокумента.Запись);

Записать();

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

bsn-chita

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

Теги:

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

Рейтинг@Mail.ru

Поиск