Автоматическое извлечение текстов 1с что это
Обновлено: 07.07.2024
На этот раз, устав от добавления текстов модулей множества форм в обработке «Анализ процедур и функций», решил реализовать автоматическую загрузку этих модулей из выгруженных файлов (функционал платформы 1с «Выгрузить в файлы»).
Для внешней обработки формируется следующая структура каталогов.
Текст модуля обработки выгружается в файл «\Ext\ObjectModule.bsl«.
Тексты модулей управляемых форм — в файлы с расширением «.bsl«: «\Forms\НазваниеФормы\Ext\Form\Module.bsl«.
А вот обычные (не управляемые) формы выгружаются в следующие двоичные файлы: «\Forms\НазваниеФормы\Ext\Form.bin«.
Пришлось повозиться с парсингом этих бинарных файлов. Зато опробовал новую (для меня) возможность платформы работы с бинарными файлами
Файл с данными обычной формы представляет из себя бинарный файл с блоками данных.
Блоки разделены секциями, состоящими из 3-х 16-ричных чисел, оканчивающихся числом 7fffffff.
В процессе анализа некоторого количества обработок обнаружилось 2 варианта расположения блоков.
Вариант 1
Вариант 2
Я остановился на следующем алгоритме определения необходимой секции, содержащей код модуля формы.
Данный алгоритм был получен империческим путем и не может слепо использоваться в продуктивной разработке!
Если Вы владеете информацией по данному формату, буду рад увидеть Ваш комментарий к данной публикации :)
Если последнее число 3-го блока = 7fffffff, считаю, что это первый вариант расположения блоков. В остальных случаях — второй вариант.
Для первого варианта
Начало блока с текстом модуля формы совпадает с началом 4-го блока (необходимо только пропустить секцию с 3-мя цифрами), т.е. это в 10-чной системе счисления: 691(начало 4-го блока) + 8*3(3 16-чных числа) + 2(пробелы между числами).
Т.е. считаю, что это всегда 717 (dec)
Адрес окончания текстового блока — второе число секции из 3-х чисел + смещение на константу 000002D2(hex) или 722(dec).
Для случая, приведенного на скриншоте (см. выше) получаем:
551(dec) + 722(dec) ,
где 551(dec) это 00000227(hex)
Для второго варианта
Анализируем секцию из 3-х чисел блока 3.
Адрес начала блока с кодом 1С — второе число (к этому числу необходимо еще добавить смещение на константу 722(dec) и размер секции из 3-х чисел 26(dec)).
Для случая, приведенного на скриншоте (см. выше) получаем:
127773(dec) + 722(dec) + 26(dec) ,
где 127773(dec) — это 0001F31D(hex)
Адрес окончания блока с кодом 1С — третье число.
Для случая, приведенного на скриншоте (см. выше) получаем:
471603(dec) ,
где 471603(dec) — это 00073233(hex)
Для чтения из двоичного файла написал процедуру:
Ну в заключении, чтобы не «бегать» в конфигуратор для выгрузки обработки в файлы, добавил выгрузку с помощью пакетного запуска конфигуратора 1С с выводом на экран результата выполнения данной выгрузки:
Использован релиз 3.0.104
В программе "1С:Бухгалтерия 8" (ред. 3.0) реализован механизм полнотекстового поиска во всех полях любого справочника, документа, списка и др.:
- Сочетание клавиш "Ctrl" и "F" автоматически устанавливает курсор в поле "Поиск". Начните набирать текст и поиск будет запущен автоматически.
- По кнопке со значком лупы (или сочетанием клавиш "Alt" и "F") можно выбрать "Расширенный поиск" и установить параметры поиска (рис. 1).
Если работа поиска по каким-то причинам нарушена, либо осуществляется медленно, рекомендуется очистить индексы и затем обновить их (рис. 2). Эти действия доступны только пользователям с правами "Администратор".
Внимание! При работе через облачные технологии операции по очистке и обновлению индексов выполняются автоматически.
Для автоматического обновления индексов, быстрой и корректной работы поиска должно быть настроено выполнение двух регламентных заданий – "Обновление индекса ППД" и "Слияние индекса ППД". Обычно эти регламентные задания настроены по умолчанию и выполняются в программе ежедневно по расписанию в автоматическом режиме (например, каждый день с 8.00 каждый час).
Внимание! При работе через облачные технологии регламентные задания выполняются автоматически, их настройка не требуется.
- Раздел: Администрирование – Обслуживание.
- Раскройте подраздел "Регламентные операции" и перейдите по ссылке "Регламентные и фоновые задания".
- В сформированном списке установите флажки у заданий "Обновление индекса ППД" и "Слияние индекса ППД".
- Поочередно двойным щелчком мыши откройте каждое задание, перейдите по ссылке "Расписание".
- В форме "Расписание" на закладке "Общее" указываются дата начала и завершения задания и режим повтора.
- На закладке "Дневное" укажите время начала задания и время повтора.
- На закладке "Недельное" и "Месячное" проверьте установку флажков по дням недели и по месяцам.
- Кнопка "ОК", затем кнопка "Записать и закрыть".
Смотрите также
Вынесенный нами в заголовок статьи вопрос является актуальным для многих системных администраторов, работающих с данным продуктом. По мере возможностей мы стараемся рассказывать о параметрах, влияющих на производительность 1С и развенчивать популярные мифы. Сегодня, на примере одного недавнего случая, мы хотим рассказать вам об еще одном аспекте, способном серьезно влиять на производительность - регламентных заданиях.
Начнем с реального случая. Не так давно к нам обратился один наш клиент с жалобой на "тормоза" 1С у одного из его сотрудников. Симптомы выражались в том, что через некоторый промежуток времени конфигурация Управление Торговлей 10 начинала сильно тормозить, а проще говоря подвисала на какое-то время.
При более подробном разборе ситуации выяснилось, что это происходит только у одного сотрудника, причем на любом рабочем месте, происходит давно, но если раньше "тормоза" продолжались около секунды, то теперь, после обновления, они могут продолжаться до 15-20 секунд, что делает работу крайне некомфортной.
В принципе, исходных данных уже достаточно, чтобы сделать первые выводы. Приведем их еще раз:
- "Тормоза" происходят постоянно, с определенной периодичностью
- "Тормозит" только у одного пользователя
- "Тормозит" на любом рабочем месте
Чтобы подтвердить свои догадки заглянем в Настройки параметров учета:
Действительно, "проблемный" пользователь указан как пользователь для выполнения регламентных заданий. Как выяснилось, когда-то давно от имени этого пользователя работало задание автообмена РИБ. Осталось посмотреть, что именно являлось причиной эпизодического "торможения". Это тоже несложно сделать:
А вот и "виновник торжества" - задание обновления индекса полнотекстового поиска, которое запускалось один раз в 2,5 минуты. В данном случае проблема была полностью решена отключением выполнения регламентных заданий под этим пользователем, однако это не всегда возможно или целесообразно, поэтому ниже мы рассмотрим каким образом можно управлять регламентными заданиями и как сделать так, чтобы они не оказывали негативного влияния на производительность.
Обычное приложение
В конфигурациях на основе обычного приложения единого инструментария для управления регламентными заданиями нет. Во многом это связано с тем, что на момент их первоначальной разработки сама концепция регламентных заданий была развита довольно слабо.
Управление многими регламентными заданиями производится через настройку связанных с ними подсистем. Например, настройки регламентных заданий, связанных с обменом данными следует искать в настройках обмена, связанные с ЕГАИС в настройках торговлей алкоголем и т.д.
На первый взгляд все довольно логично, но отсутствие единого инструмента затрудняет возможность контроля за настроенными регламентными заданиями и оптимальностью их настроек. Хорошо, если заданий одно - два, а если их больше или, как в нашем случае, есть подозрение на какое-либо из регламентных заданий, но вы не имеете представления кто и что настраивал в этой базе.
В этом случае следует воспользоваться внешней обработкой КонсольЗаданий (JobsConsole), которая входит в набор стандартных обработок на диске ИТС. Обработка предоставляет единый интерфейс для всех заданий и позволяет выполнять их централизованную настройку, а также контролировать выполняющиеся в текущее время задания.
Данный список нужно тщательно изучить, все ненужные задания следует отключить, а у нужных привести расписание в соответствие с насущными потребностями и здравым смыслом. Например, в нашем случае, нет никакой необходимости обрабатывать ответы ЕГАИС раз в 30 секунд (эта настройка сделана для тестирования) и в рабочем режиме вполне достаточно будет делать это скажем раз в полчаса.
Управляемое приложение
В конфигурациях на основе управляемого приложения регламентным заданиям отведена более значительная роль, с их помощью могут выполняться различные задания по обслуживанию информационной базы и поддержанию ее в актуальном состоянии, но в тоже время именно регламентные задания чаще всего становятся причиной "тормозов".
Для управления регламентными заданиями предназначен отельный пункт в меню Администрирование - Поддержка и обслуживание.
Сразу можно отметить, что заданий значительно прибавилось (для примера мы взяли одну и ту же конфигурацию - Розница) и их грамотная настройка способна существенно улучшить производительность информационной базы. Настройки по умолчанию выполнены 1С исходя из потребностей средней сферической фирмы в вакууме и не являются оптимальными даже близко.
Прежде всего отключаем то, что явно ненужно, с чем вы не работаете. Потом оптимизируем расписание редко используемых функций, скажем обновление классификатора банков в Рознице, как и проверку контрагентов, можно проводить раз в неделю в нерабочее время или в конце (начале) рабочего дня.
Отдельное внимание следует уделить всему, что связано с поисковым индексом. Полнотекстовый поиск безусловно удобная вещь, но работа с его индексом является весьма и весьма ресурсоемкой задачей. Поэтому не стоит впадать в крайность и отказываться от него, но следует серьезно пересмотреть и настроить его параметры.
Начнем с извлечения текста, данная операция позволяет производить поиск по содержимому приложенных файлов, поэтому если вы не используете их, не производите поиск по ним, или у вас там одни изображения - то данную операцию можно отключить, в любом случае выполнять ее раз в 85 секунд - явный перебор.
Обновление индекса ППД - одна из самых ресурсоемких операций, по умолчанию выполняется раз в минуту.
Тоже самое относится и к слиянию индекса ППД, если вы обновляете индекс раз в день, то следует настроить слияние на выполнение раз в неделю, при этом выбрав в качестве начала задания наименее мешающее работе время.
Эти несложные операции позволят вам без особого ущерба для функциональности конфигурации поднять комфортность работы с ней на новый уровень за счет отказа от частого выполнения достаточно ресурсоемких операций. Только не следует впадать в крайности, грамотно рассудите, насколько вам необходимы те или иные возможности и как часто следует выполнять связанные с ними задания.
Извлечение текста. Пример использования
Необходимо написать небольшую конфигурацию, в которой должен быть функционал по прикреплению документов (doc, xls, txt и т.д.). При этом текст документов в дальнейшем используется в полнотекстовом поиске, с помощью которого пользователи находят необходимые им документы. Чтобы не усложнять пример, прикрепляемые файлы будут храниться непосредственно в реквизите элемента справочника, как и извлеченный текст.
Поиск по содержимому документов реализуем с помощью отдельной обработки, где пользователь вводит строку поиска. В результате обработка показывает все документы, в которых содержится набранная строка.
Для начала реализуем функционал прикрепления документов и извлечения из них текста.
Прикрепляем, извлекаем
Создадим справочкик "СохраненныеДокументы" с двумя реквизитами:
- "ДокументХранилище" - двоичные данные сохраняемого файла документа.
- "ИзвлеченныйТекст" - неограниченная строка с извлеченным текстом документа.
У объекта "ИзвлечениеТекста" есть несколько методов:
- "ПолучитьТекст" - получает текст из файла, на основе которого создан экземпляр объекта.
- "Записать" - записывает полученный текст в файл.
Перейдем к реализации поиска по содержимому прикрепленных файлов.
Найти!
Подробнее о механизме полнотекстового поиска Вы можете прочитать здесь . Рассматривать тонкости реализации поиска не будем, приведу лишь программный код, выполняющий поиск:
В тестовой конфигурации, ссылка на которую приведена в конце статьи, Вы можете посмотреть реализацию обработки полнотекстового поиска.
Заключение
Пример построен не самым оптимальным образом, то принцип работы должен быть понятен. В типовых конфигурациях существует похожий механизм. В той же "Библиотеке стандартных подсистем" извлечение текста из файла позволяет искать прикрепленные файлы по их содержимому.
Читайте также: