Смекни!
smekni.com

Анализ и оценка надежности и эффективности АИС "Бюджет" (стр. 4 из 12)

Например, в формы месячной отчетности внесены изменения бюджетной классификации[10]. Тогда создается скрипт на ABL, который выглядит следующим образом:

<?xml version="1.0" encoding="windows-1251" ?>

- <registry>

- <node path="%root%">

- <node path="Объекты">

- <node path="Интерфейсы">

- <node path="{EC6083A1-BC20-4FC8-AAFF-20399B48497A}">

- <node path="Выпадающие меню">

- <node path="Меню принятия/отмены принятия">

- <node path="Принять отчеты">

<value type="3" name="Действие">УстановитьДатуПринятия</value>

<param value="Действие" type="3" name="crc32">$E5CA2E34</param>

<param value="Действие" type="3" name="version">36.044.79</param>

<value type="3" name="Картинка">Галочка</value>

<param value="Картинка" type="3" name="crc32">$3605C21A</param>

<param value="Картинка" type="3" name="version">36.044.79</param>

</node>

- <node path="Снять принятие">

<value type="3" name="Действие">СнятьДатуПринятия</value>

<param value="Действие" type="3" name="crc32">$FED06E36</param>

<param value="Действие" type="3" name="version">36.044.79</param>

<value type="3" name="Картинка">Обновить</value>

<param value="Картинка" type="3" name="crc32">$BEC3BCE7</param>

<param value="Картинка" type="3" name="version">36.044.79</param>

</node>

</node>

</node>

- <node path="Действия">

- <node path="КонтрольКлассификации">

