8.х Как лучше заполнить макет

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

  1. TopicStarter Overlay
    st88
    Offline

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

    Регистрация:
    18 окт 2012
    Сообщения:
    1.726
    Симпатии:
    28
    Баллы:
    54
    Код:
    ЗапросОборудования = Новый Запрос(    
    "ВЫБРАТЬ
    |    ПаспортВДГО.ВидВДГО.Код,
    |    ПаспортВДГО.Количество
    |ИЗ
    |    Справочник.ПаспортВДГО КАК ПаспортВДГО
    |ГДЕ
    |    ПаспортВДГО.Владелец = &Владелец
    |    И ПаспортВДГО.ПометкаУдаления = ЛОЖЬ");
    
    Оборудование = ЗапросОборудования.Выполнить().Выбрать();
    Пока Оборудование.Следующий() Цикл
       
    Код = ""+Оборудование.Код+"";
    ТЗ = Новый ТаблицаЗначений;
    ТЗ.Колонки.Добавить(Код);
    ТЗ.Код = Оборудование.Количество;
    
    КонецЦикла;
    
    Потом надо заполнить параметры в макете, в параметр записывается значение (кол-во) по формуле:

    например: Параметр1 = Количество обородуования с кодом1 * (Количество обородуования с кодом2 + Количество обородуования с кодом3+Количество обородуования с кодом4);

    и т.п.

    Как это автоматизировать, чтобы не писать условия для каждого кода?
  2. Draco
    Offline

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

    Регистрация:
    28 окт 2009
    Сообщения:
    13.649
    Симпатии:
    948
    Баллы:
    204
    Ну как заполнить это уже мы тебе объяснилил статический пример приложу, для других
    А так почему бы нужное количество сразу в запросе не вычислить
    Это у тебя по сути сумма, с нарастающим итогом тольок вместо первой суммы - умножение.
    Ну или запрос выполни, апотом заполни ТЗ с учетом вычисленных сумм

    Вложения:

  3. TopicStarter Overlay
    st88
    Offline

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

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

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

    Регистрация:
    28 окт 2009
    Сообщения:
    13.649
    Симпатии:
    948
    Баллы:
    204
    посмотри в инете Запрос нрастающим итогом. принцип тот же.
  5. nomad_irk
    Offline

    nomad_irk Гуру в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    7.581
    Симпатии:
    717
    Баллы:
    204
    Про запрос думаю, можно забыть ибо нужно задавать условия выборки кодов, чтобы найти сумму интересующих кодов.

    Делать необходимо объектными методами, но придется набивать массивы кодов для суммирования - без этого никак, либо указывать жестко в коде в виде:

    Значение = Структура.Код1 + Структура.Код2 + Структура.Код3...
  6. Draco
    Offline

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

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

    nomad_irk Гуру в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    7.581
    Симпатии:
    717
    Баллы:
    204
    Так если массивы определены, то можно и запросом делать, но быстрее будет в объектном виде.
  8. TopicStarter Overlay
    st88
    Offline

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

    Регистрация:
    18 окт 2012
    Сообщения:
    1.726
    Симпатии:
    28
    Баллы:
    54
    т.е. в формулу ставить так: Параметр1 = ТЗ.Код1 * (ТЗ.код2+ТЗ.код3+ТЗ.код4); ???
  9. Draco
    Offline

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

    Регистрация:
    28 окт 2009
    Сообщения:
    13.649
    Симпатии:
    948
    Баллы:
    204
    да нет. тебе изначальнонадо ТЗ подготовить, что бы потом через заполнить все заполнять
  10. nomad_irk
    Offline

    nomad_irk Гуру в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    7.581
    Симпатии:
    717
    Баллы:
    204
    В первом приближении как-то так:

    Код:
    ...............
    РезультатЗапроса = Запрос.Выполнить();
    
    Выборка = Результат.Выбрать();
    
    СтруктураПолей = Новый Структура;
    СтруктураПолей.Вставить("МассивПолейДляСуммирования_Сумма", 0);
    
    Пока Выборка.Следующий() Цикл
       Структураполей.Вставить("поле" + выборка.Код, Выборка.Значение);
    Если МассивПолейДляСуммирования.Найти(Выборка.Код) <> Неопределено Тогда
    СтруктураПолей.Вставить("МассивПолейДляСуммирования_Сумма", СтруктураПолей.МассивПолейДляСуммирования_Сумма + ВыборкаЗначение);
    КонецЕсли
    КонецЦикла;
    
    Макет = ПолучитьМакет("Макет");
    
    ТекОбласть = Макет.ПолучитьОбласть("ТекОбласть");
    ТекОбласть.Параметры.Заполнить(СтруктураПолей);
    ТекОбласть.Параметры.ВычисляемоеПоле_234234234 = ?(СтруктураПолей.Свойство("МассивПолейДляСуммирования_Сумма"), СтруктураПолей.МассивПолейДляСуммирования_Сумма, 0) * ?(СтруктураПолей.Свойство("Поле23423423"), СтруктураПолей.Поле23423423, 0) 
    ТабДок.Вывести(ТекОбласть);
    .............
    
  11. TopicStarter Overlay
    st88
    Offline

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

    Регистрация:
    18 окт 2012
    Сообщения:
    1.726
    Симпатии:
    28
    Баллы:
    54
  12. TopicStarter Overlay
    st88
    Offline

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

    Регистрация:
    18 окт 2012
    Сообщения:
    1.726
    Симпатии:
    28
    Баллы:
    54
    Если МассивПолейДляСуммирования.Найти(Выборка.Код) <> Неопределено Тогда - это нужно отельно массив создать ещё?

    и по формуле не понял,
    вот например моя формула:

    Параметр1 = Поле 001 * (Поле002 + Поле003 + Поле004); //соотв. в полеN содержится количество, : ?(СтруктураПолей.Свойство("Поле001"), СтруктураПолей.Поле001, 0)


    ТекОбласть.Параметры.ВычисляемоеПоле_234234234 = ?(СтруктураПолей.Свойство("МассивПолейДляСуммирования_Сумма"), СтруктураПолей.МассивПолейДляСуммирования_Сумма, 0) * ?(СтруктураПолей.Свойство("Поле23423423"), СтруктураПолей.Поле23423423, 0) ??? В массив полей для суммирования нужно заносить (сумму по одинаковым кодам оборудования)???
  13. Draco
    Offline

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

    Регистрация:
    28 окт 2009
    Сообщения:
    13.649
    Симпатии:
    948
    Баллы:
    204
    Ну это код nomad_irk -надо у него спрашиваь, я не совсем понимаю что он имел ввиду.
    я бы прелагал сделать как я советовал - перевернул таблицу, а затем ее еще раз обошел бы и обработал, если уж в запросе не охото делать эти вычисления
  14. TopicStarter Overlay
    st88
    Offline

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

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

    Вот этот кусок убрал, т.к. он не работает... вместо него сделал группировку по коду в запросе с суммированием количества....

    Код:
    Если МассивПолейДляСуммирования.Найти(Выборка.Код) <> Неопределено Тогда
    СтруктураПолей.Вставить("МассивПолейДляСуммирования_Сумма", СтруктураПолей.МассивПолейДляСуммирования_Сумма + ВыборкаЗначение);
    КонецЕсли
  15. nomad_irk
    Offline

    nomad_irk Гуру в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    7.581
    Симпатии:
    717
    Баллы:
    204
    Видимо да, придется формировать массивы полей для суммирования, количество и имена этих полей - будут разными.

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

    На пальцах:

    Параметр1 = Поле001 * (Поле002 + Поле003 + Поле004);
    Параметр2 = Поле005 * (Поле006 + Поле007 + Поле008);

    Значит
    ++++++++++++++++++++
    массив
    Поле002
    Поле003
    Поле004

    структура - сумма значений этих 3 полей

    ++++++++++++++++++++
    массив
    Поле002
    Поле003
    Поле004
    структура - сумма значений этих 3 полей
    ++++++++++++++++++++
    ................
Похожие темы
  1. xalius
    Ответов:
    6
    Просмотров:
    544
  2. web.num
    Ответов:
    31
    Просмотров:
    2.075
Загрузка...

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