Показаны сообщения с ярлыком azk. Показать все сообщения
Показаны сообщения с ярлыком azk. Показать все сообщения

воскресенье, 9 января 2022 г.

showme_azknums.py

Пример запуска:

showme_azknums.py 2.54.0.500_FB_21003_UFALEI_2022-01-04

Пример результата:

C:\apps\azk\f\2.54.0.500_FB_21003_UFALEI_2022-01-04

АЦК-Финансы: 2.54.0.500

Отчеты АЦК: 2.54.0.80

СОФИТ: 2.54.0.447

Модуль ЕИС: 12.0.0.1

Исходный код скрипта:

# 09.01.2022

# Утилита сообщает версии системной сборки АЦК-Финансы и ее подсистем - отчеты, СОФИТ, ЕИС - в указанной пользователем папке.

# Принцип утилиты строится на том, что в каждой сборке АЦК-Финансы есть определенные jar-файлы (символизирующие системную сборку и ее подсистемы), содержащие определенные properties-файлы, в которых есть переменные "version.major", "version.minor", "version.release", "version.build" с информацией о полном номере версии (патча).

import sys, os, zipfile, webbrowser

# Список проверяемых jar-файлов и properties-файлов:

check_list = [

# АЦК-Финансы:

 {"jar": "server/AzkServer.jar", "properties": "com/bssys/version.properties", "encoding": "windows-1251"}

,{"jar": "server/AzkRepKernel.jar", "properties": "com/bssys/azkserver/reports/repversion.properties", "encoding": "windows-1251"}

,{"jar": "server/AzkSofit.jar", "properties": "com/bssys/azkserver/sofit/sofitversion.properties", "encoding": "windows-1251"}

,{"jar": "server/eis.jar", "properties": "azk/eis/version.properties", "encoding": "windows-1251"}

# АЦК-Госзаказ:

,{"jar": "server/ordersrv.jar", "properties": "com/bssys/version.properties", "encoding": "unicode_escape"}

]

# Папка сборки АЦК, которую пользователь указал в командной строке при запуске утилиты:

azkdir = ''

if len(sys.argv) == 2: azkdir = sys.argv[1]

tmp_env_dir = os.environ['TEMP']

tmpdir = os.path.join(tmp_env_dir, 'showme_nums_temp')

outputfile = os.path.join(tmp_env_dir, 'showme_nums_output.txt')

outputfile_write = open(outputfile,'w')

ss_out = sys.stdout

sys.stdout = outputfile_write

if len(azkdir) > 0 and os.path.isdir(azkdir):

    print(os.path.abspath(azkdir))

    for jarfile in check_list:

        product_name = ''

        version_major = ''

        version_minor = ''

        version_release = ''

        version_build = ''

        # jarpath - полный путь к jar-файлу из check_list:

        jarpath = os.path.join(azkdir, jarfile["jar"])

        if os.path.isfile(jarpath) and zipfile.is_zipfile(jarpath):

            # Извлекаем properties-файлы из jar-файла:

            zipfile.ZipFile(jarpath).extract(jarfile["properties"], path=tmpdir)

            # print(tmpdir + check_list[jarfile])

            tmpjarfile = os.path.join(tmpdir, jarfile["properties"])

            tmpjarfile_read = open(tmpjarfile, mode="r", encoding=jarfile["encoding"])

            for tmpjarfile_line in tmpjarfile_read:

                # Убираем лишний символ переноса в конце строки jar-файла:

                tmpjarfile_line = tmpjarfile_line.replace('\n','')

                # Делим строку по символу "=":

                tmpjarfile_split = tmpjarfile_line.split('=')

                if tmpjarfile_split[0] == 'product.name':

                    product_name = tmpjarfile_split[1]

                if tmpjarfile_split[0] == 'version.major':

                    version_major = tmpjarfile_split[1]

                if tmpjarfile_split[0] == 'version.minor':

                    version_minor = tmpjarfile_split[1]

                if tmpjarfile_split[0] == 'version.release':

                    version_release = tmpjarfile_split[1]

                if tmpjarfile_split[0] == 'version.build':

                    version_build = tmpjarfile_split[1]

        if len(product_name) > 0:

            print(f'{product_name}: {version_major}.{version_minor}.{version_release}.{version_build}')

elif len(azkdir) > 0 and not os.path.isdir(azkdir):

    print(f"Указана несуществующая папка сборки АЦК: {azkdir}")

else:

    print(f"Утилиту \"{os.path.basename(__file__)}\" нужно запускать с указанием папки сборки АЦК, в формате:\n{os.path.basename(__file__)} <папка сборки АЦК>\n\nПример:\n{os.path.basename(__file__)} azkfin2.54.0.500_ORA_21001_AMUR")

outputfile_write.close()

sys.stdout = ss_out

#input("\nНажмите клавишу \"Enter\" для закрытия окна...")

#Открыть файл с результатом в ассоциированном приложении:

webbrowser.open(outputfile)

вторник, 12 октября 2021 г.

Шаблон для доработок

*Описание проблемы:*

*Цель/потребность доработки:*

*Предлагаемое решение Заказчика:*

*Заключение сотрудника БФТ (L2):*

+Предлагаемое решение Сотрудника БФТ (L2) (согласовано с Заказчиком):+

*История обращений:*
[SP-|https://sd.bftcom.com/browse/SP-] → [FIN-|https://jira.bftcom.com/browse/FIN-]

*Контактные данные Заказчика:*

Шаблон для дефектов

*Описание проблемы:*

*Предусловия:*

*Порядок действий:*

*Ожидаемый результат:*

*Фактический результат:*

*БД:*

*Заключение:*

*Обоснование заключения:*

*Временное решение:*

*Информация о критичности:*

среда, 18 сентября 2019 г.

azk xml action synchronize

azkf:
AMUROBL: acctype.xml, bankoper.xml, finsource.xml, operkind.xml, payground.xml, pl_calcmethod.xml, unidoctype.xml (25.03.2021)
BELGOBL: acctype.xml repkind.xml (убрать из "@azk2_sys.lst"), pl_calcmethod.xml (25.09.2019)
IRKOBL: operkind.xml, unidoctype.xml (02.10.2019)

          KBR: acctype.xml (10.01.2021)

KRASKRAY: acctype.xml, operkind.xml (06.11.2020)
LENOBL: acctype.xml, unidoctype.xml, pl_calcmethod.xml (20.11.2019)
NAGAYBAKSKE_RN(CHELOBL): operkind.xml (27.09.2019)
NERUNGRI (YAKUT): operkind.xml (07.04.2020)
NIZHOBL: acctype.xml, operkind.xml (15.10.2019)
PENZOBL: acctype.xml, pl_calcmethod.xml (18.11.2019)
PERMKRAY: acctype.xml, pl_calcmethod.xml (13.10.2020) 
ROSTOVOBL: acctype.xml, payground.xml, pl_calcmethod.xml (27.04.2020)

          SOSNOVSKE (NIZHOBL): acctype.xml (20.01.2021)

          SURGUT: ok (09.01.2021) 

TOLYATTI: pl_calcmethod.xml (28.05.2020)
TOMSKOBL: acctype.xml, bankoper.xml (27.05.2021)
TUMOBL: repkind.xml (убрать из "@azk2_sys.lst") (10.10.2019)
ULOBL: acctype.xml, operkind.xml (21.10.2021)
USTKUTSKE_R(IRKOBL): unidoctype.xml (10.10.2019)
VOLGOBL: acctype.xml, planinrefkind.xml (убрать из "@azk2_sys.lst") (25.06.2021)
YAKUTSK: operkind.xml (23.12.2019)
ZLATO(CHELOBL): XML\module\core\clndtype.xml (убрать из "@all.lst") (18.09.2020)

azkgz:
IRKOBL: (проверить наличие таблиц MSG и SYSEVENT, отключить ПДС и ВМК) reportprocessor.xml (20.11.2019)
PENZOBL: (проверить наличие таблиц MSG и SYSEVENT) (20.11.2019)

четверг, 5 сентября 2019 г.

АЦК + ГМП

Чтобы формировался XML-файл с копией запроса к СМЭВ в каталоге "gisgmplog" в папке АЦК при выполнении действия "Выгрузить" над ЭД "Сведения о платеже" на статусе "Готов к выгрузке" нужно:

Для СМЭВ 2:
Бюджетный параметр:
"Используемая версия СМЭВ" = "2.0"
Properties:
gisgmp.wsdlLocation=http://smev-mvf.test.gosuslugi.ru:7777/gateway/services/SID0003663?wsdl
Azk2logback.xml:
<root level="TRACE">

Для СМЭВ 3:
Бюджетный параметр:
"Используемая версия СМЭВ" = "3.0"
Properties:
gisgmp.wsdlLocation=http://smev3-n0.test.gosuslugi.ru:7500/smev/v1.2/ws?wsdl
Azk2logback.xml:
<root level="TRACE">

среда, 4 сентября 2019 г.

АЦК и ЖКХ

Чтобы формировался XML-файл с копией запроса к СМЭВ в каталоге "gisgсhlog" в папке АЦК при выполнении действия "Выгрузить" над ЭД "Сведения о платеже в ГИС ЖКХ" на статусе "Готов к выгрузке" нужно:

Для СМЭВ 2:
Бюджетный параметр "Используемая версия СМЭВ" = "2.0".
Properties:
giszhkh.payments.testmode=true
giszhkh.payments.wsdlLocation=http://smev-mvf.test.gosuslugi.ru:7777/gateway/services/SID0004766?wsdl
Azk2logback.xml:
<root level="TRACE">

Для СМЭВ 3:
Бюджетный параметр "Используемая версия СМЭВ" = "3.0".
Properties:
giszhkh.payments.testmode=true
giszhkh.payments.wsdlLocation=http://smev3-n0.test.gosuslugi.ru:7500/smev/v1.2/ws?wsdl
Azk2logback.xml:
<root level="TRACE">

вторник, 14 мая 2019 г.

Про "log_level" для "taskaudit.xml"

Дополнительное описание параметра "log_level" для taskaudit.xml:
- log_level = 1: информация записывается в таблицу "TASKJOURNAL" (АРМ "Журнал действий пользователей");
- log_level = 2: информация записывается в таблицы "TASKJOURNAL" и "ANYDATA" (при чем в "ANYDATA.DATA" записывается полный текст XML-задания), связь между таблицами TASKJOURNAL.ID = ANYDATA.DATA_KEY.

понедельник, 29 октября 2018 г.

АЦК jars (unistr <—> asciistr)

Для поиска в сборке:
select replace(replace(ASCIISTR('Документ "Сведение о платеже" не создан'),'\','\u'),'"','\"') from dual;
В обратную сторону:
select UNISTR(replace(replace('\u0414\u043E\u043A\u0443\u043C\u0435\u043D\u0442 \"\u0421\u0432\u0435\u0434\u0435\u043D\u0438\u0435 \u043E \u043F\u043B\u0430\u0442\u0435\u0436\u0435\" \u043D\u0435 \u0441\u043E\u0437\u0434\u0430\u043D','\u','\'),'\"','"')) from dual;

среда, 3 октября 2018 г.

понедельник, 17 сентября 2018 г.

АЦК-Финансы и буфер обмена

Наблюдение: в дельфи-клиенте АЦК-Финансы 2.27.2.60 при нажатии на кнопку со статусом в окне редактирования документа (например, ЭД 17 класса) появляется сообщение об ошибке:
"Cannot open clipboard."
Помогает следующее:
1) открыть офисное приложение (например, "MS Excel");
2) на панели "Буфер обмена" нажать кнопку "Очистить все";
3) повторить работу с документом.




Примечание:
Аналогичная проблема замечена и для 2.46.0.155. Лечение такое же.

понедельник, 9 апреля 2018 г.

Скрипты для сборки АЦК-Транспорт и АРМ ПБС

!.BAT:
SET pth1=%cd:~0%
cd ..\
SET pth2=%cd:~0%
cd %pth1%
SET PATH=%pth2%\SYSTEM;%pth2%\USER;%PATH%
START %1 %2 %3 %4 %5 %6 %7 %8 %9
pause

!cbank.bat:
!.bat cbank.exe %1 %2 %3 %4 %5 %6 %7 %8 %9

!dedug_cbank.bat:
!.bat bsdebug.exe cbmain.ex %1 %2 %3 %4 %5 %6 %7 %8 %9

!dictman.bat:
!.bat dictman.exe %1 %2 %3 %4 %5 %6 %7 %8 %9

!operedit.bat:
!.bat operedit.exe %1 %2 %3 %4 %5 %6 %7 %8 %9

!setlogin.bat:
!.bat setlogin.exe %1 %2 %3 %4 %5 %6 %7 %8 %9

понедельник, 26 марта 2018 г.

Дерево сценариев, нюансы

Когда нужно отправить действие <action_name> в те документы, которые указаны на вкладке "Связанные документы" обрабатываемого документа:
notify_documents event="<action_name>"

Когда нужно отправить действие <action_name> в родительский документ обрабатываемого документа:
notify_parent event="<action_name>"

Когда нужно отправить действие <action_name> в дочерние документы обрабатываемого документа:
notify_child event="<action_name>"

понедельник, 26 февраля 2018 г.

Groovy-скрипты для АЦК. Примеры.

Само выражение groovy-скрипта дожно быть условием (при этом указывать "if" необязательно, см.примеры ниже, сам groovy-скрипт всегда возвращает только 2 значения: "true" или "false" (по-умолчанию "false"), соответственно, пункт "Подписать" либо будет показан пользователю, либо - нет):
Примеры:
1) покажет пункт "Подписать" только если пользователь открывает меню действий документа класса 197:
document.documentclass_id.value == 197L;
2) покажет пункт "Подписать" только если пользователь открывает меню действий документа классов, у которых есть поле "CONTRACTOR_ID" (например, 3, 210, 197) и это поле содержит значение "302000014441":
document.contractor_id.value == 302000014441L;
Примечание: после слова "document" можно указывать те реквизиты, что упомянуты в классе, на который ссылается "Имя серверного класса обработчика документа".

Обратная связь:
Можно проверять значения реквизитов объектов, например, скрипт "println document.documentclass_id.value" будет выводить в окно консоли СП номер класса документа, который запустил скрипт.

Можно писать целые блоки:
import java.sql.*;
// Получаем ID органиации, которая указана в поле "Принадлежность к организации" текущего пользователя:
final PreparedStatement pstmt = con.prepareStatement("select u.org_id from usersession s join sysuser u on u.id=s.sysuser_id where s.id=?");
pstmt.setLong(1, con.session.getId());
//Можно применять запрос без параметров (см.конец следующей строки):
//final PreparedStatement pstmt = con.prepareStatement("select u.org_id from usersession s join sysuser u on u.id=s.sysuser_id where s.id=" + con.session.getId());
final ResultSet rs = pstmt.executeQuery();
while (rs.next()) {
println rs.getString("org_id");
}
//Без этой строки в потоке вывода будет появляться предупреждение: "Some statements were not closed":
pstmt.close();

Еще пример:
import java.sql.*;
// Получаем ID организации из поля "Принадлежность к организации" текущего пользователя
Long usrOrgId = 0;
final PreparedStatement pstmt_usr = con.prepareStatement("select u.org_id from usersession s join sysuser u on u.id=s.sysuser_id where s.id=?");
pstmt_usr.setLong(1, con.session.getId());
final ResultSet rs_usr = pstmt_usr.executeQuery();
while (rs_usr.next()) {
usrOrgId = rs_usr.getLong("org_id");
}
pstmt_usr.close();
// Получаем ID бюджетополучателя текущего документа
Long docRecId = 0;
final PreparedStatement pstmt_doc = con.prepareStatement("select recipient_id from conbudget where contract_id=?");
pstmt_doc.setLong(1, document.id.value);
final ResultSet rs_doc = pstmt_doc.executeQuery();
while (rs_doc.next()) {
docRecId = rs_doc.getLong("recipient_id");
}
pstmt_doc.close();
//Сравниваем:
usrOrgId == docRecId;

В логе АЦК:

В логе СП АЦК информация о документе, связанном с ним groovy-скрипте, и результате выполнения этого скрипта выводится, начиная с уровня журнализации "DEBUG", в следующем виде (данные о документе отражаются после слова "document:", содержимое скрипта - после слова "script:", результат выполнения скрипта - после слова "result:", результатом выполнения скрипта могут быть три значения: "false", "null", "true" (примечание: если в правиле указан скрипт, тогда действие "Подписать" появляется у документа только при этом значении)), см. пример:

22.07.22 12:28:26.899,ORB-726433(535),DEBUG,GroovyExecutor,Script completed for:
document: EXPASSIGNMENT: ID=2400000129811;VERSION=3;DOCUMENT_ID=2400005674113;DOCUMENTCLASS_ID=128;DISPSTATUS_ID=0;...
script: return false;
result: false

четверг, 15 февраля 2018 г.

Для поиска в логе: запуск и завершение задания планировщика

25.10.18 13:13:37.234,ORB-2218563(53),DEBUG,TransactJob,Run TransactJob XML task=
<SESSIONCLEANERTASK action="run" sch_task="1"><PARAMS/></SESSIONCLEANERTASK>
25.10.18 13:13:37.235,ORB-2218563(53),DEBUG,TransactEngineImpl,Job started ID=53
25.10.18 13:13:37.235,ORB-2218563(53),DEBUG,SchTaskInfo,Running "Session cleaner" task
...
25.10.18 13:13:37.251,TRANSACT-53,DEBUG,XML,PROCESSOR: SESSIONCLEANERTASK: Processing input XML task<SESSIONCLEANERTASK action="run">
<PARAMS/>
</SESSIONCLEANERTASK>
...
25.10.18 13:13:37.625,TRANSACT-53,DEBUG,TransactEngineImpl,Job result=
<SESSIONCLEANERTASK completed="true"/>

понедельник, 5 февраля 2018 г.

Resultset after last row

При поиске причины ошибки
- для Oracle: "Resultset after last row" или "Набор результатов после последней строки");
- для Firebird: "The resultSet is not in a row, use next";
необходим лог (с полным текстом ошибки, включая ее стек).
При анализе методы из стека ошибки нужно сопоставлять "по смыслу" с XML-заданиями или SQL-запросами в логе.

