1С загрузка истина

Ошибка «Поле объекта не обнаружено (ПарольАдминистратораИнформационнойБазы)» оглавление Ошибка «Поле склад не заполнено»

Как разрешить интерактивное открытие внешних отчетов и обработок? (1С:Бухгалтерия 8.3. редакция 3.0)

2016-12-08T15:52:26+00:00

Если при открытии внешней обработки или отчёта через меню Файл->Открыть

появляется ошибка «Нарушение прав доступа»:

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

Первый вариант, это регистрация обработки в справочнике «Дополнительные отчёты и обработки» (об этом ).

Но, что если обработка не поддерживает такую регистрацию? А обработка очень полезная и открыть её очень хочется.

В этом случае можно пойти по второму варианту и вновь включить возможность открытия обработок в базе через меню Файл->Открыть.

Инструкция для этого ниже.

Зайдите в конфигуратор базы:

Выполните команду меню «Администрирование»->»Пользователи»:

Двойным щелчком откройте своего пользователя:

Перейдите на закладку «Прочие», установите галку «Интерактивное открытие внешних отчетов и обработок» и нажмите «ОК»:

Теперь закройте конфигуратор и базу (если она у вас была открыта).

Вновь зайдите в базу и попытайтесь открыть отчёт через меню «Файл»->»Открыть».

Теперь всё получится

Есть нюансы…

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

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

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

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

Сообщение выглядит так:

Предупреждение безопасности

Открывается «» из файла » C:\…….epf». Рекомендуется обращать внимание на источник, из которого был получен данный файл. Если с источником нет договоренности о разработке дополнительных модулей, или есть сомнения в содержимом файла, то его не рекомендуется открывать, поскольку это может нанести вред компьютеру и данным. Разрешить открывать данный файл. ДА, НЕТ

Решение:

В конфигураторе в свойствах пользователя ИБ убрать флажок «Защита от опасных действий».

Из документации: Отключение механизма защиты от опасных действий

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

1. Выключить флажок Защита от опасных действий (ЗащитаОтОпасныхДействий) в свойствах конкретного пользователя. Это отключит защиту для этого пользователя.

2. Воспользоваться параметром ЗащитаОтОпасныхДействий методов Подключить() менеджеров внешних обработок (отчетов). В этом случае имеется возможность загрузить внешнюю обработку (отчет) без запросов пользователя.

3. Воспользоваться свойством ЗащитаОтОпасныхДействий объекта РасширениеКонфигурации перед вызовом метода Записать() этого объекта.

4. Воспользоваться параметром DisableUnsafeActionProtection файла conf.cfg. В этом случае механизм защиты от опасных действий будет отключаться для всех пользователей информационных баз, строки соединения которых удовлетворяют указанным маскам.

Отключение защиты от опасных действий выполняется по следующим правилам (в указанном порядке):

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

2. Защита считается отключенной, если строка соединения с информационной базой удовлетворяет одному из шаблонов, указанных в параметре DisableUnsafeActionProtection файла conf.cfg.

3. Если внешняя обработка (отчет) подключается с явным образом отключенной защитой с помощью параметра ЗащитаОтОпасныхДействий.

4. Если защита явным образом отключена с помощью свойства расширения ЗащитаОтОпасныхДействий.

Наконец-то дошли руки до третьей статьи из цикла – Новый формат обмена данными!

Тем, кто не читал первые, можно перейти по ссылкам ниже:

  • Первая, вводная статья (для тех, кто не знаком механизмом обмена данными через ED).
  • Вторая статья – процесс выгрузки данных.

Чтобы облегчить восприятие информации, я сделал схемы с кратким пояснением. Под схемами идет более подробное описание. Схемы можно скачать в формате PowerPoint в комментарии к статье.

Термины, используемые в статье

ИБ – информационная база, участвующая в обмене данными,

КД31 – информационная базы для создания правил конвертации (Конвертация данных 3.1),

ED­ – EnterpriseData (Универсальный формат обмена данными),

ПОД – правило обработки данных,

ПКО – правило конвертации объекта,

ПКС – правило конвертации свойства,

УИД – уникальный идентификатор объекта

Инструкция – структура, содержащая два элемента: имя правила конвертации и значение самого объекта, которое необходимо конвертировать. Боле подробно инструкция описана во второй статье.

Общая последовательность операций при загрузке данных

Ниже приведена общая схема процессов загрузки данных:

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

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

Для каждого объекта выполняется поиск ПОД по типа объекта, и его выполнение.

Дальше выполняется обработчик «При обработке». В обработчике доступен параметр «ДанныеXDTO», в который передается подготовленная структура с данными из XDTO объекта. Также в обработчике доступен параметр «ИспользуемыеПКО», который также является структурой. Ключи структуры, это имена ПКО, выбранные для данного ПОД. Значения элементов структуры имеют тип «булево». Выполняться будут только те ПКО, для которых значения в структуре равны «Истина». Обработчик в основном используется для отключения лишних ПКО для объекта на основании полученных данных и параметров обмена.

Дальше выполняется конвертация объекта по всем не отключенным ПКО. Именно на этом этапе происходит конвертация свойств первого и второго этапов, идентификация и запись объекта в ИБ. Запись выполняется в режиме «ОбменДанными.Загрузка = Истина», минуя все платформенные проверки и обработчики при записи. Этап конвертации объекта рассмотрен в отдельном разделе.

Дальше, после выборки и обработки всех объектов из файла обмена, выполняется обработчик «Перед отложенным заполнением». В нем можно реализовать какие-либо действия, необходимые перед отложенным заполнением. Например, можно выполнить сортировку данных в таблице для отложенного заполнения «КомпонентыОбмена.ЗагруженныеОбъекты». В таблицу записываются все выгруженные объекты, для которых указан алгоритм в КД31, на закладке «После загрузки всех данных». Объекты записываются в той же последовательности, в которой они были загружены. Можно их отсортировать по типу объекта.

Дальше выполняется само отложенное заполнение объектов. Отрабатываются алгоритмы для каждого объекта из таблицы «КомпонентыОбмена.ЗагруженныеОбъекты».

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

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

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

Идентификация объектов при загрузке

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

В КД31 доступны три варианта идентификации:

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

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

По уникальному идентификатору и полям поиска – поиск выполняется по УИД, если объект не найден, продолжается по указанным полям поиска. Если объект был найден по полям поиска, его УИД будет записан в специальный регистр сведений «ПубличныеИдентификаторыСинхронизируемыхОбъектов». При последующей синхронизации, поиск будет выполняться по УИД в данном регистре сведений, а не по полям. Таким образом можно выполнять сопоставление объектов, созданных в двух ИБ, и решается проблема поиска только по полям.

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

КД31 позволяет указать несколько разных комбинаций для поиска объектов по полям. Поиск в ИБ приемнике будет выполнен по всем комбинациям. Объект будет считаться найденным, если поиск успешен хотя бы по одной из этих комбинаций.

Конвертация объектов по правилам конвертации (ПКО)

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

Данный алгоритм можно разделить на два разных процесса:

  • Конвертация объекта, загружаемого по ПОД – объект выгружен целиком из базы источника.
  • Конвертация объекта по ссылке – загружается ссылка на объект из другого объекта.

Конвертация объекта, выгруженного целиком

Общая схема конвертации полного объекта:

Первым действием происходит поиск объекта по УИД, если данный вид идентификации доступен для объекта.

Дальше выполняется конвертация свойств (ПКС) первого этапа. На первом этапе происходит конвертация тех свойств, для которых задано свойство формата.

Дальше выполняется обработчик «При конвертации данных XDTO». В обработчике доступны параметры:

  • ДанныеXDTO – структура с полученными данными.
  • ПолученныеДанные — новый, созданный объект данного типа, с частично заполненными свойствами (на первом этапе конвертации).

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

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

Дальше, если объект был найден по УИД, выполняется обработчик «Перед записью полученных данных». В обработчике доступны параметры: «ПолученныеДанные» и «ДанныеИБ».

Если объект найден, параметр «ДанныеИБ» содержит ссылку на этот объект.

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

Если объект не найден ни по УИД ни по полям, в обработчике «Перед записью полученных данных», параметр «ДанныеИБ» будет иметь значение «Неопределено».

В данном обработчике, можно реализовать собственный поиск объекта, и присвоить параметру «ДанныеИБ» найденный объект самостоятельно. Если же параметр «ДанныеИБ» останется не заполненным, в ИБ будет создан новый объект, который находится в параметре «ПолученныеДанные».

Если объект был найден (по УИД, полям поиска или произвольным образом), его данные будут замещены значениями из параметра «ПолученныеДанные». Причем замещаться будут только те свойства объекта для которых были определены ПКС в настройках КД31.

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

Объект (новый или найденный) будет записан в режиме «ОбменДанными.Загрузка = Истина». Это значит, что не будут выполнены многие платформенные проверки и обработчики при записи объекта, и он запишется в любом случае.

Конвертация объекта, выгруженного по ссылке

Общая схема конвертации по ссылке:

Так же, как и в случае с загрузкой полного объекта, сначала происходит поиск по УИД (если он доступен). Если объект найден, возвращается ссылка на него, и больше никаких действий не происходит.

Если объект не найден по УИД, и поиск по полям для объекта не доступен, возвращается пустая ссылка. В этом случае, если объект в дальнейшем не будет загружен по ПОД полностью, будет ссылка на несуществующий объект.

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

Дальше происходит поиск объекта по полям поиска. В случае, если объект найден, возвращается ссылка на него. А если же он не найден, выполняется обработчик «Перед записью полученных данных». В этом обработчике можно реализовать собственный поиск объекта. Но, обратите внимание, поиск будет выполняться только в том случае, если объект не был найден ни по УИД ни по полям поиска.

Дальше происходит запись частично заполненного объекта (заполнены только поля поиска), и возвращается ссылка не него. Поскольку запись происходит в режиме «ОбменДанными.Загрузка = Истина», объект будет записан на данном этапе.

Дальше проверяется, используется ли ПКО выгружаемого по ссылке объекта в каком-нибудь ПОД. Если ПКО негде не используется, в ИБ так и остается частично записанный объект. Если ПКО используется, объект помещается в специальную таблицу значений «КомпонентыОбмена.ТаблицаОбъектовСозданныхПоСсылкам». Если при дальнейшей загрузки объектов, этот объект не будет загружен полностью, он будет удален из ИБ. Ссылка на него из других записанных объектов будет «битой» (указывать на не существующий объект).

Полезные процедуры общего модуля «ОбменДаннымиXDTOСервер»

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

ИнициализироватьКомпонентыОбмена – выполняет инициализацию компонентов обмена данными, создание и первоначальное заполнение структуры «КомпонентыОбмена».

ОткрытьФайлЗагрузки – выполняет открытие файла данных при загрузке. Выполняется проверка корректности файла. Считывается информация об узле-корреспонденте, версии формата, номерах сообщений. Данные загружаются в структуру «КомпонентыОбмена».

ПроизвестиЧтениеДанных – выполняет чтение данных, загруженных в параметр «КомпонентыОбмена.ФайлДанных». Выполняются все действия по обработке и загрузке полученных данных.

СсылкаОбъектаПоУИДОбъектаXDTO – выполняет поиск ссылки на объект по УИД из полученных данных XDTO. Сначала поиск выполняется в регистре «ПубличныеИдентификаторыСинхронизируемыхОбъектов».

ПОДПоТипуОбъектаXDTO – выполняет поиск правил обработки данных по типу объекта XDTO.

ПКОПоИмени – выполняет поиск правила конвертации объекта по имени в таблице «ПравилаКонвертацииОбъектов» структуры «КомпонентыОбмена»

СтруктураОбъектаXDTOВДанныеИБ – выполняет преобразование данных из структуры XDTO в объект ИБ. В зависимости от переданного параметра «Действие», может быть либо получена ссылка на объект (только идентификация), либо полноценная загрузка объекта.

ОбъектXDTOВСтруктуру – выполняет создание структуры «ДанныеXDTO» по данным прочитанного из файла загрузки объекта XDTO.

ЗаписатьОбъектВИБ – выполняет запись объекта в ИБ в режиме «ОбменДанными.Загрузка = Истина».

ВыполнитьОтложенноеПроведениеДокументов – выполняет отложенное проведение документов после загрузки всех данных. Проведение выполняется со всеми необходимыми проверками.

ЗаписьЖурналаРегистрацииОбменДанными – выполняет запись произвольных данных в журнал регистрации.

Основные элементы структуры «КомпонентыОбмена»

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

Общие элементы

Общие элементы структуры рассмотрены во второй статье, посвященной выгрузки данных.

Элементы, используемые при загрузке данных

РежимЗагрузкиДанныхВИнформационнуюБазу – флаг, указывающий на то, что происходит загрузка данных в ИБ

СчетчикЗагруженныхОбъектов – позиция текущего загружаемого объекты.

КоличествоОбъектовНаТранзакцию – параметр определяет, нужно ли использовать транзакции при загрузке данных (значение > 0), и сколько объектов необходимо включать в одну транзакцию.

КоличествоОбъектовКЗагрузке – общее количество загружаемых объектов.

ДокументыДляОтложенногоПроведения – список документов для отложенного проведения (с выполнением всех платформенных проверок и обработчиков при записи).

ТаблицаОбъектовСозданныхПоСсылкам – список объектов созданных по ссылке по ПКО, которые используются в ПОД. Все объекты из данного списка, которые не будут загружены полностью, будут удалены из ИБ.

ОбъектыДляОтложеннойЗаписи – список объектов для отложенной записи (с выполнением всех платформенных проверок и обработчиков при записи).

ТаблицыДанныхСообщенияОбмена – таблицы для загрузки в случае, если загрузка выполняется в режиме сопоставления данных.

На этом все, спасибо за внимание. Напишите, пожалуйста, в комментариях, какие еще темы по ED могут быть интересны. Ну и ставьте плюс, если статья Вам понравилась.

Другие статьи по оптимизации 1С:

«Как ускорить 1С – Многопоточная обработка данных»

«Как ускорить 1С за 5 минут – Протокол Shared Memory»

«3 главных вопроса про временные таблицы 1С»

Анализ запросов с помощью SQL Profiler

Что Вы узнаете из этой статьи?

  • Предназначение инструмента трассировки SQL Profiler
  • Как отследить текст запроса к СУБД, в который транслируется запрос 1С
  • Настройки фильтров трассировки
  • Как выполнить персональную настройку SQL Profiler

Зачастую в работе возникает ситуация, когда запрос в 1С по каким-то причинам работает медленно, но анализ текста запроса не говорит нам о каких-либо проблемах.

В таком случае приходится изучать эту проблему на более низком уровне. Для этого нам нужно посмотреть текcт SQL-запроса и план запроса. Для этого можно использовать SQL Profiler.

SQL Profiler – предназначение

SQL Profiler – это программа, входящая в MS SQL Server, которая предназначена для просмотра всех событий, которые происходят в SQL-сервере. Иначе говоря, она нужна для записи трассировки.

В каких случаях данный инструмент может быть полезен 1С программисту? Прежде всего, можно получить текст запроса на языке SQL и посмотреть его план. Это также можно сделать и в технологическом журнале (ТЖ), но план запроса в ТЖ получается не таким удобным и требует наличия некоторых навыков и умений. К тому же в профайлере можно посмотреть не только текстовый, но и графический план выполнения запроса, что является более удобным.

Также профайлер позволяет узнать:

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

Зачастую Profiler применяется именно для анализа запросов. И при этом нужно анализировать не все исполняемые запросы, а то, как определенный запрос на языке 1С транслируется в SQL, и обращать внимание на его план выполнения.

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

Для отслеживания запроса в трассировке выполняем следующие шаги:

1. Запускаем SQL Profiler: Пуск — Все программы — Microsoft SQL Server 2008 R2 — Средства обеспечения производительности — SQLProfiler.

2. Создаем новую трассировку: Файл – Создать трассировку (Ctrl+N).

3. Указываем сервер СУБД, на котором находится наша база данных и нажимаем Соединить:

Нам ничто не мешает выполнять трассировку сервера СУБД, находящегося на любом другом компьютере.

4. В появившемся окне Свойства трассировки переключаемся на закладку Выбор событий:

5. Далее нужно указать события и их свойства, которые мы хотим видеть в трассировке.

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

Описание этих событий:

  • ShowplanStatisticsProfile– текстовый план выполнения запроса
  • ShowplanXMLStatisticsProfile– графический план выполнения запроса
  • RPC:Completed– текст запроса, если он выполняется как процедура (если выполняется запрос 1С с параметрами)
  • SQL:BatchCompleted– текст запроса, если он выполняется как обычный запрос (если выполнялся запрос 1С без параметров)

6. На этом этапе необходима настройка фильтра для выбранных событий. Если фильтр не установлен, то мы будем видеть запросы для всех БД, расположенных на данном сервере СУБД. По кнопке Фильтры столбцов устанавливаем фильтр по имени базы данных:

Теперь мы видим в трассировке только запросы к БД «TestBase_8_2».

Также можно поставить фильтр и по другим полям, наиболее интересные из них:

  • Duration (длительность)
  • TextData (обычно это текст запроса)
  • RowCounts (количество строк, возвращаемых запросом)

Допустим, нам необходимо «отловить» все запросы к таблице «_InfoRg4312» длительностью более 3-х секунд в базе данных «TestBase_8_2». Для этого необходимо:

a) Установить фильтр по базе данных (см. выше)
b) Установить фильтр по длительности (устанавливается в миллисекундах):

c) Установить фильтр по тексту запроса:

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

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

Кнопки командной панели служат для управления трассировкой:

Назначение кнопок:

  • Ластик – очищает окно трассировки
  • Пуск – запускает трассировку
  • Пауза – ставит трассировку на паузу, при нажатии на Пуск трассировка возобновляется
  • Стоп – останавливает трассировку

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

9. Запустим на выполнение запрос в консоли запросов 1С и посмотрим, как он отразится в профайлере:

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

10. Свойства событий дают возможность оценить:

  • сколько секунд выполнялся запрос (Duration)
  • сколько было логических чтений (Reads)
  • сколько строк запрос вернул в результате (RowCounts) и т.д.

В нашем случае запрос выполнялся 2 миллисекунды, сделал 4 логических чтения и вернул 1 строку.

11. Если взглянуть на одно событие выше, то можно увидеть план запроса в графическом виде:

Из плана видно, что поиск осуществляется по индексу по цене, этот план нельзя назвать идеальным, так как индекс не является покрывающим, поля код и наименование получаются с помощью KeyLookup, что отнимает 50% времени.

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

12. Если подняться еще выше, то мы увидим тот же план запроса, но уже в текстовом виде. Именно этот план отображается в ТЖ, ЦУП и прочих средствах контроля производительности 1С.

13. Через меню Файл – Сохранить как можно сохранить всю трассировку в различные форматы:

  • В формат самого профайлера, то есть с расширением *.trc
  • В формат xml
  • Сделать из трассировки шаблон (См. следующий пункт)
  • Cохранить полученную трассировку в виде таблицы базы данных. Это весьма удобный способ, когда, к примеру, нужно найти самый медленный запрос в трассировке или отфильтровать запросы по какому-либо параметру.

Используем меню Файл – Сохранить как – Таблица трассировки – Выбираем сервер СУБД и подключаемся к нему.

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

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

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

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

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

Для создания шаблона используем меню Файл – Шаблоны – Новый шаблон:

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

На второй закладке делаем выбор нужных событий и осуществляем настройку фильтров (как было показано выше).

Дополнительно рекомендуется выполнить настройку порядка столбцов в трассировке, что экономит время при последующем анализе запросов. Удобным представляется следующий порядок:

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

Бурмистров Андрей

PDF-версия статьи для участников группы ВКонтакте

Мы ведем группу ВКонтакте – http://vk.com/kursypo1c.

Если Вы еще не вступили в группу – сделайте это сейчас и в блоке ниже (на этой странице) появятся ссылка на скачивание материалов.

Ссылка доступна для зарегистрированных пользователей)
Ссылка доступна для зарегистрированных пользователей)
Ссылка доступна для зарегистрированных пользователей)

Если Вы уже участник группы – нужно просто повторно авторизоваться в ВКонтакте, чтобы скрипт Вас узнал. В случае проблем решение стандартное: очистить кеш браузера или подписаться через другой браузер. Станьте экспертом по оптимизации 1С, изучив наш курс
«Ускорение и оптимизация систем на 1С:Предприятие 8.3 (2016). Подготовка на 1С:Эксперт по технологическим вопросам»

Содержание курса и форма заказа: https://курсы-по-1с.рф/1c-v8/optimization/

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

Свойство ОбменДанными

рубрики: УРБД | Дата: 1 сентября, 2017

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

Краткий обзор

Если в синтакс-помощнике открыть ветку Прикладные объекты, можно обнаружить, что у многих из них: СправочникОбъект, ДокументОбъект, для регистров НаборЗаписей и т.д. есть свойство ОбменДанными.
Тип у этого объекта: ПараметрыОбменаДанным, который в свою очередь содержит три свойства

  • Загрузка
  • Отправитель
  • Получатели

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

Свойство ОбменДанными.Загрузка

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

Поэтому очень часто в модулях объектов можно встретить вот такой код:

Процедура ПередЗаписью(Отказ) Если ОбменДанными.Загрузка Тогда Возврат; КонецЕсли; //Здесь код с проверкой данных КонецПроцедуры

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

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

НовыйТовар = Справочники.Товары.СоздатьЭлемент(); НовыйТовар.Наименование = «Тестирование записи»; НовыйТовар.ОбменДанными.Загрузка = Истина; НовыйТовар.Записать();

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