среда, 3 июня 2015 г.

Создание контрольных листов

В некоторых обработках,связанных с проверкой ошибок данные с различными возможными ошибками отфильтровываются на отдельные листы. Таких листов в книге может быть очень много.
Чтобы упросить проверку и не просматривать каждый лист в отчете, можно создать один контрольный лист на который будут выведенные данные об ошибках со всех листов. На этом листе будет видно, где есть ошибки, а где нет.
Для таких листов активно используются функции SUM - которая подсчитывает кол-во возвращенных единиц и нулей в функциях вида IF(ISERROR). функции COUNTA - которая посчитывает кол-во непустых заполненных строк на отдельным листе (отфильтрованные строки с ошибками) и функции COUNTIF которая проводит суммирование по условию с отдельных листов.
Рассмотрим часть кода для контрольного листа на примере макроса проверки ВП:

ThisComponent.CurrentController.Select(oCell)
ThisComponent.Sheets(7).getCellByPosition (0, 0).String = "Показатель"
ThisComponent.Sheets(7).getCellByPosition (1, 0).String = "Значение"
ThisComponent.Sheets(7).getCellByPosition (0, 1).String = "Кол-во позиций не СП ГМ в ВП Готовой продукции"
ThisComponent.Sheets(7).getCellByPosition (0, 2).String = "Кол-во штучных позиций в ВП Готовой продукции, списанных дробным числом"
ThisComponent.Sheets(7).getCellByPosition (0, 3).String = "Кол-во ГП в ВП между цехами, заведенных с подтипом Внутри подразделения"
ThisComponent.Sheets(7).getCellByPosition (0, 4).String = "Кол-во штучных позиций в ВП с Торгового зала заведенных дробным числом"
ThisComponent.Sheets(7).getCellByPosition (0, 5).String = "Кол-во позиций ГП, перемещенных с Торгового зала"
ThisComponent.Sheets(7).getCellByPosition (0, 6).String = "Из них рецептов Пекарни, перемещенных с ТЗ на Пекарню"
ThisComponent.Sheets(7).getCellByPosition (0, 7).String = "Из них ГП в ВП Автоматическом (приемка товара не на ту карточку)"
ThisComponent.Sheets (7).getCellByPosition(1, 1).Setformula  ("=COUNTA('Не СП ГМ в ВП Готовой продукции'.C2:C65536)")
ThisComponent.Sheets (7).getCellByPosition(1, 2).Setformula  ("=SUM('Штучные позиции в ВП ГП'.M2:M65536)")
ThisComponent.Sheets (7).getCellByPosition(1, 3).Setformula  ("=COUNTA('ГП в ВП Внутри подразделения_'.C2:C65536)")
ThisComponent.Sheets (7).getCellByPosition(1, 4).Setformula  ("=SUM('Штучные с ТЗ'.M2:M65536)")
ThisComponent.Sheets (7).getCellByPosition(1, 5).Setformula  ("=COUNTA('Перемещение ГП с ТЗ'.C2:C65536)")
ThisComponent.Sheets (7).getCellByPosition(1, 6).Setformula ("=(COUNTIF('Перемещение ГП с ТЗ'.I2:I65536;"&Chr(34) & "=Пекарня" &Chr(34) & ")+COUNTIF('Перемещение ГП с ТЗ'.L2:L65536;"&Chr(34) & "=Пекарня" &Chr(34) & "))/2")
ThisComponent.Sheets(7).getCellByPosition (3, 0).String = "Примечание"
If ThisComponent.Sheets (7).getCellByPosition(1, 1).Value > 0 Then
ThisComponent.Sheets(7).getCellByPosition (3, 1).String = "Есть ошибки"
Else ThisComponent.Sheets(7).getCellByPosition (3, 1).String = "Нет ошибок"
End if
If ThisComponent.Sheets (7).getCellByPosition(1, 2).Value > 0 Then
ThisComponent.Sheets(7).getCellByPosition (3, 2).String = "Есть ошибки"
Else ThisComponent.Sheets(7).getCellByPosition (3, 2).String = "Нет ошибок"
End if
If ThisComponent.Sheets (7).getCellByPosition(1, 3).Value > 0 Then
ThisComponent.Sheets(7).getCellByPosition (3, 3).String = "Есть ошибки"
Else ThisComponent.Sheets(7).getCellByPosition (3, 3).String = "Нет ошибок"
End if
If ThisComponent.Sheets (7).getCellByPosition(1, 4).Value > 0 Then
ThisComponent.Sheets(7).getCellByPosition (3, 4).String = "Есть ошибки"
Else ThisComponent.Sheets(7).getCellByPosition (3, 4).String = "Нет ошибок"
End if
If ThisComponent.Sheets (7).getCellByPosition(1, 5).Value <> ThisComponent.Sheets (7).getCellByPosition(1, 6).Value Then
ThisComponent.Sheets(7).getCellByPosition (3, 5).String = "Есть ошибки"
Else ThisComponent.Sheets(7).getCellByPosition (3, 5).String = "Нет ошибок,  либо есть только перемещения ГП с ТЗ по ГП Пекарни на цех Пекарни (х/б на сухари)"
End if
If ThisComponent.Sheets (7).getCellByPosition(1, 6).Value > 0 Then
ThisComponent.Sheets(7).getCellByPosition (3, 6).String = "Есть ошибки"
Else ThisComponent.Sheets(7).getCellByPosition (3, 6).String = "Нет ошибок"
End if

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

Задача: Потренироваться в программном вводе формул  файле реестр документов по МХ. Создайте новый лист и на нем рассчитайте данные:
- общее число заполненных строк на листе 1
- количество операций Питание персонала
- сумму операций с подтипом Утиль производства ГМ
- сумму операций Утиль производства ГМ и Готовой продукции

Комментариев нет:

Отправить комментарий