Как определить, отрицательное число или нет

1. Sergey S (stagov) 7 18.04.17 01:53 Сейчас в теме
Подобных вопросов давненько никто не задавал.
Все просто - цикл, строки ТЗ, положительные убираем, отрицательные оставляем.
В теме - как определить отрицательное число или нет.
Поисковики дают ссылки на темы давно минувших лет.... да и ответы не блещут
Ответы
2. rjhev korum (корум) 300 18.04.17 02:05 Сейчас в теме
(1) отрицательные меньше нуля...
herfis; shalimski; +2 Ответить 1
3. Sergey S (stagov) 7 18.04.17 02:13 Сейчас в теме
(2) Вот как раз ради такого ответа и создавалась эта тема.
Спасибо что оправдали мои ожидания.
0,5 и 0,02 и т.д. то же меньше нуля...
4. Евгений Мадонов (madonov) 144 18.04.17 02:19 Сейчас в теме
Для каждого Строка из ТЗ Цикл

   Если не Строка.ПроверяемаяКолонка < 0 Тогда
      ТЗ.Удалить(Строка);
   КонецЕсли;

КонецЦикла;
...Показать Скрыть



0,5 и 0,02 и т.д. то же меньше нуля...

Серьезно?
5. Sergey S (stagov) 7 18.04.17 02:26 Сейчас в теме
6. Руслан Фасхутдинов (Octopus) 335 18.04.17 05:32 Сейчас в теме
Ой, парни, спасибо за поднятое настроение с утра
7. Николай Больсунов (boln) 906 18.04.17 05:43 Сейчас в теме
(4) В таком цикле удаления засада есть. Если в следующей строке после удаленной условие тоже истинно, то цикл её "перескочит". Цикл для удаления лучше делать по индексу в обратном порядке - от последней строки к первой.
alex-l19041; taiwanchik; +2 Ответить 5
8. Николай Больсунов (boln) 906 18.04.17 05:50 Сейчас в теме
"Отрицательные числа меньше нуля, положительные больше нуля" ©капитан Очевидность :)
9. Евгений Мадонов (madonov) 144 18.04.17 06:13 Сейчас в теме
(7) Да, перескочит. Думаю разберется с обходом по индексу. Но это не точно =) .

(8)
положительные убираем, отрицательные оставляем.

Вопрос о том, что же делать с нулем остается открытым. И что вообще есть ноль... можно прямо пофилософствовать
10. Николай Больсунов (boln) 906 18.04.17 06:36 Сейчас в теме
(9)
Вопрос о том, что же делать с нулем остается открытым. И что вообще есть ноль... можно прямо пофилософствовать
"Ноль - это такое число, которое не отрицательное и не положительное" ©Кэп :)
11. Кузнецов Василий (collider) 18.04.17 06:54 Сейчас в теме
(3) А если 0.5 меньше нуля, то что тут будет ответом?
0 - 0,5 = ?
PhoenixAOD; +1 Ответить
12. Михаил Алексеевич (fokin) 18.04.17 07:08 Сейчас в теме
(7)
получай в цикле строку таблицу по индексу с конца

Количество = ТЗ.Количество();
Пока Количество > 0 Цикл

   Если не СтрокаТЗ[Количество-1].ПроверяемаяКолонка < 0 Тогда
      ТЗ.Удалить(Строка);
   КонецЕсли;
   Количество = Количество - 1;

КонецЦикла;
...Показать Скрыть
13. Руслан Фасхутдинов (Octopus) 335 18.04.17 07:30 Сейчас в теме
(12) А чем цикл "Для каждого" не устраивает? Не будет мороки с индексами.
14. Сергей Долинин (ImHunter) 6 18.04.17 07:32 Сейчас в теме
Я обычно такое делаю в две операции.
Сначала ищу, как хочу, НЕнужные элементы (строки ТЗ) и формирую из них массив. Потом этот массив вместе с ТЗ передаю в свою служебную процедуру, которая удаляет строки из ТЗ.
alex-l19041; herfis; +2 Ответить
15. Ildar Gabdrakhmanov (spezc) 274 18.04.17 08:06 Сейчас в теме
Что за жесть творится...

1. Проходим циклом таблицу значений, строки с показателем меньше 0 суем в массив.
2. Проходим циклом массив, и строки которые в массиве удаляем из таблицы значений.
16. Николай Больсунов (boln) 906 18.04.17 08:33 Сейчас в теме
17. Руслан Фасхутдинов (Octopus) 335 18.04.17 08:36 Сейчас в теме
18. Николай Больсунов (boln) 906 18.04.17 08:43 Сейчас в теме
(15) Это тогда будет два цикла. Я раньше так и делал :)

Граница = ТЗ.Количество() - 1;
Для Индекс = -Граница по 0 Цикл
      Если ТЗ[-Индекс].ТаКолонка < 0 Тогда
             ТЗ.Удалить(ТЗ[-Индекс]);
      КонецЕсли;
КонецЦикла;
...Показать Скрыть

Такая рекомендация была на ИТС.
19. Николай Больсунов (boln) 906 18.04.17 08:45 Сейчас в теме
Еще раз для всех, кто не проснулся: см. (7)
20. rjhev korum (корум) 300 18.04.17 09:11 Сейчас в теме
(3)
0,5 и 0,02 и т.д. то же меньше нуля...

Вот и наступил тот день, когда программист спутал ноль с единицей.
21. Андрей Максимов (maksimov.andrey) 13 18.04.17 09:26 Сейчас в теме
Топикстартер на сайте 7 лет, специализация - Программист 1С. Тут попахивает троллем.
По теме:
Сч = 0;
Пока Сч < ТЗ.Количество() -1 Цикл
    Стр = ТЗ.Получить(Сч);
    Если Стр.Колонка < 0 Тогда
        Сч = Сч + 1;
    Иначе
        ТЗ.Удалить(Стр);
    КонецЕсли;
КонецЦикла;
...Показать Скрыть
22. Сан Саныч (herfis) 55 18.04.17 09:28 Сейчас в теме
Я в 7.7 всегда удалял с конца по индексу, потому как лучше вариантов не было. А в 8-ке я всегда в "для каждого" набираю массив ссылок на строки для удаления и во втором цикле "для каждого" их удаляю. Да, второй цикл. Но второй цикл только по удаляемым. Гораздо читабельнее выглядит. Да и прием более унифицированный. Например, когда можно отобрать ссылки на удаляемые строки через те же НайтиСтроки() и потом удалить тем же самым циклом удаления.
В общем, на вкус и цвет... Но мне так нравится больше. Хорошо же выглядит
Для Каждого Строка Из Таблица Цикл
   Если ... Тогда
      УдаляемыеСтроки.Добавить(Строка);
   КонецЕсли;
КонецЦикла;
Для Каждого УдаляемаяСтрока Из УдаляемыеСтроки Цикл
   Таблица.Удалить(УдаляемаяСтрока);
КонецЦикла;
...Показать Скрыть
23. Николай Больсунов (boln) 906 18.04.17 09:29 Сейчас в теме
Да ладно, зато пообщались :)
24. Сан Саныч (herfis) 55 18.04.17 09:31 Сейчас в теме
(21) В (18) более лаконичная реализация.
25. Николай Иванов (PhoenixAOD) 20 18.04.17 09:32 Сейчас в теме
(3)Поржал))) В школу иди учись. меньше нуля
26. Игорь Полосков (ipoloskov) 18.04.17 10:33 Сейчас в теме
Сначала нужно определить, что есть нуль, и что есть операция сравнения.
Как известно, нуль обладает следующими свойствами:
А + 0 = А для всех А данного поля.
Существует, и единственное, такое В, что А + В = 0
Следовательно, А > 0, если B < 0.
От этого и отталкивайтесь в своем запросе.
27. Николай Больсунов (boln) 906 18.04.17 10:49 Сейчас в теме
(22) Угу, если нужно использовать НайтиСтроки(), то, конечно, через цикл по массиву.
28. Михаил Алексеевич (fokin) 21.04.17 15:30 Сейчас в теме