8.х Нюансы работы СКД

Тема в разделе "Система компоновки данных (СКД)", создана пользователем chihpyh, 16 дек 2016.

  1. TopicStarter Overlay
    chihpyh
    Offline

    chihpyh

    Регистрация:
    5 дек 2011
    Сообщения:
    6
    Симпатии:
    0
    Баллы:
    1
    Здравствуйте. Может быть кто-то сталкивался с похожей задачей?
    Есть простенький запрос, в котором данные выбираются из регистра. Выбираются они с несколькими... ну пусть даже с двумя группировками. Например Заказ и Регистратор. Еще из регистра берутся ресурсы. Пусть это будет Сумма1 и Сумма2.
    Хочется сделать, на уровне группировки Заказ проверку на простейшее условие: если Сумма1 + Сумма2 = 0 (одна может быть отрицательной), то эту строку не выводить. Однако, СКД все проверки, видимо, делает на нижнем уровне группировки. Т.е. получается картинка вида:
    Заказ1 Сумма1 = 100 Сумма2 = -100
    Регистратор1 Сумма1 = 100 Сумма2 = 0
    Регистратор2 Сумма1 = 0 Сумма2 = -100
    Причем группировка Регистратор в отчет не выводится. Если вдруг потребуется ее вывести, то это условие уже не важно. Пробовал делать добавить новое поле через вычисляемые поля (Сумма3 = Сумма1 + Сумма2), добавить по нему отбор (Сумма3 Не равно 0) но не получил результата. Т.е. на уровне Заказ показывает это новое поле, показывает, что оно пустое, но все равно выводит эту строку, даже если в настройках принудительно поставить отбор по новому полю.
    Может быть есть какой-то способ перехватить вывод в отчет и удалять строку уже на этапе вывода?
  2. skv_79
    Offline

    skv_79 Опытный в 1С

    Регистрация:
    10 июл 2013
    Сообщения:
    379
    Симпатии:
    6
    Баллы:
    29
    Нижний уровень группировки это детальные записи вы так называете? Вам надо не на уровне вычисляемых полей накладывать отбор а на уровне группировки. Это вкладка ресурсы, столбец выражение. Там общая сумма по заказу рассчитывается.
  3. nbIpKuH_BaH9I
    Offline

    nbIpKuH_BaH9I Модераторы Команда форума Модератор

    Регистрация:
    16 сен 2009
    Сообщения:
    8.120
    Симпатии:
    550
    Баллы:
    204
    Не на низшем, а наоборот на высшем. Накладывать условие нужно, как Вам уже подсказали, на самой группировке. Если конечно она ус вас есть. но, если условие отработает, то и детальных записей у вас не будет.
  4. TopicStarter Overlay
    chihpyh
    Offline

    chihpyh

    Регистрация:
    5 дек 2011
    Сообщения:
    6
    Симпатии:
    0
    Баллы:
    1
    Что-то не догоняю... На вкладке Ресурсы, столбец выражение у меня стоит Сумма(ВычисляемоеПоле). Где там отбор наложить? Попробовал на вкладке Настройки - Отбор - ИмяГруппировки отбор поставить. Тоже ничего не изменилось.
  5. skv_79
    Offline

    skv_79 Опытный в 1С

    Регистрация:
    10 июл 2013
    Сообщения:
    379
    Симпатии:
    6
    Баллы:
    29
    На вкладке настройки выделяешь нужную группировку в структуре отчета, потом переключаешься с отчета на группировку в настройках, далее на вкладке отбор указываешь условие.
  6. Draco
    Offline

    Draco Модераторы Команда форума Модератор

    Регистрация:
    28 окт 2009
    Сообщения:
    13.722
    Симпатии:
    961
    Баллы:
    204
    Можно сделать проще через вычисляемое поле
    и выражение

    ВычислитьВыражение(Выражение, Группировка, ТипРасчета, Начало, Конец, Сортировка, ИерархическаяСортировка, ОбработкаОдинаковыхЗначенийПорядка)

    Параметры:

    • Выражение. Тип Строка. Содержит вычисляемое выражение;
    • Группировка. Тип Строка. Содержит имя группировки, в контексте которой необходимо вычислить выражение. В случае если в качестве имени группировки используется пустая строка, вычисление будет выполнено в контексте текущей группировки. В случае если в качестве имени группировки будет использована строка ОбщийИтог, вычисление будет выполнено в контексте общего итога. В остальных случаях вычисление будет выполняться в контексте родительской группировки с таким именем. Например:
    Сумма(Продажи.СуммаОборот) / Вычислить("Сумма(Продажи.СуммаОборот)", "ОбщийИтог")


    Ну т.е в вашем случае будет что то вроде
    ВычислитьВыражение("Сумма1","Заказ")-ВычислитьВыражение("Сумма2","Заказ")​
    --- Объединение сообщений, 19 дек 2016 ---
    Вернее даже скорее всего вот так
    ВычислитьВыражение("Сумма(Сумма1)","Заказ")-ВычислитьВыражение("Сумма(Сумма2)","Заказ")
    Последнее редактирование: 19 дек 2016
  7. skv_79
    Offline

    skv_79 Опытный в 1С

    Регистрация:
    10 июл 2013
    Сообщения:
    379
    Симпатии:
    6
    Баллы:
    29
    Очень умно, запомню на будущее. ВычислитьВыражение спасает часто :)
  8. Draco
    Offline

    Draco Модераторы Команда форума Модератор

    Регистрация:
    28 окт 2009
    Сообщения:
    13.722
    Симпатии:
    961
    Баллы:
    204
    Ну а вообще что бы правильно работало на всех группировках то делаете ресурс Сумма3=Сумма1-Сумма2, но когда на вкладке ресур добавляете то там у вас будет
    Сумма(Сумма3), этонадо заменить на Сумма(Сумма1)-Сумма(Сумма2)
  9. TopicStarter Overlay
    chihpyh
    Offline

    chihpyh

    Регистрация:
    5 дек 2011
    Сообщения:
    6
    Симпатии:
    0
    Баллы:
    1
    Не помогло. Сделал и
    ВычислитьВыражение("Сумма(Сумма1)","Заказ")-ВычислитьВыражение("Сумма(Сумма2)","Заказ")
    и
    На вкладке настройки выделяешь нужную группировку в структуре отчета, потом переключаешься с отчета на группировку в настройках, далее на вкладке отбор указываешь условие.
    и даже
    Ну а вообще что бы правильно работало на всех группировках то делаете ресурс Сумма3=Сумма1-Сумма2, но когда на вкладке ресур добавляете то там у вас будет
    Сумма(Сумма3), этонадо заменить на Сумма(Сумма1)-Сумма(Сумма2)
    Тоже попробовал. Все в той же поре осталось.
  10. skv_79
    Offline

    skv_79 Опытный в 1С

    Регистрация:
    10 июл 2013
    Сообщения:
    379
    Симпатии:
    6
    Баллы:
    29
    Должно отрабатывать, значит что-то не так делаете. Лучше покажите более наглядно.
  11. TopicStarter Overlay
    chihpyh
    Offline

    chihpyh

    Регистрация:
    5 дек 2011
    Сообщения:
    6
    Симпатии:
    0
    Баллы:
    1
    Вот, скринов наделал.

    Вложения:

    • 3.JPG
      3.JPG
      Размер файла:
      74,4 КБ
      Просмотров:
      5
    • 1.JPG
      1.JPG
      Размер файла:
      40,5 КБ
      Просмотров:
      6
    • 2.JPG
      2.JPG
      Размер файла:
      55,8 КБ
      Просмотров:
      5
  12. skv_79
    Offline

    skv_79 Опытный в 1С

    Регистрация:
    10 июл 2013
    Сообщения:
    379
    Симпатии:
    6
    Баллы:
    29
    Попробуйте по Поле1 на вкладке Ресурсы указать агрегатную функцию Сумма().
  13. Draco
    Offline

    Draco Модераторы Команда форума Модератор

    Регистрация:
    28 окт 2009
    Сообщения:
    13.722
    Симпатии:
    961
    Баллы:
    204
    Вы хоть сами понимаетет что делаете? я Вам расписал два варианта, а вы все в один слепили.

    Я Вам внятно написал
    Ну а вообще что бы правильно работало на всех группировках то делаете ресурс Сумма3=Сумма1-Сумма2, но когда на вкладке ресур добавляете то там у вас будет
    Сумма(Сумма3), этонадо заменить на Сумма(Сумма1)-Сумма(Сумма2)

    А вы вместо Сумма3=Сумма1-Сумма2, делаете ВычислитьВыражение - вы хоть почитали что эта функция делает? и смысл Сумма(Сумма1)-Сумма(Сумма2) понимаете если это будет в ресурсах написано?
  14. TopicStarter Overlay
    chihpyh
    Offline

    chihpyh

    Регистрация:
    5 дек 2011
    Сообщения:
    6
    Симпатии:
    0
    Баллы:
    1
    Угу, понял свой косяк. Но проблема в том, что я оба варианта до этого попробовал. И Сумма3 = Сумма1 + Сумма2, а в ресурсах Сумма(Сумма1) + Сумма(Сумма2) делал. И вычислить выражение без суммирования в ресурсах тоже делал. Это уже от безысходности попробовал, надо было все варианты выложить.
    На текущий момент сделал новый ресурс в двух вариантах в вычисляемых полях Сумма1 + Сумма2, в запросе аналогично. Для обоих вариантов на вкладке ресурсы указал Сумма(Сумма1) + Сумма(Сумма2), указал расчет только для верхней группировки. На вкладе настройки указал отбор для верхней группировки.
    Не получается.
  15. skv_79
    Offline

    skv_79 Опытный в 1С

    Регистрация:
    10 июл 2013
    Сообщения:
    379
    Симпатии:
    6
    Баллы:
    29
    Не совсем понимаю для чего рассчитывается Сумма3, если далее с этим полем нигде не работаем?
  16. TopicStarter Overlay
    chihpyh
    Offline

    chihpyh

    Регистрация:
    5 дек 2011
    Сообщения:
    6
    Симпатии:
    0
    Баллы:
    1
    С этим полем отбор работает. Все получилось вроде, надо настройки в стандартные было скинуть. Сначала, главное, скидывал, а потом забыл про это
  17. Draco
    Offline

    Draco Модераторы Команда форума Модератор

    Регистрация:
    28 окт 2009
    Сообщения:
    13.722
    Симпатии:
    961
    Баллы:
    204
    Отбор по нему делать.

    Ну разобрались и молодцы, говорил же чсто должно работать. А там что вы сами меняее среду - это уже ваши трудности - мы то об этом не знаем
  18. skv_79
    Offline

    skv_79 Опытный в 1С

    Регистрация:
    10 июл 2013
    Сообщения:
    379
    Симпатии:
    6
    Баллы:
    29
    Ага, понял, спасибо.