|
ОтобратьСтрокиПоКритериям | ☑ | ||
---|---|---|---|---|
0
Adgjj
12.07.12
✎
14:51
|
Мне на днях здесь подсказали функцию ОтобратьСтрокиПоКритериям.
Применяла ее так - работало: Список = Новый СписокЗначений; Список.Добавить("X"); Список.Добавить("Y"); ТЗ_ОднаФото = ОтобратьСтрокиПоКритериям(ТЗ, Новый Структура("СменаXY", Список), Новый Структура("СменаXY", ВидСравнения.ВСписке)).Выгрузить(); Почему не работает так: Список = Новый СписокЗначений; Список.Добавить(СтрокаТЗ.Организация.Наименование); Список.Добавить(СтрокаТЗ.ДатаВыписки); Список.Добавить(СтрокаТЗ.ЕО); Список.Добавить(СтрокаТЗ.СменаXY); ТЗ_ОднаФото = ОтобратьСтрокиПоКритериям(ТЗ, Новый Структура("Название", Список), Новый Структура("Название", ВидСравнения.ВСписке)).Выгрузить(); Ошибка: http://s54.radikal.ru/i145/1207/01/6bc2feeeec3e.jpg ошибка на строку функции НовыйОтбор = ПостроительЗапроса.Отбор.Добавить(Критерий.Ключ); Функцию приведу в след. посте |
|||
1
Adgjj
12.07.12
✎
14:51
|
Функция ОтобратьСтрокиПоКритериям(Источник, СтруктураКритериев, СтруктураСложныхКритериев = Неопределено) Экспорт
Перем ВидСравненияСложный; Если СтруктураСложныхКритериев = Неопределено Тогда СтруктураСложныхКритериев = Новый Структура; КонецЕсли; ПостроительЗапроса = Новый ПостроительЗапроса; ПостроительЗапроса.ИсточникДанных = Новый ОписаниеИсточникаДанных(Источник); Для Каждого Критерий Из СтруктураКритериев Цикл НовыйОтбор = ПостроительЗапроса.Отбор.Добавить(Критерий.Ключ); СтруктураСложныхКритериев.Свойство(Критерий.Ключ, ВидСравненияСложный); Если ВидСравненияСложный = Неопределено Тогда НовыйОтбор.Установить(Критерий.Значение); Иначе НовыйОтбор.Использование = Истина; НовыйОтбор.ВидСравнения = ВидСравненияСложный; НовыйОтбор.Значение = Критерий.Значение; КонецЕсли; КонецЦикла; Возврат ПостроительЗапроса.Результат; КонецФункции // ОтобратьСтрокиПоКритериям() |
|||
2
Adgjj
12.07.12
✎
14:58
|
т.е этой функцией можно выбирать только значения из 1 поля?
|
|||
3
hhhh
12.07.12
✎
14:58
|
видимо СтрокаТЗ.ДатаВыписки у вас не типа строка. Какой-то другой тип пролез.
|
|||
4
Adgjj
12.07.12
✎
15:16
|
ДатаВыписки = Строка(СтрокаТЗ.ДатаВыписки);
Список.Добавить(ДатаВыписки); ТЗ_ОднаФото = ОтобратьСтрокиПоКритериям(ТЗ_ОднаФото, Новый Структура("ДатаВыписки", Список), Новый Структура("ДатаВыписки", ВидСравнения.ВСписке)).Выгрузить(); так не помогает, ведь в ТЗ дата: дату по строке не отбирает. как быть? |
|||
5
Adgjj
12.07.12
✎
15:19
|
(3) спасибо без даты работает
Организация = СтрокаТЗ.Организация; Список.Добавить(Организация); ЕО = СтрокаТЗ.ЕО; Список.Добавить(ЕО); ТЗ_ОднаФото = ОтобратьСтрокиПоКритериям(ТЗ, Новый Структура("Организация,ЕО", Список), Новый Структура("Организация,ЕО", ВидСравнения.ВСписке)).Выгрузить(); А как же с датой? |
|||
6
Adgjj
12.07.12
✎
15:34
|
| ВЫРАЗИТЬ(ВыработкаТС_Лес.ПутЛист.ДатаВыписки КАК СТРОКА(25)) КАК ДатаВыписки, так в запросе не катит
|
|||
7
Adgjj
12.07.12
✎
16:06
|
дату сделала строкой (проверила это в отладчике - строка):
ТЗ.Колонки.Добавить("ДатаВыпискиСтрока",ОбщегоНазначения.ПолучитьОписаниеТиповстроки(30)); //для ОтобратьСтрокиПоКритериям Для каждого СтрокаТЗ Из ТЗ Цикл СтрокаТЗ.ДатаВыпискиСтрока = Строка(СтрокаТЗ.ДатаВыписки); //или ЗагрузитьКолонку(,); посмотреть конеццикла; Но: Организация = СтрокаТЗ.Организация; Список.Добавить(Организация); //Список.Добавить(СтрокаТЗ.Организация); ДатаВыпискиСтрока = СтрокаТЗ.ДатаВыпискиСтрока; Список.Добавить(ДатаВыпискиСтрока); //Список.Добавить(СтрокаТЗ.ДатаВыписки); ЕО = СтрокаТЗ.ЕО; Список.Добавить(ЕО); СменаXY = СтрокаТЗ.СменаXY; Список.Добавить(СменаXY); //Список.Добавить(СтрокаТЗ.СменаXY); ТЗ_ОднаФото = ОтобратьСтрокиПоКритериям(ТЗ, Новый Структура("Организация,ЕО,СменаXY,ДатаВыпискиСтрока", Список), Новый Структура("Организация,ЕО,СменаXY,ДатаВыпискиСтрока", ВидСравнения.ВСписке)).Выгрузить(); ТЗ_ОднаФото почему-то пустая(( |
|||
8
Adgjj
12.07.12
✎
16:07
|
||||
9
Adgjj
12.07.12
✎
16:20
|
||||
10
ptiz
12.07.12
✎
17:00
|
Объясни, что нужно получить простыми словами, по каким колонкам отбор?
|
|||
11
Adgjj
18.07.12
✎
13:24
|
Список = Новый СписокЗначений;
Список.Добавить(СтрокаТЗ.Организация); //В СПИСОК ПОЧЕМУ-ТО ПОПАДАЕТ ТОЛЬКО ОРГАНИЗАЦИЯ ? Список.Добавить(СтрокаТЗ.ЕО); Список.Добавить(СтрокаТЗ.СменаXY); Список.Добавить(СтрокаТЗ.ДатаВыпискиСтрока); ТЗ_ОднаФото = ОтобратьСтрокиПоКритериям(ТЗ, Новый Структура("Организация,ЕО,СменаXY,ДатаВыпискиСтрока", Список), Новый Структура("Организация,ЕО,СменаXY,ДатаВыпискиСтрока", ВидСравнения.ВСписке)).Выгрузить(); Нужно из ТЗ отобрать строки с указанными в списке значениями колонок Организация,ЕО,СменаXY,ДатаВыпискиСтрока. Проблема в том, что В СПИСОК ПОЧЕМУ-ТО ПОПАДАЕТ ТОЛЬКО ОРГАНИЗАЦИЯ. |
|||
12
Adgjj
18.07.12
✎
13:28
|
||||
13
Adgjj
18.07.12
✎
13:29
|
видимо проблема в том что орг-ция не типа строка
|
|||
14
Adgjj
18.07.12
✎
13:34
|
не помогло
|
|||
15
Adgjj
18.07.12
✎
13:40
|
неужели так много народа не умеет работать со списками((
|
|||
16
Adgjj
18.07.12
✎
14:33
|
Список = Новый СписокЗначений;
Список.Добавить(СтрокаТЗ.ОрганизацияСтрока); Список.Добавить(СтрокаТЗ.ЕО); Список.Добавить(СтрокаТЗ.СменаXY); Список.Добавить(СтрокаТЗ.ДатаВыпискиСтрока); ТЗ_ОднаФото = ОтобратьСтрокиПоКритериям(ТЗ, Новый Структура("ОрганизацияСтрока,ЕО,СменаXY,ДатаВыпискиСтрока", Список), Новый Структура("ОрганизацияСтрока,ЕО,СменаXY,ДатаВыпискиСтрока", ВидСравнения.ВСписке)).Выгрузить(); //ТЗ_ОднаФото = ОтобратьСтрокиПоКритериям(ТЗ, Новый Структура("ЕО,СменаXY,ДатаВыпискиСтрока", СтрокаТЗ.ЕО,СтрокаТЗ.СменаXY,СтрокаТЗ.ДатаВыпискиСтрока), Новый Структура("ОрганизацияСтрока,ЕО,СменаXY,ДатаВыпискиСтрока", ВидСравнения.ВСписке)).Выгрузить(); Уже вместо орг-ции ее код строкой пишу, все равно не помогает. Сначала думала из-за кавычек внутри организации - не помогло. ОтобратьСтрокиПоКритериям работает по чему угодно только не по организации. |
|||
17
Adgjj
18.07.12
✎
14:52
|
Список = Новый СписокЗначений; //с учетом, что строки упорядочены выше
Список.Добавить(СтрокаТЗ.ОрганизацияСтрока); //В СПИСОК ПОЧЕМУ-ТО ПОПАДАЕТ ТОЛЬКО ОРГАНИЗАЦИЯ ? Список.Добавить(СтрокаТЗ.ЕО); Список.Добавить(СтрокаТЗ.СменаXY); Список.Добавить(СтрокаТЗ.ДатаВыпискиСтрока); ТЗ_ОднаФото = ОтобратьСтрокиПоКритериям(ТЗ, Новый Структура("ОрганизацияСтрока,ЕО,СменаXY,ДатаВыпискиСтрока", Список), Новый Структура("ОрганизацияСтрока,ЕО,СменаXY,ДатаВыпискиСтрока", ВидСравнения.ВСписке)).Выгрузить(); //ТЗ_ОднаФото = ОтобратьСтрокиПоКритериям(ТЗ, Новый Структура("ЕО,СменаXY,ДатаВыпискиСтрока", СтрокаТЗ.ЕО,СтрокаТЗ.СменаXY,СтрокаТЗ.ДатаВыпискиСтрока), Новый Структура("ОрганизацияСтрока,ЕО,СменаXY,ДатаВыпискиСтрока", ВидСравнения.ВСписке)).Выгрузить(); Список2 = Новый СписокЗначений; Список2.Добавить("X"); Список2.Добавить("Y"); ТЗпроверка2 = ОтобратьСтрокиПоКритериям(ТЗ, Новый Структура("СменаXY", Список2), Новый Структура("СменаXY", ВидСравнения.ВСписке)).Выгрузить(); Список НЕ работает, Список2 работает. http://i020.radikal.ru/1207/39/e925f38f752f.jpg http://s002.radikal.ru/i198/1207/28/5fb85571e5c7.jpg http://s55.radikal.ru/i149/1207/49/90f61d73a346.jpg |
|||
18
ptiz
18.07.12
✎
17:33
|
(17) Ты видимо, не до конца понимаешь, как работает отбор в построителе.
Когда пишешь вызов функции: ОтобратьСтрокиПоКритериям(ТЗ, Новый Структура("ОрганизацияСтрока,ЕО,СменаXY,ДатаВыпискиСтрока", Список), Новый Структура("ОрганизацияСтрока,ЕО,СменаXY,ДатаВыпискиСтрока", ВидСравнения.ВСписке)).Выгрузить(); параметр Новый Структура("ОрганизацияСтрока,ЕО,СменаXY,ДатаВыпискиСтрока", Список), означает, что надо сделать 4 отбора (они работают по принципу "И"), причем значения ты указываешь почему-то только для первого отбора! надо указывать: Новый Структура("ОрганизацияСтрока,ЕО,СменаXY,ДатаВыпискиСтрока", СписокДляОтбораОрганизацияСтрока, СписокДляОтбораЕО, СписокДляОтбораСменаXY, СписокДляОтбораДатаВыпискиСтрока), ну и в следующем параметре: Новый Структура("ОрганизацияСтрока,ЕО,СменаXY,ДатаВыпискиСтрока", ВидСравнения.ВСписке, ВидСравнения.ВСписке, ВидСравнения.ВСписке, ВидСравнения.ВСписке) Тогда получишь результат: строки, в которых значения колонок ОрганизацияСтрока,ЕО,СменаXY,ДатаВыпискиСтрока есть в соответствуюещм списке. Может, при таком сложном условии проще на запрос к ТЗ перейти. "ВЫБРАТЬ * ПОМЕСТИТЬ ТЗ ИЗ &ТЗ КАК ТЗ; ВЫБРАТЬ ОрганизацияСтрока,ЕО,СменаXY,ДатаВыпискиСтрока ИЗ ТЗ ГДЕ ОрганизацияСтрока В (&Список) ...." |
|||
19
Adgjj
19.07.12
✎
10:27
|
(18) спасибо Вам большое
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |