1с предприятие 8 как обратиться к внутреннему

Обновлено: 06.07.2024

Мы в фирме 1С широко используем собственные разработки для организации работы компании. В частности, «1С:Документооборот 8». Помимо управления документами (как следует из названия) это ещё и современная ECM-система (Enterprise Content Management — управление корпоративным контентом) с широким набором функциональных возможностей – почта, рабочие календари сотрудников, организация совместного доступа к ресурсам (например, бронирование переговорных), учёт рабочего времени, корпоративный форум и многое другое.

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

Как устроена работа нашей системы, с какими сложностями при обслуживании базы мы сталкиваемся и как их решаем (в качестве СУБД мы используем MS SQL Server) – расскажем в статье.

Для тех, кто впервые читает про продукты 1С.
1С:Документооборот — это прикладное решение (конфигурация), реализованное на базе фреймворка для разработки бизнес-приложений — платформе 1С:Предприятие.

image


«1С:Документооборот 8» (сокращённо – ДО) позволяет автоматизировать работу с документами на предприятии. Один из основных инструментов взаимодействия сотрудников – электронная почта. Помимо почты ДО также решает и другие задачи:

А ещё благодаря подключенному к Документообороту другому нашему продукту – Системе взаимодействия – мы непосредственно в Документообороте получаем функциональность мессенджера – чаты, аудио и видеозвонки (включая групповые, что сейчас стало особенно актуально, в том числе и с мобильного клиента), быстрый обмен файлами плюс возможность написания чат-ботов, упрощающих работу с системой. Ещё один плюс от использования Системы Взаимодействия (по сравнению с другими мессенджерами) – возможность вести контекстные обсуждения, привязанные к конкретным объектам Документооборота – документам, мероприятиям и т.п. То есть Система взаимодействия глубоко интегрируется с целевым приложением, а не выступает просто «отдельной кнопкой».

Число писем в нашем ДО уже перевалило за 100 млн., а вообще в СУБД – более 11 млрд. записей. Суммарно система использует почти 30 Тб хранилища: объём базы – 7,5 Тб, файлы для коллективной работы лежат отдельно и занимают ещё 21 Тб.

Если говорить о более конкретных цифрах, то вот количество писем и файлов на данный момент:

На каком оборудовании мы всё это обрабатываем?

image

Эти цифры говорят о внушительном объёме задач, так что перед нами встала необходимость выделить под нужды внутреннего ДО довольно производительное оборудование. На текущий день его характеристики следующие: 38 ядер, 240 Гб ОЗУ, 26 Тб дисков. Приводим таблицу серверов:

В будущем мы планируем наращивать мощность оборудования.

Как обстоят дела с загрузкой серверов?

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

Например, на скриншоте ниже мы видим SQL-сервер, где ЦПУ загружен на 23%. И это очень хороший показатель (для сравнения: если загрузка будет приближаться к 70%, то, скорее всего, сотрудники будут наблюдать довольно существенные замедления работы).

image

На втором скриншоте показан сервер приложений, на котором работает платформа 1С:Предприятие – он обслуживает только пользовательские сеансы. Здесь нагрузка процессора несколько больше – 38%, она ровная и спокойная. Загрузка диска есть, но она приемлемая.

image

Третий скриншот показывает ещё один сервер 1С:Предприятия (он второй, у нас их два в кластере). Только предыдущий обслуживает пользователей, а на этом работают роботы. Например, принимают почту, маршрутизируют документы, выполняют обмен данными, считают права и т.п. Все эти фоновые активности выполняют примерно 90-100 фоновых заданий. И вот этот сервер загружен очень сильно – на 88%. Но на людях это не сказывается, и он реализует как раз всю ту автоматику, которую должен делать Документооборот.

image

Какие есть метрики для определения эффективности работы?

У нас в ДО встроена серьёзная подсистема замеров показателей производительности и вычислений различных метрик. Это нужно для того, чтобы и в текущий момент времени, и в исторической перспективе понимать, что в системе происходит, что становится хуже, что становится лучше. Средства мониторинга – метрики и замеры времени – входят в типовую поставку «1С:Документооборот 8». Метрики требуют настройки на внедрении, но сам механизм типовой.

Метрики – это замеры различных бизнес-показателей в те или иные моменты времени (например, среднее время доставки почты в моменте 10 минут).

Одна из метрик показывает количество активных пользователей в базе. В среднем их 1000-1400 в течение дня. На графике видно, что на момент скриншота в базе было 2144 активных пользователя.

image

Таких действий больше 30, список под катом.

На позапрошлой неделе у нас средняя активность пользователей увеличилась в полтора раза (на графике показана красным) – это связано с переходом большинства сотрудников на удалённую работу (в связи с известными событиями). Также число активных пользователей увеличилось в 3 раза (на скрине показаны синим), так как сотрудники стали активно пользоваться мобильными: каждый мобильный клиент создаёт подключение к серверу. Сейчас в среднем на каждого нашего сотрудника приходится 2 подключения к серверу.

image

Для нас, как для администраторов, это сигнал, что нужно внимательнее относиться к вопросам быстродействия, смотреть, не стало ли хуже. А смотрим мы это по другим параметрам. Например, как меняется время доставки почты по внутренней маршрутизации (на скриншоте ниже показано синим). Мы видим, что оно до этого года скакало, а сейчас стабильное – для нас это показатель, что с системой всё в порядке.

Ещё одна прикладная метрика для нас – среднее время ожидания загрузки писем с почтового сервера (на скриншоте показана красным). Грубо говоря, сколько будет письмо гулять по Интернету, прежде чем оно окажется у нашего сотрудника. На скриншоте видно, что это время тоже никак не изменилось за последнее время. Есть отдельные всплески – но они связаны не с задержками, а с тем, что время сбивается на почтовых серверах.

image

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

image

Метрики – это, в основном, инструмент администратора для мониторинга системы, для быстрого реагирования на какие-то изменения в поведении системы. На скриншоте – метрики внутреннего ДО за год. Скачок на графиках обусловлен тем, что перед нами поставили задачи по развитию внутреннего ДО.

image

Вот перечень еще некоторых метрик (под катом).

  • Активность пользователей
  • Активные пользователи
  • Активные процессы
  • Количество файлов
  • Размер файлов (Мб)
  • Количество документов
  • Количество объектов к отправке адресатам
  • Количество контрагентов
  • Невыполненные задачи
  • Среднее время ожидания загрузки писем с почтового сервера за последние 10 минут
  • Внешний буфер данных: количество файлов
  • Отставание границы от текущей даты
  • Долгая очередь
  • Оперативная очередь
  • Возраст необработанной учётной записи по внешней маршрутизации
  • Размер очереди приемки по внутренней маршрутизации (долгая очередь)
  • Размер очереди приемки по внутренней маршрутизации (быстрая очередь)
  • Время доставки почты по внутренней маршрутизации (долгая очередь)
  • Время доставки почты по внутренней маршрутизации (быстрая очередь)
  • Время доставки почты по внешней маршрутизации (среднее)
  • Число документов Бронирование
  • Число документов Отсутствие
  • Число документов «Запись о работе с контрагентом»
  • Почта Обновление писем в папке
  • Почта Открытие карточки письма
  • Почта Перенос письма в папку
  • Почта Переход по папкам

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

На одном из внедрений было выбрано, например, только 5 показателей. Заказчик поставил перед собой цель сделать минимальный набор показателей, но в то же время такой, чтобы он покрывал основные сценарии работы. Включать в акт приёма 150 показателей было бы неоправданно, потому что даже внутри предприятия сложно согласовать, какие показатели считать приемлемыми. А про эти 5 показателей они знали и уже предъявляли их к системе до начала проекта внедрения, включив в конкурсную документацию: время открытия карточки не более 3 секунд, время исполнения задачи с файлом не больше 5 секунд и т.д. У нас в ДО как раз и были метрики, которые очень чётко отражали исходный запрос из ТЗ заказчика.

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

image

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

  • Выполнение команды: Отбор по тегу
  • Открытие формы: Форма списка
  • Выполнение команды: Отбор по папке
  • Отображение письма в области чтения
  • Сохранение письма в любимую папку
  • Поиск писем по реквизитам
  • Cоздание письма

Как мы обслуживаем такую большую базу данных?

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

Сколько времени идёт реструктуризация больших таблиц базы данных?

SQL-сервер требует периодического обслуживания, наведения порядка в таблицах. По-хорошему это нужно делать минимум раз в сутки, а для высоковостребованных таблиц – ещё чаще. Но если база большая (а у нас число записей уже перевалило за 11 млрд.), то ухаживать за ней непросто.

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

Поэтому сейчас нам приходится применять различные ухищрения. Например, мы не можем выполнять эти процедуры на полных наборах данных. Приходится прибегать к процедуре Update Sample 500000 rows – это занимает 14 минут. Она выполняет обновление статистики не по всем данным таблицы, а отбирает полмиллиона строк, и по ним рассчитывает статистику, которую использует для всей таблицы. Это некоторое допущение, но мы вынуждены на него идти, потому что для конкретной таблицы сбор статистики по всему миллиарду записей будет выполнятся неприемлемо долгое время.

image


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

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

Как реализован бэкап при таких объёмах?

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

Сколько времени выполняется полный бэкап?

На жёсткий диск полный бэкап выполняется за три часа, частичный – за час. На ленту пишется дольше (спецустройство, которое делает резервную копию на специальную кассету, хранящуюся вне офиса; на ленту делают отчуждаемую копию, которая сохранится, если, например, серверная сгорит). Бэкап делается ровно на том же сервере, параметры которого были выше – SQL-сервер с 20% загрузки процессора. На момент бэкапа, конечно же, системе становится значительно хуже, но она всё равно работоспособна.

image

Есть ли дедупликация?

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

Есть ноды только для чтения?

А помеченные на удаление письма совсем не удаляются?

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

А зачем это хранить? Есть статистика обращений к старым документам?

Именно статистики нет. Точнее, она есть в виде протокола работы пользователей, но он хранится недолго. Записи старее года стираются из протокола.

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

Как проводится экспертиза ценности и уничтожение документов согласно срокам хранения?

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

Какие перспективы развития есть?

Сейчас наш ДО решает примерно 30 внутренних задач, часть которых мы перечисляли в начале статьи. Также ДО используется для подготовки конференций, которые мы дважды в год проводим для наших партнёров: вся программа, все доклады, все параллельные секции, залы – всё это верстается в ДО, а потом выгружается из него, и делается печатная программа.

На подходе для ДО ещё несколько задач, помимо тех, что он уже решает. Есть общефирменные задачи, а есть уникальные и редкие, нужные только какому-то конкретному подразделению. Необходимо им помогать, а значит, расширять «географию» использования системы внутри 1С – расширять область применения, решать задачи всех подразделений. Это стало бы лучшим тестом на производительность и надёжность. Хотелось бы увидеть работу системы на триллионах записей, петабайтах информации.

Глобальные действия - это действия, которые вы можете выполнять в любом состоянии программы. При этом не важно, что на данный момент открыто в "1С:Предприятии". Главное, чтобы приложение не было занято выполнением какой-либо задачи.

Глобальные действия - это действия, которые можно вызывать в любом месте запущенной платформы "1С:Предприятие 8". Независимо от того, что именно происходит в запущенной конфигурации, смысл глобальных действий не меняется (например, нажатие Ctrl+N всегда будет вызывать диалог создания нового документа).

"Горячие" клавиши для глобальных действий

Действие

Сочетания клавиш

Как работает программа

Создать новый документ

Открывает окно, в котором будет предложено выбрать тип создаваемого нового документа в различных форматах - например, в текстовом, табличном или HTML

Открыть существующий документ

Открывает стандартное диалоговое окно "Открыть", доступное через меню "Файл/Открыть…"

Активизация поля поиска в командной панели

Устанавливает курсор в это поле

Alt + Enter
Ctrl + E

В зависимости от того, на что установлен курсор, открывает соответствующую палитру свойств этого объекта или элемента. Полезно при работе с таблицами, текстом, HTML и т. п.

Вызвать содержание справки

Вызывает содержание справки

Вызвать индекс справки

Вызывает индекс справки

"Горячие" клавиши: глобальные действия

Глобальные действия - это действия, которые вы можете выполнять в любом состоянии программы. При этом не важно, что на данный момент открыто в "1С:Предприятии". Главное, чтобы приложение не было занято выполнением какой-либо задачи.

Глобальные действия - это действия, которые можно вызывать в любом месте запущенной платформы "1С:Предприятие 8". Независимо от того, что именно происходит в запущенной конфигурации, смысл глобальных действий не меняется (например, нажатие Ctrl+N всегда будет вызывать диалог создания нового документа).

"Горячие" клавиши для глобальных действий

Действие

Сочетания клавиш

Как работает программа

Создать новый документ

Открывает окно, в котором будет предложено выбрать тип создаваемого нового документа в различных форматах - например, в текстовом, табличном или HTML

Открыть существующий документ

Открывает стандартное диалоговое окно "Открыть", доступное через меню "Файл/Открыть…"

Активизация поля поиска в командной панели

Устанавливает курсор в это поле

Alt + Enter
Ctrl + E

В зависимости от того, на что установлен курсор, открывает соответствующую палитру свойств этого объекта или элемента. Полезно при работе с таблицами, текстом, HTML и т. п.

Вызвать содержание справки

Вызывает содержание справки

Вызвать индекс справки

Вызывает индекс справки

"Горячие" клавиши: общие действия

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

"Горячие" клавиши для общих действий

Действие

Сочетания клавиш

Как работает программа

Удаляет элемент под курсором (текущий элемент) или выделенную группу элементов

Позволяет добавить новый элемент

Сохранить активный документ

Сохраняет активный документ

Печать активного документа

Вызывает диалог печати для активного документа

Печать на текущий принтер

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

Копировать в буфер обмена

Ctrl + C
Ctrl + Ins

Копирует необходимый элемент или выделенную группу элементов в буфер обмена ОС Windows

Вырезать в буфер обмена

Ctrl + X
Shift + Del

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

Вставить из буфера обмена

Ctrl + V
Shift + Ins

Вставляет в место, отмеченное курсором находящиеся данные из буфера обмена ОС Windows

Добавить к буферу обмена как число

Используется для числовых значений

Добавить к буферу обмена

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

Вычесть из буфера обмена

Используется для числовых значений. Операция вычитания с данными в буфере обмена

Выделяет все доступные элементы в активном документе

Отменить последнее действие

Ctrl + Z
Alt + BackSpace

Отменяет последнее совершенное действие

Вернуть отмененное действие

Ctrl + Y
Shift + Alt + BackSpace

Позволяет отменить "Ctrl + Z", иными словами - вернуть то, что вы сделали до нажатия отмены последнего совершенного действия

Открывает диалог настройки параметров поиска в активном объекте конфигурации и выполнения этого поиска

Находит следующий элемент, соответствующий указанным в настройках поиска параметрам

Найти следующий выделенный

Находит следующий элемент, соответствующий тому, который вы выделили (например, на котором установлен курсор)

Находит предыдущий элемент, соответствующий указанным в настройках поиска параметрам

Найти предыдущий выделенный

Ctrl + Shift + F3

Находит предыдущий элемент, соответствующий тому, который вы выделили

Открывает диалог поиска и замены значений (там, где это разрешено)

Свернуть (узел дерева, группу табличного документа, группировку модуля)

Используется там, где доступны узлы деревьев, отмеченные значками "+" или "-"

Выделяет все доступные элементы в активном документе

Отменить последнее действие

Ctrl + Z
Alt + BackSpace

Отменяет последнее совершенное действие

Вернуть отмененное действие

Ctrl + Y
Shift + Alt + BackSpace

Позволяет отменить "Ctrl + Z", иными словами - вернуть то, что вы сделали до нажатия отмены последнего совершенного действия

Открывает диалог настройки параметров поиска в активном объекте конфигурации и выполнения этого поиска

Находит следующий элемент, соответствующий указанным в настройках поиска параметрам

Найти следующий выделенный

Находит следующий элемент, соответствующий тому, который вы выделили (например, на котором установлен курсор)

Находит предыдущий элемент, соответствующий указанным в настройках поиска параметрам

Найти предыдущий выделенный

Ctrl + Shift + F3

Находит предыдущий элемент, соответствующий тому, который вы выделили

Открывает диалог поиска и замены значений (там, где это разрешено)

Свернуть (узел дерева, группу табличного документа, группировку модуля)

Используется там, где доступны узлы деревьев, отмеченные значками "+" или "-"

Свернуть (узел дерева, группу табличного документа, группировку модуля) и все подчиненные

Свернуть (все узлы дерева, группы табличного документа, группировки модуля)

Ctrl + Shift + Num + (-)

Развернуть (узел дерева, группу табличного документа, группировку модуля)

Развернуть (узел дерева, группу табличного документа, группировку модуля) и все подчиненные

Развернуть (все узлы дерева, группы табличного документа, группировки модуля)

Ctrl + Shift + Num + (+)

Ctrl + Page Down
Ctrl + Alt + F

Быстрое листание активного документа

Ctrl + Page Up
Ctrl + Alt + B

Используется там, где поддерживается и возможно форматирование текста

Переход к предыдущей web-странице/главе справки

Используется в HTML-документах

Переход к следующей web-странице/главе справки

Прервать исполнение отчета системы компоновки данных

"Горячие" клавиши: управление окнами

В этом разделе объединены общие для всех окон и форм платформы "1С:Предиприятие" "горячие" клавиши.

"Горячие" клавиши для управления окнами

Действие

Сочетания клавиш

Как работает программа

Закрыть активное свободное окно, модальный диалог или приложение

Этой комбинацией можно быстро завершить работу всей конфигурации на платформе "1С:Предприятие", поэтому пользуйтесь ей осторожно

Закрыть активное обычное окно

Закрывает текущее обычное окно

Закрыть активное окно

Закрывает текущее активное окно

Активизировать следующее обычное окно

Ctrl + Tab
Ctrl + F6

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

Активизировать предыдущее обычное окно

Ctrl + Shift + Tab
Ctrl + Shift + F6

Позволяет активизировать предыдущее окно среди открытых в рамках конфигурации. Нажатие в цикле с удерживанием клавиши Ctrl позволяет листать отрытые окна "назад"

Активизировать следующую секцию окна

Активирует следующую секцию текущего окна

Активизировать предыдущую секцию окна

Активирует предыдущую секцию текущего окна

Вызвать системное меню приложения или модального диалога

Позволяет увидеть системное меню операций (свернуть, переместить, закрыть и т. п.) над окном программы или открытого модального диалога

Вызвать системное меню окна (кроме модальных диалогов)

Alt + Hyphen + (-)
Alt + Num + (-)

Позволяет увидеть системное меню операций (свернуть, переместить, закрыть и т. п.) над активным окном

Вызвать главное меню

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

Вызвать контекстное меню

Отображает контекстное меню над текущим активным элементом. Аналогично нажатию правой кнопки мыши на нем

Вернуть активность обычному окну

Возвращает активность обычному окну после работы с контекстным меню. Внимание! В любом другом случае, Esc инициирует закрытие активного окна

"Горячие" клавиши: управление формами

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

"Горячие" клавиши для управления формами

Действие

Сочетания клавиш

Как работает программа

Перейти на следующий элемент управления/вызов кнопки по умолчанию

Переход между элементами управления на форме "вперед" (см. Tab)

Вызов кнопки по умолчанию

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

Перейти на следующий элемент управления

Переход между элементами управления на форме "вперед"

Перейти на предыдущий элемент управления

Переход между элементами управления на форме "назад"

Активизирует командную панель, связанную с активным элементом управления/формой

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

Перемещение по элементам управления, объединенным в одну группу

Используя клавиши-курсоры можно быстро перемещаться между сгруппированными элементами управления

Закрывает окно текущей формы

Восстановить положение окна

Если сбились какие-то параметры окна формы, эта комбинация позволяет вернуть все назад

"Горячие" клавиши: работа со списком и деревом

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

"Горячие" клавиши для работы со списком и деревом

Действие

Сочетания клавиш

Как работает программа

Открывает для изменения элемент, на который установлен курсор. Клавиша аналогична действию "Изменить" на стандартной панели кнопок формы

Ctrl + Shift + R
F5

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

Создает новый элемент списка, используя в качестве шаблона текущий элемент. Аналогично кнопке "Добавить копированием"

Создает новую группу. Аналогично кнопке "Добавить группу"

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

Перемещение строки вверх

Ctrl + Shift + Up

В списках, где разрешено изменение порядка строк, позволяет передвинуть текущую строку вверх. Аналогично кнопке "Переместить вверх"

Перемещение строки вниз

Ctrl + Shift + Down

В списках, где разрешено изменение порядка строк, позволяет передвинуть текущую строку вниз. Аналогично кнопке "Переместить вниз"

Перенести элемент в другую группу

Ctrl + Shift + M
Ctrl + F5

Позволяет быстро переместить текущий элемент (например, справочника) в другую группу

Перейти на уровень вниз с одновременным раскрытием группы

Переходит внутрь папки, на которой был установлен курсор

Перейти на уровень вверх (к "родителю")

Выходит наверх из папки, в которой вы находились

Завершает с сохранением изменений редактирование элемента списка

Раскрыть узел дерева

Используется там, где доступны узлы деревьев, отмеченные значками "+" или "-"

Закрыть узел дерева

Раскрыть все узлы дерева

Инвертирует значение флажка текущего элемента (включает или отключает его)

"Горячие" клавиши: поле ввода

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

"Горячие" клавиши для поля ввода

Действие

Сочетания клавиш

Как работает программа

Переключить режим вставки/замены

Аналогично поведению при редактировании обычного текста, позволяет либо добавлять новые символы при вводе к старым, либо затирать старые новыми

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

Ctrl + Shift + F4

Открытие формы выбранного объекта в текущем поле ввода. Аналогично нажатию кнопки поля ввода "Открыть"

Очистить поле ввода от текущего в нем значения

Удалить символ слева от курсора

Работа с набранным текстом в поле ввода

Удалить символ справа от курсора

Удалить слово слева от курсора

Удалить слово справа от курсора

Перейти в начало строки

Перейти в конец строки

Нажатие указателем мыши кнопки "Вверх" для кнопки регулирования

Использование регулировки, если это разрешено в поле ввода. Например, изменение дат, счетчиков и т. п. Аналогично нажатию на кнопку "вверх" регулятора поля ввода

Нажатие указателем мыши кнопки "Вниз" для кнопки регулирования

Использование регулировки, если это разрешено в поле ввода. Например, изменение дат, счетчиков и т. п. Аналогично нажатию на кнопку "вниз" регулятора поля ввода

"Горячие" клавиши: поле картинки

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





Данная разработка является частью Проекта "Утопия".

Дополнительная информация

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

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

Плагин тестировался на платформе 1С:Предприятие 8.3.18.1208.

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

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

Плагин тестировался на следующих конфигурациях:

Бухгалтерия предприятия КОРП 3.0.88.22, Управление торговлей 11.4.13.136.

Код программы полностью открыт, возможна доработка собственными силами после покупки. Обновления программы по необходимости (оплачивается 2 ч за каждое обновление), также возможно обновление собственными силами.

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

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

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

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

Гарантия возврата денег

ООО "Инфостарт" гарантирует Вам 100% возврат оплаты, если программа не соответствует заявленному функционалу из описания. Деньги можно вернуть в полном объеме, если вы заявите об этом в течение 14-ти дней со дня поступления денег на наш счет.

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

В одной из компаний где я когда-то работал, имелась собственная разработка на 1С 8.2 платформе.
Однажды мы пришли к понимаю что наша система работает не очень быстро. Оставалось понять в каком направлении двигаться, что бы оптимизировать работу системы. После долгих исследований и экспериментов, мы решили в серьез взяться за перенос некоторых операций на плечи СУБД, а именно на плечи MS SQL с помощью выполнения прямых запросов на стороне SQL Server, в обход сервера приложений 1С.

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

Cтруктура базы данных 1С на уровне СУБД выглядит не совсем внятно.
Постараюсь описать что же из себя представляет эта структура. Описание будет не полное. Постараюсь описать лишь самое интересное и важное, из того что нужно понимать спускаясь на уровень СУБД.

Рассматриваем структуру хранения данных.

Каждый объект метаданных имеет определенный вид наименования таблиц. Например РегистрСведений начинается с "_InfoRg. ", далее идет номер (идентификатор/индекс) регистра. А вот таблички начинающиеся с _InfoRgChng это таблицы содержащие в себе регистрацию изменений в регистре. Перечислять в данной статье все префиксы я не буду. Это можно сделать с помощью средсв 1С. По мере необходимости.

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

Наименование поля Описание
_Fld8818_TYPE(binary(1)) В данном поле хранится тип значения, который хранится в текущей записи. Тип представляет из себя индекс. Целое число.
_Fld8818_N(Numeric(x)) Здесь будет храниться значение числа. Тип числа (разрядность и длинна равная x) будет зависеть от настроек в самом конфигураторе 1С
_Fld8818_T(datetime) В данном поле будет храниться значение типа Дата и Время
_Fld8818_S(nvarchar(1024)) В этом поле значение в виде строки. Причем длина строки зависит от настроек.
_Fld8818_RTRef(binary(4)) В данном поле, при условии что в записи хранится ссылка, будет указан тип ссылки. То есть, на какую таблицу ссылается ссылка, справочник это или документ, что за документ или справочник.
_Fld8818_RRRef(binary(16)) А это уже будет сама ссылка на конкретную запись, в конкретной таблице

Если с простыми типами данных все ясно, то тип ссылки не так прост.

Наверняка вы зададите вопрос: Как можно определить тип ссылки? То есть, что означает индекс хранящийся в поле _Fld8818_RTRef?
Если мы переведем этот индекс из шестнадцатеричной системы счисления в десятичную, и затем посмотрим на список таблиц базы данных, то обязательно найдем таблицу, в имени которой содержится данный индекс. То есть мы можем по этому индексу получить таблицу, в которой содержится элемент, на который ссылается ссылка в нашем поле.

Зная индекс, мы можем найти необходимую таблицу простым запросом:

Где 1950 — искомый индекс.

Получаем структуру хранения средствами платформы 1С.

Остается вопрос, как нам определить, как некоторая таблица в конфигурации 1С, именуется на уровне СУБД, а так же, соответствие полей на уровне СУБД и конфигурации?
В этом нам поможет встроенная функция поставляемая вместе с платформой:

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

Важный момент. При вызове метода, обязательно нужно передать во второй параметр значение «Истина». Что это означает? Этот параметр означает будет ли структура отображать данные в формате 1С: Предприятие, либо в формате СУБД. В чем же разница?

Допустим мы отображаем данные в формате 1С: Предприятие.
Например, если мы попытаемся с помощью этой структуры узнать как называется в базе данных поле «Клиент», то получим к примеру такое имя «Fld1234». Вроде бы все хорошо. Но если мы попытаемся написать запрос к MS SQL:

Мы в 80% случаев — получим ошибку. Почему? А потому что это лишь общий вид наименования поля. Но стоит знать о том что во первых любое имя поля начинается с нижнего подчеркивания. Казалось бы прибавим к наименованию поля символ "_" и делов то! Но нет. Далее ещё интересней. В зависимости от содержимого поля и его типа, поле имеет определенный постфикс в наименовании. Например RRef — это значит что в поле содержится ссылка. А если просто значение то этого постфикса нет. А помните составные типы данных? Там вообще может быть куча различных постфиксов, при этом полей начинающихся на "_Fld1234" будет гораздо больше чем одно. И как же нам обойти это?
Легко. Те кто знает MS SQL, сразу догадались что на помощь придет системное представление INFORMATION_SCHEMA.COLUMNS
С помощью этого представления мы можем отобрать информацию по наименованию таблицы, и по тому ключевому наименованию поля.
Пример запроса:

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

Но какие минусы у этого метода? Во первых для того что бы обратиться к базе, нам необходимо настроенное подключение к БД, через 1С. То есть дополнительные настройки. Но они нам в любом случае пригодятся, но представьте, у вас большой запрос. Нужно получить имена 20 полей. И каждый раз при этом обращаться к базе и искать там имена полей? Получать и использовать подключение? Это не очень оптимально. Плюс к тому полученные из базы данные, придется ещё как-то обрабатывать. Дополнительные действия. Да и словом - изобретение велосипеда.

Вот тут то нам и приходит на помощь функция

Когда значение параметра ИменаБазыДанных = Истина, то функция в результирующую структуру сразу передает всю необходимую информацию по объектам. Включая все физические поля Базы данных. Если поле составное, то в структуре будут видны все физические поля составного поля. Это значительно облегчает нашу работу.

Использование прямых запросов. Отборы. Соединения и обращения через точку.

Как же нам использовать отбор в прямых запросах? Как отобрать данные по конкретному документу? Или по конкретному значению?

Все довольно просто, но снова есть нюансы.

Поля формата Дата. По умолчанию при использовании MS SQL сервера, дата 1С в базу помещается с прибавлением к году 2000. То есть дата в системе 1С «01.01.2013» будет выглядеть как «01.01.4013». Но и это ещё не все. Для того что бы в запросе произвести сравнение даты и оно прошло корректно, нам необходимо дату конвертировать в определенный формат.
По умолчанию в базе данных MSSQL используется формат ymd. Это означает что в дате сперва указан год, месяц и затем число. А выглядит дата следующим образом: 4013-01-01. Для использования в условиях сравнения или для прочих манипуляций нам эту дату нужно обрамлять в опострофы, так же как и строки.

Для преобразования даты в формат SQL я написал для себя такую простенькую функцию:

Данная функция возвращает готовую дату, в нужном формате в виде строки, остается только подставить в текст запроса. Если у вас в MS SQL по каким то причинам установлен иной формат даты, можно на момент исполнения запроса его поменять. Делается это так:

Либо надо будет переделать представление даты в своем запросе.

Теперь нам нужно отобрать записи по определенному элементу справочника. Как это сделать?
Изначально, когда я не знал о существовании функции ЗначениеВСтрокуВнутр(), для своих нужно я написал пару функций, для получения ссылок на справочники и на документы. Выглядят они так:

Как видно в коде, мы строим простой запрос, и получаем из базы значение ID, которое храниться в базе данных. Объект — это у нас наименование справочника либо документа, а код — код элемента справочника или документа.
Функция master.dbo.fn_varbintohexstr() — позволяет преобразовать значение формата binary в строку.
Но использовать эту функцию — не обазательно.

Полученный ID имеет примерно такой вид: 0xa8ed00221591466911e17da9fd549878
В запросе мы его можем сравнивать как строку

Но в таком случае запрос будет отрабатывать дольше. Так как на преобразование в строку тоже нужно время.
Поэтому лучше сравнение делать таким образом:

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

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

Как же описать это с помощью MS SQL? В том месте запроса, где описываются соединения, компилятор запросов ещё не знает о том что в таблице регистра есть ссылка на регистратор, и что это в свою очередь есть документ, а у этого документа есть дата. Описать ещё одно соединение? Не поможет. Словом я пытался это сделать всяко. Но в итоге решение свелось к вложенному запросу. (если кто-то найдет реальную альтернативу, буду рад узнать ваш способ).

Выше приведенный фрагмент на чистом SQL будет выглядить так:

В запросе мы видим, что во вложенном запросе делаем выборку из таблицы документа, где ID документа равен ID который записан в поле нашей таблицы «Источник», и далее полученное значение _Date_Time сравниваем с датой из нашей таблицы. Все логично и просто. Думаю теперь мы понимаем, во что превращаются наши обращения к полям и объектам через точку, в запросах 1С, когда они транслируются на SQL запрос. И теперь становится понятно почему такие обращения затормаживают работу запросов.

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

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

Допустим у нас есть запрос в формате 1С:

Как мы видим, ситуация аналогичная, как я приводил выше, только соединение не внутреннее, а левое. Как же 1С Сервер приложений траслирует такой запрос?

Запрос на выходе из 1С Сервера приложений

С помощью SQL Server Profiler мы сможем это увидеть. На картинке выше, показан запрос сервера приложений. Как я и писал выше, мы видим что сервер приложений использует переменные, в которые заранее пишет соответствующие ID. Но нам при использовании прямых запросов, проще было использовать именно вложенный запрос, для нас это универсальное решение, так как не придется подставлять значения переменным.

Будет замечательно если вы самостоятельно изучите различные запросы в таком виде. Возможно это поможет вам оптимизировать ваши запросы.


Для решения каких задач нам могут понадобиться прямые запросы к базе данных?

Думаю данная возможность понадобиться при активной разработки своих собственных решений, либо при реструктуризации готовых решений. В тех случаях, когда в отладочных целях, либо ещё по каким-то причинам, нам придётся переносить большие объемы данных с одной таблицы в другую, либо разбивать данные на несколько таблиц.
Для интеграции 1С с другими, сторонними разработками. Например вывод данных из 1С в какую-нибудь стороннюю программу анализа продаж или что-то похожее.
Оптимизация массивных обработок данных. Когда нам необходимо обработать большое количество данных, при этом внося какие-то изменения, корректировки и т.п. Например копирование записей регистра сведений с изменением какого-либо поля средствами 1С, займет куда больше времени, чем выполнение операции T-SQL Update

Учимся получать доступ к СУБД из 1С.

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

Настройка подключения к Базе данных


Интерфейс настройки подключения к базе данных.

Давайте рассмотрим пример работы с ADO.

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

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

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

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

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

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

Читайте также: