Имя: Пароль:
1C
1С v8
Скопировать ТЗ: структура
, ,
0 Adgjj
 
06.07.12
09:06
Скажите, пжл, как написать отбор по нескольким значениям колонки СменаXY?
Структура = Новый Структура;
   //Структура.Вставить("СменаXY", "" или "X" или "Y"); //Ключ структуры - идентификатор колонки, а значение структуры - значение отбора.
   Структура.Вставить("СменаXY", "X"); //Ключ структуры - идентификатор колонки, а значение структуры - значение отбора.
   Структура.Вставить("СменаXY", "Y");
   Структура.Вставить("СменаXY", ""); //возможно при неучтенных в запросе видах путевых листов
   ТЗпроверка2 = ТЗ.Скопировать(Структура);
1 Ursus maritimus
 
06.07.12
09:08
Запрос
2 Adgjj
 
06.07.12
09:10
а можно примерчик подобного запроса?
3 Adgjj
 
06.07.12
09:11
никогда не делала запрос из ТЗ
4 LAAry
 
06.07.12
09:12
Выбрать * поместить ТЗВиртуальная из &ТЗРесурс как ТЗ
5 Adgjj
 
06.07.12
09:12
или добавить новую колонку и по ней выбирать))
может можно написать отбор со значениями всеми, кроме одного?
6 LAAry
 
06.07.12
09:12
потом из этой виртуальной выбираешь с каким хочешь отбором:
Выбрать * из ТЗВиртуальная как ТЗ где ....
7 Агент Инфостарта
 
06.07.12
09:13
(2) Обычный пакетный запрос к таблице значений с использованием временной таблицы. Примеров в сети и в типовых куча.
8 Adgjj
 
06.07.12
09:27
Запрос = Новый Запрос;
   //мМенеджерВрТаблиц = Новый МенеджерВременныхТаблиц;
   //Запрос.МенеджерВременныхТаблиц = мМенеджерВрТаблиц;
   Запрос.Текст = "
   |ВЫБРАТЬ
   |    ДатаДок,
   |    ВидДок,
   |    СменаXY,
   |    ЕО,
   |    РабМесто,
   |    ТаноМеханика,
   |    НомерДок,
   |    ОбщПробег
   |ПОМЕСТИТЬ
   |    ВремТаб
   |ИЗ &ТЗ КАК Таб
   |
   //|ГДЕ ТЗ.СменаXY = "" или ТЗ.СменаXY = "X" или ТЗ.СменаXY = "Y"
   |";
   
   Запрос.УстановитьПараметр("ТЗ", ТЗ);
   ТЗпроверка2 = Запрос.Выполнить().Выгрузить();

пока не очень понятно
9 ZanderZ
 
06.07.12
09:32
Запрос.Текст = "
   |ВЫБРАТЬ
   |    ДатаДок,
   |    ВидДок,
   |    СменаXY,
   |    ЕО,
   |    РабМесто,
   |    ТаноМеханика,
   |    НомерДок,
   |    ОбщПробег
   |ПОМЕСТИТЬ
   |    ВремТаб
   |ИЗ &ТЗ КАК Таб
   |
   |ГДЕ ТЗ.СменаXY = "" или ТЗ.СменаXY = "X" или ТЗ.СменаXY = "Y"
   |;
   |ВЫБРАТЬ *
   |из ВремТаб";
10 Adgjj
 
06.07.12
09:34
(9) ругается на |ГДЕ ТЗ.СменаXY = "" или ТЗ.СменаXY = "X" или ТЗ.СменаXY = "Y"
11 ZanderZ
 
06.07.12
09:37
(10) ну фильтр то сам сделай тут к примеру к твоему
можно типа
Отбор = Новый Массив;
Отбор.Добавить("Х");
Отбор.Добавить("Y");
Отбор.Добавить("");
Запрос.УстановитьПараметр("Отбор ", Отбор);
|ГДЕ ТЗ.СменаXY в &Отбор
12 Adgjj
 
