Имя: Пароль:
1C
1С v8
Пустой результат запроса
0 Масянька
 
16.09.21
17:17
Добрый вечер!
Код:
Функция НайтиГруппу(КодЧисловой)
    
    Макет = Справочники.КлассификаторТНВЭД.ПолучитьМакет("Группы");
    
    ТабДанных = ПолучитьТЗИзМакета(Макет);
    
    Группа = Сред(КодЧисловой, 1, 2);
    Подгруппа = Сред(КодЧисловой, 3, 2);
    
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
|    ВТ_Врем.Группа,
|    ВТ_Врем.Подгруппа,
|    ВТ_Врем.Наименование
|ПОМЕСТИТЬ ВТ_Врем
|ИЗ
|    &ТЗ КАК ВТ_Врем
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
|    ВТ_Врем.Группа,
|    ВТ_Врем.Подгруппа,
|    ВТ_Врем.Наименование
|ИЗ
|    ВТ_Врем КАК ВТ_Врем
|ГДЕ
|    ВТ_Врем.Группа = &Группа
|    И ВТ_Врем.Подгруппа = &Подгруппа";

Запрос.УстановитьПараметр("ТЗ", ТабДанных);
Запрос.УстановитьПараметр("Группа", Группа);
Запрос.УстановитьПараметр("Подгруппа", Подгруппа);

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

    Сообщить("1 - " + Результат.Количество());

КонецФункции

Функция ПолучитьТЗИзМакета(ТабДок, КолонкаИндекса = 1) Экспорт
    ТаблицаДанных = Новый ТаблицаЗначений;
    
    НомерКолонки = 0;
    Пока Истина Цикл
        НомерКолонки = НомерКолонки + 1;
        ИмяКолонки = ТабДок.Область(1, НомерКолонки).Текст;
        Если ПустаяСтрока(ИмяКолонки) Тогда
            Прервать;
        КонецЕсли;
        Если (ИмяКолонки = "Наименование") Тогда
            ТаблицаДанных.Колонки.Добавить(ИмяКолонки, Новый ОписаниеТипов("Строка", Новый КвалификаторыСтроки(250)));
        Иначе
            ТаблицаДанных.Колонки.Добавить(ИмяКолонки, Новый ОписаниеТипов("Строка", Новый КвалификаторыСтроки(2)));
        КонецЕсли;
    КонецЦикла;
    СчетчикКолонок = НомерКолонки - 1;
    НомерСтроки = 1; ФлагПрерывания = Ложь;
    Пока Истина Цикл
        НомерСтроки = НомерСтроки + 1;
        Стр = ТаблицаДанных.Добавить();
        Для А = 1 ПО СчетчикКолонок Цикл
            ТекстКолонки = ТабДок.Область(НомерСтроки, А).Текст;
            Если ПустаяСтрока(ТекстКолонки) Тогда
                Если А = КолонкаИндекса Тогда
                    Флагпрерывания = Истина;
                    ТаблицаДанных.Удалить(Стр);
                КонецЕсли;
            Иначе
                Стр[А - 1] = ТекстКолонки
            КонецЕсли;
            Если Флагпрерывания Тогда
                Прервать
            КонецЕсли;
        КонецЦикла;
        Если Флагпрерывания Тогда
            Прервать
        КонецЕсли;
    КонецЦикла;
    Возврат ТаблицаДанных
КонецФункции

Возвращает пустой результат.
Ошибок нет (были до описания типов колонок).
Отладчик показывает заполненную таблицу (из которой выбираю).
Группа и подгруппа есть.
А результат пустой.
Почему?
Спасибо.
1 mikecool
 
16.09.21
17:18
сэмулируй в консоли запрос и все поймешь )
2 H A D G E H O G s
 
16.09.21
17:18
(1) Ага. Прям из макета
3 Масянька
 
16.09.21
17:19
(1) А таблицу из макета как сэмулировать?
4 1Сергей
 
16.09.21
17:19
(0) Вы текстовый тип данных от ссылочного с какого расстояния различаете?
5 H A D G E H O G s
 
16.09.21
17:20
Запрос.УстановитьПараметр("Группа", Группа);
Запрос.УстановитьПараметр("Подгруппа", Подгруппа);

добавить

Сообщить(ТипЗнч(Группа));
Сообщить(ТипЗнч(Подгруппа));

Сообщить(ТипЗнч(ТЗ[0].Группа));
Сообщить(ТипЗнч(ТЗ[0].Подгруппа));
6 H A D G E H O G s
 
16.09.21
17:20
Автору надо покинуть специальность и не смешить никого. Это же ежам на смех.
7 Масянька
 
16.09.21
17:24
(5) Группа - строка.
При заполнении таблицы (вторая функция) - везде строка.
8 Масянька
 
16.09.21
17:24
+ (7) ТипЗнч (есесьно).
9 mikecool
 
16.09.21
17:24
(1) (2) в чем проблема?
если есть понятие, как выглядит ТЗ на входе, то нарисовать несколько раз
Выбрать ...
Объединить все
10 polosov
 
