Не провоцируйте СКД, или пример "как не надо"

Публикация № 1075458

Разработка - Практика программирования

50
Пример того, что не нужно использовать в запросах, чтобы не провоцировать СКД.

В данной заметке разберём конкретный пример конструкции, которую лучше не использовать в запросах, чтобы не удивляться результату СКД.

 

СКД — это волшебная система. Каждый раз удивляемся, сколько можно сэкономить времени, с умом используя её возможности. Однако, как известно, есть у неё и разные «особенности». И их тоже лучше знать.

 

Возьмём, к примеру, такую ситуацию.

ВЫБРАТЬ
    Валюты.Ссылка КАК Ссылка,
    Валюты.Наименование КАК Наименование,
    Валюты.Код КАК Код,
    Валюты.Наименование = "" ИЛИ Валюты.Код = "" КАК ОшибкаЗаполнения
ИЗ
    Справочник.Валюты КАК Валюты

 

Есть справочник с наименованием и кодом. Мы хотим вывести его элементы. И по каждому выводим колонку «ОшибкаЗаполнения» (булево). Колонка будет содержать значение Истина, когда Наименование или Код пустое.

Результат выполнения:

Вроде всё хорошо. Но предположим, что нам нужно теперь в полученном отчёте вывести только те записи, у которых «Ошибка заполнения» = Нет.

Накладываем отбор и выводим:

Неожиданный результат, верно?

 

Но для начала на таком простом запросе лучше самому попробовать добавить условие отбора. Не будем сейчас соревноваться в красоте запроса, а просто представим себя на месте СКД. Как бы она подставила наш отбор «Ошибка заполнения» = Нет?

 

  1. Выносим поле в секцию ГДЕ:
    ГДЕ Валюты.Наименование = "" ИЛИ Валюты.Код = ""

  2. Оборачиваем в скобки:
    ГДЕ (Валюты.Наименование = "" ИЛИ Валюты.Код = "")

  3. Сравниваем с значением отбора:
    ГДЕ (Валюты.Наименование = "" ИЛИ Валюты.Код = "") = ЛОЖЬ

 

Получаем такой текст запроса. Это то, чего мы ожидаем увидеть от СКД.

 

ВЫБРАТЬ
    Валюты.Наименование КАК Наименование,
    Валюты.Код КАК Код,
    Валюты.Наименование = "" ИЛИ Валюты.Код = "" КАК ОшибкаЗаполнения
ИЗ
    Справочник.Валюты КАК Валюты
ГДЕ
    (Валюты.Наименование = "" ИЛИ Валюты.Код = "") = ЛОЖЬ

Теперь же нам нужно отловить «реальный» текст запроса. Для этого добавляем в наш отчёт кусочек примитивного кода:

Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка)
    
    КомпоновщикМакета   = Новый КомпоновщикМакетаКомпоновкиДанных;     
    МакетКомпоновки     = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных, КомпоновщикНастроек.ПолучитьНастройки());
    НаборДанных         = МакетКомпоновки.НаборыДанных.Получить(0);
    
КонецПроцедуры

 

Ставим точку останова в конце процедуры, запускаем отладчик, переоткрываем отчёт и снова формируем его с наложенным отбором «Ошибка заполнения» = Нет

 

В результате в переменной НаборДанных можно увидеть свойство «Запрос».

Мы для наглядности в самом тексте запроса заменили автоматически генерируемый параметр на его значение, которое можно увидеть в переменной МакетКомпоновки.ЗначенияПараметров.

ВЫБРАТЬ
    Валюты.Наименование КАК Наименование,
    Валюты.Код КАК Код,
    Валюты.Наименование = "" ИЛИ Валюты.Код = "" КАК ОшибкаЗаполнения
ИЗ
    Справочник.Валюты КАК Валюты
ГДЕ
    (Валюты.Наименование = "" ИЛИ Валюты.Код = "" = ЛОЖЬ)

В чём ошибка?

 

Если вернуться к нашим шагам наложения условия, можно понять, что СКД пропустила шаг 2.

 

  1. Выносим поле в секцию ГДЕ:
    ГДЕ Валюты.Наименование = "" ИЛИ Валюты.Код = ""

  2. Оборачиваем в скобки:
    ГДЕ (Валюты.Наименование = "" ИЛИ Валюты.Код = "")

  3. Сравниваем с значением отбора:
    ГДЕ (Валюты.Наименование = "" ИЛИ Валюты.Код = "") = ЛОЖЬ

 

Выходит, что логика СКД была такая:

 

  1. Выносим поле в секцию ГДЕ:
    ГДЕ Валюты.Наименование = "" ИЛИ Валюты.Код = ""

  2. Сравниваем с значением отбора:
    ГДЕ Валюты.Наименование = "" ИЛИ Валюты.Код = "" = ЛОЖЬ

 

Однако, без оборачивания в скобки, СКД полностью меняет смысл условия. В результате мы и видим такой результат. В поле формула отрабатывает нормально, но вот фильтрация работает неверно.

Интересно, что если данное поле убрать из запроса и вынести в вычисляемые поля СКД, то такой ошибки не будет.

 

 

 

Но что, если вынести поле в вычисляемые для нас не выход? Всё просто, применяем другую конструкцию и вместо:

Валюты.Наименование = ""
ИЛИ Валюты.Код = "" КАК ОшибкаЗаполнения

пишем

ВЫБОР
   КОГДА Валюты.Наименование = "" ИЛИ Валюты.Код = ""
        ТОГДА ИСТИНА
   ИНАЧЕ ЛОЖЬ
КОНЕЦ КАК ОшибкаЗаполнения

Не так красиво, но зато теперь СКД точно не накосячит, ведь просто подставит сравнение к концу поля.

Возможно, Вам больше понравится иначе изменить условие запроса, но в данный момент это не принципиально. Главное, при написании подобных запросов помнить про эту «особенность». Ведь лучше не провоцировать СКД.

 

Замечено давненько. Но сейчас протестировано на платформах: 8.3.12.1595, 8.3.14.1779.

50

Специальные предложения

Лучшие комментарии
45. SeiOkami 1137 11.06.19 10:51 Сейчас в теме
Важно понимать, что целью статьи не является классифицировать те или иные конструкции как "документированными" или же нет.
И не решать, что использовать "хорошо", а что "плохо".
А лишь показать пример, как реагирует СКД на данный вид конструкций. И поэтому в заголовке написано: пример "как не надо". Не потому что это "плохо", а потому что приводит к конкретной проблеме.

Мы не пытаемся кого-то осуждать или хвалить. И не плюём с высока на разработчиков, которые ещё не успели перелопатить все жёлтые талмуды. Мы лишь наглядно на примере показываем, почему это может привести к ошибке.

Если кто-то из комментаторов хочет написать статью с полным и доскональным разбором документации 1С, то это будет замечательным вкладом в сообщество. Удачи!
MegasXXX; WellMaster; arxus; and03122008@gmail.com; Student1C; mark_oilbass; elephant_x; alevnev; Bene_Valete; json; Fox-trot; eden_gmail; pm74; milanse; bulpi; Evil Beaver; +16 1 Ответить
Остальные комментарии
Избранное Подписка Сортировка: Рейтинг
4. SeiOkami 1137 10.06.19 18:37 Сейчас в теме
(2) СКД не дала по рукам, а сломала запрос. Вы пытаетесь похвастаться праведностью своих запросов, а не вникать в суть проблемы.
Crazy_Max; MegasXXX; Krio2; elephant_x; edgt; thevist; baton_pk; Brawler; bulpi; Raskad; yku; sergathome; YLioY; n2m3m; d4rkmesa; mivari; pbabincev; Wern03; Ashandy; +19 1 Ответить 2
3. SeiOkami 1137 10.06.19 18:36 Сейчас в теме
(1) это простейший пример того, когда СКД неверно накладывает отбор на поле.
Приемлимость использования в запросах приставки ИЛИ - это другой вопрос. Но однозначно СКД должна корректно накладывать отбор, несмотря на религиозные предпочтения разработчика.
MegasXXX; A_Max; edgt; Brawler; bulpi; Evil Beaver; mivari; kiruha; Raskad; YLioY; n2m3m; d4rkmesa; Bene_Valete; json; Ashandy; artbear; +16 1 Ответить 1
45. SeiOkami 1137 11.06.19 10:51 Сейчас в теме
Важно понимать, что целью статьи не является классифицировать те или иные конструкции как "документированными" или же нет.
И не решать, что использовать "хорошо", а что "плохо".
А лишь показать пример, как реагирует СКД на данный вид конструкций. И поэтому в заголовке написано: пример "как не надо". Не потому что это "плохо", а потому что приводит к конкретной проблеме.

Мы не пытаемся кого-то осуждать или хвалить. И не плюём с высока на разработчиков, которые ещё не успели перелопатить все жёлтые талмуды. Мы лишь наглядно на примере показываем, почему это может привести к ошибке.

Если кто-то из комментаторов хочет написать статью с полным и доскональным разбором документации 1С, то это будет замечательным вкладом в сообщество. Удачи!
MegasXXX; WellMaster; arxus; and03122008@gmail.com; Student1C; mark_oilbass; elephant_x; alevnev; Bene_Valete; json; Fox-trot; eden_gmail; pm74; milanse; bulpi; Evil Beaver; +16 1 Ответить
28. toypaul 66 11.06.19 09:36 Сейчас в теме
Все каменты про - "пиши запросы правильно", "читай документацию" вроде как и верные, но к сути вопроса не имеют никакого отношения. суть вопроса в том, что в платформе косяк. нельзя писать ИЛИ - не давай писать. если даешь писать, обрабатывай правильно.

книга про эксперта в ДАННОМ КОНКРЕТНОМ СЛУЧАЕ вообще не к месту упомянута. давайте будем везде запрещать писать ИЛИ - даже в справочниках где пара десятков записей. бред какой-то.
arxus; zqzq; bulpi; mivari; CyberCerber; wowik; cdrw3; sergathome; +8 Ответить 1
2. VmvLer 10.06.19 18:34 Сейчас в теме
Логически верным будет выражение поля
    ВЫБОР
       КОГДА Валюты.Наименование = ""
            ТОГДА ИСТИНА
       КОГДА Валюты.Код = ""
            ТОГДА ИСТИНА
       ИНАЧЕ ЛОЖЬ
    КОНЕЦ КАК ОшибкаЗаполнения

т.к. первое условие выбора наиболее вероятно

я не знаю кому приходит в голову такое выражение поля
Валюты.Наименование = "" ИЛИ Валюты.Код = "" КАК ОшибкаЗаполнения


ЗЫ: неполадка из ничего, никто так выражение поля не пишет - вы первый у кого я увидел такой нонсенс.
СКД права, что дала по рукам.
reneyr; user811769; Sekator; kirillkr; Dream_kz; +5 2 Ответить 2
12. SeiOkami 1137 11.06.19 08:07 Сейчас в теме
(11)
В выражениях к значениям соответствующих типов могут применяться бинарные и унарные операции.


Не вижу ни противоречий, ни запретов использования конструкции, ни предупреждений, что СКД их сломает. При этом в вычисляемых полях они обрабатываются без проблем.

P.S.: Эта статья как раз и нужна для того, чтобы показать конструкцию, которую "не надо". Именно потому, что среднестатистический разработчик нигде не видел такого предупреждения, посему может наткнуться на особенность СКД уже в проде.
MegasXXX; Krio2; bulpi; +3 Ответить 1
15. SeiOkami 1137 11.06.19 08:18 Сейчас в теме
(13) вы пытаетесь привязаться к бумажкам, я же говорю, что обычному разработчику эта конструкция не покажется чем-то неизведанным и недокументированным. Простые логические операции. И программист может их использовать, не подозревая, что это приведёт к ошибке СКД. Мне, как автору статьи, важно донести эту особенность, а не решать, кто виноват.
MegasXXX; bulpi; molodoi1sneg; +3 Ответить 1
21. milanse 32 11.06.19 08:39 Сейчас в теме
Спасибо, хорошее замечание к работе СКД.
Те кто говорят про или в условиях, вообще ничего не понимают?
Krio2; bulpi; sergathome; +3 Ответить 1
51. milanse 32 11.06.19 21:12 Сейчас в теме
Какой ужас, что же мы видим в центре внимания на главной странице инофостарта https://infostart.ru/public/1074066/ в перовом примере кода используется условие "или", а во втором выражение, которое может поломаться в СКД. Куда же смотрят тру программисты 1с, которые изучили настольные книги экспертов по технологическим вопросам ? Не время спать, 1с в опасности
edgt; eden_gmail; SeiOkami; +3 Ответить
62. Evil Beaver 6302 13.06.19 17:32 Сейчас в теме
(54) Как у вас всех так получается читать объяснения автора и в упор их не понимать...? Почему вы противопоставлете друг-другу тезисы "показать пример, как СКД реагирует" и "нельзя использовать ИЛИ"?? Это же несвязанные между собой вещи. Использование ИЛИ - иногда(!) ведет к плохому плану выполнения запроса. НО - операция ИЛИ это синтаксически корректная конструкция, ее в принципе можно применять.

Далее, автор пишет, что можно написать вместо ИЛИ просто "И" и будет все равно ошибка. Никто это в упор не видит и начинает втирать, что ИЛИ неоптимально. Да, неоптимально. Но речь-то не об этом! Речь о том, что СКД, накладывая условие на поле, накладывает его не совсем ожидаемым образом.

И да, это даже не ошибка СКД, в ее действиях есть логика, а для таких вещей надо применять вычисляемые поля или иные способы обхода (там же в статье).

Но почему-то все считают, что корень всех бед статьи и ее автора - применение ИЛИ...
Kinestetik; A_Max; Redokov; +3 Ответить 3
8. echo77 1094 10.06.19 20:15 Сейчас в теме
(0)Похоже на баг компоновщика макета СКД. В 1С уже написали?
Brawler; zqzq; +2 Ответить
18. SeiOkami 1137 11.06.19 08:24 Сейчас в теме
(17) если писать неоптимальные запросы, и ожидать, что будет работать неоптимально
Но здесь СКД совершает грубейшую ошибку. И это уж точно никто не ожидает.
edgt; bulpi; +2 Ответить 1
27. d4rkmesa 11.06.19 09:36 Сейчас в теме
Вот хохма, набежали свидетели "святого СКД". Сам не использую подобные конструкции, но тут очевидно, что СКД работает не совсем ожидаемым образом, скажем так - не самым очевидным. Впрочем, в консоли СКД результирующий запрос смотрится и исправить можно довольно быстро.
mivari; sergathome; +2 Ответить 1
29. d4rkmesa 11.06.19 09:39 Сейчас в теме
(26) Хватит бредить уже.
Krio2; sergathome; +2 Ответить 1
31. milanse 32 11.06.19 09:47 Сейчас в теме
(26) Не надо бояться, надо делать. Второе издание не читал, первое лежало на краю стола, не успел прочитать, кто-то упер. Буду благодарен за скриншот выделенного жирным шрифтом обведенного в рамочку предупреждения "НИКОГДА, СЛЫШИТЕ НИКОГДА НЕ ИСПОЛЬЗУЙТЕ СЛОВО ИЛИ В ЗАПРОСАХ".
GreenDragon; sergathome; +2 Ответить 1
32. sergathome 11.06.19 09:49 Сейчас в теме
(27) тоже поржал. логика у ребят потрясающая - есть куча дерьма на лестнице в подъезде, на чердаке которого написано, что она там лежит и по лестнице не нужно ходить, хотя она есть... шиза, да и только. угага
arxus; bulpi; +2 Ответить
35. unichkin 1202 11.06.19 10:05 Сейчас в теме
(30) не понял, а зачем группировка и выражение isNULL в первых двух запросах? Это ж оборотные таблицы. В выходном запросе почему условие в секции где, а не в соединении?
Почему-то никто не вспоминает про расширение языка запросов для системы компоновки данных, а ведь именно им управляются отборы.
Запрос из статьи можно (нужно) описать так:
ВЫБРАТЬ
Валюты.Ссылка КАК Ссылка,
Валюты.Наименование КАК Наименование,
Валюты.Код КАК Код,
Валюты.Наименование = ""
ИЛИ Валюты.Код = "" КАК ОшибкаЗаполнения
ИЗ
Справочник.Валюты КАК Валюты
{ГДЕ
(Валюты.Наименование = ""
ИЛИ Валюты.Код = "") КАК ОшибкаЗаполнения}

Тогда в результате наложения отбора СКД вернет

ВЫБРАТЬ
Валюты.Наименование КАК Наименование,
Валюты.Код КАК Код,
Валюты.Наименование = ""
ИЛИ Валюты.Код = "" КАК ОшибкаЗаполнения
ИЗ
Справочник.Валюты КАК Валюты
ГДЕ
(Валюты.Наименование = ""
ИЛИ Валюты.Код = "") = &П

___
Хочется здесь добавить - СКД классная штука, но как пользователю нужно понимать что программист лишь автоматизирует его труд, а не создает волшебные кнопки, так и программистам надо понимать что есть инструмент со своей спецификой, который как и многие другие инструменты не умеет вообще ВСЕ.
kirillkr; sergathome; +2 Ответить 2
48. Evil Beaver 6302 11.06.19 16:08 Сейчас в теме
(43) вот что вас так тянет язвить-то, а? Ведь специально для Вас написал, что знаю про то, что в грамматике И и ИЛИ названы отдельно. Нет, все равно вы мне тыркаете, что я ссылку не читал.. Я вообще-то промышленный парсер под язык запросов писал, и почти каждую продукцию грамматики помню безо всяких ссылок на ИТС. Будьте вежливее, пожалуйста.
ValentinGushchin; bulpi; +2 Ответить 1
49. bulpi 157 11.06.19 19:25 Сейчас в теме
Критики этой статьи до боли напоминают мне работников техподдержки 1с (не только 1с, но мы сейчас здесь). Ты , значит, поработал для них бесплатным бета-тестером, нашел очевиднейший баг, не пожалел времени, задокументировал, пример написал, разжевал как для идиотов, написал туда ... ИИИИ.... тебе отвечают, что ты сам дурак и читай документацию. Я вот так и бросил писАть в техподдержку.
Люди, вы, блин, издеваетесь ? Если НЕЛЬЗЯ такое писАть в СКД, то нужно об этом выдавать диагностику на этапе перехода от текста запроса к полям. "Недопустимое логическое выражение в условии ..." , как то так.
arxus; zqzq; +2 Ответить 1
64. Sashares 18 13.06.19 18:19 Сейчас в теме
(62)
И да, это даже не ошибка СКД, в ее действиях есть логика

Нет в ней логики.
Отбор накладывается по полю, а не по части поля.
Почему СКД не знает о возможности использования логических выражениях в качестве полей, вопросы к Лейбовичу =)
MegasXXX; A_Max; +2 Ответить
9. Mortum 10.06.19 21:26 Сейчас в теме
Если не ошибаюсь, то возможность писать такое условие в выбранных полях появилось в платформе не сразу. А в скд просто забыли этот случай обработать.
10. Mortum 10.06.19 21:29 Сейчас в теме
(2) писать 7 строк вместо одной с точно таким же смыслом. Вам платят за объём кода?
14. Lucifer93 72 11.06.19 08:18 Сейчас в теме
Автор, тут дело в том, что Вы показываете пример плохого кода и говорите, что СКД его неправильно обработала. Для того, чтобы демонстрировать ошибку СКД покажите пример хорошего кода, который СКД обработает неправильно и не будет никаких вопросов к Вам. Ждем от Вас пример хорошего кода, который СКД отработает неправильно.
GreenDragon; jONES1979; +2 1 Ответить 2
16. SeiOkami 1137 11.06.19 08:20 Сейчас в теме
(14) независимо от оптимизированности запроса, СКД совершает ошибку. Читатель о ней теперь ознакомлен, и лишний раз подумает, прежде чем использовать конструкцию. У меня нет цели "заваливать" СКД.
Evil Beaver; +1 Ответить 1
23. dhurricane 11.06.19 08:57 Сейчас в теме
(20)
Но он верен
Коллега, именно к этой фразе у Ваших оппонентов претензия. Он не неоптимизирован, он именно не верен с точки зрения документации к платформе. По приведенной ссылке явно указано, какие операции и над какими операндами можно выполнять в полях выборки. Сложение, вычитание и прочие арифметические операции, например, в этом списке есть, а вот логических - нет. Поэтому и следует делать вывод, что использование операции "ИЛИ" в поле выборки запроса без оператор "ВЫБОР" недопустимо.

(11) Честно говоря, для меня также стало открытием, что использовать логические операторы в таком виде в секции "ВЫБРАТЬ" недопустимо. Я перечитал соответствующие разделы документации и для платформы 8.3.10, и для 8.3.14, и нигде не смог найти "разрешение" на использование оператора "ИЛИ". Почему открытие? Потому, что я хорошо помню, что где-то видел это самое "разрешение". И копнув глубже нашел его в списке изменений платформы 8.3.6:
Реализована возможность использования логических выражений в описании поля выборки и в выражениях фильтрации результатов запроса (предложение ГДЕ).

Данная возможность не предоставлялась.
При необходимости использования логического выражения в описании поля выборки было необходимо использовать операцию выбора.

Источник: https://dl03.1c.ru/content/Platform/8_3_14_1779/1cv8upd_8_3_14_1779.htm#b1d73456-26c0-11e4-98ab-e61f135f174b
Далее идут ссылки на ИТС, где должно быть более подробно описано изменение, но ничего подобного в тексте узнать не удалось.

Так что для меня теперь это открытый вопрос. Что это: ошибка в документации или неверная интерпретация нововведений в платформе?
eden_gmail; +1 Ответить 2
26. Lucifer93 72 11.06.19 09:18 Сейчас в теме
(21) Боюсь, что Вам нужно перечитать правила формирования запросов. Они отлично описаны в Настольная книга 1С:Эксперта по технологическим вопросам. 2 издание и там понятным языком объясняется почему использование ИЛИ в запросах является плохим.
GreenDragon; +1 Ответить 2
30. srub 54 11.06.19 09:43 Сейчас в теме
У меня тоже есть пример, когда СКД отрабатывает не корректно есть запрос

Запрос = Новый Запрос;
Запрос.Текст = 
		"ВЫБРАТЬ
		|	РасчетыСЗаказчикамиОбороты.Организация,
		|	РасчетыСЗаказчикамиОбороты.Заказчик,
		|	РасчетыСЗаказчикамиОбороты.Менеджер,
		|	РасчетыСЗаказчикамиОбороты.Гаражка КАК Гаражка,
		|	СУММА(ЕСТЬNULL(РасчетыСЗаказчикамиОбороты.СуммаПриход, 0)) КАК ПоступлениеОтЗаказчика,
		|	СУММА(ЕСТЬNULL(РасчетыСЗаказчикамиОбороты.СуммаРасход, 0)) КАК РасходПоЗаказчику
		|ПОМЕСТИТЬ ВТ1
		|ИЗ
		|	РегистрНакопления.РасчетыСЗаказчиками.Обороты(&ДатаНачала, &ДатаОкончания, , ) КАК РасчетыСЗаказчикамиОбороты
		|
		|СГРУППИРОВАТЬ ПО
		|	РасчетыСЗаказчикамиОбороты.Организация,
		|	РасчетыСЗаказчикамиОбороты.Заказчик,
		|	РасчетыСЗаказчикамиОбороты.Менеджер,
		|	РасчетыСЗаказчикамиОбороты.Гаражка
		|
		|ИНДЕКСИРОВАТЬ ПО
		|	Гаражка
		|;
		|
		|////////////////////////////////////////////////////////////­////////////////////
		|ВЫБРАТЬ
		|	РасчетыСПеревозчикамиОбороты.Организация,
		|	РасчетыСПеревозчикамиОбороты.Перевозчик,
		|	РасчетыСПеревозчикамиОбороты.Гаражка КАК Гаражка,
		|	РасчетыСПеревозчикамиОбороты.Менеджер,
		|	СУММА(ЕСТЬNULL(РасчетыСПеревозчикамиОбороты.СуммаРасход, 0)) КАК ОплатаПеревозчику,
		|	СУММА(ЕСТЬNULL(РасчетыСПеревозчикамиОбороты.СуммаПриход, 0)) КАК ПриходПоПеревозчику
		|ПОМЕСТИТЬ ВТ2
		|ИЗ
		|	РегистрНакопления.РасчетыСПеревозчиками.Обороты КАК РасчетыСПеревозчикамиОбороты
		|
		|СГРУППИРОВАТЬ ПО
		|	РасчетыСПеревозчикамиОбороты.Организация,
		|	РасчетыСПеревозчикамиОбороты.Перевозчик,
		|	РасчетыСПеревозчикамиОбороты.Гаражка,
		|	РасчетыСПеревозчикамиОбороты.Менеджер
		|
		|ИНДЕКСИРОВАТЬ ПО
		|	Гаражка
		|;
		|
		|////////////////////////////////////////////////////////////­////////////////////
		|ВЫБРАТЬ
		|	ВТ1.Организация КАК Организация,
		|	ВТ1.Заказчик,
		|	ВТ1.Гаражка.СтавкаСЗаказчиком КАК СтавкаСЗаказчиком,
		|	ВТ1.Гаражка.СрокОплатыОтЗаказчиком КАК СрокОплатыЗаказчиком,
		|	ВТ2.Перевозчик,
		|	ВТ1.Гаражка.СтавкаСПеревозчиком КАК СтавкаСПеревозчиком,
		|	ВТ1.Гаражка.СрокОплатыПеревозчику КАК СрокОплатыПеревозчику,
		|	ВТ1.Менеджер,
		|	ВТ1.Гаражка КАК Гаражка,
		|	ВТ1.ПоступлениеОтЗаказчика,
		|	ВТ2.ОплатаПеревозчику,
		|	ВТ1.ПоступлениеОтЗаказчика - ВТ2.ОплатаПеревозчику КАК ОплаченоИзСвоих,
		|	ВТ1.Гаражка.СтавкаСЗаказчиком - ВТ1.ПоступлениеОтЗаказчика КАК ДолгЗаказчика
		|ИЗ
		|	ВТ1 КАК ВТ1
		|		ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВТ2 КАК ВТ2
		|		ПО ВТ1.Гаражка = ВТ2.Гаражка
		|ГДЕ
		|	ВТ1.ПоступлениеОтЗаказчика < ВТ2.ОплатаПеревозчику
		|
		|УПОРЯДОЧИТЬ ПО
		|	Организация,
		|	Гаражка";
Показать


В консоли запросов за выбранный период 36 записей. А СКД выдает 6 записей.
sergathome; +1 Ответить 1
33. sergathome 11.06.19 09:51 Сейчас в теме
(28) это типичный ФМГ от долгого чтения 1Сной "документации". Простите, но без кавычек оно не работает. Тут целая секта таких фимозников обитает...
36. Lucifer93 72 11.06.19 10:07 Сейчас в теме
(31) "В секции ГДЕ логическое ИЛИ использовать тоже не рекомендуется. Следует разбить один запрос на несколько и объединить результаты (при возникновении проблем на данном участке кода). Пояснения — в этой же главе ниже." Вот цитата, которая сохранена у нас для разработчиков, чтобы они не делали глупых ошибок.
GreenDragon; +1 Ответить 1
37. Lucifer93 72 11.06.19 10:07 Сейчас в теме
(29)Отличный комментарий и ,главное, по делу и аргументированный.
GreenDragon; +1 Ответить
38. SeiOkami 1137 11.06.19 10:10 Сейчас в теме
(36) откройте любую типовую и тыкайте пальцем в каждое использование ИЛИ в секции ГДЕ.
Можно быть "сферическим идеальным программистом в вакууме", а можно с умом использовать все возможности языка.
46. milanse 32 11.06.19 14:31 Сейчас в теме
Уже предлагали зарегистрировать баг ?
85. dhurricane 14.06.19 06:06 Сейчас в теме
(79) Эксперимент показал, что СКД отработает ровно также, как и в примере автора поста, т.е. добавит выражение поля в отбор как есть, без скобок. Но здесь нам на руку играет больший приоритет операции сложения.
86. Evil Beaver 6302 14.06.19 06:38 Сейчас в теме
(85) Спасибо! Что и требовалось доказать - оптимальность или неоптимальность запроса - это не то, что рассказывается в статье.
11. qwinter 605 11.06.19 07:55 Сейчас в теме
(9), (4) такой документированной возможности не было и нет. Логические операции нельзя использовать в выражениях. В документации черным по белому написано:
Во многих конструкциях языка запросов могут использоваться выражения. Выражения языка запросов описываются следующим набором правил:

<Выражение>

<Разыменование поля> |
<Агрегатная функция> |
<Встроенная функция> |
<Операция выбора> |
<Приведение типа>[.<Разыменование поля>] |
<Значение> |
<Выражение> <Бинарная операция> <Выражение> |
<Унарная операция> <Выражение> |
( <Выражение> )

<Бинарная операция>

+ | - | * | /

<Унарная операция>

- | +
Показать

https://its.1c.ru/db/v8310doc#bookmark:dev:TI000000494

Когда же 1Сники начнут ну хоть немного документацию читать.
GreenDragon; +1 1 Ответить 4
13. qwinter 605 11.06.19 08:14 Сейчас в теме
(12)
ни запретов использования конструкции
лицензионное соглашение где запрещено использовать недокументированные возможности, как я понимаю вы тоже не читали?
ни предупреждений
предупреждение, что недокументированное использование функций будет отрабатывать неверно??? Вы сейчас серьезно?????? С таким подходом только к врачу... Очень жаль ваших клиентов.
GreenDragon; +1 1 Ответить 1
17. Lucifer93 72 11.06.19 08:22 Сейчас в теме
(16) "независимо от оптимизированности запроса" Вот эта фраза очень интересная у Вас получается. То есть давайте писать кривые запросы, а потом жаловаться, что программа не так их понимает?!
GreenDragon; +1 1 Ответить 2
44. qwinter 605 11.06.19 10:34 Сейчас в теме
(23)
Так что для меня теперь это открытый вопрос. Что это: ошибка в документации или неверная интерпретация нововведений в платформе?
Нет никакого противоречия, логическое выражение это
В языке запросов в операциях выбора и в условиях отборов используются логические выражения.

<Логическое выражение>

<Выражение> |
(<Выражение> | <Логическое выражение>) <Операция сравнения> (<Выражение> | <Логическое выражение>) |
<Выражение> [НЕ] В [ИЕРАРХИИ] (<Список значений>) |
<Выражение> [НЕ] В [ИЕРАРХИИ](<Описание запроса>) |
<Выражение> [НЕ] МЕЖДУ <Выражение> И <Выражение> |
<Выражение> ЕСТЬ [НЕ] NULL |
<Выражение> ССЫЛКА <Имя таблицы> |
<Выражение> [НЕ] ПОДОБНО <Литерал типа СТРОКА>
[СПЕЦСИМВОЛ <Литерал типа СТРОКА>]

<Операция сравнения>

> | < | = | >= | <= | <>

<Список значений>

<Выражение>[, <Выражение> [, …]]

Логическим выражением может быть:

● обычное выражение языка запросов, если его результат имеет логический тип;

● операция сравнения двух выражений языка запросов; выполняется в соответствии с правилами сравнения значений, описанными в разделе «Правила сравнения значений»;

● оператор проверки совпадения/несовпадения значения выражения с одним из перечисленных или со значениями, содержащимися в результате другого запроса;

● оператор проверки вхождения значения выражения в диапазон;

● оператор проверки значения выражения на NULL;

● оператор проверки ссылочного значения выражения на ссылку на определенную таблицу;

● оператор проверки строкового значения наподобие шаблону.

При сравнении значений используются правила сравнения значений, описанные ниже.
Показать
https://its.1c.ru/db/v8310doc#bookmark:dev:TI000000500

Разрешения на использования логических операторов языка запросов в выражениях там нет.
52. unichkin 1202 12.06.19 02:33 Сейчас в теме
(50) Нажать "F1" и прочитать про язык расширений компоновки? Навскидку - еще можно поизучать типовые, посмотреть курсы, почитать книги... Суть-то не в СКД. Развиваться надо. Писать много кода, стараться делать это правильно (ИТС имею в виду, хоть обкидайтесь помидорами). Гугл + ИТС + здравый смысл в помощь.
5. VmvLer 10.06.19 18:41 Сейчас в теме
(3) СКД накладывает отбор абсолютно корректно, но в рамках той логики которую ввел разработчик.

Если логика иррациональна, то и отбор ей соответствует.
unichkin; ltfriend; +2 4 Ответить
34. VmvLer 11.06.19 10:05 Сейчас в теме
Дело не в ИЛИ или И.

Дело в том, что когда в поле присутствует логическое выражение - это выражение целесообразно написать в синтаксисе который будет наиболее верным с точки зрения СУБД.

Как я писал в начале темы, автор высосал неполадку из пальца.
Лично мне, никогда не приходило в голову в поле-выражении логического типа
не использовать Выбор ...Когда.
43. qwinter 605 11.06.19 10:23 Сейчас в теме
(24)
И где в вашей цитате запрет на использование логических операций в выражениях?
Нет слов...
Логические И/ИЛИ, на минуточку, тоже бинарные операции.
На минуточку И/ИЛИ с точки зрения языка запросов 1С названы, цитирую, "ключевыми словами". Прочитать про это можно по той же ссылке, что я привел выше.
19. Lucifer93 72 11.06.19 08:26 Сейчас в теме
(17) Сейчас будет идеализировано, но по сути Вы говорите: давайте я в запросе вместо "ВЫБРАТЬ" буду писать "ХОЧУ ПОЛУЧИТЬ ДАННЫЕ" и пусть программа меня поймет, а если не поймет - она виновата.




(18)
В данном случае, если учитывать стандарты разработки на 1с, то ошибку совершаете только Вы. И то, что Вы наткнулись на такую ошибку является следствием написанием Вами кривого запроса. Не вижу смысла с Вами продолжать беседу. Если Вы пишите криво не нужно ожидать, что программа отработает корректно
22. qwinter 605 11.06.19 08:57 Сейчас в теме
(15)
обычному разработчику говнокодеру
Называйте вещи своими именами.
user848614; GreenDragon; +2 9 Ответить
6. VmvLer 10.06.19 18:45 Сейчас в теме
(4) Я не нуждаюсь в ваших оценках моего вероисповедания, мы же тут говорим о логике, нет?
1. VmvLer 10.06.19 18:24 Сейчас в теме
Я не понял где косячит СКД, как-то сумбурно написано.