06.07.12
09:41
Запрос.Текст = "
   |ВЫБРАТЬ
   |    ДатаДок,
   |    ВидДок,
   |    СменаXY,
   |    ЕО,
   |    РабМесто,
   |    ТаноМеханика,
   |    НомерДок,
   |    ОбщПробег
   |ПОМЕСТИТЬ
   |    ВремТаб
   |ИЗ &ТЗ КАК Таб
   |
   |ГДЕ ТЗ.СменаXY в (&Отбор)
   |;
   |ВЫБРАТЬ *
   |из ВремТаб КАК ТЗпроверка2
   //|ГДЕ ВремТаб.СменаXY в (&Отбор)
   |";
   
   Запрос.УстановитьПараметр("ТЗ", ТЗ);
   Отбор = Новый Массив;
   Отбор.Добавить("Х");
   Отбор.Добавить("Y");
   Отбор.Добавить("");
   Запрос.УстановитьПараметр("Отбор ", Отбор);
   ТЗпроверка2 = Запрос.Выполнить().Выгрузить();

ТЗ.СменаXY - говорит поле не найдено
13 LAAry
 
06.07.12
09:43
|ВЫБРАТЬ
   |    Таб.ДатаДок,
   |    Таб.ВидДок,
   |    Таб.СменаXY,
   |    Таб.ЕО,
   |    Таб.РабМесто,
   |    Таб.ТаноМеханика,
   |    Таб.НомерДок,
   |    Таб.ОбщПробег
   |ПОМЕСТИТЬ
   |    ВремТаб
   |ИЗ &ТЗ КАК Таб
   |
   |ГДЕ Таб.СменаXY в (&Отбор)
   |;
14 Adgjj
 
06.07.12
09:43
Таб.СменаXY написала
тогда (&Отбор) не нравится
15 LAAry
 
06.07.12
09:44
таб.  - везде написала?
16 Adgjj
 
06.07.12
09:47
|ВЫБРАТЬ
   |    Таб.ДатаДок,
   |    Таб.ВидДок,
   |    Таб.СменаXY,
   |    Таб.ЕО,
   |    Таб.РабМесто,
   |    Таб.ТаноМеханика,
   |    Таб.НомерДок,
   |    Таб.ОбщПробег
   |ПОМЕСТИТЬ
   |    ВремТаб
   |ИЗ &ТЗ КАК Таб
   |
   |ГДЕ Таб.СменаXY в (&Отбор)
   |";
   
   Запрос.УстановитьПараметр("ТЗ", ТЗ);
   Отбор = Новый Массив;
   Отбор.Добавить("Х");
   Отбор.Добавить("Y");
   Отбор.Добавить("");
   Запрос.УстановитьПараметр("Отбор ", Отбор);
   ТЗпроверка2 = Запрос.Выполнить().Выгрузить();


пишет не задано значение параметра отбор
17 Adgjj
 
06.07.12
10:00
Запрос = Новый Запрос;
   мМенеджерВрТаблиц = Новый МенеджерВременныхТаблиц;
   Запрос.МенеджерВременныхТаблиц = мМенеджерВрТаблиц;
   Запрос.Текст = "
   |ВЫБРАТЬ
   |    Таб.ДатаДок,
   |    Таб.ВидДок,
   |    Таб.СменаXY,
   |    Таб.ЕО,
   |    Таб.РабМесто,
   |    Таб.ТаноМеханика,
   |    Таб.НомерДок,
   |    Таб.ОбщПробег
   |ПОМЕСТИТЬ
   |    ВремТаб
   |ИЗ &ТЗ КАК Таб
   |
   |ГДЕ Таб.СменаXY в (&Отбор)
   |";
   
   Запрос.УстановитьПараметр("ТЗ", ТЗ);
   Отбор = Новый Массив;
   Отбор.Добавить("Х");
   Отбор.Добавить("Y");
   Отбор.Добавить("");
   Запрос.УстановитьПараметр("Отбор", Отбор);
   ТЗпроверка2 = Запрос.Выполнить().Выгрузить();

ТЗпроверка2 в отладке только один столбец "количество" с числом 26(( где мои данные?
18 Adgjj
 
06.07.12
10:04
апапаппап
19 Adgjj
 
06.07.12
10:08
помогите, пжл
20 LAAry
 
06.07.12
10:10
(17) так ты только во временную выбрала. Где выборка из временной?
Запрос = Новый Запрос;
   мМенеджерВрТаблиц = Новый МенеджерВременныхТаблиц;
   Запрос.МенеджерВременныхТаблиц = мМенеджерВрТаблиц;
   Запрос.Текст = "
   |ВЫБРАТЬ
   |    Таб.ДатаДок,
   |    Таб.ВидДок,
   |    Таб.СменаXY,
   |    Таб.ЕО,
   |    Таб.РабМесто,
   |    Таб.ТаноМеханика,
   |    Таб.НомерДок,
   |    Таб.ОбщПробег
   |ПОМЕСТИТЬ
   |    ВремТаб
   |ИЗ &ТЗ КАК Таб
   |
   |ГДЕ Таб.СменаXY в (&Отбор);
|Выбрать * из ВремТаб КАК ТЗ
   |";
   
   Запрос.УстановитьПараметр("ТЗ", ТЗ);
   Отбор = Новый Массив;
   Отбор.Добавить("Х");
   Отбор.Добавить("Y");
   Отбор.Добавить("");
   Запрос.УстановитьПараметр("Отбор", Отбор);
   ТЗпроверка2 = Запрос.Выполнить().Выгрузить();
21 ptiz
 
06.07.12
10:11
Список = Новый СписокЗначений;
Список.Добавить("X");
Список.Добавить("Y");
Список.Добавить("");
ТЗ = ОтобратьСтрокиПоКритериям(ТЗ, Новый Структура("СменаXY", Список), Новый Структура("СменаXY", ВидСравнения.ВСписке)).Выгрузить();

ОтобратьСтрокиПоКритериям - есть наверное в любой типовой
22 Adgjj
 
06.07.12
10:12
(20) так пробовала
//ТЗпроверка2 = Запрос.Выполнить(); //.Выгрузить()
   Выборка = Запрос.Выполнить().Выбрать();
   Выборка.Следующий();
23 Adgjj
 
06.07.12
10:13
(21) это нужно вместо ТЗпроверка2 = Запрос.Выполнить().Выгрузить();?
24 Adgjj
 
06.07.12
10:14
(21) наверно это способ без запроса попробую
25 LAAry
 
06.07.12
10:15
(22) Посмотри, я добавил в (20) строку с выборкой из временной таблицы. Ты ее забыла.
26 Adgjj
 
06.07.12
10:15
Процедура или функция с указанным именем не определена (ОтобратьСтрокиПоКритериям)
27 Adgjj
 
06.07.12
10:15
у меня Автохозяйство
28 ptiz
 
06.07.12
10:18
дарю
// Отбирает из переданной таблицы строки по заданным критериям.
//
// Параметры:
//  Источник - ТаблицаЗначений, РезультатЗапроса, ОбластьЯчеекТабличногоДокумента. Таблица-источник.
//  СтруктураКритериев - Структура. Названия отборов и значения, по которым нужно отобрать строки.
//  СтруктураСложныхКритериев - Структура. Если свойство передано, то значение содержит вид сравнения.
//
// Возвращаемое значение:
//  РезультатЗапроса - таблица с нужными строками.
//
Функция ОтобратьСтрокиПоКритериям(Источник, СтруктураКритериев, СтруктураСложныхКритериев = Неопределено) Экспорт

   Перем ВидСравненияСложный;

   Если СтруктураСложныхКритериев = Неопределено Тогда
       СтруктураСложныхКритериев = Новый Структура;
   КонецЕсли;

   ПостроительЗапроса = Новый ПостроительЗапроса;
   ПостроительЗапроса.ИсточникДанных = Новый ОписаниеИсточникаДанных(Источник);

   Для Каждого Критерий Из СтруктураКритериев Цикл
       НовыйОтбор = ПостроительЗапроса.Отбор.Добавить(Критерий.Ключ);

       СтруктураСложныхКритериев.Свойство(Критерий.Ключ, ВидСравненияСложный);

       Если ВидСравненияСложный = Неопределено Тогда
           НовыйОтбор.Установить(Критерий.Значение);
       Иначе
           НовыйОтбор.Использование = Истина;
           НовыйОтбор.ВидСравнения = ВидСравненияСложный;
           НовыйОтбор.Значение = Критерий.Значение;
       КонецЕсли;
   КонецЦикла;

   Возврат ПостроительЗапроса.Результат;

КонецФункции // ОтобратьСтрокиПоКритериям()
29 Adgjj
 
06.07.12
10:19
(25) да, спасибо
но он выбрал только строки с "Y"
30 ChAlex
 
06.07.12
10:20
Сначала поместите данные таблицы во временную таблицу запроса, а потом уже выборка из временной таблицы с условием.
31 Adgjj
 
06.07.12
10:20
(28) Спасибо
32 Adgjj
 
06.07.12
10:28
(30) не получается
|ВЫБРАТЬ
   |    Таб.ДатаДок,
   |    Таб.ВидДок,
   |    Таб.СменаXY,
   |    Таб.ЕО,
   |    Таб.РабМесто,
   |    Таб.ТаноМеханика,
   |    Таб.НомерДок,
   |    Таб.ОбщПробег
   |ПОМЕСТИТЬ
   |    ВремТаб
   |ИЗ &ТЗ КАК Таб
   |
   //|ГДЕ Таб.СменаXY в (&Отбор);
   |;
   |Выбрать * из ВремТаб КАК ТЗ2
   |ГДЕ ВремТаб.СменаXY в (&Отбор);
     |";

   
   Запрос.УстановитьПараметр("ТЗ", ТЗ);
   Отбор = Новый Массив;
   Отбор.Добавить("Х");
   Отбор.Добавить("Y");
   Отбор.Добавить("");
   Запрос.УстановитьПараметр("Отбор", Отбор);
   сообщить("1");
   фыва = Запрос.Выполнить();
   сообщить("2");

ТЗ2 ВремТаб не определены
33 Агент Инфостарта
 
06.07.12
10:28
(31) Это не спасибо, а тупой копи-паст из типовых.
34 IVT_2009
 
06.07.12
10:30
Глупый вопрос , у меня примерно при аналогичном запросе в результате получается ТЗ с одной строчкой , где написано количество элементов. Как мне результат получить после выгрузки результата запроса в ТЗ ?
35 Агент Инфостарта
 
06.07.12
10:31
(34) >>> Сначала поместите данные таблицы во временную таблицу запроса, а потом уже выборка из временной таблицы  

Смотри примеры в теме.
36 IVT_2009
 
06.07.12
10:31
Код

Запрос = Новый Запрос;
МенеджерВТ = Новый МенеджерВременныхТаблиц;
Запрос.МенеджерВременныхТаблиц = МенеджерВТ;

Запрос.Текст = "ВЫБРАТЬ
              |    Таб.импортер как Импортер,
              |    Таб.Инн как ИНН,
              |    Таб.Кпп как КПП
              |ПОМЕСТИТЬ ВТДанные
              |ИЗ
              |    &Данные КАК Таб";
                 
                 
Запрос.УстановитьПараметр("Данные",Таб);

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

получается :

Индекс    Значение элемента    Тип элемента    Количество
0    СтрокаТаблицыЗначений    СтрокаТаблицыЗначений    244
37 Агент Инфостарта
 
06.07.12
10:33
(36)

   |;
   |Выбрать * из ВТДанные КАК ДанныеИзВТ
   |";
38 IVT_2009
 
06.07.12
10:34
(37) Спасибо! дошло
39 Агент Инфостарта
 
06.07.12
10:34
(36)
МенеджерВТ = Новый МенеджерВременныхТаблиц;
Запрос.МенеджерВременныхТаблиц = МенеджерВТ;

Это нафиг не нужно, если ты не используешь временную таблицу где-то ещё.
40 Adgjj
 
06.07.12
10:42
(32) т.е. пришли к тому же результату, с которого начали: отбор по одному параметру((
41 Adgjj
 
06.07.12
10:47
(28) спасибо большое работает
42 LAAry
 
06.07.12
10:57
(32) ты все время путаешь имена:
|ВЫБРАТЬ
   |    Таб.ДатаДок,
   |    Таб.ВидДок,
   |    Таб.СменаXY,
   |    Таб.ЕО,
   |    Таб.РабМесто,
   |    Таб.ТаноМеханика,
   |    Таб.НомерДок,
   |    Таб.ОбщПробег
   |ПОМЕСТИТЬ
   |    ВремТаб
   |ИЗ &ТЗ КАК Таб
   |
   //|ГДЕ Таб.СменаXY в (&Отбор);

   |;
   |Выбрать * из ВремТаб КАК ТЗ2
   |ГДЕ ТЗ2.СменаXY в (&Отбор); //вот тут имя таблицы Т32, а не ВремТаб
      |";

   
   Запрос.УстановитьПараметр("ТЗ", ТЗ);
   Отбор = Новый Массив;
   Отбор.Добавить("Х");
   Отбор.Добавить("Y");
   Отбор.Добавить("");
   Запрос.УстановитьПараметр("Отбор", Отбор);
   сообщить("1");
   фыва = Запрос.Выполнить();
   сообщить("2");