По проверке баз

Все вопросы по АС Бюджет
user
кандидат 1го уровня
кандидат 1го уровня
Сообщения: 2
Зарегистрирован: 14.05.2008 13:30

Re: По проверке баз

Сообщение user » 22.05.2008 15:09

по пункту 5 искать ошибки не стал, так как ставили операции в документах, а не в уведомлении
поэтому просто поправил "ошибки" оптом
выполнять по частям по порядку: в SQL редакторе и редакторе скриптов:
commit ручкими после каждой операции

Код: Выделить всё

-- операции для уведомления на уточнение (выбытие)
update buh_journal bj
set bj.buhoperationcls=602
where bj.progindex = 312


-- операции для уведомления на уточнение (проступление)
update buh_journal bj
set bj.buhoperationcls=699
where bj.progindex = 313

--------------в редакторе скриптов------------------------
SET TERM ^ ;
create PROCEDURE AAA
AS
DECLARE VARIABLE ID_RECORD INTEGER;
begin
  for
    select bj.sourcerecordindex
    from buh_journal bj
    where bj.progindex in (312,313)
    union
    select bj.destrecordindex
    from buh_journal bj
    where bj.progindex in (312,313)
    into :ID_RECORD
    do begin
      update facialfindetail ffd
      set ffd.buhoperationcls=99999
      where ffd.id=:ID_RECORD;

      update incomes32 i32
      set i32.buhoperationcls=99999
      where i32.id=:ID_RECORD;
    end
    suspend;
  /* Procedure Text */
end

^

SET TERM ; ^
-------------------------------------

--
execute procedure aaa
--
drop procedure aaa

Аватара пользователя
Val
зам. председателя совета директоров
зам. председателя совета директоров
Сообщения: 2029
Зарегистрирован: 09.06.2004 08:52
Откуда: Ейск
Контактная информация:

Re: По проверке баз

Сообщение Val » 20.07.2009 16:41

Скрипт на проверку БД АС Бюджет для использования юзерами.
Выглядит так (см. скриншот).
Пока трудности с тем, что нужно проверять, т.е. не могу выдумать вопросов для проверки.
У вас нет необходимых прав для просмотра вложений в этом сообщении.

Аватара пользователя
Val
зам. председателя совета директоров
зам. председателя совета директоров
Сообщения: 2029
Зарегистрирован: 09.06.2004 08:52
Откуда: Ейск
Контактная информация:

Re: По проверке баз

Сообщение Val » 21.07.2009 17:34

Добавил "контроль контролей" (проверяет наличие нужных галок на раскладчике и контрольное поле).
Добавил проверку на "ЕдиныйСчет" на СБР, БР, КП, ПОФ.
пример тестового лога:

Код: Выделить всё

-----------------------------------------------------------------
2.1.2 Проверка СБР на ВидПлана
У СБР ВидПлана должен быть 1.00 или 2.00
завершилась удачно
-----------------------------------------------------------------
2.1.3 Проверка СБР на Операцию
У СБР Операция должна быть 034.01 или 035.04 (034.05 тоже возможна, но пока не точно)
завершилась НЕУДАЧНО
Данные должны быть : 3401,3504
Данные не соответствующие    : 3405
документ номер 902/003 от 20090218 введены ошибочные данные 3405
документ номер 902/003 от 20090218 введены ошибочные данные 3405
документ номер 902/019 от 20090513 введены ошибочные данные 3405
документ номер 902/019 от 20090513 введены ошибочные данные 3405
-----------------------------------------------------------------
2.2.2 Проверка БР на ВидПлана
У БР ВидПлана должен быть 1.01 и 2.01
завершилась НЕУДАЧНО
Данные должны быть : 101,201
Данные не соответствующие    : 200
документ номер 905/005 от 20090716 введены ошибочные данные 200
-----------------------------------------------------------------
2.2.3 Проверка БР на Операцию
У БР Операция должна быть 035.03 (035.01 тоже возможна, но пока не точно)
завершилась НЕУДАЧНО
Данные должны быть : 3503
Данные не соответствующие    : 3501
документ номер 902/003 от 20090218 введены ошибочные данные 3501
документ номер 902/003 от 20090218 введены ошибочные данные 3501
документ номер 902/035 от 20090513 введены ошибочные данные 3501
документ номер 902/035 от 20090513 введены ошибочные данные 3501
-----------------------------------------------------------------
2.3.2 Проверка КП (расходы) на Операцию
Операция на КП (расходы) должна быть 000.00 или 999.99
завершилась удачно
-----------------------------------------------------------------
99.0.1 Проверка ЕДИНОГО счета на СБР
У записей СБР в детали должен быть указан ЕДИНЫЙ СЧЕТ
завершилась НЕУДАЧНО
Данные должны быть :
Данные не соответствующие    :
документ номер 902/004 от 20090316 введены ошибочные данные ПУСТОЙ
документ номер 902/034 от 20090709 введены ошибочные данные ПУСТОЙ
документ номер 926/002 от 20090127 введены ошибочные данные ПУСТОЙ
документ номер 926/003 от 20090127 введены ошибочные данные ПУСТОЙ
документ номер 926/004 от 20090130 введены ошибочные данные ПУСТОЙ
документ номер 926/017 от 20090407 введены ошибочные данные ПУСТОЙ
документ номер 926/018 от 20090421 введены ошибочные данные ПУСТОЙ
документ номер 926/022 от 20090527 введены ошибочные данные ПУСТОЙ
документ номер 926/025 от 20090616 введены ошибочные данные ПУСТОЙ
документ номер 926/026 от 20090616 введены ошибочные данные ПУСТОЙ
документ номер 926/027 от 20090624 введены ошибочные данные ПУСТОЙ
документ номер 926/029 от 20090721 введены ошибочные данные ПУСТОЙ
документ номер 928/004 от 20090130 введены ошибочные данные ПУСТОЙ
документ номер 928/005 от 20090130 введены ошибочные данные ПУСТОЙ
документ номер 928/006 от 20090212 введены ошибочные данные ПУСТОЙ
документ номер 928/010 от 20090430 введены ошибочные данные ПУСТОЙ
документ номер 929/002 от 20090130 введены ошибочные данные ПУСТОЙ
документ номер 929/003 от 20090320 введены ошибочные данные ПУСТОЙ
документ номер 934/010 от 20090506 введены ошибочные данные ПУСТОЙ
документ номер 992/11/007/2 от 20090209 введены ошибочные данные ПУСТОЙ
-----------------------------------------------------------------
99.0.2 Проверка ЕДИНОГО счета на БР
У записей БР в детали должен быть указан ЕДИНЫЙ СЧЕТ
завершилась НЕУДАЧНО
Данные должны быть :
Данные не соответствующие    :
документ номер 902/029 от 20090430 введены ошибочные данные ПУСТОЙ
документ номер 902/062 от 20090714 введены ошибочные данные ПУСТОЙ
документ номер 925/007 от 20090210 введены ошибочные данные ПУСТОЙ
документ номер 928/005 от 20090130 введены ошибочные данные ПУСТОЙ
документ номер 928/006 от 20090130 введены ошибочные данные ПУСТОЙ
документ номер 928/007 от 20090212 введены ошибочные данные ПУСТОЙ
документ номер 953/003 от 20090130 введены ошибочные данные ПУСТОЙ
документ номер 953/005 от 20090210 введены ошибочные данные ПУСТОЙ
документ номер 992/02/014 от 20090424 введены ошибочные данные ПУСТОЙ
документ номер 992/10/030 от 20090521 введены ошибочные данные ПУСТОЙ
-----------------------------------------------------------------
99.0.3 Проверка ЕДИНОГО счета на КП
У записей КП в детали должен быть указан ЕДИНЫЙ СЧЕТ
завершилась НЕУДАЧНО
Данные должны быть :
Данные не соответствующие    : 02183026800,
документ номер 902/002 от 20090130 введены ошибочные данные 02183026800
документ номер 902/004 от 20090316 введены ошибочные данные 02183026800
документ номер 902/019 от 20090506 введены ошибочные данные 02183026800
документ номер 902/031 от 20090615 введены ошибочные данные 02183026800
документ номер 902/033 от 20090615 введены ошибочные данные 02183026800
документ номер 921/003 от 20090304 введены ошибочные данные 02183026800
документ номер 923/002 от 20090130 введены ошибочные данные 02183026800
документ номер 923/003 от 20090210 введены ошибочные данные 02183026800
документ номер 925/004 от 20090318 введены ошибочные данные 02183026800
документ номер 926/001 от 20090111 введены ошибочные данные 02183026800
документ номер 926/002 от 20090130 введены ошибочные данные 02183026800
документ номер 926/003 от 20090130 введены ошибочные данные 02183026800
документ номер 926/005 от 20090325 введены ошибочные данные 02183026800
документ номер 926/006 от 20090415 введены ошибочные данные 02183026800
документ номер 926/007 от 20090504 введены ошибочные данные 02183026800
документ номер 926/008 от 20090519 введены ошибочные данные 02183026800
документ номер 926/009 от 20090601 введены ошибочные данные 02183026800
документ номер 928/006 от 20090130 введены ошибочные данные 02183026800
документ номер 928/007 от 20090212 введены ошибочные данные 02183026800
документ номер 928/008 от 20090219 введены ошибочные данные 02183026800
документ номер 928/009 от 20090219 введены ошибочные данные 02183026800
документ номер 928/010 от 20090313 введены ошибочные данные 02183026800
документ номер 929/002 от 20090130 введены ошибочные данные 02183026800
документ номер 929/003 от 20090403 введены ошибочные данные 02183026800
документ номер 929/006 от 20090429 введены ошибочные данные 02183026800
документ номер 934/006 от 20090327 введены ошибочные данные 02183026800
документ номер 992/07/013 от 20090615 введены ошибочные данные 02183026800
документ номер 992/09/001 от 20090111 введены ошибочные данные 02183026800
документ номер 992/09/003 от 20090128 введены ошибочные данные 02183026800
документ номер 992/09/005 от 20090216 введены ошибочные данные 02183026800
документ номер 992/09/006 от 20090216 введены ошибочные данные 02183026800
документ номер 992/09/007 от 20090224 введены ошибочные данные 02183026800
документ номер 902/002 от 20090130 введены ошибочные данные ПУСТОЙ
документ номер 902/004 от 20090316 введены ошибочные данные ПУСТОЙ
документ номер 902/019 от 20090506 введены ошибочные данные ПУСТОЙ
документ номер 902/031 от 20090615 введены ошибочные данные ПУСТОЙ
документ номер 902/033 от 20090615 введены ошибочные данные ПУСТОЙ
документ номер 921/003 от 20090304 введены ошибочные данные ПУСТОЙ
документ номер 923/002 от 20090130 введены ошибочные данные ПУСТОЙ
документ номер 923/003 от 20090210 введены ошибочные данные ПУСТОЙ
документ номер 925/004 от 20090318 введены ошибочные данные ПУСТОЙ
документ номер 926/001 от 20090111 введены ошибочные данные ПУСТОЙ
документ номер 926/002 от 20090130 введены ошибочные данные ПУСТОЙ
документ номер 926/003 от 20090130 введены ошибочные данные ПУСТОЙ
документ номер 926/005 от 20090325 введены ошибочные данные ПУСТОЙ
документ номер 926/006 от 20090415 введены ошибочные данные ПУСТОЙ
документ номер 926/007 от 20090504 введены ошибочные данные ПУСТОЙ
документ номер 926/008 от 20090519 введены ошибочные данные ПУСТОЙ
документ номер 926/009 от 20090601 введены ошибочные данные ПУСТОЙ
документ номер 928/006 от 20090130 введены ошибочные данные ПУСТОЙ
документ номер 928/007 от 20090212 введены ошибочные данные ПУСТОЙ
документ номер 928/008 от 20090219 введены ошибочные данные ПУСТОЙ
документ номер 928/009 от 20090219 введены ошибочные данные ПУСТОЙ
документ номер 928/010 от 20090313 введены ошибочные данные ПУСТОЙ
документ номер 929/002 от 20090130 введены ошибочные данные ПУСТОЙ
документ номер 929/003 от 20090403 введены ошибочные данные ПУСТОЙ
документ номер 929/006 от 20090429 введены ошибочные данные ПУСТОЙ
документ номер 934/006 от 20090327 введены ошибочные данные ПУСТОЙ
документ номер 992/07/013 от 20090615 введены ошибочные данные ПУСТОЙ
документ номер 992/09/006 от 20090216 введены ошибочные данные ПУСТОЙ
-----------------------------------------------------------------
99.0.4 Проверка ЕДИНОГО счета на ПОФ
У записей ПОФ в детали должен быть указан ЕДИНЫЙ СЧЕТ
завершилась НЕУДАЧНО
Данные должны быть :
Данные не соответствующие    : 02183026800,
документ номер 901/004 от 20090303 введены ошибочные данные 02183026800
документ номер 901/005 от 20090311 введены ошибочные данные 02183026800
документ номер 901/006 от 20090403 введены ошибочные данные 02183026800
документ номер 902/001 от 20090111 введены ошибочные данные 02183026800
документ номер 902/008 от 20090130 введены ошибочные данные 02183026800
документ номер 902/010 от 20090210 введены ошибочные данные 02183026800
документ номер 902/012 от 20090202 введены ошибочные данные 02183026800
документ номер 902/017 от 20090303 введены ошибочные данные 02183026800
документ номер 902/020 от 20090316 введены ошибочные данные 02183026800
документ номер 902/035 от 20090505 введены ошибочные данные 02183026800
документ номер 902/037 от 20090506 введены ошибочные данные 02183026800
документ номер 902/044 от 20090602 введены ошибочные данные 02183026800
документ номер 921/006 от 20090304 введены ошибочные данные 02183026800
документ номер 921/007 от 20090325 введены ошибочные данные 02183026800
документ номер 921/008 от 20090401 введены ошибочные данные 02183026800
документ номер 921/013 от 20090505 введены ошибочные данные 02183026800
документ номер 921/014 от 20090515 введены ошибочные данные 02183026800
документ номер 921/016 от 20090601 введены ошибочные данные 02183026800
документ номер 921/017 от 20090629 введены ошибочные данные 02183026800
документ номер 923/002 от 20090205 введены ошибочные данные 02183026800
документ номер 923/003 от 20090303 введены ошибочные данные 02183026800
документ номер 923/004 от 20090306 введены ошибочные данные 02183026800
документ номер 923/007 от 20090410 введены ошибочные данные 02183026800
документ номер 925/001 от 20090111 введены ошибочные данные 02183026800
документ номер 925/003 от 20090204 введены ошибочные данные 02183026800
документ номер 925/005 от 20090210 введены ошибочные данные 02183026800
документ номер 925/007 от 20090219 введены ошибочные данные 02183026800
документ номер 925/010 от 20090310 введены ошибочные данные 02183026800
документ номер 925/011 от 20090305 введены ошибочные данные 02183026800
документ номер 925/012 от 20090311 введены ошибочные данные 02183026800
документ номер 925/013 от 20090318 введены ошибочные данные 02183026800
документ номер 926/001 от 20090111 введены ошибочные данные 02183026800
документ номер 926/002 от 20090130 введены ошибочные данные 02183026800
документ номер 926/003 от 20090130 введены ошибочные данные 02183026800
документ номер 926/025 от 20090709 введены ошибочные данные 02183026800
документ номер 928/004 от 20090130 введены ошибочные данные 02183026800
документ номер 928/006 от 20090204 введены ошибочные данные 02183026800
документ номер 928/007 от 20090212 введены ошибочные данные 02183026800
документ номер 928/008 от 20090219 введены ошибочные данные 02183026800
документ номер 928/009 от 20090219 введены ошибочные данные 02183026800
документ номер 928/010 от 20090303 введены ошибочные данные 02183026800
документ номер 929/002 от 20090205 введены ошибочные данные 02183026800
документ номер 929/003 от 20090303 введены ошибочные данные 02183026800
документ номер 929/004 от 20090320 введены ошибочные данные 02183026800
документ номер 929/007 от 20090429 введены ошибочные данные 02183026800
документ номер 953/005 от 20090210 введены ошибочные данные 02183026800
документ номер 992/001/001 от 20090111 введены ошибочные данные 02183026800
документ номер 992/06/005 от 20090219 введены ошибочные данные 02183026800
документ номер 992/09/002 от 20090128 введены ошибочные данные 02183026800
документ номер 992/10/004 от 20090111 введены ошибочные данные 02183026800
документ номер 992/11/015 от 20090303 введены ошибочные данные 02183026800
документ номер 901/004 от 20090303 введены ошибочные данные ПУСТОЙ
документ номер 901/005 от 20090311 введены ошибочные данные ПУСТОЙ
документ номер 901/006 от 20090403 введены ошибочные данные ПУСТОЙ
документ номер 902/001 от 20090111 введены ошибочные данные ПУСТОЙ
документ номер 902/008 от 20090130 введены ошибочные данные ПУСТОЙ
документ номер 902/010 от 20090210 введены ошибочные данные ПУСТОЙ
документ номер 902/012 от 20090202 введены ошибочные данные ПУСТОЙ
документ номер 902/017 от 20090303 введены ошибочные данные ПУСТОЙ
документ номер 902/020 от 20090316 введены ошибочные данные ПУСТОЙ
документ номер 902/035 от 20090505 введены ошибочные данные ПУСТОЙ
документ номер 902/037 от 20090506 введены ошибочные данные ПУСТОЙ
документ номер 902/044 от 20090602 введены ошибочные данные ПУСТОЙ
документ номер 921/006 от 20090304 введены ошибочные данные ПУСТОЙ
документ номер 921/007 от 20090325 введены ошибочные данные ПУСТОЙ
документ номер 921/008 от 20090401 введены ошибочные данные ПУСТОЙ
документ номер 921/013 от 20090505 введены ошибочные данные ПУСТОЙ
документ номер 921/014 от 20090515 введены ошибочные данные ПУСТОЙ
документ номер 921/016 от 20090601 введены ошибочные данные ПУСТОЙ
документ номер 921/017 от 20090629 введены ошибочные данные ПУСТОЙ
документ номер 923/002 от 20090205 введены ошибочные данные ПУСТОЙ
документ номер 923/003 от 20090303 введены ошибочные данные ПУСТОЙ
документ номер 923/004 от 20090306 введены ошибочные данные ПУСТОЙ
документ номер 923/007 от 20090410 введены ошибочные данные ПУСТОЙ
документ номер 925/001 от 20090111 введены ошибочные данные ПУСТОЙ
документ номер 925/003 от 20090204 введены ошибочные данные ПУСТОЙ
документ номер 925/005 от 20090210 введены ошибочные данные ПУСТОЙ
документ номер 925/007 от 20090219 введены ошибочные данные ПУСТОЙ
документ номер 925/010 от 20090310 введены ошибочные данные ПУСТОЙ
документ номер 925/011 от 20090305 введены ошибочные данные ПУСТОЙ
документ номер 925/012 от 20090311 введены ошибочные данные ПУСТОЙ
документ номер 925/013 от 20090318 введены ошибочные данные ПУСТОЙ
документ номер 926/001 от 20090111 введены ошибочные данные ПУСТОЙ
документ номер 926/002 от 20090130 введены ошибочные данные ПУСТОЙ
документ номер 926/003 от 20090130 введены ошибочные данные ПУСТОЙ
документ номер 926/025 от 20090709 введены ошибочные данные ПУСТОЙ
документ номер 928/004 от 20090130 введены ошибочные данные ПУСТОЙ
документ номер 928/006 от 20090204 введены ошибочные данные ПУСТОЙ
документ номер 928/007 от 20090212 введены ошибочные данные ПУСТОЙ
документ номер 928/008 от 20090219 введены ошибочные данные ПУСТОЙ
документ номер 928/009 от 20090219 введены ошибочные данные ПУСТОЙ
документ номер 928/010 от 20090303 введены ошибочные данные ПУСТОЙ
документ номер 929/002 от 20090205 введены ошибочные данные ПУСТОЙ
документ номер 929/003 от 20090303 введены ошибочные данные ПУСТОЙ
документ номер 929/004 от 20090320 введены ошибочные данные ПУСТОЙ
документ номер 929/007 от 20090429 введены ошибочные данные ПУСТОЙ
документ номер 953/005 от 20090210 введены ошибочные данные ПУСТОЙ
документ номер 992/001/001 от 20090111 введены ошибочные данные ПУСТОЙ
документ номер 992/06/005 от 20090219 введены ошибочные данные ПУСТОЙ
документ номер 992/10/004 от 20090111 введены ошибочные данные ПУСТОЙ
документ номер 992/11/015 от 20090303 введены ошибочные данные ПУСТОЙ
-----------------------------------------------------------------
3.0.1 Проверка контроля 03020305
У контроля 03020305 должны быть установлены галки ПредКонтроль,ПостКонтроль,КонтрольРеестра,ПринудительныйКонтрольНаЗавершениеРедактирования и контролируемое поле REESTRNUMBER
завершилась НЕУДАЧНО
Данные должны быть : 1
Данные не соответствующие    : 0
документ номер Настройки(галки) от  введены ошибочные данные ПУСТОЙ
-----------------------------------------------------------------
3.0.2 Проверка контроля 03020500
У контроля 03020500 должны быть установлены галки ПредКонтроль,ПостКонтроль,КонтрольРеестра,ПринудительныйКонтрольНаЗавершениеРедактирования и контролируемое поле REESTRNUMBER
завершилась НЕУДАЧНО
Данные должны быть : 1
Данные не соответствующие    : 0
-----------------------------------------------------------------
3.0.3 Проверка контроля 03020701
У контроля 03020701 должны быть установлены галки ПредКонтроль,ПринудительныйКонтрольНаЗавершениеРедактирования и контролируемое поле REESTRNUMBER
завершилась НЕУДАЧНО
Данные должны быть : 1
Данные не соответствующие    : 0
документ номер Настройки(галки) от  введены ошибочные данные ПУСТОЙ
-----------------------------------------------------------------
3.0.4 Проверка контроля 03020601
У контроля 03020601 должны быть установлены галки ПредКонтроль,ПостКонтроль,КонтрольРеестра,ПринудительныйКонтрольНаЗавершениеРедактирования и контролируемое поле REESTRNUMBER
завершилась НЕУДАЧНО
Данные должны быть : 1
Данные не соответствующие    : 0
документ номер Настройки(галки) от  введены ошибочные данные ПУСТОЙ
-----------------------------------------------------------------
3.0.5 Проверка контроля 03020303
У контроля 03020303 должны быть установлены галки ПредКонтроль,ПостКонтроль,КонтрольРеестра,ПринудительныйКонтрольНаЗавершениеРедактирования и контролируемое поле REESTRNUMBER
завершилась НЕУДАЧНО
Данные должны быть : 1
Данные не соответствующие    : 0
документ номер Настройки(галки) от  введены ошибочные данные ПУСТОЙ
-----------------------------------------------------------------
3.0.6 Проверка контроля 03020702
У контроля 03020702 должны быть установлены галки ПредКонтроль,ПринудительныйКонтрольНаЗавершениеРедактирования и контролируемое поле REESTRNUMBER
завершилась НЕУДАЧНО
Данные должны быть : 1
Данные не соответствующие    : 0
документ номер Настройки(галки) от  введены ошибочные данные ПУСТОЙ
-----------------------------------------------------------------
3.0.7 Проверка контроля 03022601
У контроля 03022601 должны быть установлены галки ПредКонтроль,ПостКонтроль,КонтрольРеестра,ПредупреждениеНаЗавершениеРедактирования и контролируемое поле REESTRNUMBER
завершилась НЕУДАЧНО
Данные должны быть : 1
Данные не соответствующие    : 0
-----------------------------------------------------------------
3.0.8 Проверка контроля 03040304
У контроля 03040304 должны быть установлены галки ПредКонтроль,ПостКонтроль,КонтрольРеестра,ПринудительныйКонтрольНаЗавершениеРедактирования и контролируемое поле REESTRNUMBER
завершилась НЕУДАЧНО
Данные должны быть : 1
Данные не соответствующие    : 0
документ номер Настройки(галки) от  введены ошибочные данные ПУСТОЙ
-----------------------------------------------------------------
3.0.9 Проверка контроля 03040500
У контроля 03040500 должны быть установлены галки ПредКонтроль,ПостКонтроль,КонтрольРеестра,ПринудительныйКонтрольНаЗавершениеРедактирования и контролируемое поле REESTRNUMBER
завершилась НЕУДАЧНО
Данные должны быть : 1
Данные не соответствующие    : 0
документ номер Настройки(галки) от  введены ошибочные данные ПУСТОЙ
-----------------------------------------------------------------
3.0.10 Проверка контроля 03040801
У контроля 03040801 должны быть установлены галки ПредКонтроль,ПринудительныйКонтрольНаЗавершениеРедактирования и контролируемое поле REESTRNUMBER
завершилась НЕУДАЧНО
Данные должны быть : 1
Данные не соответствующие    : 0
документ номер Настройки(галки) от  введены ошибочные данные ПУСТОЙ
-----------------------------------------------------------------
3.0.11 Проверка контроля 03040303
У контроля 03040303 должны быть установлены галки ПредКонтроль,ПостКонтроль,КонтрольРеестра,ПринудительныйКонтрольНаЗавершениеРедактирования и контролируемое поле REESTRNUMBER
завершилась НЕУДАЧНО
Данные должны быть : 1
Данные не соответствующие    : 0
документ номер Настройки(галки) от  введены ошибочные данные ПУСТОЙ
-----------------------------------------------------------------
3.0.12 Проверка контроля 03040601
У контроля 03040601 должны быть установлены галки ПредКонтроль,ПостКонтроль,КонтрольРеестра,ПринудительныйКонтрольНаЗавершениеРедактирования и контролируемое поле REESTRNUMBER
завершилась НЕУДАЧНО
Данные должны быть : 1
Данные не соответствующие    : 0
документ номер Настройки(галки) от  введены ошибочные данные ПУСТОЙ
-----------------------------------------------------------------
3.0.13 Проверка контроля 03040802
У контроля 03040802 должны быть установлены галки ПредКонтроль,ПринудительныйКонтрольНаЗавершениеРедактирования и контролируемое поле REESTRNUMBER
завершилась НЕУДАЧНО
Данные должны быть : 1
Данные не соответствующие    : 0
документ номер Настройки(галки) от  введены ошибочные данные ПУСТОЙ
-----------------------------------------------------------------
3.0.14 Проверка контроля 02013000
У контроля 02013000 должны быть установлены галки ПредКонтроль,ПостКонтроль,ПринудительныйКонтрольНаЗавершениеРедактирования и контролируемое поле DAT
завершилась удачно
-----------------------------------------------------------------
3.0.15 Проверка контроля 02010200
У контроля 02010200 должны быть установлены галки ПредКонтроль,ПостКонтроль,ПринудительныйКонтрольНаЗавершениеРедактирования и контролируемое поле DAT
завершилась удачно
-----------------------------------------------------------------
3.0.16 Проверка контроля 02010600
У контроля 02010600 должны быть установлены галки ПредКонтроль,ПостКонтроль,ПринудительныйКонтрольНаЗавершениеРедактирования и контролируемое поле DAT
завершилась удачно
-----------------------------------------------------------------
3.0.17 Проверка контроля 02010700
У контроля 02010700 должны быть установлены галки ПредКонтроль,ПостКонтроль,ПринудительныйКонтрольНаЗавершениеРедактирования и контролируемое поле DAT
завершилась удачно
-----------------------------------------------------------------
3.0.18 Проверка контроля 02021601
У контроля 02021601 должны быть установлены галки ПредКонтроль,ПостКонтроль,ПринудительныйКонтрольНаЗавершениеРедактирования и контролируемое поле DAT
завершилась удачно
-----------------------------------------------------------------
3.0.19 Проверка контроля 02021300
У контроля 02021300 должны быть установлены галки ПредКонтроль,ПостКонтроль,ПринудительныйКонтрольНаЗавершениеРедактирования и контролируемое поле DAT
завершилась удачно
-----------------------------------------------------------------
3.0.20 Проверка контроля 02030200
У контроля 02030200 должны быть установлены галки ПредКонтроль,ПостКонтроль,ПринудительныйКонтрольНаЗавершениеРедактирования и контролируемое поле DAT
завершилась удачно
-----------------------------------------------------------------
3.0.21 Проверка контроля 02040100
У контроля 02040100 должны быть установлены галки ПредКонтроль,ПостКонтроль,ПринудительныйКонтрольНаЗавершениеРедактирования и контролируемое поле DAT
завершилась удачно
-----------------------------------------------------------------
3.0.22 Проверка контроля 02060800
У контроля 02060800 должны быть установлены галки ПредКонтроль,ПостКонтроль,ПринудительныйКонтрольНаЗавершениеРедактирования и контролируемое поле DAT
завершилась удачно
-----------------------------------------------------------------
3.0.23 Проверка контроля 02060300
У контроля 02060300 должны быть установлены галки ПредКонтроль,ПостКонтроль,ПринудительныйКонтрольНаЗавершениеРедактирования и контролируемое поле DAT
завершилась удачно
-----------------------------------------------------------------
3.0.24 Проверка контроля 02060501
У контроля 02060501 должны быть установлены галки ПредКонтроль,ПостКонтроль,ПринудительныйКонтрольНаЗавершениеРедактирования и контролируемое поле DAT
завершилась удачно

Аватара пользователя
Val
зам. председателя совета директоров
зам. председателя совета директоров
Сообщения: 2029
Зарегистрирован: 09.06.2004 08:52
Откуда: Ейск
Контактная информация:

Re: По проверке баз

Сообщение Val » 22.07.2009 12:51

Добавил проверку распорядительного лс на СБР и КП и лс получателя на БР и ПОФ

Аватара пользователя
Val
зам. председателя совета директоров
зам. председателя совета директоров
Сообщения: 2029
Зарегистрирован: 09.06.2004 08:52
Откуда: Ейск
Контактная информация:

Re: По проверке баз

Сообщение Val » 22.07.2009 14:26

Делаем кнопку

Код: Выделить всё

<?xml version="1.0" encoding="windows-1251"?>
<registry>
   <node path="%root%\Объекты\Интерфейсы\{64E71E94-E756-4DF2-85F5-57696CFD0B65}\Панели\ПанельАдминистратора\ТестироватьБазу">
      <value type="4" name="Видимость">1</value>
      <value type="3" name="Действие">ТестироватьБазу</value>
      <value type="3" name="Картинка">Солнце</value>
      <value type="3" name="Стиль">Кнопка</value>
      <value type="3" name="Хинт">Тестировать базу</value>
   </node>
</registry>

