Метаданные документы найти. Зачем нужна работа с метаданными

Я какое-то время назад очень активно интересовался этой темой, в последнее время появилось много другого любопытного и метаданные документов отошли на второй план, однако в практических целях иногда знание того что и как искать помогает.

Всех нюансов, конечно, не расскажешь, но кое что в дополнение и повторение к ранее написанному у меня есть. Единственно — примеров не будет. Те примеры что у меня сейчас на руках, могут оказаться не самые приятными для тех кто документы готовил. Так что примеры как-нибудь в другой раз.

Итак метаданные.

Если ранее я писал что есть два типа метаданных — метаданные документа и метаданные связанных объектов, то теперь вынужден признать что, на самом деле, метаданных куда больше. Вернее даже не метаданных, а информации идентифицирующей автора и окружение.

Фактически я бы разделил эту идентификационную информацию на 4 типа:

метаданные документа – свойства (properties) документа которые обычно забывают удалить при сохранении и пересылке.

метаданные вложенных объектов — свойства вложенных OLE объектов и изображений.

маркеры — данные в гипертексте документа идентифицирующие его владельца.

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

Для каждого из типов идентификационной информации имеются свои ограничения доступности и характера содержимого.

1. Метаданные документа

Это свойства документа которые видны если открыть его «Свойства» в Эксплорере Windows или открыв в соответствующей программе MS Office. Про эти свойства, казалось бы, должны знать все и последние версии MS Office включают возможности удаления этих метаданных. Однако на практике это далеко не так. Часто метаданные забывают почистить и удалить и там можно увидеть «чувствительную информацию» о том кто был на самом деле автором документа,

2. Метаданные вложенных объектов

Об этом я писал в прошлой заметке и повторю сейчас. Вложенные объекты — это так называемые OLE объекты или контейнеры StructuredStorage содержащие другие документы/объекты с которыми умеет работать MS Office. Ещё вернее что объекты с которыми вообще умеет работать MS Windows, но в данном случае чуть упростим.

Если описать это ещё проще, то когда Вы готовите таблицу в Excel, а потом вставляете её в презентацию — это вставка OLE объекта. Точно также если вы делаете диаграмму в Visio и потом вставляете её в презентацию или документ — это вставка OLE объекта, если только вы не преобразовали вначале диаграмму в изображение.

Особенность этих вложенных объектов в том что каждый из них несёт свой собственный набор свойств заданных в той программе в которой данный объект создавался. Если Вы вложили таблицу Excel — значит у документа будут свойства которые указаны в Excel. Если объект Visio, то свойства заданные в Visio.

Коварство этой ситуации в том в что, что если Вы создаёте объект не в родной его программе, а через меню другой офисной программы через «Вставить объект», то у Вас не будет возможности отредактировать свойства документа. А также если Вы работаете над документом вместе с кем-то и этот кто-то вставил объект, то в свойствах этого объекта будут метаданные с компьютера того пользователя и они там останутся.

Вложенные объекты можно извлечь несколькими способами, но большая часть из них весьма техническая и требует знаний того как устроены документы MS Office внутри, поэтому самый практичный способ — сохранить документ в одном из форматов OpenXML и распаковать его любимым ZIP распаковщиком. В результате, OLE объекты будут в папке embeddings. Впрочем я ранее уже это описывал и заметке на которую я сослался вначале этого поста есть подробное описание процесса.

Однако, вложенными объектами могут быть не только OLE объекты. К этой же категории носителей информации можно отнести изображения. В изображениях может сохранятся информация EXIF (в JPEG файлах) и XMP. Подобное встречается гораздо реже, в основном если кто-то необдуманно вставляет в документы необработанные фотографии. Извлечь изображения можно по тому же рецепту — преобразовать в OpenXML, распаковать и заглянуть в папку media.

3. «Маркёры»

Это очень условное название для той информации которая может присутствовать в тексте документа и позволяет узнать более о его авторе. К подобной информации можно отнести:

обсуждения и комментарии в режим правки . Иногда (в последнее время всё реже) авторы документов забывают про режим правки и публикуют документ со всей историей обсужения, заметками и так далее.

ссылки . В некоторых случаях, сознательно или по ошибке в документах остаются ссылки на локальные документы того же пользователя или документы в его локальной сети. Чаще всего эти ссылки указывают на файлы на Desktop или же в папке «Мои документы «. Главное что такие ссылки позволяют узнать — локальное имя пользователя извлекаемой из пути к данному документу.

4. Скрытые данные

Кроме вполне очевидных данных (маркёров) в тексте есть некое количество данных которые скрыты в блоках бинарных файлов о предназначении которых можно знать или догадываться. Например, в Excel файлах есть специальный блок PLS содержащий информацию о принтерах. Он содержит точно название модели принтера и его название и, скорее всего некую дополнительную информацию.

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

А как собственно получить все эти данные?

Инструменты

Существует довольно большое число инструментов по работе с метаданными, но чего-то универсального не нет. Каждый из инструментов имеет свои плюсы и минусы и многие из них (но не все) описаны в статье Document Metadata Extraction в Forensics Wiki —http://www.forensicswiki.org/wiki/Document_Metadata_Extraction здесь много ссылок на инструменты и библиотеки.

Набор инструментов:

MS Office 2007-2010 для преобразования из бинарных форматов MS Office в OpenXML. В данном случае OpenOffice не подойдёт поскольку он не сохраняет OLE объекты

Strings — утилитка из пакета Sysinternals позволяющая извлечь строковые переменные.

Metadata Extraction Tool — бесплатная утилитка по извлечению метаданных из офисных документов, PDF, изображений и так далее. заглядывает неглубоко и находит не всё

Catalogue — собирает метаданные из разного типа файлов http://peccatte.karefil.com/software/Catalogue/CatalogueENG.htm

— Metadata Analyzer — извлекает метаданные (только базовые)http://smartpctools.com/metadata/

Document Trace Remover — убирает метаданные http://smartpctools.com/trace_remover/

Oracle Outside In — инструмент для разработчиков, поддерживает около 500 форматов файлов http://www.oracle.com/us/technologies/embedded/025613.htm

Это, конечно, совсем не предел тем вокруг извлечения информации. Есть также метаданные и способы их выковыривания из документов PDF и OpenOffice, электронных писем и так далее.

Кроме того есть масса нераскрытых возможностей связанных с неполным описанием бинарных проприетарных форматов.

Любое прикладное решение в 1С:Предприятии имеет в своей основе набор проблемно-ориентированных объектов, поддерживаемых на уровне технологической платформы. По большому счету задача разработчика заключается в том, чтобы собрать из этих объектов, как из конструктора, необходимую структуру прикладного решения и затем описать специфические алгоритмы функционирования и взаимодействия этих объектов, отличающиеся от их типового поведения.

Состав объектов, поддерживаемых технологической платформой, является результатом анализа предметных областей использования 1С:Предприятия, и выделения и классификации используемых в этих областях бизнес-сущностей. В результате этого анализа разработчик может оперировать такими объектами как справочники, документы, регистры сведений, планы счетов и пр.

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

На основании этого описания технологическая платформа создаст в базе данных соответствующие информационные структуры, и определенным образом будет работать с данными, хранящимися в этих структурах. Разработчику нет необходимости заботиться о том, в каких таблицах, например, должны размещаться данные, каким образом они будут модифицироваться или представляться пользователю. Все эти действия платформа будет выполнять автоматически, исходя из типового поведения используемых объектов.

Таким образом, разработчик оперирует метаданными - "данными о данных", или объектами конфигурации. Добавляя в структуру прикладного решения очередной объект, разработчик, по сути, добавляет описание того, как будут размещаться соответствующие данные, и как они будут взаимодействовать с другими данными, хранящимися в информационной базе.

Состав объектов, которые может использовать разработчик, фиксирован и определен на уровне технологической платформы "1С:Предприятие 8.0". Разработчик не может создавать собственные виды объектов, он может оперировать только тем набором объектов, который имеется. Подобный подход к разработке прикладных решений позволяет, во-первых, стандартизировать процесс разработки, а во-вторых - обеспечить простую и быструю модификацию прикладных решений другими разработчиками или пользователями.

Состав основных объектов конфигурации, используемых в 1С:Предприятии 8.0, показан на следующем рисунке:

Справочник

Служит для описания таких сущностей как товары, контрагенты, валюты, склады и пр. Все эти сущности имеют общие свойства: внутренняя идентификация объекта в системе, необходимость поддержки иерархии и группировки элементов, необходимость поддержки вложенных таблиц и т.д.

Документ, журнал документов, нумератор, последовательность

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

Регистр накопления

"Отвечает" за учет движений ресурсов (финансов, товаров, материалов и т.д.). Позволяет автоматизировать такие направления как складской учет, взаиморасчеты, планирование. В регистрах накопления хранится информация о поступлении и расходе тех или иных ресурсов, а функциональность этих объектов предоставляет возможность получения остатков на определенный момент времени, расчета итогов, кэширования итогов и т.д.

Регистр сведений

Предназначен для хранения многомерных сведений о значениях различных величин. Такими значениями могут быть, например, курсы валют или цены на товары конкурентов по состоянию на определенную дату. Эта информация может быть как статической, так и изменяющейся с течением времени - в этом случае для нее предусмотрено хранение истории изменений.

План счетов и регистр бухгалтерии

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

План видов расчета и регистр расчета

Служат для реализации моделей расчета заработной платы. Позволяют описывать различные виды расчета (например, оклад, персональная доплата, алименты, штраф и т.д.), задавать правила, по которым одни виды расчета могут влиять на результаты других видов расчета, и хранить промежуточные данные и конечные результаты расчетов. С помощью этих объектов может быть организован расчет основных начислений, расчет налога на доходы физических лиц, распределение результатов расчета заработной платы для целей отражения в бухгалтерском учете и т.д.

Задача и бизнес-процесс

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

Обработка, отчет

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

План видов характеристик

Предназначен для хранения информации о характеристиках различных объектов. Позволяет пользователю создавать всевозможные характеристики, описывать тип этих характеристик и задавать их значения. Может использоваться, например, для предоставления пользователю возможности описывать товары произвольным количеством произвольных характеристик (цвет, размер, запах и т.д.). Позволяет создавать и хранить название характеристики и тип данных, который должны принимать значения этой характеристики.

План обмена

Предназначен для описания структуры распределенной информационной системы и задания перечня данных, которыми будет производиться обмен в пределах этой распределенной системы. Позволяет создавать территориально распределенные информационные системы как на основе информационных баз 1С:Предприятия, так и с использованием произвольных информационных систем, не основанных на 1С:Предприятии.

Константа

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

Перечисление

Предназначено для описания перечня значений, которые может принимать какая-либо переменная. Например, перечисление может хранить значения, описывающие статус покупателя: "оптовый" и "розничный".

Критерий отбора

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

Язык

Используются для создания интерфейсов прикладного решения на различных языках. Благодаря использованию этих объектов становится возможным создание многоязычных прикладных решений, в которых пользователь может выбирать свой язык для работы с прикладным решением.

Стиль

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

Интерфейс

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

Роль

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

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

Атрибуты, являющиеся по сути признаками с двумя возможными значениями имеют числовой тип и принимают значения 0 или 1. Атрибуты, которые могут иметь несколько возможных значений, выдают строку, отражающую установленный вариант. Атрибуты, отражающие свойство метаданных, выбираемое как ссылка на другой объект метаданных (например, журнал документа) имеют тип "Метаданные".

Пример :

ВыбМетодУдаления=Метаданные.НепосредственноеУдалениеОбъектов;

У объекта "Метаданные" могут существовать методы для доступа к массивам подчиненных метаданных. Например, для глобального атрибута "Метаданные" для обращения к документам используется метод "Документ".

В качестве параметра методов для доступа к массивам подчиненных метаданных передается:

  • число - выдает объект метаданных по указанному номеру;
  • строка - выдает объект метаданных по указанному идентификатору;
  • параметр не указан - выдает количество подчиненных объектов этого типа.

Пример получения списка документов конфигурации:

Для Инд = 1 По Метаданные.Документ() Цикл Сообщить(Метаданные.Документ(Инд).Идентификатор); КснецЦикла;

У объекта типа "Метаданные" могут существовать атрибуты, содержащие массив ссылок на объекты метаданных, к ним применяются методы Количество() и Получить(Ном) для перебора ссылок. Например, для граф отбора таким атрибутом является атрибут "Ссылки", позволяющий получить объекты метаданных включенные в данную графу отбора (реквизиты документов и др.).

Пример :

Для Инд = 1 До Метаданные.ГрафаОтбора(Идент).Ссылки.Количество() Цикл Сообщить(Метаданные.ГрафаОтбора(Идент). Ссылки.Получить(Инд).ПолныйИдентификатор()); КонецЦикла;

Метаданные 1С – это список справочников, документов, их реквизитов и прочего, составляющего конфигурацию. Список метаданных 1С правится программистов в конфигураторе в окне конфигурации.

Из программы на языке 1С доступен список метаданных 1С и их свойства.

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

Рассмотрим, как работать с метаданными 1С конфигурации из языка 1С.

Метаданные 1С конфигурации

Глобальная переменная Метаданные дает доступ к метаданным 1С всей конфигурации (т.е. к «корню» конфигурации). Далее через точку можно обращаться к «коллекциям» — документы, справочники и т.п., чтобы выйти на конкретный справочник или документ, у которых соответственно есть «коллекции» реквизиты, табличные части и т.п. – все, как в конфигураторе, в дереве конфигурации.

Пример – создадим список всех документов конфигурации для того, чтобы пользователь мог выбрать нужный документ из списка:
спДокументовКонфигурации = Новый СписокЗначений(); //сюда будем сохранять список

//Метаданные - глобальная переменная, которая дает доступ ко всем метаданным 1С конфигурации
//Метаданные.Документы - коллекция документов конфигурации
Для каждого Документ из Метаданные.Документы Цикл
//Документ - это метаданные 1С документа (каждого, так как мы обходим их в цикле)
//.Имя - наименование документа так, как оно задано в конфигурации
//.Синоним - "человеческое" наименование документа, которое отображается пользователю
//список значений может хранить значение (имя документа) и "представление для пользователя" (как раз - синоним документа)
спДокументовКонфигурации.Добавить(Документ.Имя, Документ.Синоним);
КонецЦикла;

//даем возможность пользователю выбрать из списка нужный документ
элДокумент = спДокументовКонфигурации.ВыбратьЭлемент();

//если пользователь нажал "Отмена", то результатом выбора будет значение НЕОПРЕДЕЛЕНО, иначе результатом будет - выбранный элемент
Если элДокумент Неопределено Тогда
//в.Значение списка значений мы записывали имя документа "как в конфигурации"
//создадим новый документ с таким именем, напомним - к документам можно обращаться Документы.ИмяДокумента или Документы[ИмяДокумента]
обДокумент = Документы[элДокумент.Значение].СоздатьДокумент();
//ДокументОбъект.ПолучитьФорму() - возвращает форму с указанным именем, а если имя не указано - то форму "по-умолчанию"
обДокумент.ПолучитьФорму().Открыть();
КонецЕсли;

Пример – для общего журнала документов (отображающего все виды документов) создадим запрос, который вернет список всех документов:

Метаданные 1С объекта

Большинство объектов 1С, сохраняемых в базе данных (справочники, документы и т.д.) представлены ссылками и объектами (подробнее см. «Ссылки и объекты»).

У ссылок и объектов есть метод.Метаданные(), который позволяет выйти на метаданные 1С этого объекта.

Пример – проверка на наличие реквизитов с типом «Справочник.Организация» в документе и обнуление значения этих реквизитов:
//ДокументОбъект - документ, полученный на изменение или создание
//аналогичным образом можно работать со ссылками, например: ДокументСсылка = Документ.ИмяДокумента.ПустаяСсылка().Метаданные()
ДокументОбъект = Документы.ПоступлениеТоваров.СоздатьДокумент();

//цикл по реквизитам
Для каждого Реквизит из ДокументОбъект.Метаданные().Реквизиты Цикл
//у каждого реквизита может быть как один, так и несколько типов, подробнее см. "ОписаниеТипов"

//проверяем по каждому типу - тот ли это нужный нам?


//обнуляем реквизит с этим именем в документе
//для "обнуления" можно приравнивать его к Неопределено,
//по факту значение будет установлено не Неопределено, а "пустое значение" типа реквизита
//Неопределено только если у реквизита несколько типов
ДокументОбъект[Реквизит.Имя] = Неопределено;
КонецЕсли;
КонецЦикла;
КонецЦикла;

//цикл по табличным частям
Для каждого ТабЧасть из ДокументОбъект.Метаданные().ТабличныеЧасти Цикл
//в табличной части тоже реквизиты (колонки таб.части)
Для каждого Реквизит из ТабЧасть.Реквизиты Цикл
//здесь аналогично
мТипов = Реквизит.Тип.Типы();
Для каждого Тип из мТипов Цикл
Если Тип = Тип("СправочникСсылка.Организации") Тогда
//так как это таб.часть, то мы должны пройтись по всем строкам этой тач. части
Для каждого Строка из ДокументОбъект[ТабЧасть.Имя] Цикл
Строка[Реквизит.Имя] = Неопределено;
КонецЦикла;
КонецЕсли;
КонецЦикла;
КонецЦикла;
КонецЦикла; 



 

Возможно, будет полезно почитать: