Целеполагание.
Уникальные идентификаторы хозяйственных операций решают следующие задачи:
-
Обеспечение надежной связи хоз. операции с данными прикладных блоков.
-
Поддержка новых режимов объединения журналов хозяйственных операций.
Общие сведения.
UUID – 128 битная структура, позволяющая с высокой степенью уникальности идентифицировать различные сущности. Исторически сменилось несколько версий генерации UUID, обеспечивающих уникальность различными способами. В частности, версия 1 использовала текущее время и MAC-адрес сетевого адаптера. Это в последствии привело к уязвимости информационных систем, т. к. оставалась возможность обратного восстановления MAC-адреса. В настоящее время применяется версия 4, которая использует комбинацию текущего времени и случайной составляющей. В линейке MS Windows UUID версии 4 генерируется начиная с Windows 2000, а для генерации версии 1 добавлены отдельные функции (т. н. Sequential UUID). При генерации UUID под управлением WINE используется также версия 4.
Для представления UUID в строковом виде обычно используется 32 шестнадцатеричных цифры, разделенных на группы 4 минусами (дефисами). Иногда все представление заключается в фигурные скобки. Строковое представление необходимо для отображения, записи в XML, JSON, помещение в базы данных, не имеющих специального типа данных.
Строковое представление UUID в Инфо-Бухгалтер 8.
Для экономии места и ускорения преобразований применено несколько упрощений:
-
фигурные скобки не используются;
-
разделяющие группы дефисы отсутствуют;
-
шестнадцатеричные цифры используются исключительно в нижнем регистре (a – f, но не A – F).
Итого длина строкового представления UUID составляет 32 символа. Пример строкового представления: 7f2ef54768a848a8a084adbdf37ad74b.
UUID в хоз. операциях.
Для хоз. операций наличие UUID реализовано как необязательное на уровне отдельной операции. В памяти и в двоичных потоках UUID занимает 128 бит, а в файлах DBF и в сетевой базе (HOZOP.DB) – 32 символа.
Для сохранения UUID операций в файле формата SHP потребовалось введение новой версии формата. Теперь в заголовке файла указывается не «Инфо-Бухгалтер 8.5», «Инфо-Бухгалтер 8.9». В противном случае, при открытии новых файлов старыми версиями программы были бы аварийные завершения работы. При загрузке файла SHP для всех операций, не имеющих UUID, генерируется новый UUID.
При копировании хоз. операций в буфер обмена UUID не копируется. Вставка может выполняться как в этот же журнал, так и в другую базу. По сути это новая операция, ей положен новый UUID.
Команда «Файлы-Записать блок» создает файл, содержащий исходные UUID операций. Команда «Файлы-Объединить с» для вновь добавляемых операций генерирует новые UUID. Логика «Без проверки на совпадение/Добавлять только новые операции» никак не учитывает UUID (для операций объединяемого блока всегда новый UUID).
Добавлены два новых режима объединения журналов с сопоставлением операций по UUID - с перезаписью или без.

При записи хоз. операций в формат DBF добавлено новое поле UUID длиной 32 символа. При загрузке из DBF поле может отсутствовать. Если поле есть, но в нем недопустимое значение, то генерируется новый UUID.
При добавлении операций из ЖХО или формульного раздела генерируется новый UUID.
В таблице ЖХО добавлена возможность отображения колонки «UUID» (перед «Доп»).

Отображение включается на странице «Установка-Настройка-Хозяйственные операции-Показывать-Уникальный идентификатор (UUID)».

В диалоге редактирования хоз. операции отображение UUID сделано в виде контекстного меню на номере операции. Там же есть команда для копирования строкового представления UUID в буфер обмена. Для новой операции во время показа диалога UUID еще не сгенерирован.

Особенности сетевой версии.
В локальной версии преобразование формата SHP происходит автоматически (но пользователь может отказаться от сохранения изменений). Для сетевой базы требуется добавление поля для UUID (MUUID) в таблицу HOZOP.DB. Уникальный индекс нужен для контроля на уровне базы данных коллизий UUID. Уникальный индекс возможен только при наличии UUID у всех операций. Пустые строки или NULL не позволяют создать уникальный индекс.
При открытии сетевой базы программа предлагает добавить поле MUUID. Делается резервная копия исходной таблицы HOZOP.DB как HOZOP0.DB. После добавления поля для всех операций генерируются значения UUID и происходит построение уникального индекса (файлы HOZOP.XG0 и HOZOP.YG0).

Сложность может быть, когда база данных открывается в режиме «только чтение». В частности, это может быть при использовании «Инфо-Сервера». Тогда ни поле, ни индекс программа добавить не может. Для обновления структуры базы необходимо ее открыть без опции «только чтение».
Поддержка во внутреннем языке.
Для получения UUID операции добавлены функция ОПЕР_ИДЕНТ(номер) и метод ИДЕНТ для ТИП_ОПЕРАЦИЯ. Метод ИДЕНТ позволяет узнать UUID вновь добавленной операции после вызова методов ДОБАВИТЬ или ЗАПИСАТЬ (без обращения к базе данных). Если у операции нет UUID, то возвращается пустая строка.
При добавлении операций функциями ПРОВОДКА, ЗАП_ОПЕР и автоматически (после завершения формульного раздела) UUID добавленной операции доступен из функции АТРИБУТ(”посл_идент_опер”).
Для поиска операции по UUID добавлена функция ОПЕР_НАЙТИ_ИДЕНТ(идент), которая возвращает номер операции (в тек. фильтре) или 0.
Для программного добавления операций с явным указанием UUID (например, взятого из другой базы) сделан метод ДОБАВИТЬ_ИДЕНТ для ТИП_ОПЕРАЦИЯ. Строковое представление UUID он принимает в качестве параметра. Метод возвращает ДА, когда операции с таким UUID нет в базе и выполняется добавление, НЕТ - когда операция с таким UUID существует.
- 3 просмотра
Инфо-Бухгалтер ®