azk_dir_port_listing.bat

@echo off

REM date-change 2018-02-05
REM date-create 2017-10-13
REM d.aryshtaev@bftcom.com
REM Утилита предназначена для сопровожденца АЦК.
REM Она выводит на экран текстовый файл со списком портов сборок (для удобства учета портов).
REM Ее нужно поместить в папку, в которой находятся сборки АЦК.
REM При этом наименования папок сборок должны соответсвовать формату <ВерсияАЦК>_<ИдентификаторСУБД>_<ПОРТ>_<ПРОИЗВОЛЬНЫЙ ТЕКСТ>, например:
REM 2.43.2.49e_21118_OR_AZ_IRKOBL_280917
REM 2.43.2.49e_21123_OR_AZ_LENOBL_8747_181017
REM 2.43.2.66e_21107_OR_AZ_AMUROBL_8898_221017
REM 2.43.2.72e_21114_FB_USTILIMSKE_170808

set tmp_rslt_file=%TEMP%\list_ports_result.csv
set rslt_file=%TEMP%\list_ports_result.txt
if exist %tmp_rslt_file% del %tmp_rslt_file%
for /f "delims=_, tokens=3" %%a in ('dir /A:D /B') do echo %%a>>%tmp_rslt_file%
sort %tmp_rslt_file%>%rslt_file%
start %rslt_file%

Архив