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

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

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

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

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

 

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

 

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

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

 

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

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

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

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

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

 

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

 

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

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

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

 

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

 

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

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

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

 

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

 

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

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

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

В чём ошибка?

 

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

 

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

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

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

 

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

 

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

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

 

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

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

 

 

 

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

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

пишем

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

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

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

 

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

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

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

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

Если кто-то из комментаторов хочет написать статью с полным и доскональным разбором документации 1С, то это будет замечательным вкладом в сообщество. Удачи!
4Dimensions; Deslime; MikhailGirshberg; MegasXXX; WellMaster; arxus; and03122008@gmail.com; Student1C; mark_oilbass; elephant_x; alevnev; Bene_Valete; json; Fox-trot; eden_gmail; pm74; milanse; bulpi; Evil Beaver; +19 1 Ответить
Остальные комментарии
Избранное Подписка Сортировка: Древо развёрнутое
Свернуть все
1. VmvLer 10.06.19 18:24 Сейчас в теме
Я не понял где косячит СКД, как-то сумбурно написано.

Условия в тесте статьи сами по себе кривоваты, да и использование
ИЛИ в условиях я видел только в типовом коде современных конфигураций.
Если запрос пишет человек с опытом, то никаких ИЛИ в запросе не будет.
3. SeiOkami 1478 10.06.19 18:36 Сейчас в теме
(1) это простейший пример того, когда СКД неверно накладывает отбор на поле.
Приемлимость использования в запросах приставки ИЛИ - это другой вопрос. Но однозначно СКД должна корректно накладывать отбор, несмотря на религиозные предпочтения разработчика.
Deslime; MegasXXX; A_Max; edgt; Brawler; bulpi; Evil Beaver; mivari; kiruha; Raskad; YLioY; n2m3m; d4rkmesa; Bene_Valete; json; Ashandy; artbear; +17 1 Ответить
5. VmvLer 10.06.19 18:41 Сейчас в теме
(3) СКД накладывает отбор абсолютно корректно, но в рамках той логики которую ввел разработчик.

Если логика иррациональна, то и отбор ей соответствует.
unichkin; ltfriend; +2 4 Ответить
2. VmvLer 10.06.19 18:34 Сейчас в теме
Логически верным будет выражение поля
    ВЫБОР
       КОГДА Валюты.Наименование = ""
            ТОГДА ИСТИНА
       КОГДА Валюты.Код = ""
            ТОГДА ИСТИНА
       ИНАЧЕ ЛОЖЬ
    КОНЕЦ КАК ОшибкаЗаполнения

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

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


ЗЫ: неполадка из ничего, никто так выражение поля не пишет - вы первый у кого я увидел такой нонсенс.
СКД права, что дала по рукам.
reneyr; user811769; Sekator; kirillkr; Dream_kz; +5 2 Ответить
4. SeiOkami 1478 10.06.19 18:37 Сейчас в теме
(2) СКД не дала по рукам, а сломала запрос. Вы пытаетесь похвастаться праведностью своих запросов, а не вникать в суть проблемы.
Deslime; Crazy_Max; MegasXXX; Krio2; elephant_x; edgt; thevist; baton_pk; Brawler; bulpi; Raskad; yku; sergathome; YLioY; n2m3m; d4rkmesa; mivari; pbabincev; Wern03; Ashandy; +20 1 Ответить
6. VmvLer 10.06.19 18:45 Сейчас в теме
(4) Я не нуждаюсь в ваших оценках моего вероисповедания, мы же тут говорим о логике, нет?
10. Mortum 10.06.19 21:29 Сейчас в теме
(2) писать 7 строк вместо одной с точно таким же смыслом. Вам платят за объём кода?
7. Wern03 15 10.06.19 20:12 Сейчас в теме
Причем тут ИЛИ. С тем же успехом можно поставить И и будет та же ошибка. Ошибка интересная, спасибо. возьму на заметку.
8. echo77 1157 10.06.19 20:15 Сейчас в теме
(0)Похоже на баг компоновщика макета СКД. В 1С уже написали?
Brawler; zqzq; +2 Ответить
9. Mortum 10.06.19 21:26 Сейчас в теме
Если не ошибаюсь, то возможность писать такое условие в выбранных полях появилось в платформе не сразу. А в скд просто забыли этот случай обработать.
11. qwinter 623 11.06.19 07:55 Сейчас в теме
(9), (4) такой документированной возможности не было и нет. Логические операции нельзя использовать в выражениях. В документации черным по белому написано:
Во многих конструкциях языка запросов могут использоваться выражения. Выражения языка запросов описываются следующим набором правил:

<Выражение>

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

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

+ | - | * | /

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

- | +
Показать

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

Когда же 1Сники начнут ну хоть немного документацию читать.
GreenDragon; +1 1 Ответить
12. SeiOkami 1478 11.06.19 08:07 Сейчас в теме
(11)
В выражениях к значениям соответствующих типов могут применяться бинарные и унарные операции.


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

P.S.: Эта статья как раз и нужна для того, чтобы показать конструкцию, которую "не надо". Именно потому, что среднестатистический разработчик нигде не видел такого предупреждения, посему может наткнуться на особенность СКД уже в проде.
MegasXXX; Krio2; bulpi; +3 Ответить
13. qwinter 623 11.06.19 08:14 Сейчас в теме
(12)
ни запретов использования конструкции
лицензионное соглашение где запрещено использовать недокументированные возможности, как я понимаю вы тоже не читали?
ни предупреждений
предупреждение, что недокументированное использование функций будет отрабатывать неверно??? Вы сейчас серьезно?????? С таким подходом только к врачу... Очень жаль ваших клиентов.
GreenDragon; +1 1 Ответить
15. SeiOkami 1478 11.06.19 08:18 Сейчас в теме
(13) вы пытаетесь привязаться к бумажкам, я же говорю, что обычному разработчику эта конструкция не покажется чем-то неизведанным и недокументированным. Простые логические операции. И программист может их использовать, не подозревая, что это приведёт к ошибке СКД. Мне, как автору статьи, важно донести эту особенность, а не решать, кто виноват.
Deslime; MegasXXX; bulpi; molodoi1sneg; +4 Ответить
22. qwinter 623 11.06.19 08:57 Сейчас в теме
(15)
обычному разработчику говнокодеру
Называйте вещи своими именами.
user848614; GreenDragon; +2 9 Ответить
24. Evil Beaver 6755 11.06.19 08:57 Сейчас в теме
(11)
Когда же 1Сники начнут ну хоть немного документацию читать

И где в вашей цитате запрет на использование логических операций в выражениях? Логические И/ИЛИ, на минуточку, тоже бинарные операции. Я-то знаю, что в грамматике запросов логические выражения описаны другим нетерминалом, но в вашей цитате ничего про него нет.
25. dhurricane 11.06.19 09:10 Сейчас в теме
(24) Запрета нет. Но приведен список операций, называемых бинарными.
43. qwinter 623 11.06.19 10:23 Сейчас в теме
(24)
И где в вашей цитате запрет на использование логических операций в выражениях?
Нет слов...
Логические И/ИЛИ, на минуточку, тоже бинарные операции.
На минуточку И/ИЛИ с точки зрения языка запросов 1С названы, цитирую, "ключевыми словами". Прочитать про это можно по той же ссылке, что я привел выше.
48. Evil Beaver 6755 11.06.19 16:08 Сейчас в теме
(43) вот что вас так тянет язвить-то, а? Ведь специально для Вас написал, что знаю про то, что в грамматике И и ИЛИ названы отдельно. Нет, все равно вы мне тыркаете, что я ссылку не читал.. Я вообще-то промышленный парсер под язык запросов писал, и почти каждую продукцию грамматики помню безо всяких ссылок на ИТС. Будьте вежливее, пожалуйста.
Deslime; ValentinGushchin; bulpi; +3 Ответить
54. GreenDragon 12.06.19 17:59 Сейчас в теме
(48) Тут просто автор заявляет, что
...Важно понимать, что целью статьи не является классифицировать те или иные конструкции как "документированными" или же нет.
И не решать, что использовать "хорошо", а что "плохо".
А лишь показать пример, как реагирует СКД на данный вид конструкций.


И при этом использует "ИЛИ" в секции условий. На не рекомендуемый вид конструкций СКД реагирует плохо. Вот прям в первом комментарии об этом написано, а потом ещё с десяток подобных комментариев, но автор упоролся упёрся и настаивает, вот все и нервничают, повышая градус неадекватности.
62. Evil Beaver 6755 13.06.19 17:32 Сейчас в теме
(54) Как у вас всех так получается читать объяснения автора и в упор их не понимать...? Почему вы противопоставлете друг-другу тезисы "показать пример, как СКД реагирует" и "нельзя использовать ИЛИ"?? Это же несвязанные между собой вещи. Использование ИЛИ - иногда(!) ведет к плохому плану выполнения запроса. НО - операция ИЛИ это синтаксически корректная конструкция, ее в принципе можно применять.

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

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

Но почему-то все считают, что корень всех бед статьи и ее автора - применение ИЛИ...
Deslime; dominatorwarr; Kinestetik; A_Max; Redokov; +5 Ответить
64. Sashares 18 13.06.19 18:19 Сейчас в теме
(62)
И да, это даже не ошибка СКД, в ее действиях есть логика

Нет в ней логики.
Отбор накладывается по полю, а не по части поля.
Почему СКД не знает о возможности использования логических выражениях в качестве полей, вопросы к Лейбовичу =)
MegasXXX; A_Max; +2 Ответить
65. GreenDragon 13.06.19 18:29 Сейчас в теме
(62) Андрей, при всём моём уважении. Комментарий (14)
79. Evil Beaver 6755 13.06.19 21:31 Сейчас в теме
(65) При всем моем уважении, комментарий 14 нелогичен. Плохой запрос или хороший в данном случае роли не играет. Речь о необычном поведении СКД при использовании необычных полей, и только. Система должна иметь понятный набор поведений независимо от качества запроса. В данном случае СКД ведет себя не так, как вела бы с полем "ВЫБОР".

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

СКД отработает нормально или нет?
85. dhurricane 14.06.19 06:06 Сейчас в теме
(79) Эксперимент показал, что СКД отработает ровно также, как и в примере автора поста, т.е. добавит выражение поля в отбор как есть, без скобок. Но здесь нам на руку играет больший приоритет операции сложения.
86. Evil Beaver 6755 14.06.19 06:38 Сейчас в теме
(85) Спасибо! Что и требовалось доказать - оптимальность или неоптимальность запроса - это не то, что рассказывается в статье.
68. GreenDragon 13.06.19 18:42 Сейчас в теме
(62) И ещё. Автор в конце как правильный рецепт предлагает вставлять инструкцию ВЫБОР. В секции ГДЕ. Угу. Дальше он предложит 2 раза в цикле запросы выполнять? Ненуачо, работает жи?

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

Можно с 8.3.6.

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

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

(1) А вот то что СКД не корректно воспринимает условие, в дополнение к статье стоило бы написать на v8@1c.ru
Прикрепленные файлы:
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
Прикрепленные файлы:
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) вот пример бинарной операции ИЛИ
ВЫБРАТЬ
	ПриобретениеТоваровУслуг.Ссылка КАК Ссылка,
	ПриобретениеТоваровУслуг.Проведен
		И НЕ ПриобретениеТоваровУслуг.ПометкаУдаления КАК Актуально
ИЗ
	Документ.ПриобретениеТоваровУслуг КАК ПриобретениеТоваровУслуг


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

И простите за занудство, но Ваше выражение избыточно: документ не может быть одновременно проведен и помечен на удаление. Если, конечно, кто-то накануне не работал с БД напрямую.
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 понятие проведенности документа не связано жестко с наличием движений."
Хотя это наверно не про флаг "Проведен".
14. Lucifer93 76 11.06.19 08:18 Сейчас в теме
Автор, тут дело в том, что Вы показываете пример плохого кода и говорите, что СКД его неправильно обработала. Для того, чтобы демонстрировать ошибку СКД покажите пример хорошего кода, который СКД обработает неправильно и не будет никаких вопросов к Вам. Ждем от Вас пример хорошего кода, который СКД отработает неправильно.
GreenDragon; jONES1979; +2 1 Ответить
16. SeiOkami 1478 11.06.19 08:20 Сейчас в теме
(14) независимо от оптимизированности запроса, СКД совершает ошибку. Читатель о ней теперь ознакомлен, и лишний раз подумает, прежде чем использовать конструкцию. У меня нет цели "заваливать" СКД.
Evil Beaver; +1 Ответить
17. Lucifer93 76 11.06.19 08:22 Сейчас в теме
(16) "независимо от оптимизированности запроса" Вот эта фраза очень интересная у Вас получается. То есть давайте писать кривые запросы, а потом жаловаться, что программа не так их понимает?!
GreenDragon; +1 1 Ответить
18. SeiOkami 1478 11.06.19 08:24 Сейчас в теме
(17) если писать неоптимальные запросы, и ожидать, что будет работать неоптимально
Но здесь СКД совершает грубейшую ошибку. И это уж точно никто не ожидает.
edgt; bulpi; +2 Ответить
19. Lucifer93 76 11.06.19 08:26 Сейчас в теме
(17) Сейчас будет идеализировано, но по сути Вы говорите: давайте я в запросе вместо "ВЫБРАТЬ" буду писать "ХОЧУ ПОЛУЧИТЬ ДАННЫЕ" и пусть программа меня поймет, а если не поймет - она виновата.




(18)
В данном случае, если учитывать стандарты разработки на 1с, то ошибку совершаете только Вы. И то, что Вы наткнулись на такую ошибку является следствием написанием Вами кривого запроса. Не вижу смысла с Вами продолжать беседу. Если Вы пишите криво не нужно ожидать, что программа отработает корректно
20. SeiOkami 1478 11.06.19 08:30 Сейчас в теме
(19)вы приводите странный пример. Запрос вполне ясный. Возможно, он не так оптимизирован (хотя это максимально спорное утверждение). Но он верен и очевиден. И в статье расписано, как должен накладываться отбор. Более того, СКД сама его так и накладывает, когда используются вычисляемые поля. Но с тем же самым полем косячит, когда он в запросе. Очевидно, что это ошибка. И очевидно, что это нужно знать при разработке. Иначе можно напороться. И уже не важно будет, кто здесь виноват
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 Ответить
42. SlavaKron 11.06.19 10:23 Сейчас в теме
(23) Судя по всему, 1С автоматически переделывает логические выражения в секции ВЫБРАТЬ в CASE структуру, потому что, например, в T-SQL нельзя использовать булево в выборке – оно не является типом данных.
44. qwinter 623 11.06.19 10:34 Сейчас в теме
(23)
Так что для меня теперь это открытый вопрос. Что это: ошибка в документации или неверная интерпретация нововведений в платформе?
Нет никакого противоречия, логическое выражение это
В языке запросов в операциях выбора и в условиях отборов используются логические выражения.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Разрешения на использования логических операторов языка запросов в выражениях там нет.
21. milanse 35 11.06.19 08:39 Сейчас в теме
Спасибо, хорошее замечание к работе СКД.
Те кто говорят про или в условиях, вообще ничего не понимают?
Krio2; bulpi; sergathome; +3 Ответить
26. Lucifer93 76 11.06.19 09:18 Сейчас в теме
(21) Боюсь, что Вам нужно перечитать правила формирования запросов. Они отлично описаны в Настольная книга 1С:Эксперта по технологическим вопросам. 2 издание и там понятным языком объясняется почему использование ИЛИ в запросах является плохим.
GreenDragon; +1 Ответить
29. d4rkmesa 11.06.19 09:39 Сейчас в теме
(26) Хватит бредить уже.
Krio2; sergathome; +2 Ответить
37. Lucifer93 76 11.06.19 10:07 Сейчас в теме
(29)Отличный комментарий и ,главное, по делу и аргументированный.
GreenDragon; +1 Ответить
31. milanse 35 11.06.19 09:47 Сейчас в теме
(26) Не надо бояться, надо делать. Второе издание не читал, первое лежало на краю стола, не успел прочитать, кто-то упер. Буду благодарен за скриншот выделенного жирным шрифтом обведенного в рамочку предупреждения "НИКОГДА, СЛЫШИТЕ НИКОГДА НЕ ИСПОЛЬЗУЙТЕ СЛОВО ИЛИ В ЗАПРОСАХ".
GreenDragon; sergathome; +2 Ответить
36. Lucifer93 76 11.06.19 10:07 Сейчас в теме
(31) "В секции ГДЕ логическое ИЛИ использовать тоже не рекомендуется. Следует разбить один запрос на несколько и объединить результаты (при возникновении проблем на данном участке кода). Пояснения — в этой же главе ниже." Вот цитата, которая сохранена у нас для разработчиков, чтобы они не делали глупых ошибок.
GreenDragon; +1 Ответить
38. SeiOkami 1478 11.06.19 10:10 Сейчас в теме
(36) откройте любую типовую и тыкайте пальцем в каждое использование ИЛИ в секции ГДЕ.
Можно быть "сферическим идеальным программистом в вакууме", а можно с умом использовать все возможности языка.
Deslime; bulpi; +2 Ответить
40. Lucifer93 76 11.06.19 10:15 Сейчас в теме
(38) Так в данном случае Вы не используете их с умом. Вы просто пишите ерунду, которую Вам уже правили в постах выше. Я изначально попросил Вас написать качественно и найти ошибку. Никто не говорит, что СКД святая, я говорю Вам напишите запрос ПРАВИЛЬНО и тогда ошибка исчезнет. Вся статья, по сути, не будет иметь никакого смысла, если разработчик будь следовать элементарным правилам написания запроса(на данном этапе). Сделайте нормальный запрос, повторите ошибку и не будет к Вам вопросов.
Возможности языка нужно использовать правильно, а не как Вам захотелось. Вы пытаетесь отверткой забить гвоздь
41. VmvLer 11.06.19 10:16 Сейчас в теме
(38) Дело не в ИЛИ или И.

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

хватит бредить(с)
53. GreenDragon 12.06.19 17:45 Сейчас в теме
(38) А, так у вас эталоном являются типовые? Офигеть! Мы тут им баги репортим, а оно вон как! Вам написал уже не один человек про крайнюю нежелательность использования логического оператора "ИЛИ" в секции условий.
27. d4rkmesa 11.06.19 09:36 Сейчас в теме
Вот хохма, набежали свидетели "святого СКД". Сам не использую подобные конструкции, но тут очевидно, что СКД работает не совсем ожидаемым образом, скажем так - не самым очевидным. Впрочем, в консоли СКД результирующий запрос смотрится и исправить можно довольно быстро.
mivari; sergathome; +2 Ответить
32. sergathome 11.06.19 09:49 Сейчас в теме
(27) тоже поржал. логика у ребят потрясающая - есть куча дерьма на лестнице в подъезде, на чердаке которого написано, что она там лежит и по лестнице не нужно ходить, хотя она есть... шиза, да и только. угага
arxus; bulpi; +2 Ответить
28. toypaul 68 11.06.19 09:36 Сейчас в теме
Все каменты про - "пиши запросы правильно", "читай документацию" вроде как и верные, но к сути вопроса не имеют никакого отношения. суть вопроса в том, что в платформе косяк. нельзя писать ИЛИ - не давай писать. если даешь писать, обрабатывай правильно.

книга про эксперта в ДАННОМ КОНКРЕТНОМ СЛУЧАЕ вообще не к месту упомянута. давайте будем везде запрещать писать ИЛИ - даже в справочниках где пара десятков записей. бред какой-то.
Deslime; arxus; zqzq; bulpi; mivari; CyberCerber; wowik; cdrw3; sergathome; +9 Ответить
33. sergathome 11.06.19 09:51 Сейчас в теме
(28) это типичный ФМГ от долгого чтения 1Сной "документации". Простите, но без кавычек оно не работает. Тут целая секта таких фимозников обитает...
30. srub 62 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 Ответить
35. unichkin 1262 11.06.19 10:05 Сейчас в теме
(30) не понял, а зачем группировка и выражение isNULL в первых двух запросах? Это ж оборотные таблицы. В выходном запросе почему условие в секции где, а не в соединении?
Почему-то никто не вспоминает про расширение языка запросов для системы компоновки данных, а ведь именно им управляются отборы.
Запрос из статьи можно (нужно) описать так:
ВЫБРАТЬ
Валюты.Ссылка КАК Ссылка,
Валюты.Наименование КАК Наименование,
Валюты.Код КАК Код,
Валюты.Наименование = ""
ИЛИ Валюты.Код = "" КАК ОшибкаЗаполнения
ИЗ
Справочник.Валюты КАК Валюты
{ГДЕ
(Валюты.Наименование = ""
ИЛИ Валюты.Код = "") КАК ОшибкаЗаполнения}

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

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

___
Хочется здесь добавить - СКД классная штука, но как пользователю нужно понимать что программист лишь автоматизирует его труд, а не создает волшебные кнопки, так и программистам надо понимать что есть инструмент со своей спецификой, который как и многие другие инструменты не умеет вообще ВСЕ.
kirillkr; sergathome; +2 Ответить
39. sergathome 11.06.19 10:13 Сейчас в теме
(35) Первое реальное возражение. Да, ***, да, язык СКД ОТЛИЧАЕТСЯ от языка запросов ! В "документации " это звучит абсолютно невнятно и неудивительно, что возникают секты на этой почве. бгы
50. surikateg 11.06.19 20:16 Сейчас в теме
(35)
В СП написано:

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

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

В (50) вы утверждаете что это из СП. ctrl + shift + F1, если что. Полного - подозреваю, что ни в каких. Просто с опытом приходит понимание того, что такое СКД, и как с ним жить. И можно хоть 1000 статей написать на тему "вот так не работает!!", я как-то более практично привык смотреть на эту проблему. Хотя тоже много глючков переловил. Мир не идеален) Максимум что можно сделать - попробовать зарегистрировать багу через поддержку.
По поводу синтаксиса - я бы вот не разделял понятия "синтаксис" и "оптимальность". Я бы объединил: все надо делать максимально просто, быстро и понятно. Попробуйте переписать ваш запрос, и посмотрите поймет ли его СКД после этого. Я понятия не имею чего там у платформы в мозгах, но подозреваю что писатели парсеров ориентировались на корректный входящий запрос, а не на то что их будут ловить подводными камнями.
58. surikateg 13.06.19 09:11 Сейчас в теме
(56) В 1с и так язык запросов типа "sql" обрезан по самое не балуйся и давно уже не расширяется, в чем сложность написать нормальный парсер для СКД?
60. unichkin 1262 13.06.19 10:29 Сейчас в теме
(58) Это я думаю к техподдержке вопрос) Однако мне как программисту остается жить с тем, что есть.
34. VmvLer 11.06.19 10:05 Сейчас в теме
Дело не в ИЛИ или И.

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

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

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

Если кто-то из комментаторов хочет написать статью с полным и доскональным разбором документации 1С, то это будет замечательным вкладом в сообщество. Удачи!
4Dimensions; Deslime; MikhailGirshberg; MegasXXX; WellMaster; arxus; and03122008@gmail.com; Student1C; mark_oilbass; elephant_x; alevnev; Bene_Valete; json; Fox-trot; eden_gmail; pm74; milanse; bulpi; Evil Beaver; +19 1 Ответить
95. rwn_driver 8 12.02.20 10:22 Сейчас в теме
(45) Хороший пример, но все-таки с точки зрения математической логики проще было бы обратное условие:
ВЫБОР КОГДА Валюты.Наименование <> "" И Валюты.Код <> "" ТОГДА ЛОЖЬ ИНАЧЕ ИСТИНА
46. milanse 35 11.06.19 14:31 Сейчас в теме
Уже предлагали зарегистрировать баг ?
47. pm74 169 11.06.19 14:31 Сейчас в теме
Валюты.Наименование = "" ИЛИ Валюты.Код = ""
= НЕ (НЕ Список.Наименование = "" И НЕ Список.Код = "")
49. bulpi 174 11.06.19 19:25 Сейчас в теме
Критики этой статьи до боли напоминают мне работников техподдержки 1с (не только 1с, но мы сейчас здесь). Ты , значит, поработал для них бесплатным бета-тестером, нашел очевиднейший баг, не пожалел времени, задокументировал, пример написал, разжевал как для идиотов, написал туда ... ИИИИ.... тебе отвечают, что ты сам дурак и читай документацию. Я вот так и бросил писАть в техподдержку.
Люди, вы, блин, издеваетесь ? Если НЕЛЬЗЯ такое писАть в СКД, то нужно об этом выдавать диагностику на этапе перехода от текста запроса к полям. "Недопустимое логическое выражение в условии ..." , как то так.
arxus; zqzq; +2 Ответить
59. VmvLer 13.06.19 09:43 Сейчас в теме
(49) (51)... вброшу еще на вентилятор

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

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

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

Это как таблица умножения и если вы забыли ИЛИ НЕ знали, что 2*2 = 4, то
можно, конечно, строчить гневные петиции, мол, если я пишу 2*2 = 5, то пожалуйста сообщите мне почему так нельзя.
51. milanse 35 11.06.19 21:12 Сейчас в теме
Какой ужас, что же мы видим в центре внимания на главной странице инофостарта https://infostart.ru/public/1074066/ в перовом примере кода используется условие "или", а во втором выражение, которое может поломаться в СКД. Куда же смотрят тру программисты 1с, которые изучили настольные книги экспертов по технологическим вопросам ? Не время спать, 1с в опасности
edgt; eden_gmail; SeiOkami; +3 Ответить
57. alex5550 12.06.19 23:58 Сейчас в теме
Если НЕЛЬЗЯ такое писАть в СКД, то нужно об этом выдавать диагностику

Золотые слова...
61. triviumfan 18 13.06.19 15:47 Сейчас в теме
Давно натыкался на сие поведение, ошибке уже 100500 лет.
91. Sashares 18 25.10.19 16:07 Сейчас в теме
(0)Для информации.
В 8.3.16 исправили.
92. Deslime 11.12.19 11:07 Сейчас в теме
Поржала с комментов - прям Священная Война Свидетелей Нуралиева ))
Спасибо автору за статью - интересное замечание к работе СКД и пример хороший так как максимально очевидно показывает данный нюанс
93. SlavaKron 16.12.19 12:24 Сейчас в теме
К черту скд. Товарщи, пишите кастомные отчеты.
94. win.s.1 21.01.20 22:22 Сейчас в теме
Столкнулся с "оптимизатором СКД"

Есть две временные таблицы.
Все таблицы имеют структуру Товар, Хакрактеристика, Количество, КоличествоРезерв
Обе заполняются из одного регистра с разными отборами.

В итоговом запросе - идет объединение двух запросов.
Первый запрос - описание
Второй запрос - это первая временная таблица
Третий запрос - это вторая временная таблица

По факт - из второй таблицы убирают Количество и КоличествоРезерв
Оставьте свое сообщение

См. также

Онлайн-курс "1С:Специалист-консультант по "1С:Зарплата и управление персоналом" 21-24 июля 2020 года Промо

Решение задач на 1С:Специалист Бухгалтерский учет Зарплата Управление персоналом (HRM) v8 v8::СПР ЗУП3.x БУ УУ Бесплатно (free)

Спрос на специалистов по внедрению "1С:Зарплата и управление персоналом 8" с каждым днем растет. Станьте одним из востребованных специалистов - пройдите обучение по актуальной редакции 1C:ЗУП 3.1.

13200 руб.

14.06.2018    11224    4    4    

Вывод дерева в табличный документ СКД

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

Вывод содержимого элемента формы "ДанныеФормыДерево" в табличный документ средствами СКД.

09.07.2020    944    0    Yashazz    3    

Доработка печатных форм, построенных на отчетах (СКД)

Печатные формы документов v8 v8::СКД ЗУП3.x Бесплатно (free)

Особенности доработки печатных форм, построенных на отчетах, в ЗУП 3.1.

19.06.2020    1547    0    niko11s    14    

Роль "Остатки" поля набора данных СКД в отчете и в расшифровке

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

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

24.05.2020    2203    0    kasper076    16    

3 онлайн-курса по 1С-программированию: обмен данными, расчетные задачи и бухгалтерские задачи с 12 мая по 8 июля 2020 г. Промо

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

Пакет из 3-х курсов по 1С-программированию. Основная цель - сформировать у слушателей практические навыки, связанные с реализацией задач обмена для прикладных решений, работающих на платформе “1С:Предприятие”, а также с разработкой прикладных решений, предназначенных для автоматизации расчета заработной платы и задач бухгалтерского учета.

22.04.2020    4654    23    Infostart    2    

Макет оформления в отчете с несколькими СКД

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

Как заставить работать макет оформления в отчёте с несколькими СКД.

14.05.2020    1754    0    vendim    1    

СКД. Использование Менеджера временных таблиц в системе компоновки

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

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

29.04.2020    4714    0    the1    28    

Переопределение настроек отчета на СКД. 1С: БСП

БСП (Библиотека стандартных подсистем) v8::СКД ERP2 Россия Бесплатно (free)

Изменение настроек СКД отчета без доработки модулей БСП

24.04.2020    2478    0    klimsrv    6    

Подсистема "Инструменты разработчика" v5.42 Промо

Инструментарий разработчика v8 1cv8.cf Бесплатно (free)

Интегрированный набор инструментов разработчика: - консоль кода - консоль запросов - консоль построителя отчетов - консоль компоновки данных - консоль заданий - конструктор запроса - справочник алгоритмов - исследователь объектов - интерфейсная панель - настройка журнала регистрации - анализ журнала регистрации - настройка техножурнала - анализ техножурнала - подбор и обработка объектов - редактор объекта БД - редактор констант - редактор параметров сеанса - редактор изменений по плану обмена - редактор пользователей - редактор предопределенных - редактор хранилищ настроек - динамический список - поиск дублей и замена ссылок - контекстная подсказка - синтакс-помощник - поиск битых ссылок - поиск ссылок на объект - структура хранения БД - удаление объектов с контролем ссылок - и прочее

23.09.2007    482320    4340    tormozit    2678    

Ограничения полей, или как обмануть СКД?

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

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

15.04.2020    5096    0    SeiOkami    38    

Работа с запросами в 1С СКД. Отладка СКД

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

В предыдущем разделе мы изучали с вами особенности работы с запросами в СКД. Для изучения (отладки) работы различных схем компоновки данных я использовал консоль компоновки данных.

15.04.2020    2705    0    ProfessionStore    3    

Работа с запросами в 1С СКД. Особенности работы запросов в СКД. Часть 3

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

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

13.04.2020    4459    0    ProfessionStore    4    

Как я начал администрировать сервер 1С: Предприятие 8.3 с телефона Промо

Администрирование данных 1С Мобильная разработка v8 Бесплатно (free)

Развитие инструментов управления кластером серверов 1С:Предприятие 8.3.

14.04.2017    59112    0    user700211_a.straltsou    27    

СКД: Прозрачная обработка результата

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

В статье дан ответ на вопрос о том, как "прозрачно" обработать результат компоновки (да хотя бы картинки вставить после того, как отчет сформирован).

13.04.2020    3389    0    starik-2005    16    

Работа с запросами в 1С СКД. Особенности работы запросов в СКД. Часть 2

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

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

12.04.2020    3391    0    ProfessionStore    11    

Работа с запросами в 1С СКД. Особенности работы запросов в СКД. Часть 1

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

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

11.04.2020    3947    0    ProfessionStore    8    

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

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

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

15.01.2019    21662    0    itriot11    23    

Работа с запросами в 1С СКД. Язык выражений СКД и подмена запросов

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

Хотя эта статья называется «Работа с запросами в 1С СКД», нельзя не упомянуть про язык выражений СКД. Да – у системы компоновки данных есть свой язык! Это не язык платформы 1С, это не язык запросов. Это еще один язык, который используется 1С в СКД для обработки полученного набора (ов) данных.

11.04.2020    4600    0    ProfessionStore    23    

Работа с запросами в 1С СКД. Примеры использования расширения языка запросов СКД

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

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

10.04.2020    4452    0    ProfessionStore    4    

Запросы 1С СКД. Возможности и ограничения

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

В этом цикле статей мы рассмотрим особенности работы системы компоновки данных с запросами в 1С.

10.04.2020    5548    0    ProfessionStore    14    

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

Интеграция v8 1cv8.cf Бесплатно (free)

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

03.09.2019    11345    0    m-rv    1    

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

Прочие инструменты разработчика Консоль запросов v8::УФ v8::Запросы v8::СКД Бесплатно (free)

Консоль запросов и СКД – один из наиболее часто используемых программистом инструментов. Как с его помощью можно упростить разработку, в своем докладе на конференции Infostart Event 2019 Inception рассказал Евгений Люлюк, ведущий программист компании GLT.

06.04.2020    5749    0    Evg-Lylyk    0    

COVID-19. Динамика эпидемии

WEB v8 v8::СКД 1cv8.cf Бесплатно (free)

Весной 2020 практически все ждут, «когда же это закончится», когда эпидемия пойдет на спад. Специалисты призывают «сгладить кривую». Как понять, в какой точке мы сейчас? Данные университета Джонса Хопкинса в любой 1С.

01.04.2020    2942    0    Alejandro_V    6    

Вложенные СКД

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

Возможности, нюансы, заметки.

26.03.2020    4889    0    Yashazz    19    

Использование программных перечислений, ч.1: строковые константы Промо

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

Часто ли у вас возникает необходимость в коде выполнять сравнение на строку?

10.12.2016    35517    0    unichkin    45    

СКД - одна из проблем связи Наборов данных

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

Официальная информация: 1. В схеме компоновки данных нет указания типа связи. Все связи считаются ЛЕВЫМИ внешними соединениями. 2. Если для вложенного набора данных указано условие фильтра, тогда связь вложенного набора данных с родительским набором данных считается ВНУТРЕННЕЙ. Или как получить все результаты основного набора при отборе в зависимом.

03.03.2020    4119    0    BelikovSA    9    

Получение значений всех полей в иерархии структуры отчета

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

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

28.02.2020    1845    0    real_MaxA    1    

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

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

Речь пойдет о флаге «Автозаполнение» в наборе данных Запрос Системы компоновки данных (СКД). Сразу хочу отметить, что флаг «Автозаполнение» доступен только в наборе данных - Запрос.

26.02.2020    5280    0    Neti    41    

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

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

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

15.10.2018    27966    0    tormozit    100    

Программная работа с настройками СКД

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

Нюансы программной работы с настройками системы компоновки данных в отчетах и динамических списках. Обзор всех видов настроек компоновки. Что в каких случаях правильно применять. В качестве примера рассмотрена работа с отборами и группировками.

27.01.2020    19204    0    ids79    26    

[СКД] Программное создание схемы компоновки данных

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

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

15.01.2020    18541    0    John_d    22    

СКД. Шаг 3. Используем макеты для оформления отчета

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

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

13.01.2020    11563    0    aximo    13    

Оформление и рефакторинг сложных логических выражений Промо

Практика программирования v8 Россия Бесплатно (free)

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

20.09.2012    75433    0    tormozit    129    

[СКД] Вывод картинки в результат любого отчета на СКД

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

Если у вас в справочнике Номенклатура (или другом справочнике) заполнена картинка, то ее можно легко вывести для наглядности отчета.

09.12.2019    8012    1    John_d    16    

СКД. Лайфхак №2. Собираем отчет еще удобнее

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

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

20.11.2019    9414    0    aximo    15    

Некоторые редко используемые возможности СКД

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

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

11.11.2019    10607    0    kser87    39    

Запись значения в поле ввода/формы со срабатыванием события ПриИзменении Промо

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

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

11.07.2007    46342    0    tormozit    38    

Быстрое создание наполненных коллекций

Практика программирования Универсальные функции v8 1cv8.cf Бесплатно (free)

Разберем самые частые способы создания коллекции, значения которой известны заранее. И сравним скорость их выполнения.

28.10.2019    6690    0    SeiOkami    66    

Лайфхак работы с СКД. Собираем отчет.

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

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

25.10.2019    17802    0    aximo    37    

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

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

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

10.10.2019    10391    0    YPermitin    7    

Как сделать из &НаКлиентеНаСервереБезКонтекста почти &НаКлиентеНаСервере Промо

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

Как сделать метод формы, доступный на клиенте и на сервере одновременно, и сохранить при этом удобство разработки

10.09.2017    42365    0    tormozit    74    

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

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

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

10.10.2019    9050    0    Yashazz    45    

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

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

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

10.10.2019    7890    0    evgeni-red    8    

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

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

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

08.10.2019    13113    0    ids79    26    

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

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

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

25.04.2019    15418    0    m-rv    2    

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

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

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

25.09.2019    17964    0    YPermitin    35    

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

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

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

25.09.2019    4989    0    SeiOkami    4    

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

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

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

18.09.2019    17812    0    YPermitin    36    

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

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

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

24.04.2019    16120    0    siddy    0    

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

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

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

05.09.2019    41953    0    ids79    54    

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

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

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

08.08.2019    65443    0    ids79    40