Вход | Регистрация
 

Как перемешать реквизиты в справочнике?

↓ [Волшебник, 13.02.20 - 14:34]
Как перемешать реквизиты в справочнике?
Я
   Reraru
 
13.02.20 - 14:16
Имеется справочник с реквизитами одного типа - строка, в которых есть записи. Какую задать команду или обработчик чтобы порядок реквизитов каждый раз был бы случайным?
   ДенисЧ
 
1 - 13.02.20 - 14:17
ЯНХНП.
   unbred
 
2 - 13.02.20 - 14:32
создавать реквизиты программно. прикрутить ГСЧ к их именам.
   Reraru
 
3 - 13.02.20 - 14:32
(1) ЯНХНП ?
   piter3
 
4 - 13.02.20 - 14:34
(3) Ты не можешь нормально описать проблему
   Волшебник
 
Модератор
5 - 13.02.20 - 14:34
Порядок реквизитов в справочнике всегда фиксированный.
Выводить куда-то их можете в любом порядке.
   Reraru
 
6 - 13.02.20 - 14:35
(2) реквизиты справочника задаются так как есть - созданием элемента. Их может быть сколько угодно.
Моя цель при создании теста и ответа к нему, чтобы пользователь мог перемешать местами вопросы, а в вопросах заданные ответы
   AlexPR111
 
7 - 13.02.20 - 14:36
(0) А зачем? Что за задача? Система защиты нетленки?
   Fish
 
8 - 13.02.20 - 14:38
(6) "перемешать местами вопросы" - ты хотел сказать перемеЩать или именно перемеШать?
   Reraru
 
9 - 13.02.20 - 14:38
(7) тест, при создании которого порядок фиксированный. А пользователю необходимо этот порядок нажатием кнопки изменить.
   Fish
 
10 - 13.02.20 - 14:41
(9) А ты (5) внимательно прочитал?
   IOANNscrp
 
11 - 13.02.20 - 14:41
(9) Код справочника рандомно прописывай по нажатию кнопки. И выводи вопросы отсортированные по коду
   Reraru
 
12 - 13.02.20 - 14:42
(8) вопросов может быть сколько угодно, ответов в вопросе обычно 4 и более.
Ответы из другого вопроса должны перемешиваться так чтобы они оставались привязанными к созданному вопросу.

Например: Вопрос: сколько будет 2+2 = ?
а 1
б 2
в 4
г 5

Пользователь нажал перемешать ответы в вопросе и они поменялись

например:  Вопрос: сколько будет 2+2 = ?

а 2
б 1
в 5
г 4
   Reraru
 
13 - 13.02.20 - 14:44
А с вопросами немного проще, допустим вопрос 2+2 был с номером 1, а вопрос кто полетел первым на луну 5. После перемешивания у вопросов стали другие номера, например 2+2 стал с номером 10, а вопрос кто полетел первым на луну 10.
Рандомно.
   Reraru
 
14 - 13.02.20 - 14:45
(11) Не совсем понимаю. Объясните пожалуйста мне то что имеете ввиду на примере.
   Reraru
 
15 - 13.02.20 - 14:46
(13) Опечатка: вопрос кто полетел первым на луну 16.
   IOANNscrp
 
16 - 13.02.20 - 14:48
Ответы где храните?)
   Reraru
 
17 - 13.02.20 - 14:48
(5) Каким образом? Например?
   Reraru
 
18 - 13.02.20 - 14:49
(16) Вопросы в справочнике вопросов, а ответы в справочнике ответов.
   FIXXXL
 
19 - 13.02.20 - 14:49
(15) Вопросы - справочник? Собери элементы в таблицу и мешай как хочешь. Выдача вопросов - цикл по ТЗ
   IOANNscrp
 
20 - 13.02.20 - 14:50
В справочнике ответов изменять код элемента рандомно по нажатию или добавить реквизит сортировка и изменять его рандомно. При выводе вопросов сортировать ответы по этому реквизиту(коду)
   FIXXXL
 
21 - 13.02.20 - 14:51
(19) + в ТЗ поле - НомерВопроса, заполняешь рандомно, сортируешь - ПРОФИТ!
   FIXXXL
 
22 - 13.02.20 - 14:51
да не трогайте вы справочник. ему интерфейс рандомно надо сделать
   Reraru
 
23 - 13.02.20 - 14:52
   Reraru
 
24 - 13.02.20 - 14:55
(19) Вы имеете ввиду табличную часть ? Я присваиваю реквизиту вопроса - вопрос, а реквизиту ответа - ответ без табличной части
   Reraru
 
25 - 13.02.20 - 14:56
(21) нет, пользователь не должен вручную менять номера (код) реквизиты местами.
   Reraru
 
26 - 13.02.20 - 14:56
(20) реквизит сортировка ? Я с ним не знаком.
   IOANNscrp
 
27 - 13.02.20 - 15:03
(26) В справочник "Ответы" добавляете реквизит "ПорядокНомер" по умолчанию заполняете 1,2...n соответственно. Там где будете выводить вопрос и к нему ответы, ответы сортировать по реквизиту "ПорядокНомер" и выводить отсортированные. По нажатию на кнопку меняйте этот реквизит "ПорядокНомер" рандомно через генератор случайных чисел, например.
   Reraru
 
28 - 13.02.20 - 15:06
(22) https://sun9-20.userapi.com/c200824/v200824357/65c8d/3vEn65r5JNM.jpg
Поначалу смысл был в замене: содержимое с реквизитом кода 4 переносится в содержимое с реквизитом кода 2, но это будет происходить ограничено так как число ответов в вопросе тоже ограничено и если ответу присвоится код 5, а ответов в вопросе допустим 4 то это будет неправильно.
   FIXXXL
 
29 - 13.02.20 - 15:06
(27) не надо переписывать справочник по каждому чЁху.
одновременно может отвечать куча народа
каждому - свою таблицу или табличную часть обработки, сортированную локально для пользователя
   FIXXXL
 
30 - 13.02.20 - 15:07
(28) нарисуй таблицу Вопрос - Номер, заполни запросом Вопросы и в цикле Номера рандомно, отсортируй по Номер
 
 Рекламное место пустует
   FIXXXL
 
31 - 13.02.20 - 15:09
(30) таблица - не видна пользователю, по нажатию Далее на форме - перезаполняешь реквизит формы Вопрос следующей строкой таблицы Вопрос-Номер
   IOANNscrp
 
32 - 13.02.20 - 15:09
(29) думаете серверная?)
   Reraru
 
33 - 13.02.20 - 15:10
(29) над этим я тоже думаю, так как возможность перемешивать вопросы и ответы будет по идее только у создателя теста, а у проходящего этой возможности не будет, вместо этого я думаю над тем как реализовать переход от одного вопроса к любому другому который хочет пользователь
   Reraru
 
34 - 13.02.20 - 15:10
(32) пока что нет
   Reraru
 
35 - 13.02.20 - 15:15
(27) получается мне сначала нужно программно узнать код  каждого реквизита?
   Reraru
 
36 - 13.02.20 - 15:16
(27) с проверкой на то имеются ли новые реквизиты
   FIXXXL
 
37 - 13.02.20 - 15:18
(33) зачем только у создателя? создатель задает список вопросов. порядок РАНДОМНЫЙ - для каждого пользователя опросника.
   IOANNscrp
 
38 - 13.02.20 - 15:19
(35) не понятны ваши амбиции), по правильному и с умом это как описал  FIXXXL.
   Reraru
 
39 - 13.02.20 - 15:23
(38) достаточно когда создатель теста задал рандомный порядок ответов в вопросах каждому отвечающему. Если же отвечающий будет снова перемешивать вопросы то в первую очередь запутает сам себя.
   FIXXXL
 
40 - 13.02.20 - 15:23
(35) лови

&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
    
    массивВопросов = Новый Массив;
    массивВопросов.Добавить("Что");
    массивВопросов.Добавить("Кто");
    массивВопросов.Добавить("Где");
    массивВопросов.Добавить("Зачем");
    
    НЧ = 0;
    Для Каждого Вопрос Из массивВопросов Цикл 
        НоваяСтрока = ТаблицаВопросов.Добавить();
        НоваяСтрока.Вопрос = Вопрос;
        ГСЧ = Новый ГенераторСлучайныхЧисел(НЧ);
        НоваяСтрока.НомерДалее = ГСЧ.СлучайноеЧисло(0, 1000);
        НЧ = НоваяСтрока.НомерДалее;
    КонецЦикла;
    
    ТаблицаВопросов.Сортировать("НомерДалее");
    
