[РЕШЕНО] Настройка запроса на скд

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

  1. TopicStarter Overlay
    st88
    Offline

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

    Регистрация:
    18 окт 2012
    Сообщения:
    1.726
    Симпатии:
    28
    Баллы:
    54
    Суть задачи. выбрать контрагентов у которых есть определенное оборудование и у которых нету. Т.е. все контрагенты делятся на две группы. нужно кол-во контрагентов в каждой группе с группировкой по населенному пункту.
    В справочнике контрагентов есть реквизит - кодАдреса, по которому из КЛАДРа выдергивается адрес, вплоть до улицы.

    Название населенного пункта и группировку по нему в запросе я сделать не могу, это делается процедурами которые раскладывают код на элементы, по которым выдергивается отдельно страна, город, улица, индекс и т.д.

    Посему надо делать этот запрос на скд и там вызывать эту процедуру для обработки и получения нас. пункта из кода. Либо писать там свою процедуру.

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

    код собстно:
    Код:
    ВЫБРАТЬ
       КОЛИЧЕСТВО(РАЗЛИЧНЫЕ Абоненты.Ссылка) КАК Ссылка1,
       Абоненты.КодАдреса
    ИЗ
       Справочник.Абоненты КАК Абоненты
    ГДЕ
       Абоненты.Ссылка В
           (ВЫБРАТЬ
             ПаспортВДГО.Владелец.Ссылка КАК ВладелецСсылка
           ИЗ
             Справочник.ПаспортВДГО КАК ПаспортВДГО
           ГДЕ
             ПаспортВДГО.ВидВДГО.Код = "000000037"
             И ПаспортВДГО.ВидВДГО.ПометкаУдаления = ЛОЖЬ)
       И Абоненты.Подразделение = &Подразделение
    
    СГРУППИРОВАТЬ ПО
       Абоненты.КодАдреса
    
    
  2. Draco
    Offline

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

    Регистрация:
    28 окт 2009
    Сообщения:
    13.649
    Симпатии:
    948
    Баллы:
    204
    НУ и вопрос то в чем собственно, вы принципе сами все написали что можно сделать.

    Ну я бы
    1. Запрос дела объединением двух запросов
    Типа

    Код:
    ВЫБРАТЬ
       КОЛИЧЕСТВО(РАЗЛИЧНЫЕ Абоненты.Ссылка) КАК Ссылка1,
       Абоненты.КодАдреса,
    "Группа 1" Как Группа
    ИЗ
       Справочник.Абоненты КАК Абоненты
    ГДЕ
       Абоненты.Ссылка В
           (ВЫБРАТЬ
             ПаспортВДГО.Владелец.Ссылка КАК ВладелецСсылка
           ИЗ
             Справочник.ПаспортВДГО КАК ПаспортВДГО
           ГДЕ
             ПаспортВДГО.ВидВДГО.Код = "000000037"
             И ПаспортВДГО.ВидВДГО.ПометкаУдаления = ЛОЖЬ)
       И Абоненты.Подразделение = &Подразделение
    
    СГРУППИРОВАТЬ ПО
       Абоненты.КодАдреса
    
    Объеденить ВСЕ
    
    ВЫБРАТЬ
       КОЛИЧЕСТВО(РАЗЛИЧНЫЕ Абоненты.Ссылка) ,
       Абоненты.КодАдреса,
    "Группа 2"
    ИЗ
       Справочник.Абоненты КАК Абоненты
    ГДЕ
       Абоненты.Ссылка В
           (ВЫБРАТЬ
             ПаспортВДГО.Владелец.Ссылка КАК ВладелецСсылка
           ИЗ
             Справочник.ПаспортВДГО КАК ПаспортВДГО
           ГДЕ
             ПаспортВДГО.ВидВДГО.Код = "Другой код"
             И ПаспортВДГО.ВидВДГО.ПометкаУдаления = ЛОЖЬ)
       И Абоненты.Подразделение = &Подразделение
    
    СГРУППИРОВАТЬ ПО
       Абоненты.КодАдреса
    Ну думаю пояснения не нужно.

    А ту дальше уже два варианта
    1. Либо вы этот запрос в коде пишите, выгружаете его в ТЗ, обрабатываете ТЗ, а именно код адресса и заполняете там нужные вам доп колонки Населенный пункт и т.д
    А потом передаете это в СКД как внешний набор.
    Соответвенно это все через код делается в отчете. В СКД опредялется набор и его вывод
    2. это пишите процедуры разложения вашего адреса и их уже вызываете либо в выражении представления либо в вычисляемых полях
  3. TopicStarter Overlay
    st88
    Offline

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

    Регистрация:
    18 окт 2012
    Сообщения:
    1.726
    Симпатии:
    28
    Баллы:
    54
    Ну по первому варианту скд тогда вообще не нужно. всё вручную можно сделать.
    А вот второй интереснее, процедуры то уже написаны. их просто скопировать то можно в ,,,,? а вот тут непонятно, как в выражении представления их вызвать?
  4. Draco
    Offline

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

    Регистрация:
    28 окт 2009
    Сообщения:
    13.649
    Симпатии:
    948
    Баллы:
    204
    Ну как ненужно удобно же когда СКД сама макет строит. сегодня нужно так, затра так, после завтра крос таблицей и т.д. а так данные получили отдали в СКД и все она уже с ними над выводом работает.
    Процедуры должны быть в общем модуле
    Вот в общем омдуле есть процедурка
    Код:
    Функция ВВерхнийРегистр(Строка) Экспорт
       
        Возврат ВРег(Строка);
       
    КонецФункции
    И теперь вместо контрагента будет
    Покупатель : и Контрагент большими буквами.
    Но учтите что если вы пишите в выражении представления, то это только вывод(отображение)
    Вам скорее всего данные полля надо через вычисляемые поля делать, что бы итоги по ним строились

    Вложения:

    • 1111.jpg
      1111.jpg
      Размер файла:
      23,1 КБ
      Просмотров:
      4
  5. TopicStarter Overlay
    st88
    Offline

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

    Регистрация:
    18 окт 2012
    Сообщения:
    1.726
    Симпатии:
    28
    Баллы:
    54
    других вариантов нету, кроме как размещать процедуру в глобальном модуле?
    Там то есть нужная процедура, но мне из неё нужен только населенный пункт а не все элементы..(
    Код:
    Процедура ПолучитьПоКодуАдресногоЭлементаЕгоКомпоненты(КодАдресногоЭлемента, Регион, Район, Город, НаселенныйПункт, Улица, Дом, БезСокращений = Ложь) Экспорт
       
        Элемент = ПолучитьСтруктуруАдресногоЭлемента(КодАдресногоЭлемента);
       
        Если Элемент.ТипАдресногоЭлемента >= 6 Тогда
            Дом = ПолучитьИмяАдресногоЭлементаПоКоду(КодАдресногоЭлемента - КодАдресногоЭлемента%МаскаДома(), 6,БезСокращений);
        КонецЕсли;
       
        Если Элемент.ТипАдресногоЭлемента >= 5 Тогда
            Улица = ПолучитьИмяАдресногоЭлементаПоКоду(КодАдресногоЭлемента - КодАдресногоЭлемента%МаскаУлицы(), 5,БезСокращений);
        КонецЕсли;
       
        Если Элемент.ТипАдресногоЭлемента >= 4 Тогда
            НаселенныйПункт = ПолучитьИмяАдресногоЭлементаПоКоду(КодАдресногоЭлемента - КодАдресногоЭлемента%МаскаНасПункта(), 4,БезСокращений);
        КонецЕсли;
    
        Если Элемент.ТипАдресногоЭлемента >= 3 Тогда
            Город = ПолучитьИмяАдресногоЭлементаПоКоду(КодАдресногоЭлемента - КодАдресногоЭлемента%МаскаГорода(), 3,БезСокращений);
        КонецЕсли;
    
        Если Элемент.ТипАдресногоЭлемента >= 2 Тогда   
            Район = ПолучитьИмяАдресногоЭлементаПоКоду(КодАдресногоЭлемента - КодАдресногоЭлемента%МаскаРайона(), 2,БезСокращений);
        КонецЕсли;
    
        Если Элемент.ТипАдресногоЭлемента >= 1 Тогда
            Регион = ПолучитьИмяАдресногоЭлементаПоКоду(КодАдресногоЭлемента - КодАдресногоЭлемента%МаскаРегиона(), 1,БезСокращений);
        КонецЕсли;   
       
    КонецПроцедуры
    
  6. Draco
    Offline

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

    Регистрация:
    28 окт 2009
    Сообщения:
    13.649
    Симпатии:
    948
    Баллы:
    204
    1. Да обязательно
    2 Это должна быть не процедура, а функция, которая возвращает значения
  7. TopicStarter Overlay
    st88
    Offline

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

    Регистрация:
    18 окт 2012
    Сообщения:
    1.726
    Симпатии:
    28
    Баллы:
    54
    1. плохо((
    2.сделал функцию.
    но как то не так по-моему оно считает..(

    расчет.jpg
  8. Draco
    Offline

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

    Регистрация:
    28 окт 2009
    Сообщения:
    13.649
    Симпатии:
    948
    Баллы:
    204
    Вы поле населенный пункт как делает функция у вас где вызывается в выражении представления или через поле создаете?
  9. TopicStarter Overlay
    st88
    Offline

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

    Регистрация:
    18 окт 2012
    Сообщения:
    1.726
    Симпатии:
    28
    Баллы:
    54
    в вычисляемых полях, поле выражение, туда указываю вызов этой функции.
  10. Draco
    Offline

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

    Регистрация:
    28 окт 2009
    Сообщения:
    13.649
    Симпатии:
    948
    Баллы:
    204
    В итогах там все нормально стоит так? Проблема в чем? итоги не так считаются или что?
  11. TopicStarter Overlay
    st88
    Offline

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

    Регистрация:
    18 окт 2012
    Сообщения:
    1.726
    Симпатии:
    28
    Баллы:
    54
    итоги нигде не стоят. проблема в том что должно быть по каждому населенному пункту всего 2 строки: Группа1: 50, Группа2:60, и т.д.
    т.е. сколько в каждом нас. пункте с данным видом оборудования контрагентов, сколько без него и т.д. по каждому нас. пункту.
  12. Draco
    Offline

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

    Регистрация:
    28 окт 2009
    Сообщения:
    13.649
    Симпатии:
    948
    Баллы:
    204
    Ну так сложно сказать надо запрос смотретьи как итоги настроены
  13. TopicStarter Overlay
    st88
    Offline

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

    Регистрация:
    18 окт 2012
    Сообщения:
    1.726
    Симпатии:
    28
    Баллы:
    54
    посмотрите, если не сложно.
    запрос то возвращает уже посчитанное кол-во, но с расчетом на улицы.
    вот отчет:

    Вложения:

  14. Draco
    Offline

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

    Регистрация:
    28 окт 2009
    Сообщения:
    13.649
    Симпатии:
    948
    Баллы:
    204
    Ну тут запрос немного неправильный
    Надо что то типа
    Код:
    ВЫБРАТЬ
        Контрагенты.Ссылка,
        Контрагенты.Регион,
        1 КАК Количество,
        "Группа 1" КАК Группа
       
    ИЗ
        Справочник.Контрагенты КАК Контрагенты
    Чтобы у Вас в итоге после выполния запроса получалось
    Абонент (ссылка),КодАдреса,Группа и количество(1 контрагент -1 шт)
    После этого Полем выражения добавиться Населенный пункт
    и тогда вы в итоги запихваете Количество и все считается
  15. TopicStarter Overlay
    st88
    Offline

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

    Регистрация:
    18 окт 2012
    Сообщения:
    1.726
    Симпатии:
    28
    Баллы:
    54
    Что-то ничего не выходит с настройками, запрос переделал как вы предложили...
  16. Draco
    Offline

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

    Регистрация:
    28 окт 2009
    Сообщения:
    13.649
    Симпатии:
    948
    Баллы:
    204
    Выкладывайте. что получилось и отчет
  17. TopicStarter Overlay
    st88
    Offline

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

    Регистрация:
    18 окт 2012
    Сообщения:
    1.726
    Симпатии:
    28
    Баллы:
    54
    Считает не пойми как. Группу1 ещё вроде бы нормально, а вот группу 2 вообще не пойми что считает..(
    расчет1.jpg

    Вложения:

    • Отчет1.erf
      Размер файла:
      6,1 КБ
      Просмотров:
      2
  18. Draco
    Offline

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

    Регистрация:
    28 окт 2009
    Сообщения:
    13.649
    Симпатии:
    948
    Баллы:
    204
    А там во втором запросе так и должно быть
    ГДЕ
    ПаспортВДГО.ВидВДГО.Код = "Другой код"
    И ПаспортВДГО.ВидВДГО.ПометкаУдаления = ЛОЖЬ)


    "Другой код"
  19. TopicStarter Overlay
    st88
    Offline

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

    Регистрация:
    18 окт 2012
    Сообщения:
    1.726
    Симпатии:
    28
    Баллы:
    54
    нет. там такой же должен быть как и в первом.
  20. Draco
    Offline

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

    Регистрация:
    28 окт 2009
    Сообщения:
    13.649
    Симпатии:
    948
    Баллы:
    204
    Всмысле
    Вот запрос из отчета, что прикреплен
    Код:
    ВЫБРАТЬ
        Абоненты.Ссылка КАК Абонент,
        Абоненты.КодАдреса,
        "Группа 1" КАК Группа1,
        1 КАК Количество1
    ИЗ
        Справочник.Абоненты КАК Абоненты
    ГДЕ
        Абоненты.Ссылка В
                (ВЫБРАТЬ
                    ПаспортВДГО.Владелец.Ссылка КАК ВладелецСсылка
                ИЗ
                    Справочник.ПаспортВДГО КАК ПаспортВДГО
                ГДЕ
                    ПаспортВДГО.ВидВДГО.Код = "000000037"
                    И ПаспортВДГО.ВидВДГО.ПометкаУдаления = ЛОЖЬ)
        И Абоненты.Подразделение = &Подразделение
    ////////////////////////////////////////////////////////////////////////////////
    Объединить все
    ////////////////////////////////////////////////////////////////////////////////
    ВЫБРАТЬ РАЗЛИЧНЫЕ
        Абоненты.Ссылка КАК Ссылка2,
        Абоненты.КодАдреса,
        "Группа 2" КАК Группа2,
        1 КАК Количество2
    ИЗ
        Справочник.Абоненты КАК Абоненты
    ГДЕ
        НЕ Абоненты.Ссылка В
                    (ВЫБРАТЬ
                        ПаспортВДГО.Владелец.Ссылка КАК ВладелецСсылка
                    ИЗ
                        Справочник.ПаспортВДГО КАК ПаспортВДГО
                    ГДЕ
                        ПаспортВДГО.ВидВДГО.Код = "Другой код"
                        И ПаспортВДГО.ВидВДГО.ПометкаУдаления = ЛОЖЬ)
        И Абоненты.Подразделение = &Подразделение
    Во втором запросе КОД="Другой код"
    вы пишите что должен быть такой же как и в первом, тогда вопрос зачем два одинаковых запроса?
    Может хотя бы не равно ...
    --- Объединение сообщений, 20 фев 2015 ---
    можете срин вкладки Ресурсы, как у Вас это....

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