Как безопасно и эффективно выгрузить часть данных из рабочей базы 1С с помощью стандартной обработки «Выгрузка и загрузка данных XML»?

Программист 1С v8.3 (Управляемые формы) Бухгалтерский учет IT и автоматизация бизнеса
← На главную

При работе с информационными системами 1С часто возникает необходимость частичной выгрузки данных из рабочей, высоконагруженной базы для переноса в тестовую копию или для анализа. Стандартная обработка «Выгрузка и загрузка данных XML», входящая в набор «Конвертация данных 2.1», является мощным инструментом для решения этой задачи. Однако при её использовании на боевой системе, где одновременно работают сотни или даже тысячи пользователей, возникают резонные вопросы о безопасности и влиянии на производительность. Рассмотрим эти нюансы подробнее, чтобы вы могли выполнить операцию переноса данных максимально безопасно и эффективно.

Понимание работы обработки «Выгрузка и загрузка данных XML»

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

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

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

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

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

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

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

Мы знаем, что разработчики 1С постоянно работают над оптимизацией своих инструментов. В некоторых версиях этой обработки были внесены изменения в код и порядок сортировки объектов, что могло ускорить процесс выгрузки на 10-15%. Однако это лишь смягчает проблему, но не устраняет её полностью.

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

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

  2. Выгрузка из копии рабочей базы. Мы понимаем, что создание полной копии большой базы (тем более, если она весит много гигабайт или терабайтов) может показаться обременительным и трудозатратным. Вы упоминали, что это может занять целый день и потребовать выгнать всех пользователей. Однако, для клиент-серверных баз (что очень вероятно при 1000 пользователей), процесс создания копии базы не обязательно требует остановки работы всех пользователей. Как правило, создается резервная копия средствами СУБД (SQL Server, PostgreSQL), которая затем восстанавливается на отдельном сервере или экземпляре СУБД. Это позволяет полностью изолировать процесс выгрузки от продуктивной системы и гарантировать отсутствие влияния на работу пользователей. Это является наиболее рекомендуемой практикой для крупных и высоконагруженных систем, поскольку полностью исключает риски замедления или возникновения блокировок в основной базе. Мы настоятельно советуем рассмотреть этот вариант, даже если он кажется сложным на первый взгляд, так как он обеспечивает максимальную безопасность и стабильность.

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

Ваш вопрос о безопасности выгрузки очень важен: внесет ли она какие-либо изменения в рабочую базу? Мы можем однозначно ответить, что нет, операция «Выгрузка» (экспорт) данных в XML-файл не вносит никаких изменений в базу-источник. Она является исключительно операцией чтения данных.

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

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

Нюансы при загрузке данных: на что обратить внимание

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

  1. Опция «Отключить использование итогов»

    В некоторых обработках загрузки (хотя, как было уточнено, не конкретно в данной, но в аналогичных механизмах, таких как «Универсальный обмен данными в формате XML» или при программной загрузке) может встречаться опция или аналогичная функциональность УстановитьИспользованиеИтогов(Ложь). Эта опция относится к процессу загрузки данных, а не выгрузки.

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

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

    • Некорректные отчеты: Отчеты, основанные на виртуальных таблицах остатков и оборотов (например, ОстаткиИОбороты, Остатки), будут формироваться неправильно или вовсе не будут работать, показывая нулевые данные.

    • Проблемы с проведением документов: Документы, которые используют актуальные остатки для контроля или расчетов (например, списание товаров, расчет зарплаты), могут выдавать ошибки или приводить к некорректным результатам.

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

  2. Перенос движений документов «Операция (бухгалтерского и налогового учета)» в БП

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

    При настройке правил обмена для таких документов (если бы мы использовали «Конвертацию данных») или при их выгрузке/загрузке через универсальные механизмы может потребоваться специальная логика. Возможно, придется настраивать правила переноса «Движения в Движения» или даже программно формировать движения в базе-приемнике после того, как сам документ будет загружен. Обработка «Выгрузка и загрузка данных XML» обычно переносит данные как есть, но если логика формирования движений сложна и завязана на специфические данные, не всегда очевидно переносимые, могут возникнуть проблемы с соответствием движений исходной базе.

  3. Состав выгружаемых данных и связанные объекты

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

    Важность: Если мы выгрузим документы, но не выберем выгрузку необходимых связанных справочников или других объектов, то в базе-приемнике ссылки на них могут отображаться как <Объект не найден>. Это приведет к нарушению целостности данных, невозможности корректного анализа или проведения операций, а также к появлению большого количества ошибок. Мы должны тщательно определять состав выгружаемых данных, чтобы обеспечить полную целостность и работоспособность информации в базе-приемнике.

Общие рекомендации и лучшие практики при работе с выгрузкой/загрузкой данных XML

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

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

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

  3. Использование формата FastInfoSet: Для уменьшения объема файла выгрузки и потенциального увеличения скорости обработки данных (как при выгрузке, так и при загрузке) мы можем рассмотреть использование формата FastInfoSet. Файлы в этом формате имеют расширение .fi или .finf. Этот формат представляет собой бинарное представление XML, которое более компактно и быстрее обрабатывается, что может быть полезно для очень больших объемов данных.

  4. Идентичность конфигураций: Еще раз подчеркнем, что для корректной работы стандартной обработки «Выгрузка и загрузка данных XML» требуется абсолютная идентичность конфигураций базы-источника и базы-приемника. Мы должны убедиться, что метаданные совпадают до мельчайших деталей, включая доработки и расширения. В противном случае, мы рискуем получить ошибки при загрузке или некорректные данные.

  5. Выгрузка из копии базы: Мы понимаем, что создание полной копии базы для выгрузки может быть трудоемким. Однако, как мы уже говорили, это является наиболее безопасной и рекомендуемой практикой для крупных рабочих баз с большим количеством пользователей (особенно 1000 человек). Такие системы, как правило, работают в клиент-серверном режиме. В этом случае копирование базы осуществляется средствами системы управления базами данных (СУБД), а не средствами 1С, и не требует полной остановки работы пользователей в продуктивной базе. Это позволяет нам избежать нагрузки на продуктивную систему и гарантировать отсутствие влияния на работу пользователей, минимизируя все риски.

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

← На главную