Яндекс.Метрика
  Афина. Таблица в отчетах с неизвестным заранее количеством колонок
Часть 4. Вывод данных

К содержанию

   

Печать данных в таблице будем делать двумя способами (см. предыдущую часть 3).

Начисления - первым способом - через текст, удержания - через функцию поля (эта функция названа "ЯчейкаУдерж").

В редакторе функций надо найти функцию "П4Т1", которая связана со статической ячейкой в первой колонке Начислений.
Вполне возможно, что в вашем конкретном примере эта функция будет именоваться по-другому, но в этом примере речь идет о второй колонке слева.
Эта функция будет выводить данные не только в колонку, которая создана на этапе конструирования, но и в колонки, которые были сформированы из программы.

функция П4Т1 : Строка
переменные число
В;
начало
  цикл В от 2 до ВидовН делать
    ПечатьВЯч(В-1, 12, 0, ЧислоВСтроку(кНСум(В)), 2); !вывод сумм в дополнительные колонки
  конец;
  выход ЧислоВСтроку(кНСум(1)) !вывод суммы первого начисления
конец
 

Колонка кНСум содержит три числа для каждого вида начисления по одному конкретному работнику. Наш пример не связан с базой данных, поэтому в колонку значения добавляем вручную.
Это можно сделать в функции, которая выводит фамилии ("П1Т1").

функция П1Т1 : Строка
начало
  если А = 1 то
    кНСум := Массив(6000, 5000, 1000); кУСум := Массив(1560, 0);
  конец
  если А = 2 то
    кНСум := Массив(5000, 4000, 0); кУСум := Массив(1170, 100);
  конец
  если А = 3 то
    кНСум := Массив(3000, 1500, 900); кУСум := Массив(702, 0);
  конец

  цикл Б от 1 до ВидовН делать китНСум(Б) := китНСум(Б) + кНСум(Б); конец;
  цикл Б от 1 до ВидовУ делать китУСум(Б) := китУСум(Б) + кУСум(Б); конец;
  выход кР(А) !вывод фамилии
конец
 

Функции связанные с ячейками, расположенными в строке вертикального цикла ("П1Т1", "П4Т1", "П2Т1"... "П12Т1") будут вызываться столько раз сколько будет итераций по этому циклу и зависит от количества работников (в нашем примере 3 раза).
Каждая итерация по работнику увеличивает значение управляющей переменной цикла "А" на единицу, поэтому для каждого работника в колонках кНСум и кУСум будут различные суммы начислений и удержаний.
Соответствующее количество элементов в этих массивах (по количеству видов начислений и удержаний) было вставлено в функции "Подготовка".

Там же в функции "П1Т1" в массивах итогов подсчитываем итоги по каждой из колонок.

Для вывода в дополнительную колонку удержание применим второй способ - через функцию поля.

функция П6Т1 : Строка
начало
  выход ЧислоВстроку(кУСум(1))
конец

функция ЯчейкаУдерж : строка
начало
  выход ЧислоВСтроку(кУСум(ГруппаЯч+1))
конец
 

Функция "П6Т1" выведет сумму для первой (статической) колонки - именно к ячейке этой колонки  функция и "привязана".
Функция "ЯчейкаУдерж" связана с добавленной программно ячейкой и будет вызываться тогда когда очередь печати дойдет до этой добавленной ячейки.

Для индексации значений массива чисел здесь применяется встроенная функция ГруппаЯч, которая возвращает номер группы очередной (в которой сейчас происходит вывод текста) ячейки.
При программном добавлении колонок удержаний (в примере добавлена только одна, в общем случае может быть добавлено больше) колонкам присвоены номера групп (здесь номер 1).
Выражение ГруппаЯч+1 будет иметь значение 2.
Так как значение первой колонки уже выведено в функции "П6Т1", то функция ЯчейкаУдерж вернет значение из элемента кУСум(2), что и требуется.

Если бы добавленных колонок удержаний было более одной, то при печати эта функция вызывалась бы столько же раз. При этом функция ГруппаЯч всякий раз возвращала другой номер группы.

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


Часть 1. Программное добавление колонок в таблицу.
Часть 2. Программное объединение ячеек
Часть 3. Способы вывода данных в ячейках, созданных программно.
Часть 4. Вывод данных

 
 
  К содержанию
Hosted by uCoz