|   |   | 
| 
 | v7: Как обойти таблицу значений, полученную из запроса | ☑ | ||
|---|---|---|---|---|
| 0
    
        AnisaL 30.11.21✎ 17:48 | 
        Здравствуйте!
 Подскажите пожалуйста, когда пытаешься обратиться к полю таблицы значений выдает ошибку: ДатаРег = Формат(Уч.ДатаРег, "ДДДММГГГГ"); {C:\USERS\USER\DESKTOP\ИНВЕНТАРНАЯ КАРТОЧКА.ERT(99)}: Поле агрегатного объекта не обнаружено (ДатаРег) Вот запрос: ТекстЗапроса = "//{{ЗАПРОС(Сформировать) |ТекущийУчасток = Справочник.Участки.ТекущийЭлемент; |ДатаРег = Справочник.Участки.ДатаРег; |//}}ЗАПРОС"; // Если ошибка в запросе, то выход из процедуры Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда Возврат; КонецЕсли; Рез=Запрос.Выполнить(ТекстЗапроса); Уч = СоздатьОбъект("ТаблицаЗначений"); Запрос.Выгрузить(Уч); КС=Уч.КоличествоСтрок(); Если КС = 0 Тогда гСообщить("Данных по Участкам не найдено!","!"); Возврат; КонецЕсли; Уч.ВыбратьСтроки(); Счетчик = Число(Начало); Конец1 = Число(Конец); // (Уч.ПолУчитьСтроку() = 1) Пока Счетчик <= Конец1 Цикл Уч.ПолучитьСтрокуПоНомеру(Счетчик); ДатаРег = Формат(Уч.ДатаРег, "ДДДММГГГГ"); Счетчик = Счетчик + 1; КонецЦикла; | |||
| 1
    
        AnisaL 30.11.21✎ 17:53 | 
        Как правильно надо обратиться к полю таблицы?     | |||
| 2
    
        Харлампий Дымба 30.11.21✎ 17:54 | 
        Запрос.Выгрузить(Уч,1);     | |||
| 3
    
        Харлампий Дымба 30.11.21✎ 17:56 | 
        А где группировка в запросе?
 Столько людей учат 7.7, я прям приободрён) | |||
| 4
    
        AnisaL 30.11.21✎ 17:58 | 
        (3) а разве нужна группировка?     | |||
| 5
    
        AnisaL 30.11.21✎ 18:03 | 
        (3) а как выбрать все участки из справочника? А то такой запрос только один элемент выбрал     | |||
| 6
    
        acanta 30.11.21✎ 18:06 | 
        Группировка все без групп.
 Выгрузить(тз, 0,0) | |||
| 7
    
        AnisaL 30.11.21✎ 18:11 | 
        (6) так опять ошибку выдает Поле агрегатного объекта не обнаружено (ДатаРег)     | |||
| 8
    
        Ёпрст гуру 30.11.21✎ 18:15 | 
        (7) 
 Запрос.Выгрузить(Уч); уч.ВыбратьСтроку()//посмотри для начала глазками, что там есть то хоть в твоей ТЗ. Дальше, думай.. | |||
| 9
    
        AnisaL 30.11.21✎ 18:22 | 
        (8) так вообще диалог ввода строки выдает     | |||
| 10
    
        Харлампий Дымба 30.11.21✎ 18:23 | 
        (4) ну без группировки ты получишь просто последний элемент.
 А без (2) - вообще ничего не получишь. | |||
| 11
    
        Харлампий Дымба 30.11.21✎ 18:26 | 
        (9) Не ввода, а выбора. А если бы ты прочитал и понял, что такое группировка, и какие параметры есть у функции "Выгрузить", то у тебя бы в этом диалоге выбора строки были бы результаты запроса. Вернее они и сейчас там есть, только твой результат - пустота.     | |||
| 12
    
        Харлампий Дымба 30.11.21✎ 18:31 | 
        Кароч, добавь в запрос  |Группировка ТекущийУчасток без групп
 Запрос.Выгрузить(Уч,1); а Уч.ВыбратьСтроки() можно убрать - она нужна для Уч.ПолучитьСтроку(), ты же используешь Уч.ПолучитьСтрокуПоНомеру(); | |||
| 13
    
        Ёпрст гуру 30.11.21✎ 18:35 | 
        (0) на вот, занимайся  
 
 | |||
| 14
    
        AnisaL 30.11.21✎ 18:38 | 
        (10) добавила группировку: |Группировка ТекущийУчасток, все получилось спасибо!     | |||
| 15
    
        AnisaL 30.11.21✎ 18:39 | 
        (12) добавила группировку: |Группировка ТекущийУчасток, получилось и без групп, благодарю     | |||
| 16
    
        AnisaL 01.12.21✎ 07:58 | 
        (12) а как сделать сортировку по полю Код? Вот как я написала, так не сортирует
 ТекстЗапроса = "//{{ЗАПРОС(Сформировать) |ТекущийУчасток = Справочник.Участки.ТекущийЭлемент; |ДатаРег = Справочник.Участки.ДатаРег; |Код = Справочник.Участки.Код; |Группировка ТекущийУчасток упорядочить по ТекущийУчасток.Код; |//}}ЗАПРОС"; | |||
| 17
    
        Chai Nic 01.12.21✎ 08:21 | 
        Никогда не употребляй эту гадость. Есть же прямые запросы..     | |||
| 18
    
        AnisaL 01.12.21✎ 08:52 | 
        (17) а в моем случае, как сделать сортировку по Коду?     | |||
| 19
    
        brenli 01.12.21✎ 09:06 | 
        (18) Как вариант выгрузить в ТЗ и отсортировать.     | |||
| 20
    
        brenli 01.12.21✎ 09:08 | 
        Запрос.Выгрузить(ТЗ,0,0);
 ТЗ.Сортировать("Код+") | |||
| 21
    
        brenli 01.12.21✎ 09:16 | 
        (16) Вообще по синтаксису правильно. 
 Проверять почему не работает упорядочивание некогда, просто предположения. Поле код строковое? Нет пробелов в поле код? Возможно причина в наличии пробелов. Если сделаешь как в (20) и сортировать не будет, можно попробовать пробежать циклом по таблице и переприсвоить коды без пробелов ТЗ.Код = СокрЛП(ТЗ.Код); И уже после этого попробовать отсортировать как в (20) | |||
| 22
    
        Ёпрст гуру 01.12.21✎ 09:20 | 
        (21) в клюшках поле code всегда строка , независимо от указания число/строка в метаданных.
 Поэтому сортировка будет как строка всегда. И пробелы там не при чем. | |||
| 23
    
        AnisaL 01.12.21✎ 09:38 | 
        (21) Поле код строковое; вот 2 значения: 1 и 2, он вперед выводит почему-то 2, пробела нет     | |||
| 24
    
        AnisaL 01.12.21✎ 09:39 | 
        (20) хорошо, попробую ТЗ сортировать     | |||
| 25
    
        AnisaL 01.12.21✎ 10:12 | 
        (20) Запрос.Выгрузить(Уч, 1);
 Уч.Сортировать("Код+"); Вот так написала, не сортирует. Вот так если пишу Запрос.Выгрузить(ТЗ,0,0); то не могу потом функцией Уч.ПолучитьСтрокуПоНомеру(Счетчик); получить строку | |||
| 26
    
        brenli 01.12.21✎ 10:12 | 
        (22) Сорян забыл)     | |||
| 27
    
        Bigbro 01.12.21✎ 10:13 | 
        так если выгрузить в ТЗ а получать потом из Уч - то конечно не получит.     | |||
| 28
    
        AnisaL 01.12.21✎ 10:13 | 
        (25) а мне именно надо функцией Уч.ПолучитьСтрокуПоНомеру(Счетчик); получать строку, так как нужен счетчик     | |||
| 29
    
        AnisaL 01.12.21✎ 10:14 | 
        (27) вообще-то я в Уч выгружаю     | |||
| 30
    
        Злопчинский 01.12.21✎ 10:14 | 
        (25) мозг включать надо, ане моторные навыки нажатия на клавиши.
 после получения ТЗ из запроса, перед ее какой-бы то ни было обработкой вставь код: //ОТЛАДКА ТЗ.ВыбратьСтроку(,); | |||
| 31
    
        Злопчинский 01.12.21✎ 10:15 | 
        (28)
 ТЗ.ВыбратьСтроку(); Пока ТЗ.ПолучитьСтроку() = 1 Цикл Чтото = ТЗ.КакойтоРеквизит; // а если нужен счетчик/порядковый номер то МойСчетчикПоПорядку = ТЗ.НомерСтроки; КонецЦикла; | |||
| 32
    
        Злопчинский 01.12.21✎ 10:18 | 
        (25) "Вот так написала, не сортирует."
 все сортирует. просто твои представления о том что должно получиться не совпадают с мнением платформы или не то/не туда смотришь... | |||
| 33
    
        Злопчинский 01.12.21✎ 10:21 | 
        (29) "не могу" - платформа таких ошибок не дает. приводи дословные сообщения копипастом, а то поток сознания трудно контролировать...
 (29) "вообще-то я в Уч выгружаю" - хз куда тыт ам выгружаешь. у тебя в коде приведенном в (25) выгрузить(ТЗ...), Выгрузить(Уя...)... - что где используется - хз... | |||
| 34
    
        AnisaL 01.12.21✎ 10:25 | 
        (30) Спасибо! Помогло     | |||
| 35
    
        Злопчинский 01.12.21✎ 10:36 | 
        (34) Внезапно, да?
 вставка отладочного оператора, который никак не изменяет данные - помогает... Волшебство! Светлая сторона силы! Хоть бы сказала в чем ошиблась... | |||
