7.7 "Сложить" функции в запросе

Тема в разделе "Конфигурирование на платформе "1С:Предприятие 7.7"", создана пользователем Samouchka, 1 май 2013.

  1. TopicStarter Overlay
    Samouchka
    Offline

    Samouchka Опытный в 1С

    Регистрация:
    20 мар 2013
    Сообщения:
    214
    Симпатии:
    1
    Баллы:
    29
    Делаю запрос и вывожу результат в таблицу:

    Код:
    Процедура Сформировать()
    Перем Запрос, ТекстЗапроса, Таб;
    //Создание объекта типа Запрос
    Запрос = СоздатьОбъект("Запрос");
    ТекстЗапроса =
    "//{{ЗАПРОС(Сформировать)
    |Период с ВыбНачПериода по ВыбКонПериода;
    |ДатаДок = Документ.ПриходнаяНакладная.ДатаДок, Документ.РасходнаяНакладная.ДатаДок, Документ.Перемещение.ДатаДок,
    Документ.ВозвратОбменТоваров.ДатаДок, Документ.ПогашениеДолгаПокупателяВозвратомТовара.ДатаДок;
    |НомерДок = Документ.ПриходнаяНакладная.НомерДок, Документ.РасходнаяНакладная.НомерДок, Документ.Перемещение.НомерДок,
    Документ.ВозвратОбменТоваров.НомерДок, Документ.ПогашениеДолгаПокупателяВозвратомТовара.НомерДок;
    |ТекущийДокумент = Документ.ПриходнаяНакладная.ТекущийДокумент, Документ.РасходнаяНакладная.ТекущийДокумент,
    Документ.Перемещение.ТекущийДокумент, Документ.ВозвратОбменТоваров.ТекущийДокумент, Документ.ПогашениеДолгаПокупателяВозвратомТовара.ТекущийДокумент;
    |Товар = Документ.ПриходнаяНакладная.Товар, Документ.РасходнаяНакладная.Товар, Документ.Перемещение.Товар,
    Документ.ПогашениеДолгаПокупателяВозвратомТовара.Товар, Документ.ВозвратОбменТоваров.Товар;
    |ПриходВозврат = Документ.ПриходнаяНакладная.Количество;
    |Продали = Документ.РасходнаяНакладная.Количество;
    |Переместили = Документ.Перемещение.Количество;
    |МенялПокупатель = Документ.ВозвратОбменТоваров.Количество;
    |ПриходСтатус = Документ.ПриходнаяНакладная.СтатусДокумента;
    |РасходСтатус = Документ.РасходнаяНакладная.СтатусДокумента;
    |СкладИз = Документ.Перемещение.СкладИз;
    |СкладВ = Документ.Перемещение.СкладВ;
    |ОбменСтатус = Документ.ВозвратОбменТоваров.СтатусОперации;
    |Менял2 = Документ.ПогашениеДолгаПокупателяВозвратомТовара.Количество;
    |Продали2 = Документ.ВозвратОбменТоваров.Количество;
    |Функция ПриходСумма = Сумма(ПриходВозврат) когда(ПриходСтатус=Перечисление.СтатусДокумента.Приход);
    |Функция ВозвратСумма = Сумма(ПриходВозврат) когда(ПриходСтатус=Перечисление.СтатусДокумента.Возврат);
    |Функция ВернулПокупательСумма = Сумма(МенялПокупатель) когда(ОбменСтатус=Перечисление.СтатусОперации.Возврат);
    |Функция Менял2Сумма = Сумма(Менял2);
    |Функция ПродалиСумма = Сумма(Продали) когда(РасходСтатус=Перечисление.СтатусДокумента.Расход);
    |Функция Продали2Сумма = Сумма(Продали2) когда(ОбменСтатус=Перечисление.СтатусОперации.Продажа);
    |Функция СписалиСумма = Сумма(Продали) когда(РасходСтатус=Перечисление.СтатусДокумента.Списание);
    |Функция ПришлоИзДрСкладаСумма = Сумма(Переместили) когда(СкладВ=Константа.ОсновнойСклад);
    |Функция ОтпустилиВДрСкладСумма = Сумма(Переместили) когда(СкладИз=Константа.ОсновнойСклад);
    |Группировка ТекущийДокумент;
    |Группировка ДатаДок;
    |Группировка НомерДок;
    |Условие(Товар=Тов);
    |"//}}ЗАПРОС
    ;
    // Если ошибка в запросе, то выход из процедуры
    Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда
    Возврат;
    КонецЕсли;
    
    РегП = СоздатьОбъект("Регистры");
    Себ = РегП.Остатки;
    Себ.ВременныйРасчет();
    РегП.РассчитатьРегистрыНа(ВыбНачПериода);
    ОстатокНачало = Себ.СводныйОстаток(Тов,,Константа.ОсновнойСклад,,,"Количество");
    
    Если Дата(ВыбКонПериода)<Дата(ПолучитьТА()) Тогда
    РегП.РассчитатьРегистрыПо(ВыбКонПериода);
    ОстатокКонец = Себ.СводныйОстаток(Тов,,Константа.ОсновнойСклад,,,"Количество");
    КонецЕсли;
    Если Дата(ВыбКонПериода)>=Дата(ПолучитьТА()) Тогда
    ОстатокКонец=Регистр.Остатки.СводныйОстаток(Тов,,Константа.ОсновнойСклад,,,"Количество");
    КонецЕсли;
    // Подготовка к заполнению выходных форм данными запроса
    Таб = СоздатьОбъект("Таблица");
    Таб.ИсходнаяТаблица("Сформировать");
    // Заполнение полей "Заголовок"
    Таб.ВывестиСекцию("Заголовок");
    Состояние("Заполнение выходной таблицы...");
    Таб.Опции(0, 0, Таб.ВысотаТаблицы(), 0);
    Пока Запрос.Группировка(1) = 1 Цикл
    // Заполнение полей ТекущийДокумент
    //Таб.ВывестиСекцию("ТекущийДокумент");
    Пока Запрос.Группировка(2) = 1 Цикл
    // Заполнение полей ДатаДок
    //Таб.ВывестиСекцию("ДатаДок");
    Пока Запрос.Группировка(3) = 1 Цикл
    // Заполнение полей НомерДок
    Таб.ВывестиСекцию("НомерДок");
    КонецЦикла;
    КонецЦикла;
    КонецЦикла;
    // Заполнение полей "Итого"
    Таб.ВывестиСекцию("Итого");
    // Вывод заполненной формы
    Таб.ТолькоПросмотр(1);
    Таб.Показать("Сформировать", "");
    КонецПроцедуры
    Проблема в том, что функции "ВернулПокупательСумма" и "Менял2Сумма" выводятся в две разные колонки таблицы. Но в каждой строке таблицы может быть либо
    Документ.ВозвратОбменТоваров.Количество, тогда надо вычислить функцию "ВернулПокупательСумма" , либо
    Документ.ПогашениеДолгаПокупателяВозвратомТовара.Количество, и тогда нужно вычислить функцию "Менял2Сумма". Как бы сделать чтобы эти две функции вычислялись
    в одной колонке, как бы их "сложить" или "соединить". Пробовал писать третью функцию типа ВернулПокупательСумма+Менял2Сумма, не помогло. В самой таблице тоже не
    складываются. Для функций "ПродалиСумма" и "Продали2Сумма" та же задача. Помогите, пожалуйста, на примере первой пары функций.
  2. WaRDeR
    Offline

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

    Регистрация:
    23 ноя 2006
    Сообщения:
    3.263
    Симпатии:
    14
    Баллы:
    29
    В данном случае только выполнять постобработку результата запроса. Или выгрузить в ТЗ и там создать и заполнить результирующую колонку, или сразу перебирать результат и "на ходу" рассчитывать значение.

    А если в целом рассматривать проблему, то нужно создать регистр, двигать который должны документы, которые тут есть в запросе. А сам запрос строить уже непосредственно по регистру. А в регистре хранить данные в нужном виде.
  3. GlukAl
    Offline

    GlukAl Опытный в 1С

    Регистрация:
    4 окт 2012
    Сообщения:
    187
    Симпатии:
    7
    Баллы:
    29

    странно попробуй в ячейках таблицы написать
    Код:
    Число(Запрос.ВернулПокупательСумма)+Число(Запрос.Менял2Сумма)
    
    Число(Запрос.ПродалиСумма)+Число(Запрос.Продали2Сумма)
    

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