|
Проблема с циклом | ☑ | ||
---|---|---|---|---|
0
Gam_007
27.06.14
✎
10:04
|
Добрый день!
подскажите что делаю не так, надо вывести общую форму если в выборке по пользователь у него нет какого либо элемента из справочника Процедура ПриНачалеРаботыСистемы() СТП = ИмяПользователя(); Выборка = Справочники.Служебный.Выбрать(); Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | Служебный.Пользователь, | Служебный.Совет |ИЗ | Справочник.Служебный КАК Служебный |ГДЕ | Служебный.Пользователь = &Пользователь"; СпрПОльзователи = Справочники.Пользователи.НайтиПоНаименованию(СТП); ЗАпрос.УстановитьПараметр("Пользователь", СпрПОльзователи); Результат = Запрос.Выполнить(); Выборка = Результат.Выбрать(); СоветыДня = Справочники.СоветыДня.Выбрать(); пока СоветыДня.Следующий() цикл пока Выборка.Следующий() цикл элентсовет = советыдня.Ссылка; если выборка.совет = элентсовет тогда продолжить; иначе Форма1=ПолучитьОбщуюФорму("Форма"); Форма1.Открыть(); конецесли; конеццикла; конецЦикла; КонецПроцедуры |
|||
1
rasswet
27.06.14
✎
10:09
|
отладчиком смотри.
|
|||
2
dj_serega
27.06.14
✎
10:11
|
Цикл в цикле лучше не делать.
А запросом никак не получить эти данные? |
|||
3
Ymryn
27.06.14
✎
10:12
|
Если правильно понял, что ты пытаешься сделать, то попробуй вот это.
Запрос.Текст = "ВЫБРАТЬ | СоветыДня.Ссылка |ИЗ | Справочник.СоветыДня как СоветыДня | Левое Соединение Справочник.Служебный КАК Служебный | ПО Служебный.Совет = СоветыДня.Ссылка | И Служебный.Пользователь = &Пользователь |ГДЕ | Служебный.Пользователь ЕСТЬ null"; СпрПОльзователи = Справочники.Пользователи.НайтиПоНаименованию(СТП); ЗАпрос.УстановитьПараметр("Пользователь", СпрПОльзователи); Если Не Запрос.Выполнить().Пустой() Тогда Форма1=ПолучитьОбщуюФорму("Форма"); Форма1.Открыть(); КонецЕсли; Должно делать то, что ты хочешь. |
|||
4
Gam_007
27.06.14
✎
10:12
|
смотрел он элементы справочника нормально по порядку берет а из выборки непойми как
|
|||
5
fmrlex
27.06.14
✎
10:12
|
(0) Открывать формы в цикле? Смеешься?
У тебя есть все основания для запроса по обеим таблицам и для анализа результата. |
|||
6
Fish
27.06.14
✎
10:13
|
(4) Как запрос написан, так и берёт. Но тут проблема явно не в упорядочивании.
|
|||
7
Gam_007
27.06.14
✎
10:16
|
вы меня строго не судите просто пробую изучить 1с, и мог лишнего накрутить и еще что то не знаю. Поэтому к более опытным оброщаюсь
|
|||
8
Ymryn
27.06.14
✎
10:17
|
(7) пока еще все вежливы, корректны и даже пытаются помогать :) Судить начнем, когда запрос в цикл запихнешь.
|
|||
9
fmrlex
27.06.14
✎
10:18
|
(7) Тебе в (3) нормальный вариант предложили.
|
|||
10
Gam_007
27.06.14
✎
10:18
|
не ну до это надеюсь я не догодаюсь))
|
|||
11
dj_serega
27.06.14
✎
10:19
|
(8) Утро же еще :) Хоть и пятница.
|
|||
12
Gam_007
27.06.14
✎
10:19
|
fmrlex, как раз пробую его
|
|||
13
Fish
27.06.14
✎
10:19
|
(7) Выборка = Справочники.Служебный.Выбрать(); - это лишняя строка
|
|||
14
Ymryn
27.06.14
✎
10:22
|
(13) да ладно, она дополняет картину хаоса и творческого беспорядка кода. Тем самым символизирует желание и стремление разработчика решить задачу и пытливый ум. :)
|
|||
15
AlexITGround
27.06.14
✎
10:24
|
в цикле формы открывать - это такой писк моды нынче пошел?
|
|||
16
Ymryn
27.06.14
✎
10:24
|
(10) Ну на моей совести пока что 5 реализаций, где я использовал запрос в цикле, за все время, что я занимаюсь 1С. Это как количество смертей у врача. Сколько раз ты прибегал к этому черному ритуалу. Поэтому не стоит зарекаться. :)
|
|||
17
AlexITGround
27.06.14
✎
10:25
|
(16) это ты так думаешь, что 5 раз...обращение к БД происходит не только через текст запроса :)
|
|||
18
Ymryn
27.06.14
✎
10:26
|
(15) посмотри личную карточку, увидишь, что человек учится, съешь шоколадку и стань добрее ^_^. Доброта.
|
|||
19
Ymryn
27.06.14
✎
10:26
|
(17) соглашусь. :)
|
|||
20
elCust
27.06.14
✎
10:27
|
(0) Нет. Так нельзя. Ты не по правильному пути идешь в достижении цели. Начинай сначала.
|
|||
21
AlexITGround
27.06.14
✎
10:27
|
ТС, подскажи, что ты хочешь сделать с выбранными элементами?
Если хочешь производить обработку элементов, то лучше выгрузить в ТЗ и сделать к-н программную обработку по кнопке, но открывать формы в цикле - ну зачем такое делать... |
|||
22
AlexITGround
27.06.14
✎
10:28
|
(18) так я же наоборот помочь хочу, направить на правильный путь так сказать, от того как он напишет свои первые работы - зависит его будущие методы, которые он будет пихать во все случаи
|
|||
23
kolpak
27.06.14
✎
10:28
|
Выборка = Результат.Выбрать();
Надо поставить перед пока Выборка.Следующий() цикл Иначе внутренний цикл выполнится только один раз |
|||
24
Ymryn
27.06.14
✎
10:30
|
(23) зачем ты ему объясняешь как правильно стрелять себе в ногу? :) Он же может выстрелить :)
|
|||
25
AlexITGround
27.06.14
✎
10:33
|
Gam_007, чтобы тебе помочь, надо знать что представляют собой эти два справочника, с какой целью они создавались, какие данные хранят, а так название самих справочников не наталкивают на их смысл
|
|||
26
Gam_007
27.06.14
✎
10:38
|
AlexITGround, я хочу сделать следующие, 2 справочника с пользователями и с советами в которых хранится какой либо совет (небольшой), при старте системы выдавать один совет пользователю и заносить информ. в третий справочник чтобы можно было отследить какой совет и кому выдовался, а совет выдается на форму
|
|||
27
Fish
27.06.14
✎
10:42
|
(26) Жуть какая-то. А зачем?
|
|||
28
fmrlex
27.06.14
✎
10:45
|
(26) Если это в рабочей базе, а не just for fun, то не делай этого.
|
|||
29
Ymryn
27.06.14
✎
10:47
|
(26) мне любопытно (3) сработало? :)
|
|||
30
Ymryn
27.06.14
✎
10:47
|
(28) This is for science!
|
|||
31
DS
27.06.14
✎
10:47
|
(2) >> Цикл в цикле лучше не делать.
Обоснование? |
|||
32
Ymryn
27.06.14
✎
10:48
|
(31) можно сделать одним запросом и вообще без циклов :)
|
|||
33
fmrlex
27.06.14
✎
10:50
|
(31) При большом переборе будут тормоза.
|
|||
34
AlexITGround
27.06.14
✎
11:07
|
(26) подобные советы лучше выводить в сообщения, а хранить данные по уже сформированным советам каждому пользователю в независимом непериодическом регистре сведений
Думаю, что это в учебной конфе все делается, т.к. никакого смысла практического не несет разработка подобного функционала |
|||
35
DS
27.06.14
✎
11:15
|
(32) (33) Это понятно, но ведь суть не в этом.,
Было сказано буквально следующее: "Цикл в цикле лучше не делать", и точка. Хотелось бы знать, почему. |
|||
36
dj_serega
27.06.14
✎
11:17
|
(35) Потому что, скорее всего, эту задачу можно сделать запросом и обходом результата.
И итераций будет меньше и читабельней будет. |
|||
37
РенеДекарт
27.06.14
✎
13:06
|
(26) твой код делает вот что:
обходит справочник "Советы" и выдает по-порядку только те советы, на которые пользователь "подписан" (указан в справочнике "Советы"). Если будешь менять в этот момент пользователя у советов в этом справочнике (типа, он просмотрел уже совет, давай другой), то все зациклится в непредсказуемой последовательности (она будет определяться, в каком порядке будут читаться в выборку элементы справочника). Меняй методику. |
|||
38
РенеДекарт
27.06.14
✎
13:08
|
(35)>>"Цикл в цикле лучше не делать", и точка. Хотелось бы знать, почему.
потому что если не напишешь - в 1С нет средств от зацикливания и выхода из нужного цикла, минуя остальные. Т.е. механизм примитивнейший, и легко зациклиться в цикле. |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |