8.х Отобрать только определённые договора БП 3.0

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

  1. TopicStarter Overlay
    TODD22
    Online

    TODD22 Профессионал в 1С Команда форума

    Регистрация:
    23 фев 2009
    Сообщения:
    4.756
    Симпатии:
    147
    Баллы:
    104
    Здравствуйте.
    БП 3.0
    Мне необходимо получить задолженность покупателей на определённую дату по определённым договорам.
    Решил ничего не придумывать и получить данные через стандартный отчет "ЗадолженностьПокупателей" для монитора руководителя.

    Написал я вот такую строчку кода и получил в итоге таблицу значений:

    Код:
    ТЗЗадолженностьПокупателей = Отчеты.ЗадолженностьПокупателей.ПолучитьЗадолженностьПокупателейДляМонитораРуководителя(Организация,ТекущаяДата());
    Но она мне возвращает ТЗ со всеми задолженностями. А мне нужно ещё отобрать по определённым договорам. Но загвоздка в том что договора по которым мне нужно отобрать помечены значением доп реквизита.
    Вот сижу и не могу придумать как мне отфильтровать по только нужным договорам. Есть конечно вариант при обходе таблицы значений проверять договор на нужный мне признак. Но это получится запрос в цикле. В принципе я не думаю что это сильно повлияет на производительность системы. Или ещё второй вариант отобрать запросом договора с нужным мне признаком выгрузить их в ТЗ и затем при обходе первой ТЗ проверять вхождение договора во вторую ТЗ.
  2. nomad_irk
    Online

    nomad_irk Гуру в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    7.552
    Симпатии:
    716
    Баллы:
    204
    Сделать запрос к этой тз и левым соединение отобрать по значению дополнительного реквизита, либо взять запрос из отчета и доработать под свои нужды.
  3. TopicStarter Overlay
    TODD22
    Online

    TODD22 Профессионал в 1С Команда форума

    Регистрация:
    23 фев 2009
    Сообщения:
    4.756
    Симпатии:
    147
    Баллы:
    104
    Запрос можно доработать. Не очень правда догоняю некоторые его места. Вернее что передавать в параметры.

    Код:
    ВЫБРАТЬ РАЗРЕШЕННЫЕ РАЗЛИЧНЫЕ
        СчетаКонтрагентов.Ссылка КАК Счет
    ПОМЕСТИТЬ СчетаКД
    ИЗ
        ПланСчетов.Хозрасчетный.ВидыСубконто КАК СчетаКонтрагентов
            ВНУТРЕННЕЕ СОЕДИНЕНИЕ (ВЫБРАТЬ РАЗЛИЧНЫЕ
                ХозрасчетныйВидыСубконто.Ссылка КАК Ссылка
            ИЗ
                ПланСчетов.Хозрасчетный.ВидыСубконто КАК ХозрасчетныйВидыСубконто
            ГДЕ
                ХозрасчетныйВидыСубконто.ВидСубконто = ЗНАЧЕНИЕ(ПланВидовХарактеристик.ВидыСубконтоХозрасчетные.Договоры)) КАК СчетаДоговоров
            ПО СчетаКонтрагентов.Ссылка = СчетаДоговоров.Ссылка
    ГДЕ
        СчетаКонтрагентов.ВидСубконто = ЗНАЧЕНИЕ(ПланВидовХарактеристик.ВидыСубконтоХозрасчетные.Контрагенты)
        И НЕ СчетаКонтрагентов.Ссылка.Забалансовый
        И НЕ СчетаКонтрагентов.Ссылка В ИЕРАРХИИ (&ИсключенныеСчета)
    
    ИНДЕКСИРОВАТЬ ПО
        Счет
    ;
    
    ////////////////////////////////////////////////////////////////////////////////
    ВЫБРАТЬ РАЗРЕШЕННЫЕ
        ВЫРАЗИТЬ(ХозрасчетныйОбороты.Субконто1 КАК Справочник.Контрагенты) КАК Субконто1,
        ВЫРАЗИТЬ(ХозрасчетныйОбороты.Субконто2 КАК Справочник.ДоговорыКонтрагентов) КАК Субконто2,
        ХозрасчетныйОбороты.СуммаОборотДт КАК СуммаОборотДт,
        ХозрасчетныйОбороты.СуммаОборотКт КАК СуммаОборотКт,
        ХозрасчетныйОбороты.Организация КАК Организация,
        ХозрасчетныйОбороты.Подразделение КАК Подразделение,
        ХозрасчетныйОбороты.КорСубконто1 КАК КорСубконто1,
        ХозрасчетныйОбороты.КорСубконто2 КАК КорСубконто2,
        ХозрасчетныйОбороты.Счет
    ПОМЕСТИТЬ Обороты
    {ВЫБРАТЬ
        Субконто1.* КАК Контрагент,
        Субконто2.* КАК Договор,
        Организация.*,
        Подразделение.*}
    ИЗ
        РегистрБухгалтерии.Хозрасчетный.Обороты(
                {(&НачалоПериода)},
                {(&КонецПериода)},
                ,
                Счет В
                    (ВЫБРАТЬ
                        СчетаКД.Счет
                    ИЗ
                        СчетаКД КАК СчетаКД),
                &ВидыСубконтоКД,
                ВЫРАЗИТЬ(Субконто2 КАК Справочник.ДоговорыКонтрагентов).ВидДоговора В (ЗНАЧЕНИЕ(Перечисление.ВидыДоговоровКонтрагентов.СПокупателем), ЗНАЧЕНИЕ(Перечисление.ВидыДоговоровКонтрагентов.СКомиссионером), ЗНАЧЕНИЕ(Перечисление.ВидыДоговоровКонтрагентов.СКомитентомНаЗакупку)) {(Подразделение).*, (Организация).*, (Субконто1).* КАК Контрагент, (Субконто2).* КАК Договор},
                ,
                ) КАК ХозрасчетныйОбороты
    
    ИНДЕКСИРОВАТЬ ПО
        Субконто1,
        Субконто2,
        КорСубконто1,
        КорСубконто2
    ;
    
    ////////////////////////////////////////////////////////////////////////////////
    ВЫБРАТЬ
        Обороты.Субконто1 КАК Субконто1,
        Обороты.Субконто2 КАК Субконто2,
        Обороты.СуммаОборотДт,
        Обороты.СуммаОборотКт,
        0 КАК Поле1,
        0 КАК Поле2,
        0 КАК Поле3,
        0 КАК Поле4,
        Обороты.Организация КАК Организация,
        Обороты.Подразделение КАК Подразделение,
        Обороты.Счет КАК Счет
    ПОМЕСТИТЬ ОборотыБезВнутреннихОборотов
    ИЗ
        Обороты КАК Обороты
    
    ОБЪЕДИНИТЬ ВСЕ
    
    ВЫБРАТЬ
        Обороты.Субконто1,
        Обороты.Субконто2,
        -Обороты.СуммаОборотДт,
        -Обороты.СуммаОборотКт,
        0,
        0,
        0,
        0,
        Обороты.Организация,
        Обороты.Подразделение,
        Обороты.Счет
    ИЗ
        Обороты КАК Обороты
    ГДЕ
        Обороты.Субконто1 = Обороты.КорСубконто1
        И Обороты.Субконто2 = Обороты.КорСубконто2
    
    ИНДЕКСИРОВАТЬ ПО
        Счет,
        Подразделение,
        Организация,
        Субконто1,
        Субконто2
    ;
    
    ////////////////////////////////////////////////////////////////////////////////
    ВЫБРАТЬ РАЗРЕШЕННЫЕ
        ВЫРАЗИТЬ(НачальныеОстатки.Субконто1 КАК Справочник.Контрагенты) КАК Контрагент,
        ВЫРАЗИТЬ(НачальныеОстатки.Субконто2 КАК Справочник.ДоговорыКонтрагентов) КАК Договор,
        0 КАК УвеличениеДолга,
        0 КАК ПогашениеДолга,
        НачальныеОстатки.СуммаРазвернутыйОстатокДт КАК ДолгНаНачало,
        НачальныеОстатки.СуммаРазвернутыйОстатокКт КАК АвансНаНачало,
        0 КАК ДолгНаКонец,
        0 КАК АвансНаКонец,
        НачальныеОстатки.Организация КАК Организация,
        НачальныеОстатки.Подразделение КАК Подразделение,
        НачальныеОстатки.Счет КАК Счет
    {ВЫБРАТЬ
        Контрагент.*,
        Договор.*,
        УвеличениеДолга,
        ПогашениеДолга,
        ДолгНаНачало,
        АвансНаНачало,
        ДолгНаКонец,
        АвансНаКонец,
        Организация.*,
        Подразделение.*,
        Счет}
    ИЗ
        РегистрБухгалтерии.Хозрасчетный.Остатки(
                {(&НачалоПериодаОстатки)},
                Счет В
                    (ВЫБРАТЬ
                        СчетаКД.Счет
                    ИЗ
                        СчетаКД КАК СчетаКД),
                &ВидыСубконтоКД,
                ВЫРАЗИТЬ(Субконто2 КАК Справочник.ДоговорыКонтрагентов).ВидДоговора В (ЗНАЧЕНИЕ(Перечисление.ВидыДоговоровКонтрагентов.СПокупателем), ЗНАЧЕНИЕ(Перечисление.ВидыДоговоровКонтрагентов.СКомиссионером), ЗНАЧЕНИЕ(Перечисление.ВидыДоговоровКонтрагентов.СКомитентомНаЗакупку)) {(Субконто1).* КАК Контрагент, (Субконто2).* КАК Договор, (Организация).*, (Подразделение).*}) КАК НачальныеОстатки
    
    ОБЪЕДИНИТЬ ВСЕ
    
    ВЫБРАТЬ
        ВЫРАЗИТЬ(КонечныеОстатки.Субконто1 КАК Справочник.Контрагенты),
        ВЫРАЗИТЬ(КонечныеОстатки.Субконто2 КАК Справочник.ДоговорыКонтрагентов),
        0,
        0,
        0,
        0,
        КонечныеОстатки.СуммаРазвернутыйОстатокДт,
        КонечныеОстатки.СуммаРазвернутыйОстатокКт,
        КонечныеОстатки.Организация,
        КонечныеОстатки.Подразделение,
        КонечныеОстатки.Счет
    ИЗ
        РегистрБухгалтерии.Хозрасчетный.Остатки(
                {(&КонецПериодаОстатки)},
                Счет В
                    (ВЫБРАТЬ
                        СчетаКД.Счет
                    ИЗ
                        СчетаКД КАК СчетаКД),
                &ВидыСубконтоКД,
                ВЫРАЗИТЬ(Субконто2 КАК Справочник.ДоговорыКонтрагентов).ВидДоговора В (ЗНАЧЕНИЕ(Перечисление.ВидыДоговоровКонтрагентов.СПокупателем), ЗНАЧЕНИЕ(Перечисление.ВидыДоговоровКонтрагентов.СКомиссионером), ЗНАЧЕНИЕ(Перечисление.ВидыДоговоровКонтрагентов.СКомитентомНаЗакупку)) {(Подразделение).*, (Организация).*, (Субконто1).* КАК Контрагент, (Субконто2).* КАК Договор}) КАК КонечныеОстатки
    
    ОБЪЕДИНИТЬ ВСЕ
    
    ВЫБРАТЬ
        ОборотыБезВнутреннихОборотов.Субконто1,
        ОборотыБезВнутреннихОборотов.Субконто2,
        ОборотыБезВнутреннихОборотов.СуммаОборотДт,
        ОборотыБезВнутреннихОборотов.СуммаОборотКт,
        0,
        0,
        0,
        0,
        ОборотыБезВнутреннихОборотов.Организация,
        ОборотыБезВнутреннихОборотов.Подразделение,
        ОборотыБезВнутреннихОборотов.Счет
    ИЗ
        ОборотыБезВнутреннихОборотов КАК ОборотыБезВнутреннихОборотов
    Вот сам запрос.

    Не знаю что передать в параметры "ВидыСубконтоКД" и "ИсключенныеСчета" но вроде как в исключенные попадают те счета что укажет пользователь.
    И ещё не понятно будут ли у меня работать фигурные скобки {} ? Они же только в СКД работают? Или нет?
  4. nomad_irk
    Online

    nomad_irk Гуру в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    7.552
    Симпатии:
    716
    Баллы:
    204
    ВидыСубконтоКД - надо по контексту запросу определить что это. Тип значения ПланВидовХарактеристик.ВидыСубконтоХозрасчетные.*
    Исключенные счета по всей видимости будет пусто, либо действительно то, что установит пользователь.
    Фигурные скобки, вроде, и в обычном запросе можно использовать
  5. shurikvz
    Online

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

    Регистрация:
    1 окт 2009
    Сообщения:
    8.409
    Симпатии:
    316
    Баллы:
    104
    Ну поставить то их можно, ошибки не выдаст, только работать они не будут в обычном. Либо СКД либо Построитель нужен.
  6. TopicStarter Overlay
    TODD22
    Online

    TODD22 Профессионал в 1С Команда форума

    Регистрация:
    23 фев 2009
    Сообщения:
    4.756
    Симпатии:
    147
    Баллы:
    104
    Наверное тогда проще всего получить все договора с нужным мне признаком в отдельную таблицу значений и проверять свою ТЗ в цикле на вхождение. Всё равно мне её в цикле обходить.
  7. nomad_irk
    Online

    nomad_irk Гуру в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    7.552
    Симпатии:
    716
    Баллы:
    204
    Судя по тексту запроса, запрос вполне себе можно использовать в обычном виде. Фигурные скобки необходимо преобразовать в параметры виртуальных таблиц, а некоторые из них убрать.
  8. TopicStarter Overlay
    TODD22
    Online

    TODD22 Профессионал в 1С Команда форума

    Регистрация:
    23 фев 2009
    Сообщения:
    4.756
    Симпатии:
    147
    Баллы:
    104
    Код:
    {(Подразделение).*, (Организация).*, (Субконто1).* КАК Контрагент, (Субконто2).* КАК Договор})
    А что означают звёздочки? Они в СКД работают? Или в запросе то же?
  9. nomad_irk
    Online

    nomad_irk Гуру в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    7.552
    Симпатии:
    716
    Баллы:
    204
    Эти не работают. Убирай.
  10. shurikvz
    Online

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

    Регистрация:
    1 окт 2009
    Сообщения:
    8.409
    Симпатии:
    316
    Баллы:
    104
    TODD22 в отчете Задолженность покупателей там можно параметры настроить? Я имею ввиду: настрой этот отчет, чтобы он выводил то что тебе нужно, сформируй, в момент формирования через отладчик посмотри актуальный текст запроса СКД и скопируй его, все - запрос у тебя готов.
  11. TopicStarter Overlay
    TODD22
    Online

    TODD22 Профессионал в 1С Команда форума

    Регистрация:
    23 фев 2009
    Сообщения:
    4.756
    Симпатии:
    147
    Баллы:
    104
    Что то не нашёл где его смотреть... :(
  12. shurikvz
    Online

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

    Регистрация:
    1 окт 2009
    Сообщения:
    8.409
    Симпатии:
    316
    Баллы:
    104
    Ну после того как выполнил компоновку макета по схеме компановки, ты же получаешь макет компановки. Вот там и смотреть. МакетКомпоновки - НаборыДанных - Нужный макет - Запрос.

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

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

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