FAQ: часто задаваемые вопросы

В данной статье собраны вопросы, которые чаще всего возникают при первых настройках Экстрактора 1С и в дальнейшей эксплуатации.

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

Ниже предоставлена запись вебинара, на котором специалисты ответили на часто задаваемые вопросы о работе с Экстрактором 1С.

Это видео доступно:

Установка, права и подключение к СУБД

Можно ли выгружать данные в уже существующую БД-приемник?

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

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

Когда нужен Db.Proxy?

Db.Proxy используют, когда прямое подключение через ADO невозможно или неудобно. Типичный пример – сервер 1С под Linux. Db.Proxy принимает команды от 1С и передаёт их в SQL-базу. Сам сервис данные не хранит, его можно разместить на отдельном сервере, доступном одновременно серверу 1С и SQL-базе.

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

Права настраиваются ролями Экстрактора 1С. Все такие роли начинаются со слова «(Экстрактор)».

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

Проекты, запросы и поля

Где задаются параметры запроса?

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

Откуда Экстрактор берет значения параметров запроса: из очереди или из настроек набора данных?

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

Как добавить в выгрузку текущую дату и время?

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

Можно ли преобразовать строку в число, просто выбрав числовой тип поля в БД-приемнике?

Нет. Выбор числового типа колонки не преобразует исходное строковое значение автоматически. Преобразование лучше сделать до записи в СУБД, например вычисляемым полем или пользовательской функцией. Если в исходном поле хранится строка "123", сначала преобразуйте значение в число, а уже затем сопоставляйте его с числовой колонкой таблицы-приёмника. Подробнее о вычисляемых полях и их функциях вычисляемых полей читайте в разделе.

Можно ли выгрузить признаки «Пометка удаления» и «Проведен» у документа?

Да. Эти системные признаки документа можно добавить в набор выгружаемых полей так же, как обычные реквизиты. Это удобно, когда в аналитической базе нужно отличать проведённые документы от непроведённых или учитывать помеченные на удаление объекты.

Как заполнить новое поле для данных, которые уже были выгружены раньше?

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

Можно ли экспортировать проект в JSON или YAML?

В текущих релизах для переноса настроек используются XML-шаблоны проектов. Экспорт в JSON и YAML пока не поддерживается. Поддержка формата JSON запланирована в релизе 3.15. Поддержка YAML на данный момент не заявлена. XML-шаблон можно сохранить из проекта или из списка проектов, а затем загрузить в другой базе 1С (подробнее читайте в статье). Подключения также поддерживают экспорт и импорт (подробнее читайте в статье). Пароль подключения в файл не сохраняется – после импорта его нужно указать заново.

Можно ли использовать Экстрактор 1С для чтения данных из внешней СУБД или для загрузки данных обратно в 1С?

Экстрактор решает задачу 1С → внешняя система: он извлекает данные из 1С и передаёт их в СУБД, Kafka и другие поддерживаемые приемники. Если источником является внешняя СУБД и дальше нужно строить витрины или преобразовывать данные, для этой задачи используется DVT. Для загрузки данных обратно в 1С предназначен Инжектор 1С.

Какие регулярные выражения поддерживаются в 1С и Экстракторе?

В Экстракторе 1С поддерживаются те же регулярные выражения, что используются в языке запросов 1С.

Инкрементальная выгрузка и очередь

Есть ли в Экстракторе кеширование повторных выгрузок?

Вместо кеширования в Экстракторе 1С используется инкрементальная выгрузка.

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

Почему не выгружается инкремент и за что отвечают подписки на события?

Регистрация изменений в Экстракторе строится на подписках на события 1С. При изменении отслеживаемых объектов информация об изменении регистрируется, после чего нужный сегмент попадает в очередь на повторную выгрузку. Если изменения в 1С есть, а очередь не пополняется, проверьте настройки регистрации изменений и не отключены ли подписки на события для нужных объектов. В больших базах не обязательно отслеживать подписками всю конфигурацию. Для этого можно ограничить состав отслеживаемых объектов, а для высоконагруженных систем очередь регистрации изменений можно вынести во внешнюю Redis/ValKey. Также рекомендуем ознакомиться со статьей.

Как выполнить первичную выгрузку, а затем перейти на регулярный инкремент?

Для этого можно использовать режим расширения параметров.

Он позволяет задать разные параметры для разных этапов работы проекта. Например:

  • для первичной инициализации – более крупный период;

  • для регулярной работы – ссылка, регистратор или небольшой период;

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

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

Можно ли настроить разную частоту обновления для разных наборов данных?

Экстрактор 1С позволяет настроить выгрузку по расписанию. Расписание задаётся на уровне проекта. Все строки одного проекта выполняются по одному расписанию. Если один набор данных нужно обновлять каждые 10 минут, а другой раз в сутки, их лучше разместить в разных проектах и назначить каждому своё расписание.

Как посмотреть, что именно попало в инкрементальную выгрузку?

Для этого в Экстракторе 1С предназначена «Очередь выгрузки». Здесь ней видны сегменты, которые зарегистрированы к обработке. При необходимости, дополнительно можно вывести в данные служебные поля( с помощью функций для вычисляемых полей) Метаданные.Очередь...: время записи, операцию insert/update/delete/init, пользователя и другие сведения о регистрации изменения.

Почему после изменения одного документа Экстрактор 1С может выгрузить намного больше строк?

Потому что в очередь регистрируется не обязательно одна строка или один документ, а сегмент.

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

Что происходит при удалении объекта или отмене проведения документа?

Экстрактор регистрирует изменение и повторно обрабатывает затронутый сегмент.

