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

1с 7.7 (dbf) Уникальный идентификатор документа

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

Стал вопрос как правильно определить уникальный идентификатор документа (УИД) в базе Источнике. Посмотрел различный источники.

Вообще решил подитожит все что нашел:

В каталоге с базой лежит файл: 1SUIDCTL.DBF. Он имеет следующие поля:

Поле TYPEID (строка, 4) - это ID вида объекта конфигурации (0 - это документы)
Поле MAXID (строка, 9) - это ID последнего документа в 36ричной системы счисления

Вопрос возник по полю MAXID. Это поле описания как Charecter, 9
Но при просмотре различных конфигураций я обнаружил что оно заполняется максимум на 6 символов. А оставшиеся 3 символа всегда пустые.

Но картина изменилась как только я посмотрел 1SUIDCTL.DBF в базе где был использован УРБД.
Формат MAXID следующий: ZZZZZZPPP, где
ZZZZZZ - это УИД в 36ричной системы счисления
PPP - это код информационной базы


Максимальное количество УИД в базе может быть 36^6 = 2'176'782'336 (~2.2 миллиарда) записей

Много это или мало документов сложно сказать.

В качестве примера могу привезти значение этого поля у организации которая выписывает ~2000 документов в день (без выходных), каждый день.
Он равен = 19DEH, что в 10ричной системы составляет: 2'116'889 документов - документов за 3 года.

Теперь приведу 100% рабочие функции определения УИД :


//************************************************************************************************************
//Возвращает идентификатор (id) объекта, как он хранится в таблицах 1с
//_Объект_ - ТекущийЭлемент()
Функция глПолучитьИд(_Объект_) Экспорт
   Стр = ЗначениеВСтрокуВнутр(_Объект_);
   Возврат _idToStr(Лев(Прав(Стр, 15), 13)) + Сред(Стр, СтрДлина(Стр) - 4, 3);
КонецФункции //глПолучитьИд(_Объект_)

//************************************************************************************************************
//Возвращает ссылку на объект типа элемент справочника или документ
//МетаОбъект - ссылка, полученный через СоздатьОбъект("Справочник[Документ].Вид")
//Ид - значение идентификатора элемента(документа), как он хранится в таблицах 1с
Функция глПолучитьОбъектПоИд(_МетаОбъект_, _Ид_) Экспорт
   МетаОбъект = ЗначениеВСтрокуВнутр(_МетаОбъект_);

   Возврат ЗначениеИзСтрокиВнутр(СтрЗаменить(МетаОбъект, Прав(МетаОбъект, 15), "" + Прав("          " + _StrToId(Лев(_Ид_, СтрДлина(_Ид_) - 3)), 10) + Прав(_Ид_, 3) + Прав(МетаОбъект, 2)));
КонецФункции //глПолучитьОбъектПоИд

эти две функции придумал не я, поэтому указываю источник:
http://aitika.ru/otvety/1799-1c-Kak-v-semerke-poluchit-unikalniy-identifikator-dokumenta?p=1 (c) Матрейя 30.01.06 (00:00)

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

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