|
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) ТЗ.ПолучитьСтрокуПоНомеру можно и внутри цикла по ТЗ.ПолучитьСтроку(), иногда это полезно.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |