Имя: Пароль:
1C
1С v8
Элемент справочника попадает в выборку запроса несколько раз. Что это ?
0 raykom
 
15.05.14
23:42
Ваяю нетленку.
Пишу простую выборку элементов из справочника контрагентов

Вот код

Запрос = Новый Запрос;
    Запрос.Текст =
        "ВЫБРАТЬ
        |   Контрагенты.Ссылка
        |ИЗ
        |   Справочник.Контрагенты КАК Контрагенты";

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

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

    СсылкаНаГруппу = Справочники.Контрагенты.ПустаяСсылка();
    СсылкаНаЭлемент = Справочники.Контрагенты.ПустаяСсылка();

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


Один из элементов попадает в выборку трижды. В справочнике у этого элемента символ слева - синяя полосочка с желтой точкой(шариком) под ней. Помоему он один такой в справочнике.

Шо это такое ?

Спасибо.
1 raykom
 
15.05.14
23:44
Со значком разобрался. это предопределенный элемент справочникаю ТАк ?
2 raykom
 
15.05.14
23:45
А что с затроением в выборке ...
Пустые ссылки на него кривые ? Штоле ...
3 дедушка Вах
 
15.05.14
23:53
ты уже говорил в соседней ветке что ты гуру?
ЗЫ может он в три группы попал
4 дедушка Вах
 
15.05.14
23:57
дальше код смотри, тут всё правильно
5 Лаврентий Берия
 
16.05.14
00:02
(0) Трижды ли? Сгруппируй с функцией КОЛИЧЕСТВО()
6 дедушка Вах
 
16.05.14
00:10
"он один такой в справочнике" ну походу на нем тренировались при переходе на новую версию
(5) погоди группировать, нехай детально разгребет
7 raykom
 
16.05.14
00:16
(3)Не. Читал, но промолчал. Но вообще не гуру, конечно. Вопросы часто задаю, но пинают не часто.
8 raykom
 
16.05.14
00:18
(4)Дак дальше все просто как двери

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


ТЗ1 - это таблица на форме. Тут уж ничего не напутаешь. ОЧищается в начале процедуры
9 raykom
 
16.05.14
00:19
(5)Я визуально контроллирую см (8)
Шо за нах ...
10 КонецЦикла
 
16.05.14
00:19
ВЫБРАТЬ РАЗЛИЧНЫЕ и иди чистить зубы и спать
11 raykom
 
16.05.14
00:21
(10)Я не про то, как исключить из выборки, а про то, почему он трижды в элементарную выборку попадает ?
12 raykom
 
16.05.14
00:21
(10)Так то бы да. Пора спать
13 raykom
 
16.05.14
00:22
(6) И ? Незаконченные ссылки какие нибудь ?
14 raykom
 
16.05.14
00:23
(6)Там еще ничего ни куда не переходилось. Точно знаю.
15 rendez-vous
 
16.05.14
00:27
(0) После твоего элемента в выборке идет две группы. Вот и все твое затроение.
16 raykom
 
16.05.14
00:32
(15)Емае, какие группы. Я из выборки беру только СсылкаНаЭлемент из иначе.

Вот это группы исключает.
Если ВыборкаДетальныеЗаписи.Ссылка.ЭтоГруппа Тогда
            СсылкаНаГруппу = ВыборкаДетальныеЗаписи.Ссылка;
        Иначе
            СсылкаНаЭлемент = ВыборкаДетальныеЗаписи.Ссылка;
        КонецЕсли;


Ээээ ... это типа пустой шаг в выборке, а заполняется он значением из последнего не пустого ??
Даа ... похоже так.
17 дедушка Вах
 
16.05.14
00:33
ну да, в (8) СсылкаНаЭлемент где обнуляется
18 raykom
 
16.05.14
00:34
Ээээ ... Генацвали ... Одна голова хорошо, а заседание райкома - лучше )
Спасибо.
19 raykom
 
16.05.14
00:35
(15) Победителю викторины - ура.
20 raykom
 
16.05.14
00:38
Спасибо всем еще раз
21 Фокусник
 
16.05.14
01:20
ВыборкаДетальныеЗаписи.Ссылка.ЭтоГруппа
ИМХО, лучше в запросе выбрать ЭтоГруппа, а через точку в выборке НЕ дергать базу...
22 raykom
 
16.05.14
02:05
(21)Ну группы мне в данном случае как раз и не нужны бы.
23 rphosts
 
16.05.14
05:19
(8) у тебя добавляется ссылка на последний выбранный элемент даже если из запроса достал группу... так понятно?
24 rphosts
 
16.05.14
05:20
(22) условие
ГДЕ НЕ Контрагенты.ЭтоГруппа
25 raykom
 
16.05.14
07:55
(24)Ну сделал по результатам прошлого заседания туповато, но рабоче

Если ВыборкаДетальныеЗаписи.Ссылка.ЭтоГруппа Тогда
            Продолжить;
        Иначе
            СсылкаНаЭлемент = ВыборкаДетальныеЗаписи.Ссылка;
        КонецЕсли;

Но у тебя, то что доктор прописал. Щас переделаю. Спасибо.
26 chelentano
 
16.05.14
07:57
(25) мля, ты в запросе то не можешь сразу группы исключить?
27 raykom
 
16.05.14
08:12
(26)Риорический вопрос. Ты же видишь )
28 raykom
 
16.05.14
08:15
ГДЕ НЕ Контрагенты.ЭтоГруппа

Блть но вот за такую логику смысловую синтасиса разработчику мошонку пасатижами надо ...
29 chelentano
 
16.05.14
08:16
(28) что не устраивает?
30 Бледно Золотистый
 
16.05.14
08:17
(29)Хочет наверное так: ГДЕ Контрагенты.ЭтоНЕГруппа
31 raykom
 
16.05.14
08:24
(24)Сделал. Сильно быстрее стало )
(30)Да. Так то я в русской школе учился )
32 raykom
 
16.05.14
08:27
Вот еще ламерский вопрос. Кому не лень.

Как на ворму повесить реквизит с выбором типа перечисление
и как потом в запросе параметр накладывать по этому значению.

Что то я реально забыл уже и семерку ... С восьмеркой то никогда на ты не был
33 raykom
 
16.05.14
08:29
+(32) Видимо список типа строка а в запросе сравнение по представлению перечисления ?
34 rphosts
 
16.05.14
10:21
Запрос.Текст =".... Где Контрагент.Тип1 = &Параметр1....";

Запрос.Параметры.Вставить("Параметр1",Отчет.ИмяЭлемента);

или не Отчет а Объект,....
35 raykom
 
16.05.14
15:27
(34)Да, вторая часть того, что я спрашивал. А теперь на форму еще как повесить реквизит типа перечисление, помойму ни как, просто список надо строковый вешать со значениями перечислений прально я понимаю ? или нет.
Пока прямо в запросе исключил. НАверное так и правильнее будет. Т.к. вырианты выборов без надобности.
"ВЫБРАТЬ
        |   Контрагенты.Ссылка
        |ИЗ
        |   Справочник.Контрагенты КАК Контрагенты
        |ГДЕ
        |НЕ Контрагенты.ЭтоГруппа И
        |ФормаСобственности = ЗНАЧЕНИЕ(Перечисление.ФормыСобственности.ЮридическоеЛицо) ИЛИ
        |ФормаСобственности = ЗНАЧЕНИЕ(Перечисление.ФормыСобственности.ЧастныйПредприниматель)";