<value type="7" name="Код программы">включить '&bsol;Библиотеки&bsol;LibRu.lib'; включить '&bsol;Библиотеки&bsol;Forms.lib'; включить "Бюджет&bsol;Объекты&bsol;Контроль&bsol;Скрипты&bsol;События&bsol;КонтрольКлассификации"; включить '&bsol;Макросы&bsol;КИ&bsol;ПоддержкаПроекта'; включить 'project'; константы кПутьККонфигурации = "Бюджет&bsol;Объекты&bsol;Настройки&bsol;Консолидация&bsol;КонтрольКлассификации"; кКонфигурация = "Конфигурация"; // берем либо выделенные, либо текущую запись функция ПолучитьВыделенныеИлиТекущую(СеткаВвода: СеткаДанных; Данные: СтатическиеДанные): СтатическиеДанные; начало если СеткаВвода.ЕстьВыделенныеСтроки тогда результат := СеткаВвода.ПолучитьВыделенныеСтроки иначе начало // ничего не выделено, тогда занесем в выделенные текущую запись мастера результат := СоздатьСтатическиеДанные; результат.ПрисвоитьПоля(Данные); результат.Открыть; результат.СкопироватьЗапись(1, Данные); конец; конец; // функция ПроверитьКорректностьКлассификацииДанных(Данные: СтатическиеДанные; Конфигурация: СтатическиеДанные): Целое; переменные ИмяПоляДляКонтроля: строка; Классификация: строка; ТипПроверки: Целое; ТипКлассификации: Целое; начало результат := да; ИмяПоляДляКонтроля := Конфигурация.Поле('ControlField').КакСтрока; ТипПроверки := Конфигурация.Поле('ControlType').КакЦелое; ТипКлассификации := Конфигурация.Поле('ClsType').КакЦелое; Данные.Вначало; пока не Данные.ВКонце и результат делать начало Классификация := Данные.Поле(ИмяПоляДляКонтроля).КакСтрока; результат := ПроверитьКлассификацию(Классификация, ТипПроверки, ТипКлассификации); Данные.Следующая; конец; конец; // проверка отчета на корректность классификации функция ПроверитьКорректностьКлассификацииОтчета(КодОтчета: Целое; КодФормы: Целое; Конфигурация: СтатическиеДанные): Целое; переменные ФормаВвода: IBaseForm; НомерДетализации: Целое; ДанныеДетализации: СтатическиеДанные; начало результат := да; Конфигурация.SetScope(МассивИз(КодФормы)); если Конфигурация.ЧислоЗаписей > 0 тогда начало // загружаем детализацию ФормаВвода := ПостроитьФормуВвода(КодОтчета, КодФормы, nil); ФормаВвода.ShowDataEx(sdoNotShow + sdoStatic); // проверяем все контроли Конфигурация.ВНачало; пока не Конфигурация.ВКонце и результат делать начало НомерДетализации := Конфигурация.Поле('DetailNumber').КакЦелое; ДанныеДетализации := ФормаВвода.StaticSets(НомерДетализации); если ДанныеДетализации.ЧислоЗаписей > 0 тогда результат := ПроверитьКорректностьКлассификацииДанных(ДанныеДетализации, Конфигурация); Конфигурация.Следующая; конец; ФормаВвода.ClearStatics; конец; конец; // загрузка конфигурации из реестра функция ПолучитьКонфигурацию: СтатическиеДанные; начало результат := СоздатьДанныеИзРеестра(кПутьККонфигурации, кКонфигурация); результат.IndexFieldNames := 'FormID'; конец; // проверка набора отчетов функция ПроверитьНаборОтчетов(Выделенные, Заголовок, Конфигурация: СтатическиеДанные): Целое; переменные КлассификацияКорректна: Целое; КодОтчета: Целое; КодФормы: Целое; начало КлассификацияКорректна := да; результат := 0; Выделенные.ВНачало; пока не Выделенные.ВКонце делать начало КодОтчета := Выделенные.Поле('ID').КакЦелое; если Заголовок.Locate('ID', КодОтчета, 0) тогда начало КодФормы := Заголовок.Поле('TYPEDFORM').КакЦелое; КлассификацияКорректна := ПроверитьКорректностьКлассификацииОтчета(КодОтчета, КодФормы, Конфигурация); // записываем результат проверки если КлассификацияКорректна тогда начало Заголовок.Поле('ControlMessage').КакСтрока := ''; Заголовок.Поле('ControlResult').КакЦелое := -1; конец иначе начало Заголовок.Поле('ControlResult').КакЦелое := 10; Заголовок.Поле('ControlMessage').КакСтрока := 'Есть ошибки бюджетной классификации'; результат := результат + 1; конец; конец; Выделенные.Следующая; конец; конец; переменные ф: ФормаВвода; Заголовок, Выделенные, Конфигурация: СтатическиеДанные; КоличествоОшибок: целое; начало Ф := ПолучитьФормуВвода; Заголовок := Ф.Заголовки.Таблица; если не Заголовок.Active или (Заголовок.ЧислоЗаписей = 0) тогда ВызватьОшибку('Нет данных для проверки'); // считываем конфигурацию для проверки Конфигурация := ПолучитьКонфигурацию(); попытка // набор отчетов для проверки Выделенные := ПолучитьВыделенныеИлиТекущую(Ф.Заголовки.Сетка, Заголовок); попытка КоличествоОшибок := ПроверитьНаборОтчетов(Выделенные, Заголовок, Конфигурация); обязательно УдалитьОбъект(Выделенные); конец; обязательно УдалитьОбъект(Конфигурация); конец; // сообщаем результаты проверки если КоличествоОшибок = 0 тогда Сообщение('Ошибок ввода классификации не найдено') иначе Сообщение(Формат('Найдено %d документов с ошибочной классификацией', КоличествоОшибок)); конец.</value>

<param value="Код программы" type="1" name="AccessCount">23</param>

<param value="Код программы" type="2" name="AccessDate">39377,8330395718</param>

<param value="Код программы" type="3" name="crc32">$17DD9440</param>

<param value="Код программы" type="3" name="version">36.044.79</param>

<param value="Код программы" type="3" name="Export">DIMAN2&bsol;dzimitchev&bsol;16.02.2009 16:44:59</param>

<value type="4" name="Отладка">0</value>

<param value="Отладка" type="3" name="crc32">$26D930AC</param>

<param value="Отладка" type="3" name="version">36.044.79</param>

</node>

- <node path="КопироватьОтчет">

<value type="7" name="Код программы">включить '&bsol;Библиотеки&bsol;LibRu.lib'; включить '&bsol;Макросы&bsol;КИ&bsol;Запросы'; включить 'project'; /* Для получения запросов на заголовок и детализацию используются функции из модуля Запросы.ТекстПолногоЗапросаФормы и Запросы.ТекстЗапросаДеталиФормы соответственно Эти функции генерируют запросы для выборки и вставки полей с условием */ функция КопироватьДетализацию(КодНовогоОтчета, КодОтчета, КопироватьСуммы: Целое); переменные Данные: СтатическиеДанные; ЗапросВыборки, ЗапросВставки: строка; начало Данные := СоздатьСтатическиеДанные; попытка Данные.СоединитьБД; Данные.CachedUpdates := да; ТекстЗапросаДеталиФормы(ЗапросВыборки, ЗапросВставки, Формат('utypedformsdetail.recordindex=%d', КодОтчета)); Данные.Запрос := Формат('[PUMPDATA]{%s} [INSERTDATA]{%s}', ЗапросВыборки, ЗапросВставки); Данные.Открыть; Данные.ВНачало; пока не Данные.ВКонце делать начало Данные.Поле('recordindex').КакЦелое := КодНовогоОтчета; Данные.UpdateStatus := usInserted; Данные.Следующая; конец; Данные.СохранитьИзменения; обязательно УдалитьОбъект(Данные); конец; конец; функция КопироватьЗаголовок(КодОтчета: Целое): Целое; переменные Данные: СтатическиеДанные; ЗапросВыборки, ЗапросВставки, ЗапросИзменения: строка; начало Данные := СоздатьСтатическиеДанные; попытка Данные.СоединитьБД; Данные.CachedUpdates := да; ТекстПолногоЗапросаФормы(ЗапросВыборки, ЗапросИзменения, ЗапросВставки, '550', Формат('utfc.id = %d', КодОтчета)); Данные.Запрос := Формат('[PUMPDATA]{%s} [INSERTDATA]{%s}', ЗапросВыборки, ЗапросВставки); Данные.Открыть; результат := ГенерироватьДиап('g_shared'); Данные.Поле('DocNumber').КакСтрока := 'Копия ' + Данные.Поле('DocNumber').КакСтрока; Данные.Поле('ID').КакЦелое := результат; Данные.Поле('AcceptDate').Очистить; если не Данные.Поле('DocStateref').Пустое тогда Данные.Поле('DocStateRef').КакЦелое := (Данные.Поле('DocStateRef').КакЦелое цел 10) * 10 + 01; Данные.UpdateStatus := usInserted; Данные.СохранитьИзменения; обязательно УдалитьОбъект(Данные); конец; конец; переменные Заголовки: СтатическиеДанные; ф: ФормаВвода; КодОтчета, КодНовогоОтчета: целое; начало //задача: скопировать текущую запись, номер документа заменить на "Копия <номер документа>", дату принятия игнорировать... ф := ПолучитьФормуВвода; если ф.ЕстьИзменения тогда ВызватьОшибку('Перед копированием отчетов надо сохранить все изменения!'); Заголовки := ф.Заголовки.Таблица; если Заголовки.ЧислоЗаписей = 0 тогда ВызватьОшибку('Нет отчета для копирования!'); КодОтчета := Заголовки.Поле('ID').КакЦелое; // копируем заголовок КодНовогоОтчета := КопироватьЗаголовок(КодОтчета); // копируем детализацию КопироватьДетализацию(КодНовогоОтчета, КодОтчета, ); // сохраняем изменения ф.СохранитьИзменения; Сообщение('Отчет был успешно скопирован!'); конец.</value>

<param value="Код программы" type="1" name="AccessCount">12</param>

<param value="Код программы" type="2" name="AccessDate">39405,7255468518</param>