Условия в тесте статьи сами по себе кривоваты, да и использование
ИЛИ в условиях я видел только в типовом коде современных конфигураций.
Если запрос пишет человек с опытом, то никаких ИЛИ в запросе не будет.
7. Wern03 15 10.06.19 20:12 Сейчас в теме
Причем тут ИЛИ. С тем же успехом можно поставить И и будет та же ошибка. Ошибка интересная, спасибо. возьму на заметку.
20. SeiOkami 1137 11.06.19 08:30 Сейчас в теме
(19)вы приводите странный пример. Запрос вполне ясный. Возможно, он не так оптимизирован (хотя это максимально спорное утверждение). Но он верен и очевиден. И в статье расписано, как должен накладываться отбор. Более того, СКД сама его так и накладывает, когда используются вычисляемые поля. Но с тем же самым полем косячит, когда он в запросе. Очевидно, что это ошибка. И очевидно, что это нужно знать при разработке. Иначе можно напороться. И уже не важно будет, кто здесь виноват
24. Evil Beaver 6302 11.06.19 08:57 Сейчас в теме
(11)
Когда же 1Сники начнут ну хоть немного документацию читать

И где в вашей цитате запрет на использование логических операций в выражениях? Логические И/ИЛИ, на минуточку, тоже бинарные операции. Я-то знаю, что в грамматике запросов логические выражения описаны другим нетерминалом, но в вашей цитате ничего про него нет.
25. dhurricane 11.06.19 09:10 Сейчас в теме
(24) Запрета нет. Но приведен список операций, называемых бинарными.
39. sergathome 11.06.19 10:13 Сейчас в теме
(35) Первое реальное возражение. Да, ***, да, язык СКД ОТЛИЧАЕТСЯ от языка запросов ! В "документации " это звучит абсолютно невнятно и неудивительно, что возникают секты на этой почве. бгы
40. Lucifer93 72 11.06.19 10:15 Сейчас в теме
(38) Так в данном случае Вы не используете их с умом. Вы просто пишите ерунду, которую Вам уже правили в постах выше. Я изначально попросил Вас написать качественно и найти ошибку. Никто не говорит, что СКД святая, я говорю Вам напишите запрос ПРАВИЛЬНО и тогда ошибка исчезнет. Вся статья, по сути, не будет иметь никакого смысла, если разработчик будь следовать элементарным правилам написания запроса(на данном этапе). Сделайте нормальный запрос, повторите ошибку и не будет к Вам вопросов.
Возможности языка нужно использовать правильно, а не как Вам захотелось. Вы пытаетесь отверткой забить гвоздь
41. VmvLer 11.06.19 10:16 Сейчас в теме
(38) Дело не в ИЛИ или И.

То что я написал в начале темы детализировано в (34)

хватит бредить(с)
42. SlavaKron 11.06.19 10:23 Сейчас в теме
(23) Судя по всему, 1С автоматически переделывает логические выражения в секции ВЫБРАТЬ в CASE структуру, потому что, например, в T-SQL нельзя использовать булево в выборке – оно не является типом данных.
47. pm74 133 11.06.19 14:31 Сейчас в теме
Валюты.Наименование = "" ИЛИ Валюты.Код = ""
= НЕ (НЕ Список.Наименование = "" И НЕ Список.Код = "")
50. surikateg 11.06.19 20:16 Сейчас в теме
(35)
В СП написано:

При автоматическом заполнении доступных полей запроса выполняются следующие действия:
все поля списка выборки и их дочерние поля становятся доступными для выбора, упорядочивания, группировки, отбора и др.;

Как программист должен догадаться о создании дополнительной конструкции ГДЕ в расширении языка запросов СКД?
53. GreenDragon 12.06.19 17:45 Сейчас в теме
(38) А, так у вас эталоном являются типовые? Офигеть! Мы тут им баги репортим, а оно вон как! Вам написал уже не один человек про крайнюю нежелательность использования логического оператора "ИЛИ" в секции условий.
54. GreenDragon 12.06.19 17:59 Сейчас в теме
(48) Тут просто автор заявляет, что
...Важно понимать, что целью статьи не является классифицировать те или иные конструкции как "документированными" или же нет.
И не решать, что использовать "хорошо", а что "плохо".
А лишь показать пример, как реагирует СКД на данный вид конструкций.


И при этом использует "ИЛИ" в секции условий. На не рекомендуемый вид конструкций СКД реагирует плохо. Вот прям в первом комментарии об этом написано, а потом ещё с десяток подобных комментариев, но автор упоролся упёрся и настаивает, вот все и нервничают, повышая градус неадекватности.
55. surikateg 12.06.19 22:00 Сейчас в теме
(52)
Я как раз и процитировал что по F1 написано. В каких курсах или книгах есть полное описание расширения языка запросов СКД? Гугл не 1с. Оптимальность кода это другой вопрос, синтаксис запроса корректен для платформы, он должен выполнятся правильно.
56. unichkin 1202 12.06.19 23:45 Сейчас в теме
(55)
Я как раз и процитировал что по F1 написано. В каких курсах или книгах есть полное описание расширения языка запросов СКД? Гугл не 1с. Оптимальность кода это другой вопрос, синтаксис запроса корректен для платформы, он должен выполнятся правильно.

В (50) вы утверждаете что это из СП. ctrl + shift + F1, если что. Полного - подозреваю, что ни в каких. Просто с опытом приходит понимание того, что такое СКД, и как с ним жить. И можно хоть 1000 статей написать на тему "вот так не работает!!", я как-то более практично привык смотреть на эту проблему. Хотя тоже много глючков переловил. Мир не идеален) Максимум что можно сделать - попробовать зарегистрировать багу через поддержку.
По поводу синтаксиса - я бы вот не разделял понятия "синтаксис" и "оптимальность". Я бы объединил: все надо делать максимально просто, быстро и понятно. Попробуйте переписать ваш запрос, и посмотрите поймет ли его СКД после этого. Я понятия не имею чего там у платформы в мозгах, но подозреваю что писатели парсеров ориентировались на корректный входящий запрос, а не на то что их будут ловить подводными камнями.
57. alex5550 12.06.19 23:58 Сейчас в теме
Если НЕЛЬЗЯ такое писАть в СКД, то нужно об этом выдавать диагностику

Золотые слова...
58. surikateg 13.06.19 09:11 Сейчас в теме
(56) В 1с и так язык запросов типа "sql" обрезан по самое не балуйся и давно уже не расширяется, в чем сложность написать нормальный парсер для СКД?
59. VmvLer 13.06.19 09:43 Сейчас в теме
(49) (51)... вброшу еще на вентилятор

Да забудьте вы про красную тряпку "ИЛИ" - оно тут не виновно и речь о нем шла в контексте. Еще раз суть:
"Недопустимое логическое выражение в условии ..."

не надо нас, маленьких дурить, меняя контекст неполадки!
в условии как раз допустимо выражение без КАК
Валюты.Наименование = "" ИЛИ Валюты.Код = "" КАК ОшибкаЗаполнения

а вот в выражении поля вместо логического выражения необходимо использовать
Выбор ...Когда.

Это как таблица умножения и если вы забыли ИЛИ НЕ знали, что 2*2 = 4, то
можно, конечно, строчить гневные петиции, мол, если я пишу 2*2 = 5, то пожалуйста сообщите мне почему так нельзя.
60. unichkin 1202 13.06.19 10:29 Сейчас в теме
(58) Это я думаю к техподдержке вопрос) Однако мне как программисту остается жить с тем, что есть.
61. triviumfan 10 13.06.19 15:47 Сейчас в теме
Давно натыкался на сие поведение, ошибке уже 100500 лет.
63. Sashares 18 13.06.19 17:54 Сейчас в теме
(11)
такой документированной возможности не было и нет. Логические операции нельзя использовать в выражениях

Можно с 8.3.6.

(11)
Когда же 1Сники начнут ну хоть немного документацию читать.

Действительно. Когда же начнут?

(1) А вот то что СКД не корректно воспринимает условие, в дополнение к статье стоило бы написать на v8@1c.ru
Прикрепленные файлы:
65. GreenDragon 13.06.19 18:29 Сейчас в теме
(62) Андрей, при всём моём уважении. Комментарий (14)
66. dhurricane 13.06.19 18:33 Сейчас в теме
(63)
Можно с 8.3.6.
Чуть ниже я писал про это. Мне дали ответ, что в документации в отношении логических операций также отсутствует разрешение на использование бинарных операций "И/ИЛИ". Почитал документацию, оспорить не смог, стало быть ответ справедливый.
67. Sashares 18 13.06.19 18:42 Сейчас в теме
(66)
Мне дали ответ, что в документации в отношении логических операций также отсутствует разрешение на использование бинарных операций "И/ИЛИ".

Ох уж эти знатоки. Все то они знают.
https://its.1c.ru/db/v836doc#bookmark:dev:TI000000464
Прикрепленные файлы:
68. GreenDragon 13.06.19 18:42 Сейчас в теме
(62) И ещё. Автор в конце как правильный рецепт предлагает вставлять инструкцию ВЫБОР. В секции ГДЕ. Угу. Дальше он предложит 2 раза в цикле запросы выполнять? Ненуачо, работает жи?

Вопрос - если скормить условие вида: "НЕ (условие1 ИЛИ условие2)"?
69. dhurricane 13.06.19 18:49 Сейчас в теме
(67) Не-не, там в пункте 8.2.17.1 дается определение "логической операции".
70. spacecraft 13.06.19 19:27 Сейчас в теме
(69) а если так?
Прикрепленные файлы:
71. dhurricane 13.06.19 19:36 Сейчас в теме
(70) Я описался комментарием выше. Речь была о "логических выражениях". На Вашем снимке, во-первых, речь про условия отбора, а не поля выборки. А во-вторых, в выделенном Вами тексте явно разделены понятия логического выражения и операторов "И/ИЛИ".
72. spacecraft 13.06.19 20:25 Сейчас в теме
(71) читаем: "В простейшем случае условие является выражением, результат которого имеет значение логического типа. Логические выражения описаны в следующем разделе.

Условия могут определяться и как более сложные логические выражения, где фигурируют простые логические выражения, соединенные между собой с помощью логических операторов И, Или, Не."

Про поля выборки, то там тоже упоминаются логические выражения. Так что актуально и для них.
73. dhurricane 13.06.19 21:00 Сейчас в теме
(72) Извините, но не согласен. Условия - могут определяться и как более сложные логические выражения. Про поля выборки такое не сказано, следовательно определяться как более сложные, чем описано "в следующем разделе", они быть не могут.

Я бы не хотел настаивать на точке зрения, что описанная в статье конструкция некорректна. Сам ею не раз пользовался и был уверен, что такой подход вполне допустим. Но после прочтения комментариев к настоящей статье сколько бы я ни вчитывался в документацию к платформе, я не смог разглядеть тому подтверждение. Опять же, я и не претендую на то, что всегда правильно могу прочитать и понять официальную документацию.
74. spacecraft 13.06.19 21:15 Сейчас в теме
(73) хорошо. Далее:

"Логическим выражением может быть:
● обычное выражение языка запросов, если его результат имеет логический тип"

"Выражения языка запросов описываются следующим набором правил:
<Разыменование поля> |
<Агрегатная функция> |
<Встроенная функция> |
<Операция выбора> |
<Приведение типа>[.<Разыменование поля>] |
<Значение> |
<Выражение> <Бинарная операция> <Выражение> |
<Унарная операция> <Выражение> |
( <Выражение> )
"
75. dhurricane 13.06.19 21:20 Сейчас в теме
(74) А чуть ниже список бинарных операций, среди которых нет "И/ИЛИ":
+ | – | * | /
76. spacecraft 13.06.19 21:24 Сейчас в теме
(75) да, что-то не указано.
Но все равно конструкция вида (<Логическое выражение> И <Логическое выражение>) это тоже логическое выражение.
77. dhurricane 13.06.19 21:29 Сейчас в теме
(76) Конечно согласен. Но к сожалению, лишь на интуитивном уровне. Попробую, наверное, на днях "пошерстить" партнерский форум в поисках ответа, либо задать вопрос самому. Вдруг я не "утону в минусах", да еще и получу разъяснения сотрудников 1С. :)
78. spacecraft 13.06.19 21:29 Сейчас в теме
(75) вот пример бинарной операции ИЛИ
ВЫБРАТЬ
	ПриобретениеТоваровУслуг.Ссылка КАК Ссылка,
	ПриобретениеТоваровУслуг.Проведен
		И НЕ ПриобретениеТоваровУслуг.ПометкаУдаления КАК Актуально
ИЗ
	Документ.ПриобретениеТоваровУслуг КАК ПриобретениеТоваровУслуг


Вполне себе рабочая конструкция.
79. Evil Beaver 6302 13.06.19 21:31 Сейчас в теме
(65) При всем моем уважении, комментарий 14 нелогичен. Плохой запрос или хороший в данном случае роли не играет. Речь о необычном поведении СКД при использовании необычных полей, и только. Система должна иметь понятный набор поведений независимо от качества запроса. В данном случае СКД ведет себя не так, как вела бы с полем "ВЫБОР".

Навскидку, попробуйте провести эксперимент не с ИЛИ, а просто с арифметическим выражением, например
ВЫБРАТЬ ПолеРегистра + 2 КАК НаДваБольше
и условие на это поле наложить.

СКД отработает нормально или нет?
80. dhurricane 13.06.19 21:32 Сейчас в теме
(78) Да, как я уже выше писал, сам использовал подобные конструкции, и осечек до сих пор не наблюдал.

И простите за занудство, но Ваше выражение избыточно: документ не может быть одновременно проведен и помечен на удаление. Если, конечно, кто-то накануне не работал с БД напрямую.
81. Evil Beaver 6302 13.06.19 21:33 Сейчас в теме
(68) ВЫБОР в секции ГДЕ - ни разу не криминал. В типовых - полно такого. Зависит не от оператора ВЫБОР, а от того, что у него внутри. Если поле составного типа - то да, будет трэш.
82. spacecraft 13.06.19 21:33 Сейчас в теме
(80) это всего лишь синтетический код для проверки работы бинарной операции ИЛИ. Ничего более.
83. dhurricane 13.06.19 21:35 Сейчас в теме
(82) Еще раз простите, что не сдержался. :)
84. spacecraft 13.06.19 21:36 Сейчас в теме
(80)
документ не может быть одновременно проведен и помечен на удаление

может :)
"Если документ помечен на удаление, то не допускается выполнение проведения этого документа. Однако допускается наличие движений у документа, помеченного на удаление, так как в 1С:Предприятии 8 понятие проведенности документа не связано жестко с наличием движений."
Хотя это наверно не про флаг "Проведен".
87. GreenDragon 14.06.19 08:13 Сейчас в теме
(81) А индексы используются при такой конструкции?
Я про вот это:
https://its.1c.ru/db/v8std#content:658:hdoc
"Основное условие должно содержать только такие операции, которые позволяют выполнять поиск по индексу"
88. Evil Beaver 6302 14.06.19 14:26 Сейчас в теме
(87) Могут и использоваться. Зависит от того, что конкретно написано в ВЫБОР и от состава индекса.
89. GreenDragon 14.06.19 15:04 Сейчас в теме
(88) У автора в секции ГДЕ используется вполне конкретное выражение. Автор использует оператор ВЫБОР в основном , а не в дополнительном условии Ниже скриншот, так я подозреваю, что вы не смотрели ссылку на стандарт.
Прикрепленные файлы:
90. dhurricane 14.06.19 15:34 Сейчас в теме
(89) Я позволю себе встрять в Ваш диалог, извините. Уж очень интересно, какое альтернативное решение предложили бы Вы?
Оставьте свое сообщение

См. также

Немного про СКД. Характеристики и проверка пустого отчета 70

Статья Программист Нет файла v8::СКД 1cv8.cf Бесплатно (free) Практика программирования

Пример использования характеристик в СКД и программная работа с ними. А также описание проверки результата отчета на заполненность.

10.10.2019    2510    YPermitin    7       

Полезняшки по СКД и построителям. Просто код 40

Статья Программист Нет файла v8 v8::СКД Бесплатно (free) Практика программирования Универсальные функции

Полезные процедуры и функции для работы с построителями и СКД. Просто исходник.

10.10.2019    2673    Yashazz    43       

Две схемы СКД в одном отчете с пользовательскими параметрами 15

Статья Программист Нет файла v8::СКД Россия Бесплатно (free) Практика программирования

Простая реализация разных по типу отчетов в одном. Применение нескольких схем компоновки с корректной передачей пользовательских параметров.

10.10.2019    1466    evgeni-red    6       

Три способа создания одного отчета на СКД 77

Статья Программист Нет файла v8 v8::СКД ERP2 УТ11 КА2 Бесплатно (free) Практика программирования

СКД имеет столько возможностей, что часто приходится выбирать, каким образом строить отчет. Причем выбор не всегда очевидный. В статье рассмотрен пример построения отчета «Отрицательные остатки по товарам на момент проведения расходных документов» тремя разными способами. Приведены «За» и «Против» каждого варианта решения задачи.

08.10.2019    3788    ids79    23       

СКД. Отчеты с картинками 176

Статья Программист Нет файла v8::СКД 1cv8.cf Бесплатно (free) Практика программирования Работа с интерфейсом

Решение популярных кейсов с картинками в отчетах на СКД.

25.09.2019    4685    YPermitin    24       

"Хочу универсально!" [Часть 2] 21

Статья Программист Нет файла v8 Бесплатно (free) Практика программирования

Продолжение истории про то, как начинающий разработчик Вася проходит путь от простой задачки к созданию своего механизма.

25.09.2019    2611    SeiOkami    4       

СКД не только для отчетов 139

Статья Программист Нет файла v8::СКД 1cv8.cf Бесплатно (free) Практика программирования

СКД позволяет получать данные из информационной базы не только для вывода в отчеты, но и для других целей. Пример такого использования рассматривается в настоящей статье.

18.09.2019    7023    YPermitin    31       

Агрегатные функции СКД, о которых мало кто знает 321

Статья Программист Нет файла v8 v8::СКД 1cv8.cf Бесплатно (free) Практика программирования

Пользуетесь ли Вы всеми возможными агрегатными функциями, которые предоставляет система компоновки данных? Если Вы используете только: СУММА, КОЛИЧЕСТВО, МИНИМУМ, МАКСИМУМ, СРЕДНЕЕ, то эта статья для Вас.

05.09.2019    10282    ids79    42       

Обмен данными. Консистентность vs Многопоточность 25

Статья Программист Нет файла v8 1cv8.cf Бесплатно (free) Интеграция

Рассмотрим теоретические основы обмена данными. Какие бывают обмены, какие гарантии при этом даются, зачем идти на компромиссы и что при этом может пойти не так. Есть ли идеальная схема?

03.09.2019    3215    m-rv    1       

Функции СКД: ВычислитьВыражение, ВычислитьВыражениеСГруппировкойМассив 244

Статья Программист Нет файла v8 v8::СКД 1cv8.cf Бесплатно (free) Практика программирования

Подробное описание и использование внутренних функций системы компоновки данных: Вычислить, ВычислитьВыражение, ВычислитьВыражениеСГруппировкойМассив, ВычислитьВыражениеСГруппировкойТаблицаЗначений.

08.08.2019    10686    ids79    24       

Форма отчета СКД 57

Статья Пользователь Нет файла v8::СКД 1cv8.cf Бесплатно (free) Работа с интерфейсом

Описание объекта ОбщиеФормы – ФормаОтчета.

01.08.2019    3368    vasilev2015    5       

СКД - наборы данных и связи между ними, создание собственной иерархии, вложенные отчеты 126

Статья Программист Нет файла v8 v8::СКД 1cv8.cf Бесплатно (free) Практика программирования Разработка

Набор данных объект. Использование в схеме компоновки нескольких наборов данных. Различные варианты связи наборов: объединение, соединение. Использование иерархии в отчетах на СКД. Создание собственной иерархии, иерархия детальных записей. Использование вложенных схем в отчетах на СКД.

26.07.2019    9579    ids79    6       

СКД - использование расширений языка запросов, секция ХАРАКТЕРИСТИКИ 136

Статья Программист Нет файла v8 v8::СКД Бесплатно (free) Инструментарий разработчика Практика программирования Разработка

Автоматическое и не автоматическое заполнение полей компоновки данных. Использование расширений языка запросов для СКД «{…}», секция ВЫБРАТЬ, секция ГДЕ, параметры виртуальных таблиц. Автоматизированное использование дополнительных данных в запросе: секция ХАРАКТЕРИСТИКИ.

17.07.2019    8878    ids79    24       

Пользовательские настройки системы компоновки данных 87

Статья Программист Нет файла v8 v8::СКД 1cv8.cf Бесплатно (free) Практика программирования Работа с интерфейсом

Работа с отчетами в пользовательском режиме, формы отчетов. Понятие пользовательских настроек в отчетах на СКД. Определение состава пользовательских настроек для разделов в целом и для отдельных элементов, для всего отчета и для отдельных группировок. Видимость функциональных опций в отчетах на СКД.

09.07.2019    6434    ids79    0       

"Меньше копипаста!", или как Вася универсальную процедуру писал 170

Статья Программист Стажер Нет файла v8 v8::СКД 1cv8.cf Бесплатно (free) Практика программирования Разработка

Программист Вася разбирает подход создания универсальных методов на примере программного вывода СКД.

04.07.2019    6282    SeiOkami    48       

Работа с настройками системы компоновки данных 98

Статья Программист Нет файла v8 v8::СКД 1cv8.cf Бесплатно (free) Практика программирования Разработка

Варианты отчетов, работа с настройками вариантов: структура группировок, поля отчета, отборы, сортировка, условное оформление, другие настройки, настройки отображения диаграмм.

02.07.2019    9715    ids79    8       

Создание отчетов с помощью СКД - основные понятия и элементы 193

Статья Программист Нет файла v8 v8::СКД Бесплатно (free) Практика программирования Математика и алгоритмы

Основные принципы работы СКД. Понятия схемы компоновки и макета компоновки. Описание основных элементов схемы компоновки: наборы данных, поля, вычисляемые поля, ресурсы, параметры.

25.06.2019    17671    ids79    17       

Еще один способ нестандартной расшифровки отчета. Без использования обработчиков формы. Для ленивых 90

Статья Программист Нет файла v8::СКД 1cv8.cf Бесплатно (free) Практика программирования Разработка

Лень+ СКД. Еще один нестандартный способ расшифровки отчета. Без использования обработчиков формы. Только макет компоновки и модуль отчета. Весь исходный текст в статье.

16.05.2019    5652    tusv    55       

Расшифровка отчета на СКД с детализацией по выбранному полю на основе БСП 91

Статья Программист Нет файла v8 v8::УФ v8::СКД 1cv8.cf Россия Бесплатно (free) Практика программирования Работа с интерфейсом Разработка

В данной статье рассмотрим механизм работы с расшифровкой отчета, созданного при помощи системы компоновки данных, в управляемом приложении. Показывать буду на примере реальной задачи. Условие: использовать имеющиеся в конфигурации механизмы БСП, с минимальными и "правильными" изменениями. Расшифровка должны быть двух видов на каждом поле: 1. Открывать ссылочный объект 2. Открывать новую форму с детализацией табличной части документа. Собственно ради второго пункта и писалась статья, в основном для себя, чтобы не забыть.

14.05.2019    7465    Viktor_Ermakov    6       

Разворачивание таблицы свойств и значений по колонкам через СКД 18

Статья Программист Стажер Нет файла v8 v8::СКД 1cv8.cf Бесплатно (free) Практика программирования Разработка

СКД! Юниоры 1С начинают паниковать, когда слышат эту аббревиатуру. Хороший пример, упрощающий жизнь начинающему разработчику, представлен ниже.

12.05.2019    3598    Eret1k    0       

Выгрузка документа по условию 5

Статья Программист Нет файла v8 Бесплатно (free) Практика программирования Разработка

Что делать, если документы нужно выгружать не все подряд, а по какому-то фильтру: статусу, дате, набору условий... А что если он соответствовал этим условиям, а потом перестал? А если потом опять начал? Такие ситуации заставили попотеть не одного программиста.

25.04.2019    4885    m-rv    2       

Свой макет оформления отчета 33

Статья Программист Нет файла v8 v8::СКД Россия Windows Бесплатно (free) Работа с интерфейсом

Пример создания и оформления и применения своего (пользовательского ) макета оформления для СКД.

24.04.2019    4563    olegpkc    5       

Как настроить правильную техподдержку (helpdesk, service desk на коленке) 38

Статья Программист Бизнес-аналитик Руководитель проекта Нет файла v8 УУ Управление взаимоотношениями с клиентами (СRM) Документооборот и делопроизводство Монитор заказов Учет рабочего времени Бесплатно (free) Управление услугами и сервисом

Эта статья будет полезна для компаний, которые оказывают техническую поддержку своим пользователям - внешним или внутренним клиентам. В статье я расскажу, как оказываем поддержку мы, как выстроили этот бизнес-процесс, что контролируем и на что обращаем внимание в работе. Вы можете использовать наш опыт при построении собственной системы поддержки или обратиться к нам за помощью за построением такой системы, будем рады помочь. В статье формируется основной набор правил, которые мы сформировали при настройке системы для себя, а так же небольшие примеры того, как мы эти правила применяем.

24.04.2019    7260    siddy    0       

Как прикрутить ГУИД к регистру сведений 23

Статья Программист Нет файла v8 Бесплатно (free) Практика программирования Перенос данных из 1C8 в 1C8 Разработка