Если выгружается сам документ, после отмены проведения изменится его признак «Проведен». Если выгружаются движения документа по регистрам, после повторной выборки в сегменте уже не будет движений, которые исчезли из 1С.

При способе обновления «Обновление сегмента» содержимое сегмента в базе-приёмнике приводится к актуальному состоянию источника: отсутствующие в новой выборке строки удаляются, актуальные записываются заново.

Для случаев, когда после изменения источник уже не возвращает строку, в настройках строки проекта есть флаг «Выгружать строку при отсутствии данных». Если он включён, Экстрактор выгрузит одну строку: в ней будут заполнены параметры и вычисляемые поля, которые удалось вычислить, а остальные поля должны допускать NULL. Это позволяет, например, передать служебную информацию об операции через вычисляемые поля.

Как сохранить исторические данные и регулярно обновлять только текущий период?

Используйте способ обновления «Обновление сегмента» и выберите поле, по которому история логично делится на независимые сегменты: например, дату или период.

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

Здесь особенно важен выбор размера сегмента: слишком крупный сегмент увеличивает объём повторной выгрузки, слишком мелкий создаёт много элементов очереди.

Как настраивается многопоточность?

Многопоточность настраивается в настройках строки проекта параметром «Максимальное количество потоков». По умолчанию установлено 4 потока. Допустимое максимальное значение зависит от лицензии, а файловая база 1С работает в один поток.

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

Расписание и работа в копии базы

Почему проект запускается вручную, но не выполняется по расписанию?

Сначала проверьте, что расписание активно и корректно заполнено.

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

Можно ли выполнять проекты по расписанию в копии базы 1С?

Да, но поведение зависит от версии Экстрактора.

Начиная с версии 3.12.1.122, в настройках Экстрактора на вкладке «Планировщик» появились настройки для работы в копии базы. Можно указать, в какой базе разрешено выполнение регламентных заданий, а также при необходимости разрешить работу при установленном в копии запрете на внешние ресурсы. Это особенно полезно, если копия используется для разгрузки основной базы и именно на ней должны выполняться выгрузки.

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

Как данные попадают в БД-приемник и чем отличаются способы «Блоками» и «Через файл»?

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

При способе «Блоками» данные записываются стандартными SQL-вставками. Например, в MS SQL используется INSERT, а при обновлении сегмента старые строки сегмента предварительно удаляются.

При способе «Через файл» сервер 1С формирует файл в каталоге обмена, после чего сервер СУБД загружает его. Этот вариант рассчитан на крупные объёмы: для MS SQL используется BULK INSERT, для PostgreSQL – механизм массовой загрузки COPY. Для файлового способа каталог обмена должен быть доступен и серверу 1С, и серверу СУБД. Поэтому его настройка обычно требует участия администратора.

Единого универсального «формата, в котором данные летят в СУБД», нет: конкретный механизм зависит от базы-приёмника, типа подключения и способа выгрузки.

Почему при «Перезаписи партиции» в ClickHouse может очиститься вся таблица?

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

Как определяется тип поля в базе-приемнике?

Экстрактор подбирает тип поля в базе-приемнике по типу и длине исходного значения в 1С. Если тип подобран неверно, то можно вручную изменить тип поля на этапе сопоставления полей (например, заменить smallint → numeric) или обрезать время у дат.

Где лучше удалять дубли, маскировать и преобразовывать данные?

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

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

Ошибки и диагностика

Где посмотреть полный текст ошибки?

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

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

Что проверить, если после обновления перестал работать ранее настроенный проект?

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

Нужно ли решать любую нестабильность обновлением Экстрактора 1С?

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

Лицензирование и закрытый контур

Что делать, если Экстрактор сообщает, что сервер лицензирования недоступен?

Проверьте сетевую доступность сервера лицензирования в браузере по адресу https://lic.denvic.ru/api/v1/status с сервера 1С. Если соединение блокируется сетевыми правилами, прокси или межсетевым экраном, восстановите доступ и повторите запуск проекта. Если инфраструктура изначально не имеет доступа в интернет, рассмотрите оффлайн-активацию, если она доступна для вашей лицензии.

Можно ли активировать Экстрактор без доступа в интернет?

Да, начиная с версии 3.6.4.55 Экстрактора 1С, доступна оффлайн-активация лицензии, предназначенная в том числе для работы в закрытом контуре. Данный вариант активации доступен для лицензии Экстрактор 1С: PRO.

Как обновлять Экстрактор в закрытом контуре?

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

Границы возможностей

Можно ли выгружать прикреплённые к объектам 1С файлы?

Экстрактор работает с данными объектов 1С, но не предназначен для универсальной выгрузки содержимого прикреплённых файлов из хранилищ 1С. Если данные уже находятся во внешних файлах, в качестве источников можно использовать поддерживаемые файловые форматы, например Excel или CSV.

Поддерживает ли Экстрактор 1С полную историю версий каждой записи?

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

Можно ли централизованно переносить проекты между несколькими базами 1С?

Для единичного переноса достаточно XML-шаблонов проектов и экспорта подключений. Если баз много и проекты нужно распространять централизованно, для управления компонентами и задачами экосистемы Denvic используется DCC (например, можно отправить шаблоны проектов, созданных Экстрактором 1С, из одной базы в другую с помощью функции load_template метода create_task). Такое решение позволит сделать распространения проектов на множество баз удобным и централизованным. В свою очередь запускать распространение изменений в проектов можно из DVT, с помощью ноды HTTP Request (она позволяет выполнять HTTP-запросы (GET/POST/PUT/PATCH/DELETE и др.))

Возможно ли из продуктов Denvic собрать решение уровня Корпоративной сервисной шины (ESB)?

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