16.09.21
17:29
(0) Скорее всего проблема в
  Группа = Сред(КодЧисловой, 1, 2);
  Подгруппа = Сред(КодЧисловой, 3, 2);
Если ТипЗнч(КодЧисловой) = Тип("Число")

Неявное преобразование в строку с НПП.
11 Масянька
 
16.09.21
17:29
(10) Там все значения начинаются с 0 - 01, 02 и т.д.
12 shuhard
 
16.09.21
17:30
(9) и рисовать не надо
достаточно убрать отбор в запросе
|ГДЕ
|    ВТ_Врем.Группа = &Группа
|    И ВТ_Врем.Подгруппа = &Подгруппа";
позырить результат и вернуть отбор частями
13 Масянька
 
16.09.21
17:30
+ (11) И сообщить(типзнч(группа)) - строка.
14 polosov
 
16.09.21
17:31
(13) У КодЧисловой какой тип?
Подгруппа = Сред(КодЧисловой, 3, 2); - ожидается число больше 999?
15 Kassern
 
16.09.21
17:33
тоже по символ НПП подумал. Если в параметре передается число более 3х знаков, то там можно словить данные символы. Лучше преобразовать в строку и срезать их, раз потом вы посимвольно выцепляете данные.
16 polosov
 
16.09.21
17:34
(11) И ты в цикле гоняешь НайтиГруппу() для 0, 01, 02 и тп с постоянным формированием Макет = Справочники.КлассификаторТНВЭД.ПолучитьМакет("Группы")?
17 hhhh
 
16.09.21
18:06
(13) что за КолонкаИндекса и почему она всегда равна 1?
18 1Сергей
 
16.09.21
18:33
//Стр[А - 1] = ТекстКолонки
Стр[А - 1] = Справочник.ИмяСпр.НайтиПоНаименованию(ТекстКолонки);
19 Масянька
 
16.09.21
18:57
(17) Вторая функция - с инфостарта, макет выгружает в таблицу значений (в данном случае, макет - группы ТН ВЭД).
В отладчике виду таблицу, вижу значения
20 H A D G E H O G s
 
16.09.21
19:06
Как ей сказать? Как объяснить?
Я для неё путеводный луч в этом аду.
Дорогу к счастью нам должен осветить,
А я не знаю куда я её приведу.
Нет, я не знаю куда её веду...
21 shuhard
 
16.09.21
19:21
(20) И восторг в их глазах нам вовек не понять
Им уже не помочь, и приходится лгать
22 Ёпрст
 
16.09.21
19:57
(0)
Ошибка тут:
  Группа = Сред(КодЧисловой, 1, 2);
    Подгруппа = Сред(КодЧисловой, 3, 2);
23 Ёпрст
 
16.09.21
19:59
про "ЧГ="  уже говорили ?

КодЧисловой судя по коду уже 4 знака минимум. Соответственно, неверно получается Группа из за разделителя разряда

ЗЫ: тебе выше об ентом говорили ужо
24 Масянька
 
16.09.21
20:07
(22) (23) ЧисловойКод - это код ТН ВЭД (не помню сколько знаков - только числа). Строка.
Первые 2 символа - группа, вторые 2 - подгруппа.
25 Масянька
 
16.09.21
20:08
+ (24) Никаких разделителей нет. Абсолютно
26 hhhh
 
16.09.21
20:13
(23) КодЧисловой у нее не число. Поэтому там нормально.
27 Ёпрст
 
16.09.21
21:40
(24) выкинь квалификатор строки, просто типизируй к Строка, без длины строки
28 Ёпрст
 
16.09.21
21:40
Ну и ТЗ.ВыбратьСтроку() скриншот покажи и свой КодЧисловой, который строка
29 Масянька
 
17.09.21
09:02
30 Масянька
 
17.09.21
09:03
+(29) Убрала отбор в запросе по группе и подгруппе.
31 Масянька
 
17.09.21
09:06
+ (29) При отборе (группа и подгруппа) - https://ibb.co/kg4Crg8
32 Масянька
 
17.09.21
09:07
+ (29) Без квалификатора
33 Масянька
 
17.09.21
09:11
С квалификатором без отбора - https://ibb.co/xGZDntC
Отбор - количество в результате 0.
34 Масянька
 
17.09.21
09:27
Непереводимая игра слов с использованием местных идиоматических выражений...
Кривой макет с группами...
35 Масянька
 
17.09.21
09:42
Всё арбайтэн.
36 Масянька
 
17.09.21
09:43
Спасибо всем!
Лично (20): "Эта музыка будет вечной, если я  заменю батарейки" (С)
37 Ёпрст
 
17.09.21
09:43
(29) еще раз, для тех кто в танке.
Покажи скриншот
ТабДанных.ВыбратьСтроку()
38 Масянька
 
17.09.21
10:01
(37) Все сработало - https://ibb.co/0t01tsJ