КонецПроцедуры
   FIXXXL
 
41 - 13.02.20 - 15:24
(39) Не надо этого. Открыл вопросник - получил сортировку.
   Reraru
 
42 - 13.02.20 - 15:25
(41) а как будет код проверять уже существующие вопросы?
   Reraru
 
43 - 13.02.20 - 15:26
(41) Вопросы и ответы задаются ведь в уже запущенном приложении 1С Предприятие
   Reraru
 
44 - 13.02.20 - 15:29
(41) Я так понимаю, цикл не сможет работать с реквизитом ТекстВопроса справочника Вопросы ?
   IOANNscrp
 
45 - 13.02.20 - 15:29
(42) код ничего создавать не будет, он будет брать уже существующие вопросы и рандомно каждый раз сортировать их при открытии пользователем
   FIXXXL
 
46 - 13.02.20 - 15:36
(45) именно
или ТС чего-то скрывает :)
   FIXXXL
 
47 - 13.02.20 - 15:37
(42) где существующие?
   FIXXXL
 
48 - 13.02.20 - 15:37
(44) цикл только строки перебирает, он ни с чем не работает
   IOANNscrp
 
49 - 13.02.20 - 15:41
(48) все это, конечно, хорошо, но ТС на рабочий стол вывел списки справочников, создал вопросы и ответы, и хочет их менять каждый раз, а это уже совсем другая история
   Reraru
 
50 - 13.02.20 - 15:56
(40) (45) Я вижу созданный массив, но в данном случае он не нужен. Ведь созданные вопросы, вначале создаются пользователем в запущенном 1С, а затем записываются в реквизит ТекстВопросы - строка.
Думаю стоит показать взаимосвязь справочников:
https://vk.com/im?peers=c5_566449785_182236528_92638771&sel=548338439&tab=all

Но одну проблему я пока так и недоагадался как решить: Создатель теста может задать вопрос, а к вопросу несколько правильных ответов. Но у меня пока что может засчитывать 1 правильный ответ в вопросе, а как сделать чтобы могло засчитываться несколько  правильных ответов?.
   Reraru
 
51 - 13.02.20 - 15:58
&НаКлиенте
Процедура НачатьТест(Команда)
    ТестВПроцессе=Истина;
    ЗапВопросыОтветы();
    Если ВопросыОтветы.Количество()=0 Тогда
        Предупреждение ("Тест не найден. Обратитесь к администратору");
        Возврат;
    КонецЕсли;    
    Элементы.Начало.Видимость=Ложь;
    Элементы.Тест.Видимость=Истина;
    НомерТекущегоВопроса=1;
    ЗапОтветы();
КонецПроцедуры


//ОткрытьФорму("ОбщаяФорма.Авторизация");



&НаКлиенте
Процедура УстановитьВидимость()
    Если НомерТекущегоВопроса=1 Тогда
        Элементы.Назад.Видимость=Ложь;
        Элементы.ЗавершитьТест.Видимость=Ложь;
    ИначеЕсли ВопросыОтветы.Количество()= НомерТекущегоВопроса Тогда
        Элементы.Вперед.Видимость=Ложь;
        Элементы.ЗавершитьТест.Видимость=Истина;
    Иначе    
        Элементы.Назад.Видимость=Истина;
        Элементы.Вперед.Видимость=Истина;
        Элементы.ЗавершитьТест.Видимость=Ложь;
    КонецЕсли;    
КонецПроцедуры    

&НаКлиенте
Процедура Вперед(Команда)
    НомерТекущегоВопроса=НомерТекущегоВопроса+1;
    ЗапОтветы();
КонецПроцедуры

&НаКлиенте
Процедура Назад(Команда)
    НомерТекущегоВопроса=НомерТекущегоВопроса-1;
    ЗапОтветы();
КонецПроцедуры

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

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

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

&НаСервере
Функция ПроверкаОтветаНаВсеВопросы(КолПО)
    фл=Истина;
    Для Каждого Стр Из ВопросыОтветы Цикл
        Если Стр.Ответ.Пустая() Тогда
            фл=Ложь;
            Сообщить("Вы не ответили на "+Стр.Вопрос.Наименование);
        КонецЕсли;    
        Если Стр.Ответ.ПравильныйОтвет Тогда КолПО=КолПО+1; КонецЕсли;
    КонецЦикла;    
    Возврат фл;
КонецФункции    

&НаКлиенте
Процедура ЗавершитьТест(Команда)
    ОтветНаВопрос=Вопрос("Вы действительно хотите закончить тест?",РежимДиалогаВопрос.ДаНет);
    Если ОтветНаВопрос=КодВозвратаДиалога.Нет Тогда Возврат КонецЕсли;
    КолПО=0;
    Если НЕ ПроверкаОтветаНаВсеВопросы(КолПО) Тогда Возврат КонецЕсли;
    ТестВПроцессе=Ложь;
    Элементы.Тест.Видимость=Ложь;
    Элементы.РезультатТекст.Заголовок="Вы ответили правильно на "+КолПО+" вопросов из "+ВопросыОтветы.Количество();
    Элементы.РезультатТекст.Видимость=Истина;
    
    
КонецПроцедуры


&НаКлиенте
Процедура ВариантОтветаПометкаПриИзменении(Элемент)
    Стр=Элементы.ВариантОтвета.ТекущиеДанные;
    Если Стр.Пометка Тогда
        Для Каждого Зн Из ВариантОтвета Цикл
            Если Стр.Значение=Зн.Значение Тогда Продолжить КонецЕсли;
            Зн.Пометка=Ложь;
        КонецЦикла;
        Зн=ВопросыОтветы.Получить(НомерТекущегоВопроса-1);
        Зн.Ответ=Стр.Значение;
    Иначе    
        Зн=ВопросыОтветы.Получить(НомерТекущегоВопроса-1);
        Зн.Ответ=NULL;
    КонецЕсли;    
КонецПроцедуры

&НаКлиенте
Процедура ПриОткрытии(Отказ)
    ТестВПроцессе=Ложь;
КонецПроцедуры

&НаКлиенте
Процедура ПередЗакрытием(Отказ, СтандартнаяОбработка)
    Отказ=ТестВПроцессе;
КонецПроцедуры

&НаКлиенте
Процедура Войти(Команда)
    ОткрытьФорму("ОбщаяФорма.Авторизация");
КонецПроцедуры
   Reraru
 
52 - 13.02.20 - 16:07
(45) да, так оно и есть. Этого я и хочу.
   Reraru
 
53 - 13.02.20 - 16:08
(48) но он же как я понял перебирает строки заданного массива, а не реквизиты справочника.
   Reraru
 
54 - 13.02.20 - 16:25
проблема не решена
   Reraru
 
55 - 13.02.20 - 16:36
(40) пытаюсь переделать под справочники - не работает.
   Reraru
 
56 - 13.02.20 - 16:45
(40) а возможно ли чтобы значение реквизита при записи справочника записывалось бы в массив ?
   Reraru
 
57 - 13.02.20 - 17:41
ни у кого больше нет идей?
   unbred
 
58 - 13.02.20 - 22:22
забахай ты свою нетленку на JS , на сях, или ещё на чём. нафик тебе эти извращения? идей миллион, а инструмент выбрал для создания костылей.
   Reraru
 
59 - 13.02.20 - 22:26
(58) это реализация под 1С
   Reraru
 
60 - 13.02.20 - 23:29
(40) какие ещё существуют под мой случай сортировки, но чтобы данные читались из реквизита ТекстВопроса ?
 
 Рекламное место пустует
   Reraru
 
61 - 14.02.20 - 00:28
(58) у меня ограниченный инструмент: только 1С и больше ничего. Как реализовать случайную сортировку реквизитов  у справочника по коду реквизита? Я хочу вот такую реализацию: там где буду выводить вопрос и к нему ответы, ответы сортировать по реквизиту "ПорядокНомер" (код реквизита) и выводить отсортированные. По нажатию на кнопку меняю этот реквизит "ПорядокНомер" рандомно через генератор случайных чисел, например.


Список тем форума
Рекламное место пустует  Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Тема не обновлялась длительное время, и была помечена как архивная. Добавление сообщений невозможно.
Но вы можете создать новую ветку и вам обязательно ответят!
Каждый час на Волшебном форуме бывает более 2000 человек.