Имя: Пароль:
1C
1C 7.7
v7: Что-то не то с запросом, туплю на простом
Ø (Злопчинский 25.02.2015 19:48)
0 katerinaUniv
 
25.02.15
12:58
Доброго времени суток! Помогите с запросом: пытаюсь выбрать всю номенклатуру, которая в папке ФФФ (в эту переменную передаю ссылку на нужную группу)

ТекстЗапроса = "
    |Номенклатура    = Справочник.Номенклатура.ТекущийЭлемент;
    |Изм            = Справочник.Номенклатура.ИзмФереро;
    |Условие(Номенклатура в ФФФ);
    |Условие(Изм = 1);
    |Группировка Номенклатура без групп;
    |" ;
1 Classic
 
25.02.15
13:00
Функцию какую-нибудь сделай
2 Explorer1c
 
25.02.15
13:03
(0) а почему именно в запросе? А если сделать обычным методом?
3 katerinaUniv
 
25.02.15
13:11
(2)так не быстрее? имеете в виду ВыбратьЭлементы()?
4 katerinaUniv
 
25.02.15
13:11
(2)база очень большая. ужас, 7.7 вообще не помню(((
5 Ёпрст
 
25.02.15
13:12
(0) ну и ?
Что не работает то ?
6 katerinaUniv
 
25.02.15
13:15
(5) в итоге никаких строк нет, при обходе по запросу в цикл не заходит
7 katerinaUniv
 
25.02.15
13:15
(5)как будто результат - 0 строк
8 welwel
 
25.02.15
13:18
убрать условия по одному, тем самым проверить какое из них не работает "как надо"
9 1Сергей
 
25.02.15
13:19
мало кода
10 Ёпрст
 
25.02.15
13:23
(7)
1. передаешь не группу, а не известно что
2. нет элементов в этой группе с реквизитом ИзмФереро=1
11 katerinaUniv
 
25.02.15
13:25
(10) измФереро - это признак изменения реквизита (чтобы грузить только то, что было отредактировано пользователем), а ФФФ чуть выше я задаю как группу.
12 katerinaUniv
 
25.02.15
13:26
(10) НачатьТранзакцию();
    Поиск   = СоздатьОбъект("Справочник.Номенклатура");    
    Если поиск.НайтиПоНаименованию("ФЕРРЕРО", 0, 1) = 1 Тогда
        ферреро = поиск.ТекущийЭлемент();
    Иначе
        ферреро = "";
    КонецЕсли;
        
    ТекстЗапроса = "
    |Номенклатура    = Справочник.Номенклатура.ТекущийЭлемент;
//    |Изм            = Справочник.Номенклатура.ИзмФереро;
//    |Условие(Номенклатура в " + ФЕРРЕРО + ");
//    |Условие(изм = 1);
    |Группировка Номенклатура без групп;
    |" ;
13 Ёпрст
 
25.02.15
13:27
//    |Условие(Номенклатура в " + ФЕРРЕРО + ");


зачет, ага
14 Ёпрст
 
25.02.15
13:27
ковычки с плюсами там выкини и расскоменти, и больше так не пиши никогда.
15 katerinaUniv
 
25.02.15
13:34
(14) и без них не работает
16 Cap_1977
 
25.02.15
13:35
Сообщить("" + ферреро");
Чо напишет ?
17 1Сергей
 
25.02.15
13:36
(16) напишет Синтаксис еррор
18 Ёпрст
 
25.02.15
13:37
Та ну ?

//НачатьТранзакцию(); Это еще накуа ??
Поиск   = СоздатьОбъект("Справочник.Номенклатура");    
    Если поиск.НайтиПоНаименованию("ФЕРРЕРО", 0, 1) = 1 Тогда
      Если поиск.ЭтоГруппа()=1 Тогда
        ферреро = поиск.ТекущийЭлемент();
      Иначе
          Предупреждение("Пнх, Альфредо, нашли какую-то х..ню! Это не группа.");
          Возврат;
      КонецЕсли;  
    Иначе
        ферреро = "";
    КонецЕсли;
        
    ТекстЗапроса = "
    |Номенклатура    = Справочник.Номенклатура.ТекущийЭлемент;
    |Изм            = Справочник.Номенклатура.ИзмФереро;

    |Условие(Номенклатура в ферреро);

    |Условие(изм = 1);

    |Группировка Номенклатура без групп;
    |" ;
Запрос.Выполнить(ТекстЗапроса);
Запрос.Выгрузить(ферреро);
ферреро.ВыбратьСтроку();
19 Builder
 
25.02.15
13:39
Сделай на форме реквизит ВыГруппа и по нему сделай отбор.
Сильно удивишься.
20 katerinaUniv
 
25.02.15
13:39
(16) пишет "ферреро" - имя группы
21 Builder
 
25.02.15
13:40
(19) Даже проще - сделай на форме реквизит "ферреро" с нужным типом и оставь все как есть.
22 katerinaUniv
 
25.02.15
13:41
(18) задача стоит в выгрузке всей измененной номенклатуры из конкретной папки. если хотя бы в одной номенклатуре из списка не проставлен код по системе поставщика (реквизит), то выгрузка останавливается, файл удаляется. в процессе обработки строк запроса для каждой номенклатуры признак измененности снимается.
так вот, если есть ошибка, я отменяю транзакцию, и все позиции все так же помечены измененными.
23 katerinaUniv
 
25.02.15
13:41
(19) мне нужно без формы
24 Builder
 
25.02.15
13:42
(23) А ты попробуй. Заполнить то его можно и как у тебя есть. Можешь даже скрыть его.
25 Cap_1977
 
25.02.15
13:45
МОжет все просче:
Условие(Номенклатура в ферреро); И Условие(изм = 1);

Дают пустую выборку ?
26 Ёпрст
 
25.02.15
13:45
(22)
да уж..
т.е ты в не закрытой транзакции делаешь всем элементам ИзмФереро=1, потом там же лепишь запрос с условием ИзмФереро=1 и пытаешь что-то получить ?
Так что ле ?
27 katerinaUniv
 
25.02.15
13:47
(25) так в группе есть 2 элемента с изм = 1
28 Ёпрст
 
25.02.15
13:48
(27) больше кода
29 Builder
 
25.02.15
13:48
Это один из глюков 1С - условие в запросе нормально работает только с элементами на форме. Сталкивался не раз.
30 Ёпрст
 
25.02.15
13:48
запрос в (0) - рабочий, если делать как в (18)
31 Ёпрст
 
25.02.15
13:48
(29) херню несешь
32 Builder
 
25.02.15
13:49
(31) Ну ну...
33 katerinaUniv
 
25.02.15
13:50
(26) не совсем. там как-то так:
начатьТранзакцию()
делаю запрос
прохожу по результату запроса и 1)пишу в файл нужную информацию 2)для позиции номенклатуры ставлю изм = 0
если не было ошибок, завершаю тразакцию, если ошибки были - отменяю.

дело в том, что на выгрузку может быть 10000 позиций. если у одной не заполнен код поставщика, то все 10000 надо выгружать повторно. если ошибка была на 100й позиции, то пометка изм уйдет у первых 99
34 Ёпрст
 
25.02.15
13:50
(32) чего ну-ну ?
Ну сделай воспроизводимый пример, где условие не сработает, если ЭТО не реквизит формы.
35 Builder
 
25.02.15
13:51
(34) Ну если у ТС с реквизитом формы заработает, то это он и есть.
36 Ёпрст
 
25.02.15
13:51
(33) что показывает (18) ?
37 Ёпрст
 
25.02.15
13:52
(35) см. (31)
38 1Сергей
 
25.02.15
13:52
(33) Транзакция здесь не нужна вообще
39 1Сергей
 
25.02.15
13:55
Builder, я тебе маленький совет дам. Только не обижайся. Есть два правила общения с Ёпрст:
1. Ёпрст всегда прав
2. Если ты на 200% уверен, что Ёпрст не прав, то см.п.1.
40 katerinaUniv
 
25.02.15
13:58
(36) ничего, даже если полностью как в (18) сделать
41 katerinaUniv
 
25.02.15
13:59
(38) как тогда откатить сброс реквизита изм?
42 katerinaUniv
 
25.02.15
13:59
или два цикла?
43 Builder
 
25.02.15
14:00
(40) На форму пробовала реквизит вещать?
44 1Сергей
 
25.02.15
14:00
(41) так вы изменяете элементы справочника при выгрузке? ну, тогда надо, да
45 katerinaUniv
 
25.02.15
14:01
(43) думаю причина в том, что внутри папки Фереро есть другие папки. а вот уже в них и есть позиции номенклатуры. в моем примере Фереро -> Киндер -> Киндер Сюрприз
46 katerinaUniv
 
25.02.15
14:01
что-то наподобие в иерархии, наверное, буду сейчас искать
47 PuhUfa
 
25.02.15
14:01
На всякий случай:
Справочник.Номенклатура.ИзмФереро - тип?
48 1Сергей
 
25.02.15
14:02
(45) Конструкция Условие(.. в ...) это понимает прекрасно
49 katerinaUniv
 
25.02.15
14:02
(47) число
50 Ёпрст
 
25.02.15
14:03
(41)
Ладно, давай тест на вшивость:


Процедура Сформировать()
    Перем ТЗ;
    Поиск   = СоздатьОбъект("Справочник.Номенклатура");    
    Если поиск.НайтиПоНаименованию("ФЕРРЕРО", 0, 1) = 1 Тогда
        Если поиск.ЭтоГруппа()=1 Тогда
            ферреро = поиск.ТекущийЭлемент();
        Иначе
            Предупреждение("Пнх, Альфредо, нашли какую-то х..ню! Это не группа.");
            Возврат;
        КонецЕсли;  
    Иначе
        Предупреждение("Пнх, Альфредо, вообще нихрена нет!");
        Возврат;
    КонецЕсли;
    ТекстЗапроса = "
    |Номенклатура    = Справочник.Номенклатура.ТекущийЭлемент;
    |Изм            = Справочник.Номенклатура.ИзмФереро;
    |Условие(Номенклатура в ферреро);
    |Условие(изм = 1);
    |Группировка Номенклатура без групп;
    |" ;
    Запрос.Выполнить(ТекстЗапроса);
    Запрос.Выгрузить(ТЗ,0,0);
    ТЗ.ВыбратьСтроку();//Тут есть че ?
    
    Поиск.ИспользоватьРодителя(ферреро);
    Поиск.ВыбратьЭлементы();
    Пока Поиск.ПолучитьЭлемент() = 1 Цикл
        Если Поиск.ЭтоГруппа()=1 Тогда
            Продолжить;
        КонецЕсли;
        Если Поиск.ИзмФереро<>1 Тогда
            Продолжить;
        КонецЕсли;
        Сообщить(Поиск.ТекущийЭлемент(),"i");//тут есть че ?
    КонецЦикла;
    
КонецПроцедуры
51 katerinaUniv
 
25.02.15
14:03
(47)если убираю условие по папке, то условие с изм нормально работает
52 Ёпрст
 
25.02.15
14:04
запускай, сообщай, че видишь, че пишет..
53 katerinaUniv
 
25.02.15
14:07
(50) (52) пустую тз
54 Ёпрст
 
25.02.15
14:07
(53) и ? И ничего потом не сообщает, верно ?
55 katerinaUniv
 
25.02.15
14:07
(54)да
56 Ёпрст
 
25.02.15
14:08
Вывод тебе подсказать, или еще подумаешь ?
57 Ёпрст
 
25.02.15
14:09
(55) У тебя нет Элементов в группе с наименованием Ферерро , у которых в реквизите ИзмФереро торчит число единица.
58 Ёпрст
 
25.02.15
14:09
и во всех вложенных тоже, если че.
59 Ёпрст
 
25.02.15
14:11
в этом, можешь убедиться, так, например:

//*******************************************
Процедура Сформировать()
    Перем ТЗ;
    Поиск   = СоздатьОбъект("Справочник.Номенклатура");    
    Если поиск.НайтиПоНаименованию("ФЕРРЕРО", 0, 1) = 1 Тогда
        Если поиск.ЭтоГруппа()=1 Тогда
            ферреро = поиск.ТекущийЭлемент();
        Иначе
            Предупреждение("Пнх, Альфредо, нашли какую-то х..ню! Это не группа.");
            Возврат;
        КонецЕсли;  
    Иначе
        Предупреждение("Пнх, Альфредо, вообще нихрена нет!");
        Возврат;
    КонецЕсли;
    ТекстЗапроса = "
    |Номенклатура    = Справочник.Номенклатура.ТекущийЭлемент;
    |Изм            = Справочник.Номенклатура.ИзмФереро;
    |Условие(Номенклатура в ферреро);
    //|Условие(изм = 1);
    |Группировка Номенклатура без групп;
    |" ;
    Запрос.Выполнить(ТекстЗапроса);
    Запрос.Выгрузить(ТЗ,1,0);
    ТЗ.ВыбратьСтроку();//Тут есть че ?
    
    Поиск.ИспользоватьРодителя(ферреро);
    Поиск.ВыбратьЭлементы();
    Пока Поиск.ПолучитьЭлемент() = 1 Цикл
        Если Поиск.ЭтоГруппа()=1 Тогда
            Продолжить;
        КонецЕсли;
        Если Поиск.ИзмФереро<>1 Тогда
            //Продолжить;
        КонецЕсли;
        Сообщить(""+Поиск.ТекущийЭлемент()+"  реквизит ИзмФереро="+Поиск.ИзмФереро,"i");//тут есть че ?
    КонецЦикла;
    
КонецПроцедуры
60 Злопчинский
 
25.02.15
14:14
Я просто поражаюсь терпению Епрста
61 D_E_S_131
 
25.02.15
14:16
(59) СЗОТ, а кто такой Альфредо? Что-то не припоминаю его на этом форуме.
62 1Сергей
 
25.02.15
14:18
Сообщить("Ферреро группа? = " + ферреро.ЭтоГруппа());
63 D_E_S_131
 
25.02.15
14:18
(60) Видать "семерошник" ностальгирует.
64 Злопчинский
 
25.02.15
14:19
Может девочку не мучить кодом
А пусть тупо угиверсальной обработкой подбора
Или универсальной печатью справочников
Получит список по условию изм равно один
65 Злопчинский
 
25.02.15
14:20
(63)  если Епрст вникнет в снеговика (а оно ему надо?)
То 95% восьмерочников умоются слезами
66 D_E_S_131
 
25.02.15
14:20
(64) Это называется "давайте не будем мучать девочку, а хотя бы перевернем ее".
67 katerinaUniv
 
25.02.15
14:26
(59) но самое интересное, что внутри этой группы есть еще одна группу, в которой есть как минимум одна позиция, у которой реквизит = 1
68 Ёпрст
 
25.02.15
14:26
(67) нету.
69 Ёпрст
 
25.02.15
14:26
код в (59) запустила ?
Ты там ЭТО видишь ?
70 D_E_S_131
 
25.02.15
14:27
(69) Хочешь что бы она полностью выполняла то, что ты говоришь? Женись! :)
71 Ёпрст
 
25.02.15
14:27
Не забывай, что мы смотрим ТОЛЬКО элементы справочника (а не группы)
72 Злопчинский
 
25.02.15
14:28
Давайте блин быстрей решайте
А то у меня метро скорокончается а я без симки в планшете
73 katerinaUniv
 
25.02.15
14:29
сделала поиск по коду - заработало
74 Злопчинский
 
25.02.15
14:29
Девочка катя
Дай уже Епрсту ид и пароль на тимвьювер
Не могу больше на это непотребство смотреть
Прямо какойто немецкий дас ист фантастиш
75 Злопчинский
 
25.02.15
14:30
(73)  а теперь склпипасть наименование группы и сравни с наименованием фереро по буквам
76 Cap_1977
 
25.02.15
14:30
А я еще в (25) говорил ...
77 D_E_S_131
 
25.02.15
14:31
(76) Нельзя слепо верить всему, что пишут в интернете.
78 Злопчинский
 
25.02.15
14:31
(73)  эту группу вынеси или в константы или в реквизит на форме
Чтобы не извращаться поиском
Завтра перенумеруют справочник и получишь очередную (__о__)
79 D_E_S_131
 
25.02.15
14:34
(78) А что, завтра форум уже не будет работать или сегодня у Ёпрст-а последний день на этой грешной земле?
80 ДенисЧ
 
25.02.15
14:36
(79) А там он женится на Кате и помогать будет приватно ))
81 Злопчинский
 
25.02.15
14:40
Да в этой ветке кто уже на кате не женился
82 D_E_S_131
 
25.02.15
14:41
(81) Вертихвостка! А "Ферреро" это намек, не иначе!
83 katerinaUniv
 
25.02.15
14:42
О.о злые вы все. просто сплю по 3,5 часа в сутки, вот и торможу
84 D_E_S_131
 
25.02.15
14:45
(83) Может тогда тебе вздремнуть, а в 18:15 (по Мск) скажешь, что выдает код из (59)?
85 ДенисЧ
 
25.02.15
14:47
(81) я, например...
86 katerinaUniv
 
25.02.15
15:14
спасибо за помощь и поддержку)
87 katerinaUniv
 
25.02.15
15:15
у меня все получилось