... и немного теории обмена данными. В частности, разберем боль всех, кто пишет небанальные обмены данными: как набору записей регистра сведений назначить гуид и далее использовать его в обмене для идентификации этого набора.

16.04.2019    7429    m-rv    16       

Как добавить типовую форму для СКД (для начинающих) (1С 8.3, управляемые формы) 9

Статья Программист Стажер Нет файла v8 v8::УФ v8::СКД Бесплатно (free) Инструментарий разработчика Работа с интерфейсом

Кастомизация СКД, нестандартная расшифровка, загрузка параметров и другие действия требуют наличия формы отчета. При создании СКД отчета по умолчанию форма не создается, в большинстве случаев это и не требуется. Однако при ситуациях, перечисленных выше, форму все же нужно создать. Это простая инструкция по созданию такой типовой формы.

25.03.2019    5385    ellavs    9       

"Склеивание" отчетов на СКД 23

Статья Программист Нет файла v8::СКД Бесплатно (free) Практика программирования Разработка

Методика программного объединения данных нескольких отчетов в итоговый сводный. По ссылке опубликован пример на реальных данных и код отчета: https://infostart.ru/public/1017891/

10.03.2019    4568    bivmail    2       

Добавление отчетов в типовые конфигурации 1С 201

Статья Программист Нет файла v8::УФ v8::СКД 1cv8.cf Бесплатно (free) Практика программирования Универсальные функции БСП (Библиотека стандартных подсистем)

Описание различных способов добавления общих и контекстных отчетов в конфигурации 1С, построенные на базе БСП. Основные моменты и нюансы.

07.03.2019    23436    ids79    32       

Программная обработка данных отчета, полученных с помощью запроса, с выводом измененных данных в СКД 29

Статья Программист Нет файла v8 v8::СКД Бесплатно (free) Практика программирования Разработка

В данной публикации рассмотрена возможность программной обработки данных, полученных запросом в отчете, с последующим выводом обработанных данных пользователю с помощью штатных средств СКД.

17.02.2019    4160    srub    10       

Вывод результата компоновки в таблицу и дерево значений 29

Статья Программист Нет файла v8::СКД 1cv8.cf Бесплатно (free) Практика программирования Разработка

Загрузка данных из ТабличногоДокумента в ТаблицуЗначений с использованием внешних наборов данных СКД, для последующей обработки в запросе.

14.02.2019    4040    kasper076    5       

Ещё раз о суммировании группировок в СКД 60

Статья Программист Нет файла v8 v8::СКД 1cv8.cf УУ Производство готовой продукции (работ, услуг) Бесплатно (free) Практика программирования Разработка

Начинающие специалисты, создающие отчеты в СКД, часто сталкиваются с вопросом о суммировании результатов группировок. Столкнувшись с такой задачей, я понял, что часто проблемы возникают от неправильного понимания самой задачи, а также недопонимания действия механизмов платформы. В приведенной ниже статье попробуем с этим разобраться.

11.02.2019    6723    Dioneo    17       

Копирование числовых ячеек из 1С в Excel 26

Статья Системный администратор Программист Нет файла v8 1cv8.cf Windows Бесплатно (free) Загрузка и выгрузка в Excel Администрирование данных 1С

Решение проблемы, когда значения скопированных ячеек из табличных документов 1С в Excel воспринимаются последним как текст, т.е. без дополнительного форматирования значений невозможно применить арифметические операции. Поводом для публикации послужило понимание того, что целое предприятие с более сотней активных пользователей уже на протяжении года мучилось с такой, казалось бы на первый взгляд, тривиальной проблемой. Варианты решения, предложенные специалистами helpdesk, обслуживающими данное предприятие, а так же многочисленные обсуждения на форумах, только подтвердили убеждение в необходимости описания способа, который позволил мне качественно и быстро справиться с ситуацией.

15.01.2019    10553    itriot11    21       

Еще раз о расшифровке для СКД 22

Статья Программист Нет файла v8 v8::СКД Бесплатно (free) Практика программирования

Программное управление расшифровкой для отчета, сформированного с помощью Системы Компоновки Данных.

27.12.2018    5009    scientes    2       

Заголовок с параметром в отчете СКД 30

Статья Программист Нет файла v8 v8::СКД 1cv8.cf Россия Бесплатно (free) Практика программирования

Статья, как сделать заголовок с параметром в отчете СКД.

19.12.2018    5464    user913680    16       

Тот самый Рабочий стол. Возрождение легенды 77

Статья Программист Нет файла v8::УФ v8::СКД 1cv8.cf Бесплатно (free) Работа с интерфейсом

Невероятный инструмент построения адаптивных интерфейсов.

30.11.2018    10002    1c-intelligence    23       

Установка собственных значений полей при программном выводе отчета СКД по имени поля (по принципу "как в макете") 16

Статья Программист Нет файла v8::СКД Бесплатно (free) Практика программирования

При программном выводе отчета на СКД возникает задача заполнить поля своими значениями. Но при поэлементном выводе отчета параметры "обезличены" как П1, П2, П3, ... Как узнать в какое "П" содержит нужное поле и куда устанавливать значение? Статья поможет программистам начинающим освоение СКД и перешедшим на СКД с "макета" ответить на эти вопросы на примере готового решения.

23.11.2018    4995    lmnlmn    0       

Дополнительные реквизиты в типовом отчете и их отсутствие 18

Статья Программист Нет файла v8::СКД 1cv8.cf Бесплатно (free) Практика программирования

Пара Лайфхаков, случайно найденных, когда было лень запускать конфигуратор. Отбор при отсутствии дополнительного реквизита.

18.11.2018    4767    dyuha    0       

Программное заполнение пользовательских параметров и отборов СКД 135

Статья Программист Нет файла v8 v8::СКД 1cv8.cf Бесплатно (free) Практика программирования

Публикация представляет из себя краткие примеры того, как можно заполнять параметры СКД программно так, чтобы все параметры и отборы были доступны в быстрых настройках и в обычных (типовых) настройках параметров и отборов СКД.

13.11.2018    19850    Unk92    18       

Автоматические и управляемые блокировки применительно к типовым конфигурациям 1С 126

Статья Программист Нет файла v8 v8::blocking 1cv8.cf Бесплатно (free) Математика и алгоритмы Практика программирования

Основные принципы работы с режимами автоматических и управляемых блокировок в 1С Предприятие 8. Теория и применение в типовых конфигурациях: БП, УТ, ЕРП

10.11.2018    20941    ids79    40       

Перевод конфигурации на 8.3.13 17

Статья Программист Нет файла v8 v8::СКД 1cv8.cf Россия Бесплатно (free) Практика программирования

Опыт решения проблем. 1. Проблема с СКД преобразованием запроса при отключении режима совместимости:

06.11.2018    5540    serferian    26       

Вертикальные границы отчета в интерфейсе "Такси" 8

Статья Программист Нет файла v8::СКД 1cv8.cf Бесплатно (free) Работа с интерфейсом

После перехода на интерфейс "такси" некоторых "старожилов" покоробило отсутствие вертикальных границ отчетов, кому то не понравиись цвета или размер текста. Как это изменить - в данной статье.

30.10.2018    3666    FesenkoA    9       

Вспомогательные инструкции в коде 1С 104

Статья Программист Нет файла v8 1cv8.cf Бесплатно (free) Практика программирования

Помогаем редактору кода 1С помогать нам писать и анализировать код.

15.10.2018    20552    tormozit    100       

Добавление расшифровки в стандартные и добавленные внешние отчеты со стандартной формой отчета на СКД 72

Статья Программист Нет файла v8::УФ v8::СКД ERP2 УТ11 Россия Бесплатно (free) Универсальные функции

Описан способ добавления расшифровки отчета на СКД как встроенного в систему, так и добавленного внешнего отчета.

27.09.2018    6566    bmk74    2       

Приемы работы с СКД: делаем за 5 минут то, на что у других уйдет час 376

Статья Программист Нет файла v8::СКД Бесплатно (free) Практика программирования

Сергей Наумов делится опытом нестандартного использования системы компоновки данных. Он рассказывает о построении сложных отчетов с помощью функций СКД, описывает преимущества использования компоновки в коде для значительного сокращения строк кода и времени на решение задач, а также рассказывает про отладку компоновки и возможности оптимизации ее работы.

03.09.2018    31144    SergeyN    26       

Из Excel в 1С запросом 33

Статья Программист Нет файла v8 1cv8.cf Бесплатно (free) Загрузка и выгрузка в Excel

... ну, конечно, не прям так типовым языком запросов, а расширенным языком запросов. Речь пойдет о том, как "залить" данные в таблицы 1С и не пилить при этом бесконечного количества наколеночных обработок.

14.08.2018    13597    m-rv    5