и к ней исполнение

Код: Выделить всё

<?xml version="1.0" encoding="windows-1251"?>
<registry>
   <node path="%root%\Объекты\Интерфейсы\{64E71E94-E756-4DF2-85F5-57696CFD0B65}\Действия\ТестироватьБазу">
      <value type="7" name="Код программы">включить "Project";
включить "Бюджет\Ресурсы\Библиотеки\LibRu.lib";
включить 'Бюджет\Ресурсы\библиотеки\output.lib';           
константы
  конст_скрипт = "c:\_code\code_check.pl";
  конст_перл = "c:\perl\bin\perl.exe";
  имя_файла = "u:\budget2009\check\check.log";
 
переменные
  рез : строка;
  Файл : буфер;
  ОВ : окновывода;     
  Ф : ФормаВвода;
начало
        Ф := ПолучитьФормуВвода;
        ОВ := ОкноВывода;
        ОВ.Очистить;
        ОВ.Показать;
        рез := Выполнить(конст_перл,конст_скрипт + " " + имя_файла + " " +  целоевстроку(Ф.ЯАдмин) + " bigfinupmain D:/BudgetAx2009/Database/BUDGET2009.GDB sysdba password" ,1,0);
        Файл := СоздатьБуфер(имя_файла,Файл_чтение);
        Пока не Файл.КонецФайла делать
                начало
                        ОВ.Writeln(Файл.ЧитатьСтроку);
                конец;
        ОВ.Показать;           
конец.
</value>
      <param value="Код программы" type="1" name="AccessCount">34</param>
      <param value="Код программы" type="2" name="AccessDate">40016,5955974653</param>
      <param value="Код программы" type="3" name="Export">VAL05\val\22.07.2009 14:23:17</param>
   </node>
</registry>


Скрипт на Perl который будет вызываться.
В него можно добавлять свои проверки путем внесения их в хеш в установленном формате.

Код: Выделить всё

# Val, Ейский, 16072009
# Val, Ейский, 22072009
# проверка базы АС Бюджет
# на входе 1.имя файла для записи данных 2.признак администратора 3.хост базы 4.путь к базе 5.пользователь 6.пароль
# логи если не нужны - можно убрать

# сделать обработку ошибок!!!

# вызов скрипта из abl пример: рез := Выполнить("c:\perl\bin\perl.exe","c:\code_check.pl" + " " + "c:\check.log" + " " +  целоевстроку(Ф.ЯАдмин) + " server C:/Budget2009/Database/BUDGET2009.GDB sysdba password" ,1,0);
use strict;
use Data::Dumper;
use DBI;
use Log::Log4perl;
   Log::Log4perl::init("c:/_code/log_check.conf");
my $log = Log::Log4perl::get_logger("main");
my ($file_out,$admin,$DB_HOST,$DB_NAME_DB,$DB_USER,$DB_PASSWORD) = @ARGV;
my $DB_CHARSET = 'WIN1251';
#*********************

$file_out = defined($file_out) ? $file_out : 'u:/budget2009/check/check.log';
$admin = defined($admin) ? $admin : 1;
$DB_HOST = defined($DB_HOST) ? $DB_HOST : 'bigfinupmain';
$DB_NAME_DB = defined($DB_NAME_DB) ? $DB_NAME_DB : 'D:\BudgetAx2009\Database\BUDGET2009.GDB';
$DB_USER = defined($DB_USER) ? $DB_USER : 'sysdba';
$DB_PASSWORD = defined($DB_PASSWORD) ? $DB_PASSWORD : 'password';
#my $dsn_db = "DBI:InterBase:database=$DB_NAME_DB;host=$DB_HOST;charset=$DB_CHARSET;ib_charset=win_1251";
#********************
my $ff;
my $dbh;
my $sth;
my $res;
my @ret = ();
open $ff,">$file_out" || die "Can't open file $!";
# хеш описаний
# sql - запрос выводящий требуемые значения (можно distinct или group) в первом поле
# sqldop - запрос, к которому прикрепляются значения sql и ")" для отображения записей в которых найдены расхождения
# params - значение которые сравниваются с результатами sql и считаются верными
# name - имя проверки
# comment - комментарий проверки 
my %sql_const = ( "2.1.2" => { sql =>      "select distinct c.PlanDocType from budnotify c where c.progindex=260 and not c.dat is null group by c.PlanDocType",
                                 sqldop =>   "select c.anumber,c.dat from budnotify c where c.progindex=260 and not c.dat is null and (c.plandoctype is null or c.plandoctype=",
                        params =>   [100,200],
                        name =>      "Проверка СБР на ВидПлана",
                        comment =>   "У СБР ВидПлана должен быть 1.00 или 2.00"         
                      },
                   "2.1.3" => { sql =>      "select distinct d.buhoperationcls from budgetdata d where d.progindex = 260 and d.recordindex in (select c.id from budnotify c where not c.dat is null ) group by d.buhoperationcls",
                                 sqldop =>   "select c.anumber, c.dat from budnotify c left join budgetdata d on (c.id=d.recordindex) where d.progindex = 260 and not c.dat is null and (d.buhoperationcls is null or d.buhoperationcls=",
                        params =>   [3401,3504],
                        name =>      "Проверка СБР на Операцию",
                        comment =>   "У СБР Операция должна быть 034.01 или 035.04 (034.05 тоже возможна, но пока не точно)"
                      },
              "2.2.2" => { sql =>      "select distinct c.PlanDocType from budnotify c where c.progindex=32 and not c.dat is null group by c.PlanDocType",
                                 sqldop =>   "select c.anumber,c.dat from budnotify c where c.progindex=32 and not c.dat is null and (c.plandoctype is null or c.plandoctype=",
                        params =>   [101,201],
                        name =>      "Проверка БР на ВидПлана",
                        comment =>   "У БР ВидПлана должен быть 1.01 и 2.01"
                      }, 
              "2.2.3" => { sql =>      "select distinct d.buhoperationcls from budgetdata d where d.progindex = 32 and d.recordindex in (select c.id from budnotify c where not c.dat is null ) group by d.buhoperationcls",
                                 sqldop =>   "select c.anumber, c.dat from budnotify c left join budgetdata d on (c.id=d.recordindex) where d.progindex = 32 and not c.dat is null and (d.buhoperationcls is null or d.buhoperationcls=",
                        params =>   [3503],
                        name =>      "Проверка БР на Операцию",
                        comment =>   "У БР Операция должна быть 035.03 (035.01 тоже возможна, но пока не точно)"
                      },
              "2.3.2" => { sql =>      "select distinct d.buhoperationcls from budgetdata d where d.progindex = 261 and d.recordindex in (select c.id from budnotify c where not c.dat is null ) group by d.progindex, d.buhoperationcls",
                                 sqldop =>   "select c.anumber, c.dat from budnotify c left join budgetdata d on (c.id = d.recordindex) where not c.dat is null and d.progindex=261 and (d.buhoperationcls is null or d.buhoperationcls=",
                        params =>   [0,99999],
                        name =>      "Проверка КП (расходы) на Операцию",
                        comment =>   "Операция на КП (расходы) должна быть 000.00 или 999.99"
                      },   
              "99.0.1" => { sql =>       "select oa.acc from budgetdata a1 left join  budnotify a2 on (a2.id = a1.recordindex) left join org_accounts oa on (a1.acc_ref = oa.id) where not a2.dat is null and  a1.progindex = 260 group by oa.acc",   
                           sqldop =>   "select distinct a2.anumber,a2.dat from budgetdata a1 left join  budnotify a2 on (a2.id = a1.recordindex) left join org_accounts oa on (a1.acc_ref = oa.id) where not a2.dat is null and a1.progindex = 260 and (a1.acc_ref is null or oa.acc=",
                        params =>   ["ЕДИНЫЙ СЧЕТ"],
                        name =>      "Проверка ЕДИНОГО счета на СБР",
                        comment =>   "У записей СБР в детали должен быть указан ЕДИНЫЙ СЧЕТ"
                      }, #and ((not oa.acc like 'ЕДИН%') or (oa.acc is null))
              "99.0.2" => { sql =>       "select oa.acc from budgetdata a1 left join  budnotify a2 on (a2.id = a1.recordindex) left join org_accounts oa on (a1.acc_ref = oa.id) where not a2.dat is null and  a1.progindex = 32 group by oa.acc",   
                           sqldop =>   "select distinct a2.anumber,a2.dat from budgetdata a1 left join  budnotify a2 on (a2.id = a1.recordindex) left join org_accounts oa on (a1.acc_ref = oa.id) where not a2.dat is null and a1.progindex = 32 and (a1.acc_ref is null or oa.acc=",
                        params =>   ["ЕДИНЫЙ СЧЕТ"],
                        name =>      "Проверка ЕДИНОГО счета на БР",
                        comment =>   "У записей БР в детали должен быть указан ЕДИНЫЙ СЧЕТ"
                      },
              "99.0.3" => { sql =>       "select oa.acc from budgetdata a1 left join  budnotify a2 on (a2.id = a1.recordindex) left join org_accounts oa on (a1.acc_ref = oa.id) where not a2.dat is null and  a1.progindex = 261 group by oa.acc",   
                           sqldop =>   "select distinct a2.anumber,a2.dat from budgetdata a1 left join  budnotify a2 on (a2.id = a1.recordindex) left join org_accounts oa on (a1.acc_ref = oa.id) where not a2.dat is null and a1.progindex = 261 and (a1.acc_ref is null or oa.acc=",
                        params =>   ["ЕДИНЫЙ СЧЕТ"],
                        name =>      "Проверка ЕДИНОГО счета на КП",
                        comment =>   "У записей КП в детали должен быть указан ЕДИНЫЙ СЧЕТ"
                      },
              "99.0.4" => { sql =>       "select oa.acc from budgetdata a1 left join  budnotify a2 on (a2.id = a1.recordindex) left join org_accounts oa on (a1.acc_ref = oa.id) where not a2.dat is null and  a1.progindex = 268 group by oa.acc",   
                           sqldop =>   "select distinct a2.anumber,a2.dat from budgetdata a1 left join  budnotify a2 on (a2.id = a1.recordindex) left join org_accounts oa on (a1.acc_ref = oa.id) where not a2.dat is null and a1.progindex = 268 and (a1.acc_ref is null or oa.acc=",
                        params =>   ["ЕДИНЫЙ СЧЕТ"],
                        name =>      "Проверка ЕДИНОГО счета на ПОФ",
                        comment =>   "У записей ПОФ в детали должен быть указан ЕДИНЫЙ СЧЕТ"
                      },                   
              "99.0.5" => { sql =>       "select f.haracteraccount from budgetdata d left join budnotify c on (c.id = d.recordindex) left join facialacc_cls f on (d.facialacc_cls=f.id) where d.progindex=260 and (c.dat is not null) group by f.haracteraccount",   
                           sqldop =>   "select distinct c.anumber, c.dat from budgetdata d left join budnotify c on (c.id = d.recordindex) left join facialacc_cls f on (d.facialacc_cls=f.id) where d.progindex=260 and (c.dat is not null) and (d.facialacc_cls is null or d.facialacc_cls=",
                        params =>   [1],
                        name =>      "Проверка распорядительного лс счета на СБР",
                        comment =>   "У записей СБР в детали должен быть указан распорядительный лс"
                      },
              "99.0.6" => { sql =>       "select f.haracteraccount from budgetdata d left join budnotify c on (c.id = d.recordindex) left join facialacc_cls f on (d.facialacc_cls=f.id) where d.progindex=32 and (c.dat is not null) group by f.haracteraccount",   
                           sqldop =>   "select distinct c.anumber, c.dat from budgetdata d left join budnotify c on (c.id = d.recordindex) left join facialacc_cls f on (d.facialacc_cls=f.id) where d.progindex=32 and (c.dat is not null) and (d.facialacc_cls is null or d.facialacc_cls=",
                        params =>   [0],
                        name =>      "Проверка лс счета получателя на БР",
                        comment =>   "У записей БР в детали должен быть указан лс получателя"
                      },                   
              "99.0.7" => { sql =>       "select f.haracteraccount from budgetdata d left join budnotify c on (c.id = d.recordindex) left join facialacc_cls f on (d.facialacc_cls=f.id) where d.progindex=261 and (c.dat is not null) group by f.haracteraccount",   
                           sqldop =>   "select distinct c.anumber, c.dat from budgetdata d left join budnotify c on (c.id = d.recordindex) left join facialacc_cls f on (d.facialacc_cls=f.id) where d.progindex=261 and (c.dat is not null) and (d.facialacc_cls is null or d.facialacc_cls=",
                        params =>   [1],
                        name =>      "Проверка распорядительного лс счета на КП",
                        comment =>   "У записей КП в детали должен быть указан распорядительный лс"
                      },
              "99.0.8" => { sql =>       "select f.haracteraccount from budgetdata d left join budnotify c on (c.id = d.recordindex) left join facialacc_cls f on (d.facialacc_cls=f.id) where d.progindex=268 and (c.dat is not null) group by f.haracteraccount",   
                           sqldop =>   "select distinct c.anumber, c.dat from budgetdata d left join budnotify c on (c.id = d.recordindex) left join facialacc_cls f on (d.facialacc_cls=f.id) where d.progindex=268 and (c.dat is not null) and (d.facialacc_cls is null or d.facialacc_cls=",
                        params =>   [0],
                        name =>      "Проверка лс счета получателя на ПОФ",
                        comment =>   "У записей ПОФ в детали должен быть указан лс получателя"
                      },                             
                                                                                                                                                                                                                                                                
            );   
# для проверки контролей. они обрабатываются отдельной процедурой            
my %ctrl = (
            "03020305" => { buttons => 30, field => "REESTRNUMBER" },
         "03020500" => { buttons => 30, field => "REESTRNUMBER" },
         "03020701" => { buttons => 18, field => "REESTRNUMBER" },
         "03020601" => { buttons => 30, field => "REESTRNUMBER" },
         "03020303" => { buttons => 30, field => "REESTRNUMBER" },
         "03020702" => { buttons => 18, field => "REESTRNUMBER" },
         "03022601" => { buttons => 78, field => "REESTRNUMBER" },
         "03040304" => { buttons => 30, field => "REESTRNUMBER" },
         "03040500" => { buttons => 30, field => "REESTRNUMBER" },
         "03040801" => { buttons => 18, field => "REESTRNUMBER" },
         "03040303" => { buttons => 30, field => "REESTRNUMBER" },
           "03040601" => { buttons => 30, field => "REESTRNUMBER" },      
           "03040802" => { buttons => 18, field => "REESTRNUMBER" },
             "02013000" => { buttons => 22, field => "DAT" },         
           "02010200" => { buttons => 22, field => "DAT" },
             "02010600" => { buttons => 22, field => "DAT" },
           "02010700" => { buttons => 22, field => "DAT" },                  
           "02021601" => { buttons => 22, field => "DAT" },         
             "02021300" => { buttons => 22, field => "DAT" },
           "02030200" => { buttons => 22, field => "DAT" },
           "02040100" => { buttons => 22, field => "DAT" },                  
           "02060800" => { buttons => 22, field => "DAT" },
           "02060300" => { buttons => 22, field => "DAT" },
           "02060501" => { buttons => 22, field => "DAT" },                  
            );
my $ctrl_sql = "select ctrloptions,controlfield from itf_ctrl where ctrl_ref=";         
#-------------------------------------------------------------------------------
# открытие базы
sub openDB {
   my ($HOST_l,$DB_l,$USER_l,$PASSWORD_l,$CHARSET_l) = @_;
   my $DSN_l = "DBI:InterBase:database=$DB_l;host=$HOST_l;charset=$CHARSET_l;ib_charset=win_1251";
   $log->debug("открываем базу...");
   $dbh = DBI->connect($DSN_l, $USER_l, $PASSWORD_l) or die "Can't connect to $DSN_l: $DBI::errstr";
   $log->debug("открыли базу.");
}
#-------------------------------------------------------------------------------
# закрытие базы
sub closeDB {
   $sth = undef;
    $log->debug("закрываем базу");
   $dbh->disconnect();
   $log->debug("закрыли базу");
}
#-------------------------------------------------------------------------------
# выполнение запроса и возвращение ссылки на массив результатов
sub getData {
   my $sql = shift;
   $log->debug("запрос $sql");
   $sth = $dbh->prepare($sql);
   $sth->execute();
   print $dbh->errstr;
   return $sth->fetchall_arrayref;
}
#-------------------------------------------------------------------------------
# проверка контролей
sub check_ctrl {
   my $h = shift;
   my $res;
   my $i;
   print $ff "-----------------------------------------------------------------\n";   
   $log->debug("Проверка контролей");
   print $ff "99.0.99 Проверка контролей\n";
   foreach (keys(%{$h})) {
         $log->debug("обрабатываем контроль $_");
         print $ff "обрабатываем контроль $_\n";      
         $res = getData($ctrl_sql.$_);
         $log->debug("Получили записей по контролю $_ : " . scalar(@{$res}));
         if (scalar(@{$res})) {
         #print Dumper(@{$res});
               if (((defined($res->[0]->[1]) ? $res->[0]->[1] : 0) & $ctrl{$_} -> {"buttons"}) != $ctrl{$_} -> {"buttons"}) { $log->debug("контроль кнопок $_ не прошел"); print $ff "Ошибка проверки котроля $_ неверно задействованы кнопки\n" };
               if ((defined($res->[0]->[1]) ? $res->[0]->[1] : "ПУСТОЕ")  ne $ctrl{$_} -> {"field"}) { $log->debug("контроль поля $_ не прошел"); print $ff "Ошибка проверки котроля $_ неверное контрольное поле\n" };
         } else { print $ff "контроль $_ НЕ НАЙДЕН!\n"; $log->debug("контроль $_ НЕ НАЙДЕН!") };
         print $ff "---------\n";     
   }
   print $ff "закончили обработку контролей\n";
}
#-------------------------------------------------------------------------------
# проверка - получает номер проверки и возвращает массив
# номер проверки, массив данных которые считаются неверными, флаг ошибки (пустой результат запроса)
sub check {
   my $code = shift;
   my $i;
   my $err = 0;
   @ret = ();
   $res = getData($sql_const{$code}->{"sql"});
   $log->debug("выбрали записей " . scalar(@{$res}));
   $err = 1 if (not scalar(@{$res}));
   foreach $i (@{$res}) {
       $i->[0] = "ПУСТОЙ" if not defined($i->[0]);    
      $log->debug("обработка значения из выборки : $i->[0]");
      my $s = 0;      
      $s += $_ foreach (map {     my $res=0;
                                   $log->debug("значение из параметров :".$_);
                          if ($i->[0] =~ /[a-zA-Zа-яА-Я]/) { $log->debug("строковое $i->[0]"); $res++ if ($_ eq $i->[0]) }
                          else { $log->debug("числовое $i->[0]"); $res++ if ($_ == $i->[0]) }
                          $res; } @{$sql_const{$code}->{"params"}});
      $log->debug("значение сравнения : ".$s);
      if (not $s) { push(@ret,$i->[0]) };
   };
   return [$code,\@ret,$err];
}
#-------------------------------------------------------------------------------
# вывод несоответствий
# вызываются sql_dop и отображаются данные
sub prerr {
   my $arr = shift;
   my $res;
   my $i;
   my $code = $arr->[0];
   print $ff "-----------------------------------------------------------------\n";
   print $ff $code . " " . $sql_const{$code}->{"name"} . "\n";
   print $ff $sql_const{$code}->{"comment"} . "\n";
   if ($arr->[2]) { print $ff "Проверка завершилась неудачей (Запрос не вернул данные)!" }   else
   {
   if (scalar(@{$arr->[1]})) { print $ff "завершилась НЕУДАЧНО ";
      print $ff "\nДанные должны быть : " . join ",", @{$sql_const{$code}->{"params"}};
      print $ff "\nДанные не соответствующие    : " . join ",", @{$arr->[1]};
      print $ff "\n";
      # вынести отдельно
      foreach (@{$arr->[1]}) {
               #$_="ПУСТОЙ" if $_==undef;
               $res = getData($sql_const{$code}->{sqldop}."\'".$_."\')");
            $log->debug("вторично выбрали записей " . scalar(@{$res}));         
               foreach $i (@{$res}) {
                     print $ff "документ номер " . $i->[0] . " от " . $i->[1] . " введены ошибочные данные " . $_ . "\n";         
            };
      };
      #---
   }   else { print $ff "завершилась удачно\n" }
   }
}
#-------------------------------------------------------------------------------
# основной модуль
&openDB($DB_HOST,$DB_NAME_DB,$DB_USER,$DB_PASSWORD,$DB_CHARSET);
my @ch_user=qw(2.1.2 2.1.3 2.2.2 2.2.3 2.3.2 99.0.1 99.0.2 99.0.3 99.0.4 99.0.5 99.0.6 99.0.7 99.0.8);
my @ch_admin = ();
&prerr(&check($_)) foreach (@ch_user); # для пользователей
if ($admin) { &prerr(&check($_)) foreach (@ch_admin); &check_ctrl(\%ctrl) }; # добавочно для админов (флаг админа передается из АС Бюджет)
&closeDB();
close($ff);
exit(0);
#-------------------------------------------------------------------------------

Аватара пользователя
Val
зам. председателя совета директоров
зам. председателя совета директоров
Сообщения: 2029
Зарегистрирован: 09.06.2004 08:52
Откуда: Ейск
Контактная информация:

Re: По проверке баз

Сообщение Val » 22.07.2009 16:37

этот код должен поправить ссылки на счет на ссылки на ЕДИНЫЙ СЧЕТ. Сам только на тестовой пока делал :-)

Код: Выделить всё

# Val, Ейский, 22072009
# правка счетов на ЕДИНЫЙ в СБР (и БР,КП,ПОФ) базы АС Бюджет
# сделать обработку ошибок!!!

use strict;
use Data::Dumper;
use DBI;
use Log::Log4perl;
   Log::Log4perl::init("c:/_code/log_check.conf");
my $log = Log::Log4perl::get_logger("main");
my ($file_out,$admin,$DB_HOST,$DB_NAME_DB,$DB_USER,$DB_PASSWORD) = @ARGV;
my $DB_CHARSET = 'WIN1251';
#*********************
$file_out = defined($file_out) ? $file_out : 'u:/budget2009/check/check.log';
$admin = defined($admin) ? $admin : 1;
$DB_HOST = defined($DB_HOST) ? $DB_HOST : 'fudom2';
$DB_NAME_DB = defined($DB_NAME_DB) ? $DB_NAME_DB : 'D:\BudgetAx2009tst\Database\BUDGET2009tst.GDB';
$DB_USER = defined($DB_USER) ? $DB_USER : 'sysdba';
$DB_PASSWORD = defined($DB_PASSWORD) ? $DB_PASSWORD : 'password';
#********************
my $ff;
my $dbh;
my $sth;
my @ret = ();
#-------------------------------------------------------------------------------
# открытие базы
sub openDB {
   my ($HOST_l,$DB_l,$USER_l,$PASSWORD_l,$CHARSET_l) = @_;
   my $DSN_l = "DBI:InterBase:database=$DB_l;host=$HOST_l;charset=$CHARSET_l;ib_charset=win_1251";
   $log->debug("открываем базу...");
   $dbh = DBI->connect($DSN_l, $USER_l, $PASSWORD_l) or die "Can't connect to $DSN_l: $DBI::errstr";
   $log->debug("открыли базу.");
}
#-------------------------------------------------------------------------------
# закрытие базы
sub closeDB {
   $sth = undef;
    $log->debug("закрываем базу");
   $dbh->disconnect();
   $log->debug("закрыли базу");
}
#-------------------------------------------------------------------------------
# выполнение запроса и возвращение ссылки на массив результатов
sub getData {
   my $sql = shift;
   $log->debug("запрос $sql");
   $sth = $dbh->prepare($sql);
   $sth->execute();
   print $dbh->errstr;
   return $sth->fetchall_arrayref;
}
#-------------------------------------------------------------------------------
# основной модуль
&openDB($DB_HOST,$DB_NAME_DB,$DB_USER,$DB_PASSWORD,$DB_CHARSET);
my ($i,$i2,$res,$res2,$buf);
$res = getData("select d.id,d.org_ref,d.acc_ref from budgetdata d left join budnotify c on (c.id=d.recordindex) left join org_accounts oa on (d.acc_ref = oa.id) where (oa.acc is null or not oa.acc like 'ЕДИН%') and (d.progindex = 260) and not c.dat is null");
# прогинекс ставим какой нужно 260 32 261 268
#or d.progindex = 32 or d.progindex = 261 or d.progindex = 268)
foreach $i (@{$res}) {
      $log->debug("нашли d.id " . $i->[0]);
      $log->debug("нашли d.org_ref " . $i->[1]);
      $log->debug("нашли d.acc_ref " . $i->[2]);
      
      $res2 = getData("select acc,id from org_accounts oa where oa.acc like 'ЕДИН%' and oa.org_ref=" . $i->[1]);
      $log->debug("кол-во записей " . @{$res2});
      die("Для организации с id " . $i->[1] . " не нашли ЕДИНОГО СЧЕТА") if not @{$res2};
      $log->debug("имя счета " . $res2->[0]->[0]);
      $log->debug($buf = "update budgetdata d set d.acc_ref=" . $res2->[0]->[1] . " where d.id=" . $i->[0]);
      $dbh -> do($buf);
      $log->debug(($dbh->errstr||"нет ошибок"));
};
&closeDB();
exit(0);
#-------------------------------------------------------------------------------


Вернуться в «АС Бюджет»

Кто сейчас на конференции

Сейчас этот форум просматривают: Bing [Bot] и 5 гостей

cron