Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
12 дек 2024, 10:37

Суммирование определенных ячеек отчета

Автор lexunix, 16 окт 2012, 10:22

0 Пользователей и 1 гость просматривают эту тему.

lexunix

Здравствуйте, к сожалению скрин никак не загрузить, поэтому объясню на словах.

Есть отчет со следующей структурой:

  • 1. Ответственный
  • 1.1 Детальные Записи

в детальных записях есть поле "Срок оформления", которое рассчитывается как среднее по каждому ответственному.

Вопрос: как посчитать сумму всех средних по каждому ответственному и разделить на количество ответственных?

mixqn

Похоже, должно было быть вложение, его не видно. Попробуй загрузить еще раз.
И опиши чуть подробнее задачу: что за ячейки выделены? В табличном документе?

lexunix


mixqn

Цитата: lexunix от 16 окт 2012, 10:22к сожалению скрин никак не загрузить
если можно, чуть подробнее: что именно за проблема: выдавалась ошибка, или что?
Цитата: lexunix от 16 окт 2012, 10:22Вопрос: как посчитать сумму всех средних по каждому ответственному и разделить на количество ответственных?
это лучше делать не путем анализа значений в ячейках итогового отчета, а в источнике данных для отчета - там же запрос наверное или что?
если запрос не очень большой, выложи в тему.
Добавлено: 16 окт 2012, 10:40


отчет на СКД?

lexunix

Цитата: mixqn от 16 окт 2012, 10:39к сожалению скрин никак не загрузитьесли можно, чуть подробнее: что именно за проблема: выдавалась ошибка, или что?
проблема не в форуме, а в ограничении загрузки файлов с рабочего места :|

Добавлено: 16 окт 2012, 10:42


Цитата: mixqn от 16 окт 2012, 10:39отчет на СКД?
Да

mixqn

Честно признаюсь, с СКД работал мало. Нужно будет дополнительное время, разобраться, как там это реализовать.

Если бы отчет был допустим на построителе отчетов, то все решалось бы правкой запроса: достаточно было бы добавить итоги, приблизительно вот так:
.... (основной текст запроса до УПОРЯДОЧИТЬ)
ИТОГИ
СУММА(СрокОформления)/КОЛИЧЕСТВО(РАЗЛИЧНЫЕ Ответственный) КАК СрокОформления

попробую разобраться, как сделать тоже самое в СКД...

mixqn

попробовал в СКД вручную редактировать выражение на закладке "ресурсы" - вроде дает редактировать и даже сохраняется то, что я там набил. Попробуй туда записать "СУММА(СрокОформления)/КОЛИЧЕСТВО(РАЗЛИЧНЫЕ Ответственный)" и посмотри, что получится.

lexunix

Цитата: mixqn от 16 окт 2012, 10:56попробовал в СКД вручную редактировать выражение на закладке "ресурсы" - вроде дает редактировать и даже сохраняется то, что я там набил. Попробуй туда записать "СУММА(СрокОформления)/КОЛИЧЕСТВО(РАЗЛИЧНЫЕ Ответственный)" и посмотри, что получится.
я так уже делал сам)
нет, ты не понял, если сделать так  - он просто проссумирует все значения в колонке Срок оформления, а нужно следующее:

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

может как-то глупо объяснил, но это если просто прям смотреть на отчет

MuI_I_Ika

В принципе, решить задачу можно, посчитав количество ответственных во вложенном запросе.
Сложный расчет итогов или полей в СКД так же можно организовать в Ресурсах или Вычисляемых полях.
Очень часто встречаются случаи, когда на разных уровнях группировки итог нужно считать по разному.
Например, для этого очень удобна функция Вычислить(). Есть и другие функции.

Функция Вычислить предназначена для вычисления выражения в контексте некоторой группировки.

Синтаксис:

Вычислить(Выражение, Группировка, ТипРасчета)

Параметры:

Выражение. Тип Строка. Содержит вычисляемое выражение;
Группировка. Тип Строка. Содержит имя группировки, в контексте которой необходимо вычислить выражение. В случае если в качестве имени группировки используется пустая строка, вычисление будет выполнено в контексте текущей группировки. В случае если в качестве имени группировки будет использована строка ОбщийИтог, вычисление будет выполнено в контексте общего итога. В остальных случаях вычисление будет выполняться в контексте родительской группировки с таким именем. Например:
Сумма(Продажи.СуммаОборот) / Вычислить("Сумма(Продажи.СуммаОборот)", "ОбщийИтог")

В данном примере в результате получится отношение суммы по полю "Продажи.СуммаОборот" записи группировки к сумме того же поля во всей компоновке.

ТипРасчета. Тип Строка. В случае если данный параметр имеет значение "ОбщийИтог", выражение будет вычисляться для всех записей группировки. В случае если значение параметра "Группировка", значения будут вычисляться для текущей групповой записи группировки.


Пример решения текущей задачи:

Сумма(СрокОформления)/Вычислить("КОЛИЧЕСТВО(РАЗЛИЧНЫЕ Ответственный)", "ОбщийИтог")

lexunix

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


еще один вопрос: как этот самый отчет сохранить в excel с выбором пути и названия файла, а-ля функция "сохранить как" или "ctrl+s"

нашел следующий код и не совсем понимаю как правильно его реализовать:

    FileDialog = New FileDialog(FileDialogMode.Save);
  //  FileDialog.FullFileName = "Реестр платежей за ";
    FileDialog.Filter       = "Excel 97-03 (*.xls)|*.xls|Excel 2007 (*.xlsx)|*.xlsx";
    FileDialog.Multiselect  = False;
    FileDialog.Title        = "Выберите файл";

    If FileDialog.Choose() Then
      
       Extention = ?(Right(FileDialog.SelectedFiles[0], 4) = ".xls", ".xls", ".xlsx");
       FileName  = Left(FileDialog.SelectedFiles[0], StrLen(FileDialog.SelectedFiles[0]) - StrLen(Extention));
      
       Try
          Excel    = New COMObject("Excel.Application");
          Book_exp = Excel.Workbooks.Add();   
       Except
          Message("Не удалось сохранить данные отчета в формате Excel!", MessageStatus.Important);
       EndTry;   
      
       For SheetNum = 1 To Book_exp.Sheets.Count - 1 Do
          Book_exp.Sheets(1).Delete();
       EndDo;   
     Endif;

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

Похожие темы (5)

Рейтинг@Mail.ru

Поиск