8.х отбор и текст запроса в СКД

Тема в разделе "Конфигурирование на платформе "1С:Предприятие 8"", создана пользователем MelodyBlue, 19 авг 2010.

  1. TopicStarter Overlay
    MelodyBlue
    Offline

    MelodyBlue Опытный в 1С

    Регистрация:
    23 апр 2010
    Сообщения:
    64
    Симпатии:
    0
    Баллы:
    26
    Сначала вкратце опишу что делаю.
    Пишу отчет через СКД, набор данных - запрос.
    Необходимо предоставить пользователю выбирать в окне настроек в табличномПоле значения для отбора (макс три).
    Проблемы: Так как заранее неизвестно сколько параметров пользователь выберет то нельзя их прописать в тексте запроса как ниже в случае двух параметров.
    Код:
    РегистрБухгалтерии.Хозрасчетный.ОстаткиИОбороты(, , , , , , Субконто1 = &ПараметрОтбора0 И Субконто1 = &ПараметрОтбора1)
    
    Из этого следует, что надо в по ходу дополнять запрос этими параметрами.
    Но как это сделать в СКД не пойму. Пытался через ОтчетОбъект.СхемаКомпоновкиДанных.НаборыДанных.НаборДанных1.Запрос, но не выходит. Я думаю может надо использовать набор данных - объект и программно формировать запрос - текст.
    Вопрос, каким образом решить эту проблему в СКД?
    P.S С СКД работаю не давно, прошу отнестись с пониманием.
  2. HexaD
    Offline

    HexaD Опытный в 1С

    Регистрация:
    19 июн 2010
    Сообщения:
    59
    Симпатии:
    0
    Баллы:
    26
    В СКД это делается также, как и в построителе отчёта. Уберите параметры в фигурные скобки вот так:

    Код:
    РегистрБухгалтерии.Хозрасчетный.ОстаткиИОбороты(, , , , , , {Субконто1 = &;ПараметрОтбора0} {Субконто1 = &;ПараметрОтбора1})
    
    Объединять эти условия с помощью "И" не нужно, иначе при определении одного условия СКД будет требовать, чтобы вы определили и другое.
  3. TopicStarter Overlay
    MelodyBlue
    Offline

    MelodyBlue Опытный в 1С

    Регистрация:
    23 апр 2010
    Сообщения:
    64
    Симпатии:
    0
    Баллы:
    26
    через "И" я объединяю уже выбранные параметры. Поэтому и требовалось добавлять каждый раз новый параметр отбора в таблицу.
  4. HexaD
    Offline

    HexaD Опытный в 1С

    Регистрация:
    19 июн 2010
    Сообщения:
    59
    Симпатии:
    0
    Баллы:
    26
    Не очень понял, что вы хотите этим сказать. Т.е. результат вас не устраивает?
  5. TopicStarter Overlay
    MelodyBlue
    Offline

    MelodyBlue Опытный в 1С

    Регистрация:
    23 апр 2010
    Сообщения:
    64
    Симпатии:
    0
    Баллы:
    26
    Просто я подумал, что вы подумали будто то я не правильно использую "и".
    Ваш вариант меня устраивает, спасибо.
  6. mialord
    Offline

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

    Регистрация:
    31 июл 2009
    Сообщения:
    5.398
    Симпатии:
    40
    Баллы:
    54
    Здраствуйте!
    А я старым и добрым методом собираю в модуле запрос из нужных мне частей и перекидываю его как набор данных - объект.
  7. TopicStarter Overlay
    MelodyBlue
    Offline

    MelodyBlue Опытный в 1С

    Регистрация:
    23 апр 2010
    Сообщения:
    64
    Симпатии:
    0
    Баллы:
    26
    А как быть если надо проверять эти параметры в теле запроса т.е в зависимости от количества выбранных параметров отбора дополнять запрос условиями типа:?
    Код:
    где  ХозрасчетныйСубконто.Значение = &параметрыотбораN
    
  8. HexaD
    Offline

    HexaD Опытный в 1С

    Регистрация:
    19 июн 2010
    Сообщения:
    59
    Симпатии:
    0
    Баллы:
    26
    Немного исправлюсь. Брать каждый параметр в скобки не обязательно. Можно взять сразу все параметры, идущие друг за другом, но вместо "И" использовать ",". Например, так:

    Код:
    ВЫБРАТЬ
    ХозрасчетныйОстаткиИОбороты.Счет,
    ХозрасчетныйОстаткиИОбороты.КоличествоОборотКт
    ИЗ
    РегистрБухгалтерии.Хозрасчетный.ОстаткиИОбороты(, , , , , , ) КАК ХозрасчетныйОстаткиИОбороты
    {ГДЕ
    ХозрасчетныйОстаткиИОбороты.Организация = &Организация,
    ХозрасчетныйОстаткиИОбороты.Валюта = &Валюта }
    
    Вместо
    Код:
    ..................
    ГДЕ
    ХозрасчетныйОстаткиИОбороты.Организация = &Организация И
    ХозрасчетныйОстаткиИОбороты.Валюта = &Валюта 
    
  9. TopicStarter Overlay
    MelodyBlue
    Offline

    MelodyBlue Опытный в 1С

    Регистрация:
    23 апр 2010
    Сообщения:
    64
    Симпатии:
    0
    Баллы:
    26
    Т.е я могу этот текст
    Код:
    где
    1 В (Выбрать Первые 1 1 Из РегистрБухгалтерии.Хозрасчетный.Субконто КАК Суб1
    где  Суб1.Значение = &параметрыотбора0)
    И
    1 В(Выбрать Первые 1 1 Из РегистрБухгалтерии.Хозрасчетный.Субконто КАК Суб2
    где  Суб2.Значение = &параметрыотбора1)
    И
    1 В (Выбрать Первые 1 1 Из РегистрБухгалтерии.Хозрасчетный.Субконто КАК Суб3
    где  Суб3.Значение = &параметрыотбора2)
    
    
    
    заменить на вот этот? Предполагая максимум параметров отбора равным трем:

    Код:
    
    {ГДЕ
    1 В
    (ВЫБРАТЬ ПЕРВЫЕ 1
    1
    ИЗ
    РегистрБухгалтерии.Хозрасчетный.Субконто КАК Суб1
    ГДЕ
    Суб1.Значение = &параметрыотбора0),
    (ВЫБРАТЬ ПЕРВЫЕ 1
    1
    ИЗ
    РегистрБухгалтерии.Хозрасчетный.Субконто КАК Суб2
    ГДЕ
    Суб2.Значение = &параметрыотбора1),
    (ВЫБРАТЬ ПЕРВЫЕ 1
    1
    ИЗ
    РегистрБухгалтерии.Хозрасчетный.Субконто КАК Суб3
    ГДЕ
    Суб3.Значение = &параметрыотбора2)
    } 
    
  10. HexaD
    Offline

    HexaD Опытный в 1С

    Регистрация:
    19 июн 2010
    Сообщения:
    59
    Симпатии:
    0
    Баллы:
    26
    А вы сами попробуйте. Часть запроса в фигурных скобках, по идее, должна подключаться только в том случае, если вы объявили один из параметров. Но тогда, наверное, подключатся и остальные 2 параметра, так как они находятся в общем блоке настроек, что приведёт к ошибке. Но, возможно, я ошибаюсь. Лучше попробуйте взять в скобки вложенные блоки "ГДЕ" по отдельности. Правда, я не знаю, как повлияет это на ваш запрос. Если таким способом не удастся, то придётся делать так, как советовал mialord - через набор данных Объект, где собирать текст запроса в зависимости от условий.
  11. TopicStarter Overlay
    MelodyBlue
    Offline

    MelodyBlue Опытный в 1С

    Регистрация:
    23 апр 2010
    Сообщения:
    64
    Симпатии:
    0
    Баллы:
    26
    Придется поэкспериментировать.
    А вообще фигуристые скобки это что то вроде надстроек в языке запроса. Как раз что бы не собирать запрос по кусочкам?
  12. HexaD
    Offline

    HexaD Опытный в 1С

    Регистрация:
    19 июн 2010
    Сообщения:
    59
    Симпатии:
    0
    Баллы:
    26
    Всё верно: это настройки. Но не для языка запроса (конструктор языка запроса их не видит). Это настройки для Построителя отчёта или для СКД, смотря где используется подобный запрос. Т.е. вы, определяя настройки, сообщаете СКД, что хотите включить их в запрос, а он подключает ту часть в фигурных скобках, где они были использованы. Примерно, так.

Поделиться этой страницей