Разрешается ли такая конструкция обхода запроса?

1. user1194102 05.03.20 14:10 Сейчас в теме
С одной стороны хочется уменьшить код и количество операций, а с другой иногда свой код вызывает сомнение, и возникает необходимость об этом спросить. Можно ли так писать или нельзя?
Если  Выборка.Следующий() И Выборка.Номенклатура.Наименование<>"xxxxxxxxxx" Тогда
Но с другой стороны два вложенных ифа, для получения одного значения, вроде как избыточно.
По теме из базы знаний
Найденные решения
4. dhurricane 05.03.20 14:17 Сейчас в теме
(1) Возникает закономерный вопрос: если нужно всего одно значение, то почему бы его не получить сразу в запросе? Аналогичный вопрос и касательно наименования номенклатуры.
user1194102; mushdaj; +2 Ответить
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
4. dhurricane 05.03.20 14:17 Сейчас в теме
(1) Возникает закономерный вопрос: если нужно всего одно значение, то почему бы его не получить сразу в запросе? Аналогичный вопрос и касательно наименования номенклатуры.
user1194102; mushdaj; +2 Ответить
7. user1194102 05.03.20 14:42 Сейчас в теме
(4) Так я его в запросе и получаю, его же потом из запроса нужно все равно прочитать? Или это условие сразу заложить в запрос? Тогда да наверно так можно, спасибо. Глупый был вопрос. Но раз уже я его задал, такая конструкция все же может быть или нет?
8. dhurricane 05.03.20 14:44 Сейчас в теме
(7)
такая конструкция все же может быть или нет
Вполне.
6. Xershi 1484 05.03.20 14:29 Сейчас в теме
(1) по качеству кода криво.
По вопросу будет ли работать? Будет.
По оптимизации кода, то все условия максимально в запросе указывают, чтобы ускорить сам запрос и уменьшить количество обрабатываемых данных.
Если код в качестве примера выложили, то тут уже думайте сами что и как вам менять.
Если запросы не умеете писать, то курс по запросам Кузнеца на ютубе пройдите думаю за глаза будет.
user1194102; +1 Ответить
9. user1194102 05.03.20 14:45 Сейчас в теме
(6) Ну не боги горшки обжигают, все делают ошибки, проглядел, бывает.
2. kniga888 05.03.20 14:14 Сейчас в теме
Пока Выборка.Следующий() Цикл
  Если Выборка.Номенклатура.Наименование <> "xxxxxxxxxx" Тогда
    //Обработка
  КонецЕсли;
КонецЦикла;


Так или нет? что смущает?
5. FetisovAN 05.03.20 14:20 Сейчас в теме
(2) смущает то, что если это выборка из запроса, почему не сделать условие в запросе.
смущает обращение через точку к наименованию ...
user1194102; +1 Ответить
11. user1194102 05.03.20 14:46 Сейчас в теме
(5) наименования никакого в рабочем коде нет, просто удалил из кода лишнее и заменил наименованием, а условие да надо добавить в запрос.
17. AlexO 135 07.03.20 09:28 Сейчас в теме
(5)это не просто "смущает" - это код для баз с 10-ю элементами. Он делает запрос к справочнику "Номенклатура", выборку из него (уже таблицу всего справочника крутит, разве что данные порциями получает т.к. Выборка), так потом еще и разъименование в цикле (новый запрос к этому же справочнику, уже на получение значения реквизита конкретного элемента).
Т.е. человек вообще не понимает механизм работы.
Но работать будет. На 10 элементах.
10. OiSorry 05.03.20 14:45 Сейчас в теме
(2) запрос в цикле только получается...
16. AlexO 135 07.03.20 09:23 Сейчас в теме
(2)
Если Выборка.Номенклатура.Наименование
Вы запрос к результату запроса делаете? Т.е. вам пофиг вообще, что написали, да еще все в цикле?
19. kniga888 10.03.20 09:10 Сейчас в теме
(16) ну если с 0 писать, то я бы вообще в наименование не лез))) если наименование содержит какой-то текст и мы хотим по этому признаку отобрать элементы, то это скорее должен быть отдельный признак и вот по нему уже отбор осуществлять.
Приведенный код - это переписанный из (1) с целью выяснить чего хочет товарищ
3. duhin 05.03.20 14:16 Сейчас в теме
В 1с логика ленивая насколько я помню, поэтому работать будет. Насколько это удобно и ясно читается по сравнению со стандартным вариантом- другой вопрос. Хакерский стиль сишников)
user1194102; +1 Ответить
12. user1194102 05.03.20 14:50 Сейчас в теме
(3) Странно что будет, но раз два человека из 5 сказали явно, что будет, да собственно и работает. По логике вроде бы не должно работать.
14. AlexO 135 07.03.20 09:19 Сейчас в теме
(12)
По логике вроде бы не должно работать.
Почему? Архитектурно чушь написана, а работать будет (хотя надо проверять - 1С такая 1С).
18. AlexO 135 07.03.20 09:39 Сейчас в теме
(12)(12) а, понял - у 1С есть "пунктик" по поводу равнозначности параметров условий. Т.е. возможно, что
Выборка.Следующий() И Выборка.Номенклатура.Наименование

- оба параметра будут выполняться одновременно, и "Выборка.Номенклатура.Наименование" просто будет неоткуда взяться.
Но надо проверять прямо на коде.
И это не "логика", а одноэсовая бредятина - когда параметры равнозначны, и если оно взаимозависимы, то нужно городить многоуровневые Если..Тогда вместо читаемого и понятного кода.
Если Выборка.Следующий() Тогда
    Если Выборка.Наименование<>"xxxxxxxxxx" Тогда
    ...
    КонецЕсли
КонецЕсли
вместо:
Если  Выборка.Следующий() И Выборка.Номенклатура.Наименование<>"xxxxxxxxxx" Тогда
20. user1194102 10.03.20 16:41 Сейчас в теме
(18)
то нужно городить многоуровневые Если.
да, вот ключевое слово городить, городить то и не хочется, но при огороде лучше читается код, по крайней мере понятнее.
21. AlexO 135 11.03.20 12:50 Сейчас в теме
(20)где ж он понятнее, если куча вложенных уровней, совершенно здесь неуместных? Искусственные уровни условий, хотя условие одно, только сложное.
А код уже превратился в винегрет "Если ... Тогда".
15. AlexO 135 07.03.20 09:20 Сейчас в теме
(3)
Хакерский стиль сишников
Это не стиль, а непонимание с чем работаешь. И к хакерам вообще никакого отношения. Как и к "сишникам".
13. user1194102 05.03.20 14:50 Сейчас в теме
Тему можно закрыть, позор Виктору Перестукину.
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот