Прикладной сценарий “Импорт номенклатуры дел из Word”

9 28

При внедрении системы DIRECTUM почти всегда требуется занести утвержденную номенклатуру дел заказчика в справочники модуля Канцелярия. Данный сценарий был разработан с целью облегчения жизни внедренцам, чтобы им не приходилось заполнять эти справочники в ручную.

Как правило утвержденная номенклатура дел организации на текущий год имеется в электронном виде в формате Word. Выглядит этот документ обычно так:

При запуске, сценарий запросит указать файл с номенклатурой дел и заполнить соответствие столбцов импортируемой номенклатуры и реквизитов справочника. Это сделано для случая, когда структура таблицы номенклатуры дел отличается от приведенной выше.

В ходе работы сценария, если необходимого подразделения не окажется в справочнике Подразделения, то пользователю будет предложено на выбор три варианта:

  • Создать подразделение
  • Не импортировать номенклатуру для этого подразделения
  • Импортировать номенклатуру без заполнения реквизита "Подразделение" 

При работе сценария автоматически заполняются данными из таблицы номенклатуры дел справочники:

  • Номенклатура дел
  • Подразделения
  • Статьи хранения
  • Сроки хранения номенклатурных дел

Ограничения работы сценария:

  1. Работает начиная с версии DIRECTUM 4.6 
  2. Номенклатура дел должна быть в одной таблице

Перспективы развития сценария:

  1. Сделать возможность работы сценария начиная с версии 4.4 (для разных версий DIRECTUM заполнять соответствующие справочники и реквизиты).
  2. Добавить возможность импорта номенклатуры дел из нескольких таблиц (обрабатывать все таблицы документа).
  3. Вынести в параметры сценария имя файла номенклатуры и признак создания подразделения, чтобы сценарий можно было запускать в фоновом режиме (не уверен, что такая возможность кому-то потребуется).
  4. Вынести в настройки сценария параметры Дата начала дела, Дата завершения дела, Вид РКК. 

Готов выслушать любые пожелания по доработке сценария. Сам сценарий прилагаю.

ImportNomenklatury.zip (5,88 Кб)

*******************************08.04.2010**********************************

Добавлено:
1) Добавлена дополнительная кнопка при отсутствии необходимого подразделения "Выбрать". Теперь по этой кнопке можно вручную выбрать необходимое подразделение из списка подразделений. Если подразделение не выбрано, то импорт номенклатуры продолжится без заполнения реквизита "Подразделение".
2) В заголовок окна выбора подразделения добавлено наименование выбираемого подразделения.
3) Добавлена установка флажка "ЭПК" при наличии в сроке хранения дела значения "ЭПК" (Например: 5 лет ЭПК).
4) В определение сроков хранения добавлено значение "До востребования".

Исправлено:
1) Изменен алгоритм поиска статьи хранения. Теперь для того, чтобы статья хранения перенеслась в справочник "Номенклатура дел", необходимо перед номером статьи наличие символов "ст." (Например: ст.44, ст.72а, ст.6б). Если кому-то необходимо изменить алгоритм определения номеров статей хранения и сроков хранения, то они могут изменить регулярные выражения в строках сценария:
стр.227: ArtRegExpress = "(ст\.\d+[абвгдежзиклмнопрстуфхцчшщыэюя]?)"
стр.228: StorRegExpress = "(\d+\s*(лет|года?)|постоянно|Постоянно|ДЗН|ДМН|До востребования)"
2) Исправлена ошибка, возникающая при наличии в строке объединенных ячеек по вертикали.
3) Исправлена ошибка формирования списка имен столбцов, при наличии в заголовках столбцов символа ",".

РИТИмпортНоменклатурыИзWord2.zip (6,92 Кб)

*******************************12.09.2011**********************************

Исправлено:
1) Если найдено дело с таким же индексом, наименованием, датой начала и датой завершения, то оно будет изменено значениями из документа номенклатуры дел (раньше, если в справочнике номенклатуры дел уже было дело с таким индексом, то оно не импортировалось).
2) Исправлены мелкие ошибки, обнаруженные в ходе тестирования сценария.

РИТИмпортНоменклатурыИзWord3.zip (7,54 Кб)

 

 

Михаил Лопинцев

Чего-то ссылка не работает...

Дмитрий Тарасов

Наверно из-за того, что имя файла русскими буквами написано. Сейчас переименую и перезалью.

Дмитрий Тарасов

Теперь работает

Дмитрий Тарасов

После очередного проекта немного модифицировал сценарий.

Дмитрий Тарасов

В регулярных выражениях почему то не работает метасимвол \w

Alexey Okishev
В регулярных выражениях почему то не работает метасимвол \w

А какому шаблону пытаетесь написать соответствие? \w - определяет соответствие  любому знаку из диапозона "[A-Za-z0-9_]", т.е. кирилица не учитывается...

Дмитрий Тарасов

Тогда понятно почему не работает :)

Иван Иванов

Добрый день! Сценарий вышибает с ошибкой на 169 строке, мол, значение переменной не определено. Что делать?

Дмитрий Тарасов

На 169 строке он теоретически не может вываливаться с ошибкой, если вы конечно сами сценарий не правили. Можете привести полный текст ошибки?

Дмитрий Тарасов

А какую версию сценария вы используете?

Иван Иванов

Дико извиняюсь. Строка 195, "Значение переменной DivCode" не определено.

Версия от 08.04.2010.

В текст заглянул, не может подразделение инициализировать, так разумею. Изменений не вносил.

Дмитрий Тарасов

А сценарий выдавал сообщение:

// Если такого подразделения нет, то предложим его создать,
// выбрать в ручную или не импортировать эти дела

и что вы выбирали, если сообщение появлялось?

Иван Иванов

Нет, такого сообщения не было.

Дмитрий Тарасов

У вас похоже структура таблицы с номенклатурой отличается от той, что я приводил.

Сначала должна идти строка с кодом и наименованием подразделения, а у вас похоже сразу идут строки со списком дел, либо строка с подразделением разбита на несколько столбцов. В сценарии идет проверка, если в строке один столбец, то это подразделение, иначе это строки номенклатуры.

Дмитрий Тарасов

В строку 120 сценария добавьте код:

DivCode = Skeep

т.е. кусок кода будет выглядеть так:

120: DivCode = Skeep
121: // Если ячейка всего одна, то это подразделение
122: if TRowCellsCount = 1
123: DivStr = Trim(Table.Cell(TRow;1).Range.Text)
 

Дмитрий Тарасов

тогда реквизит Подразделение не будет заполняться

Иван Иванов

Добавил. Заработало! Подправил нашу таблицу, работает.

Благодарю за помощь!
 

Руслан Идрисов

Добрый день! При добавлении в текст сценария кода

DivCode = Skeep,

вылезает информационное окно с текстом:

Импорт завершен! Обработано 44 записей, из них подразделений 1. Добавлено 0 записей номенклатуры дел.
 

Непонятно, почему в справочник номенклатуры дел ничего не пишется...

Дмитрий Тарасов
DivCode = Skeep,

А если не секрет, куда именно в сценарии вы этот код добавили и с какой целью?
Руслан Идрисов

Не секрет. Строка 120. Следовал вашему указанию по обсуждаемой ранее проблеме:

Иван Иванов, 24 марта 2011 в 15:37 Дико извиняюсь. Строка 195, "Значение переменной DivCode" не определено. Версия от 08.04.2010. В текст заглянул, не может подразделение инициализировать, так разумею. Изменений не вносил.

(эта ошибка со строкой 195 у меня тоже вылезала)
Дмитрий Тарасов

А вордовский файл с номенклатурой дел у вас выглядит точно так же, как у меня в материале выше?

Можете мне выслать ваш файл с номенклатурой, я посмотрю в чем дело?

Дмитрий Тарасов

И еще вопрос, у вас появлялось информационное окно:

"Не найдено подразделение 'Имя_подразделения'. Нажмите кнопку 'Создать', чтобы создать это подразделение или кнопку 'Пропустить', чтобы не импортировать номенклатуру дел для этого подразделения или кнопку 'Без Подразделения', чтобы импортировать номенклатуру без заполнения реквизита 'Подразделение' или кнопку 'Выбрать', чтобы выбрать подразделение в ручную."? И если появлялось, то какую кнопку вы нажали?

Руслан Идрисов

Наша таблица изначально была без строки с наименованием подразделения. Вылезала ошибка со строкой 195 сценария. Вылечил добавлением в текст сценария "DivCode = Skeep". Появилось окно об успешности импорта, но справочник номенклатуры как был пустым, так и остался. Убрал "DivCode = Skeep" и добавил в таблицу строку с названием подразделения. Вылезло окно:

"Не найдено подразделение 'Имя_подразделения'. Нажмите кнопку 'Создать', чтобы создать это подразделение или кнопку 'Пропустить', чтобы не импортировать номенклатуру дел для этого подразделения или кнопку 'Без Подразделения', чтобы импортировать номенклатуру без заполнения реквизита 'Подразделение' или кнопку 'Выбрать', чтобы выбрать подразделение в ручную.".

Нажал "Создать". После этого появилось окно:

 

"Значение переменной UnitStorCol не определено.
Сценарий "РИТИмпортНоменклатурыИзWord": ошибка в строке 209."
 
Т.е. без "DivCode = Skeep" лезет ошибка с переменной UnitStorCol, а с "DivCode = Skeep" - успешный импорт, но справочник остается пустым..
Дмитрий Тарасов

У вас в номенклатуре дел для индекса 66-07 указаны три разных дела. Это так и должно быть? А так вообще можно с точки зрения делопроизводства? 

Руслан Идрисов

Это неправильно, но на этот год ничего меняться не будет. В следующем году будет исправлено.

Дмитрий Тарасов

Доработал сценарий, чтобы можно было создавать дела с одинаковым индексом, но при импорте номенклатуры теперь получаем вот такую ошибку:

 

[Window Title]
Информация

[Content]
Индекс дела должен быть уникальным в рамках периода дела, в разрезе нашей организации!

[ОK]

Так что предлагаю либо добавить к индексу таких дел какую-нибудь букву (а,б,в...) или объединить их наименования и статьи хранения в одну запись таблицы.

Исправленный сценарий приложил к материалу.

Дмитрий Тарасов

Точнее приложу минут через 15 под третьей версией. :)

Руслан Идрисов

Дмитрий, спасибо большое! Всё работает. yes Ваш сценарий - хорошее подспорье в работе!

Авторизуйтесь, чтобы написать комментарий