| 36
    
        AnisaL 01.12.21✎ 10:37 | 
        (35) могу код прислать как получилось     | |||
| 37
    
        AnisaL 01.12.21✎ 10:38 | 
        (35) 
 Уч = СоздатьОбъект("ТаблицаЗначений"); Запрос.Выгрузить(Уч, 1); //ОТЛАДКА Уч.ВыбратьСтроку(,); Уч.Сортировать("Код+"); Уч.ВыбратьСтроку(,); КС=Уч.КоличествоСтрок(); Если КС = 0 Тогда гСообщить("Данных по Участкам не найдено!","!"); Возврат; КонецЕсли; Уч.ВыбратьСтроки(); Счетчик = Число(Начало); Конец1 = Число(Конец); // (Уч.ПолУчитьСтроку() = 1) Пока Счетчик <= Конец1 Цикл Попытка Уч.ПолучитьСтрокуПоНомеру(Счетчик); Исключение Сообщить("Участки кончились на номере по счетчику: " + Счетчик); Прервать КонецПопытки; | |||
| 38
    
        AnisaL 01.12.21✎ 10:39 | 
        (35) я так и не поняла в чем была ошибка (     | |||
| 39
    
        1Сергей 01.12.21✎ 10:41 | 
        (37) и счетчик нигде не изменяется? чудиса какие-то     | |||
| 40
    
        Злопчинский 01.12.21✎ 10:43 | 
        (38) ну, тут давно на мисте выяснили в чем. обычно - в прокладке. той что между стулом и компьютером ;-) Без обид ;-)     | |||
| 41
    
        Bigbro 01.12.21✎ 10:44 | 
        и правда чудеса.     | |||
| 42
    
        AnisaL 01.12.21✎ 10:44 | 
        (39) там просто код длинный, не хочу весь показывать     | |||
| 43
    
        AnisaL 01.12.21✎ 10:45 | 
        (40) а я и не спорю, главное, что вы есть, чтобы помочь     | |||
| 44
    
        Злопчинский 01.12.21✎ 10:45 | 
        (39) не код, а бред какой-то...     | |||
| 45
    
        Харлампий Дымба 01.12.21✎ 11:01 | 
        (17) Тут гуру пытаются ребёнка на трёхколесный велосипед усадить, а ты говоришь, что разгон до сотни должен быть максимум 3 секунды)     | |||
| 46
    
        АгентБезопасной Нацио 01.12.21✎ 11:34 | 
        (45) прелесть прямых запросов не только в том, что они работают быстро, но и в том, что они _прямые_, в отличие от кривых черных...     | |||
| 47
    
        brenli 01.12.21✎ 11:35 | 
        (37) Можешь так
 Уч.ВыбратьСтроки(); Пока Уч.ПолучитьСтроку()=1 Цикл ... //А вместо Уч.ПолучитьСтрокуПоНомеру(Счетчик); пиши сразу из какой колонки и что хочешь получить. Например так Сообщить(Уч.<ИмяКолонки>); Если Уч.НомерСтроки = Номер1 Тогда Прервать; КонецЕсли; ... КонецЦикла; | |||
| 48
    
        Злопчинский 01.12.21✎ 11:55 | 
        а если надо из ТЗ выбрать не все строки а только диапазон ОТ ДО
 ТЗ.ВыбратьСтроки(); ТЗ.ПолучитьСтрокуПоНомеру(Макс(1,НачалоДиапазона-1)); // тут учесть дополнительно что начало диапазона м.б. первая строка Пока ТЗ.ПолучитьСтроку() = 1 Цикл Если ТЗ.НомерСтроки = КонецДиапазона Тогда Прервать; КонецЕсли; //тут пишем много кода обработки строк в диапазоне КонецЦикла; . никакого криминала в использовать цикла с ПолучитьСтрокуПоНомеру() нет, если остальной код вменяемый... | |||
| 49
    
        Харлампий Дымба 01.12.21✎ 12:27 | 
        к 49) Интересно. Никогда не использовал ТЗ.ПолучитьСтрокуПоНомеру() и ТЗ.ПолучитьСтроку() совместно - буду знать. 
 1) Для Счетчик = НачалоДиапазона по КонецДиапазона Цикл ТЗ.ПолучитьСтрокуПоНомеру(Счетчик ); 2) ТЗ.Выгрузить(ТЗ,НачалоДиапазона,КонецДиапазона);//если ТЗ будет больше не нужна 3) ТЗ.Выгрузить(ТЗ1,НачалоДиапазона,КонецДиапазона);//если ТЗ будет еще нужна 4) ТЗ.КоличествоСтрок(КонецДиапазона);//если НачалоДиапазона=1 и не вызывалось ТЗ.Сортировать() | |||
| 50
    
        Злопчинский 01.12.21✎ 13:13 | 
        (49) ТЗ.ПолучитьСтрокуПоНомеру можно и внутри цикла по ТЗ.ПолучитьСтроку(), иногда это полезно.     | 
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |