Вход | Регистрация


1С:Предприятие ::

Метки:

Отбор в ТЗ

Я
   Олеся999
 
21.04.17 - 10:20
Нужно оставить строки в таблице только те в которых: Количество будет равно 1 и 2 остальные удалить. Как это можно осуществить ?
пока только срабатывает условие :  
тзТаб = тз_Осн.Выгрузить();
ПараметрыОтбора = Новый Структура("Количество", 1);
ТЗ = тзТаб.Скопировать(ПараметрыОтбора);
тз_Осн.Очистить();    
тз_Осн.Загрузить(ТЗ); 

пробовала так : ПараметрыОтбора = Новый Структура("Количество", 1 и 2); Но не работает
 
 
   Живой Ископаемый
1 - 21.04.17 - 10:21
да, не работает. Надо применить последовательно.
Либо второй вариант - скормить ТЗ построителю запроса, и добавить отбор ему.
   Живой Ископаемый
2 - 21.04.17 - 10:34
   Живой Ископаемый
3 - 21.04.17 - 10:37
Если в исходной тз есть строки, в которых количество <0, то надо два элемента отбора.
   Живой Ископаемый
4 - 21.04.17 - 10:37
тзТаб = мРезультатЗапроса.Выгрузить();
построитель = Новый ПостроительЗапроса;
Построитель.ИсточникДанных = Новый ОписаниеИсточникаДанных(тзТаб);
ЭлементОтбора = Построитель.Отбор.Добавить("Количество");
ЭлементОтбора.Использование = истина;
ЭлементОтбора.Значение = 2;
ЭлементОтбора.ВидСравнения = ВидСравнения.МеньшеИлиРавно;
тзРез = Построитель.Результат.Выгрузить();
тзРез.ВыбратьСтроку();
   Олеся999
 
5 - 21.04.17 - 11:06
(4) Странно у меня почему то все вываливает.
   Олеся999
 
6 - 21.04.17 - 11:07
и 1 и 2 и 3 и 4 итд...
   Живой Ископаемый
7 - 21.04.17 - 11:09
2(5) в 13-й строке ошибка у тебя
   Олеся999
 
8 - 21.04.17 - 13:28
(7) в какой 13-ой ?)
   СвинТуз
 
9 - 21.04.17 - 13:40
В цикле не пробовали удалять?
Долго?
   Ganiev
 
10 - 21.04.17 - 13:44
Сделай Тз еще одну скопируй все с отбором "1" потом с отбором "2", и будет тебе счастье!
 
 
   Олеся999
 
11 - 21.04.17 - 13:45
(9) я выполняю на сервере.  а текущие данные не прокатят только на клиенте
   1dvd
 
12 - 21.04.17 - 13:46
Запросом
   Олеся999
 
13 - 21.04.17 - 13:46
(10) А нельзя я не знаю отбор как то по нескольким условиям делать сразу?
   FIXXXL
 
14 - 21.04.17 - 13:46
(13) запросом - можно
   Олеся999
 
15 - 21.04.17 - 13:46
(12) так это же ТЗ а не ТЧ, или в ТЗ тоже запросом прокатит ?
   1dvd
 
16 - 21.04.17 - 13:48
(15) Можно в Запрос засунуть ТЗ
   Basilio
 
17 - 21.04.17 - 13:48
(15) да. только придется во временную таблицу выгружать. думаю проще в цикле.
   Ganiev
 
18 - 21.04.17 - 13:48
(13) А РеквизитФормыВЗначение и передать не?
(15) а почему нет?
   1dvd
 
19 - 21.04.17 - 13:49
(11) причем тут текущие данные?
   FIXXXL
 
20 - 21.04.17 - 13:49
(15) типизируешь - прокатит
не хочешь типизировать - получай строки через НайтиСтроки и складывай их в новую таблицу
   Олеся999
 
21 - 21.04.17 - 13:49
(19) Ну если в цикле делать, сравнивать с условием и если не выполняется удалять строку
   1dvd
 
22 - 21.04.17 - 13:50
(21) да. Только удалять не сразу, а вторым циклом. И причем тут текущие данные?
   Basilio
 
23 - 21.04.17 - 13:51
маСтрокиКУдалению = Новый Массив;
Для Каждого строка Из тз_Осн Цикл
Если строка.Количество = 1 Или строка.Количество = 2 Тогда
мастрокиКУдалению.Добавить(строка)
конеццикла;

Для каждого строка из маСтрокиКУдалению Цикл
тз_Осн.Удалить(строка);
конеццикла;
   Ganiev
 
24 - 21.04.17 - 13:53
(23) Ну вот даже не дал ей самой разобраться
   Ganiev
 
25 - 21.04.17 - 13:57
Можно одним циклом
н=1;
Пока н<= Тз_Осн.Количество Цикл
Если Тз_Осн[н].Количество =1 или Тз_Осн[н].Количество =2 Тогда
    Н=н+1;
Иначе
Тз_Осн.Удалить(н);
КонецЕсли;
КонецЦикла;
   1dvd
 
26 - 21.04.17 - 14:00
(25) ерунда получится
   Живой Ископаемый
27 - 21.04.17 - 14:04
Капец в (4) рабочий код, в (2) - пруф.
   arsik
 
28 - 21.04.17 - 14:06
Вот такт надо
(25)
Инд=Тз_Осн.Количество()-1; 
Пока Инд>=0 Цикл 
    Если Тз_Осн[Инд].Количество =1 или Тз_Осн[Инд].Количество =2 Тогда 
        Тз_Осн.Удалить(Инд);
    КонецЕсли;
    Инд = Инд-1;
КонецЦикла;

   Basilio
 
29 - 21.04.17 - 14:06
(24) ты фото посмотри. не похоже что она способна в этом разобраться (если фото не фейк).
   catena
 
30 - 21.04.17 - 14:09
(29)Дискриминация по зеленым кофточкам?
   Timon1405
 
31 - 21.04.17 - 14:10
(27) садись, два. не учтены отрицательные числа

тзТаб= новый ТаблицаЗначений;
тзТаб.Колонки.добавить("Количество",Новый ОписаниеТипов("Число",Новый КвалификаторыЧисла(0, 0, ДопустимыйЗнак.Любой)));
Для сч=-1 по 3 цикл
    Стр = тзТаб.Добавить();
    Стр.Количество=Сч;
КонецЦикла;

построитель = Новый ПостроительЗапроса;
Построитель.ИсточникДанных = Новый ОписаниеИсточникаДанных(тзТаб);
ЭлементОтбора = Построитель.Отбор.Добавить("Количество");
ЭлементОтбора.Использование = истина;
ЭлементОтбора.Значение = 2;
ЭлементОтбора.ВидСравнения = ВидСравнения.МеньшеИлиРавно;
тзРез = Построитель.Результат.Выгрузить();
тзРез.ВыбратьСтроку();
   Живой Ископаемый
32 - 21.04.17 - 14:18
2(31) читай (3)
   1dvd
 
33 - 21.04.17 - 14:18
(32) а ноль?
 
 
   1dvd
 
34 - 21.04.17 - 14:19
+ и разве можно делать два отбора по одному полю?
   Живой Ископаемый
35 - 21.04.17 - 14:20
2(33) капец...

Построитель.ИсточникДанных = Новый ОписаниеИсточникаДанных(тзТаб);
ЭлементОтбора = Построитель.Отбор.Добавить("Количество");
ЭлементОтбора.Использование = истина;
ЭлементОтбора.Значение = 2;
ЭлементОтбора.ВидСравнения = ВидСравнения.МеньшеИлиРавно;

ЭлементОтбора = Построитель.Отбор.Добавить("Количество");
ЭлементОтбора.Использование = истина;
ЭлементОтбора.Значение = 0;
ЭлементОтбора.ВидСравнения = ВидСравнения.Больше;
   Живой Ископаемый
36 - 21.04.17 - 14:20
ленивые животные.
:)
   Timon1405
 
37 - 21.04.17 - 14:20
(32) или использовать 
ЭлементОтбора.ВидСравнения = ВидСравнения.ВСписке; 
)))
   Живой Ископаемый
38 - 21.04.17 - 14:21
2(37) Ну... если количество не дробное, то наверное можно.
   catena
 
39 - 21.04.17 - 14:21
(35)Сейчас скажут про полтора...
   dezss
 
40 - 21.04.17 - 14:23
(39) в постановке только 1 и 2
   1dvd
 
41 - 21.04.17 - 14:23
(35) см (34)
   catena
 
42 - 21.04.17 - 14:24
(40)Вот именно. А код в (35) и полтора возьмет.
   dezss
 
43 - 21.04.17 - 14:27
так ты прочитай (37) и (38)
   Живой Ископаемый
44 - 21.04.17 - 14:27
окей, тогда в списке
   catena
 
45 - 21.04.17 - 14:29
(43)Да я вообще не понимаю, что можно после (4) обсуждать. Там уже автор должен сам под свои нужды модифицировать. А у нее ошибка в 13 строке...
   Timon1405
 
46 - 21.04.17 - 14:32
(45) так пятница же, можно и пообсуждать)
   dezss
 
47 - 21.04.17 - 14:32
(45) да то ископаемый протелепатировал
   catena
 
48 - 21.04.17 - 14:33
(46)Да тут скучно, автор на контакт не идет же.
   Живой Ископаемый
49 - 21.04.17 - 14:34
(47) у меня хрустальный шар, купленный на алиэкспрессе. Когда мне 1Сники говорят что у них не вышло, я задаю ему вопрос "В какой строчке кода у них ошибка", и он всегда показывает.
 
  Рекламное место пустует
   Олеся999
 
50 - 21.04.17 - 14:37
(28) По циклу ходит но почему то не удаляет
   Живой Ископаемый
51 - 21.04.17 - 14:37
ы...
   Олеся999
 
52 - 21.04.17 - 14:37
(48) идет :)
   Олеся999
 
53 - 21.04.17 - 14:38
(35) тоже пробовала не удаляет строки
   dezss
 
54 - 21.04.17 - 14:38
(50) ужас...
столько советов и воспользовалась неправильным)))
там наоборот, удаляет те, где 1 или 2
   Олеся999
 
55 - 21.04.17 - 14:38
нулевых и отрицательных нет не было и не будет
   Олеся999
 
56 - 21.04.17 - 14:39
(54) и не удаляет
   Живой Ископаемый
57 - 21.04.17 - 14:39
2(53) в (4) рабочий код. все что дальше написано - бред психов.
   catena
 
58 - 21.04.17 - 14:39
(51)Что "ы", давай строчку. Будем предлагать варианты решения.
   dezss
 
59 - 21.04.17 - 14:39
(53) этот код не удаляет, он отбирает нужные тебе строки...
и после него надо добавить

тзРез = Построитель.Результат.Выгрузить();
тзРез.ВыбратьСтроку();
   arsik
 
60 - 21.04.17 - 14:41
(50) Поменяй условие
Если не (Тз_Осн[Инд].Количество =1 или Тз_Осн[Инд].Количество =2) Тогда

   dezss
 
61 - 21.04.17 - 14:44
(60) один фиг лучше удалять после, а не в самом цикле
   Олеся999
 
62 - 21.04.17 - 14:45
(60) Да я так и поставила, там в другом у меня ошибка была, заработало спасибо, всем спасибо )))
   arsik
 
63 - 21.04.17 - 14:46
(61) Чем лучше?
   dezss
 
64 - 21.04.17 - 14:48
(63) сложнее ошибку допустить
   dezss
 
65 - 21.04.17 - 14:49
(64) хотя при цикле с конца, конечно, ошибки не будет



Список тем форума
Рекламное место пустует   Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Рекламное место пустует