← На главную
При работе в экосистеме 1С:Предприятие пользователи часто сталкиваются с необходимостью взаимодействовать между различными информационными базами или даже окнами одного и того же приложения. Особенно остро эта задача встает, когда мы имеем дело с облачными сервисами, такими как «1С:Фреш», где доступ к конфигуратору ограничен или полностью отсутствует. Рассмотрим ситуацию, когда нам необходимо скопировать данные из модифицированной, но еще не записанной формы документа 1С:Зарплата и Управление Персоналом (ЗУП), открытой в одной базе «1С:Фреш» (тонкий клиент на веб-сервере), в другую базу (файловую), при этом запись исходного документа невозможна из-за изменений, внесенных другим пользователем.
Мы проанализируем различные подходы и выясним, почему большинство стандартных методов оказываются неэффективными или вовсе не применимыми в данных условиях. Особое внимание уделим ограничениям, накладываемым платформой «1С:Фреш» и работой веб-клиента.
Особенности работы в «1С:Фреш» и веб-клиенте
Прежде чем погружаться в детали, давайте вспомним ключевые особенности работы в сервисе «1С:Фреш» и с веб-клиентом 1С:Предприятия. Сервис «1С:Фреш» функционирует по модели SaaS (программное обеспечение как услуга). Это означает, что конфигурация находится на стороне поставщика услуг и жестко контролируется. Пользователи, как правило, не имеют прямого доступа к конфигуратору для внесения изменений, создания внешних обработок, публикаций веб-сервисов или установки внешних компонент. В такой среде невозможно выполнить действия, требующие изменения структуры базы или добавления программного кода.
Веб-клиент, в свою очередь, работает в браузере. Его функциональность во многом имитирует тонкий клиент, но имеет свои ограничения, особенно в части взаимодействия с локальной файловой системой пользователя и работы с буфером обмена. Операции сохранения файлов требуют подтверждения пользователя, а прямой доступ к DOM-структуре страницы для извлечения данных без поддержки со стороны платформы 1С крайне затруднен из-за инкапсуляции данных и особенностей отрисовки интерфейса.
Анализ возможных решений и их ограничений
Рассмотрим несколько подходов, которые могут прийти в голову при попытке решить данную проблему, и проанализируем, почему они не подходят в условиях «1С:Фреш» без доступа к конфигуратору.
1. Использование веб/HTTP-сервисов
Один из первых вариантов, который обычно рассматривается для взаимодействия между разными базами 1С, — это публикация одной из баз в качестве веб- или HTTP-сервиса. С помощью такого сервиса можно было бы программно обратиться к данным из целевой базы и получить нужную информацию.
- Предложение: Публикация базы как веб/HTTP сервис для извлечения данных через подключение (сообщение 2).
- Анализ и ограничение: Для публикации веб- или HTTP-сервиса необходим доступ к конфигуратору, чтобы внести изменения в конфигурацию, описать методы сервиса и опубликовать его. Однако, как указывает автор, в случае «1С:Фреш» такой доступ отсутствует (сообщение 3). Это делает данный метод неприменимым.
2. Парсинг данных через браузер
Если база открывается через браузер, может возникнуть идея попытаться извлечь данные, анализируя HTML-структуру страницы (парсинг).
- Предложение: Попробовать извлечь данные через парсинг, если база открывается через браузер (сообщение 4).
- Анализ и ограничение: Несмотря на то, что база в браузере открывается, парсинг HTML-кода веб-клиента 1С крайне сложен и неэффективен. Данные в веб-клиенте обычно динамически подгружаются и отображаются в виде, не предназначенном для легкого извлечения стандартными средствами парсинга. Кроме того, таким способом мы вряд ли сможем получить больше данных, чем через стандартную функцию «Вывести список» (сообщение 5), которая сама по себе имеет ограничения.
3. Копирование документа и ручное изменение
Еще один вариант, предложенный в обсуждении, касается стандартных операций с документами: скопировать существующий документ, а затем внести в копию нужные изменения.
- Предложение: Скопировать документ, который не может быть записан, записать его копию, внести в нее изменения, заменить ссылки исходного документа на ссылку копии, исходный удалить, а копии установить дату и номер от исходного (сообщение 6).
- Анализ и ограничение: Ключевая проблема заключается в том, что модифицированный, но не записанный документ нельзя скопировать. Система запросит сохранение текущих изменений перед выполнением операции копирования, что, как мы знаем, невозможно из-за блокировки другим пользователем (сообщение 7). Таким образом, этот метод также не работает для текущей ситуации. Если бы документ был записан, но просто модифицирован, этот подход мог бы быть жизнеспособным.
4. Работа с буфером обмена (Ctrl+C/V) или функционал БСП
В современных конфигурациях, основанных на Библиотеке стандартных подсистем (БСП), часто реализован расширенный функционал копирования данных в буфер обмена, позволяющий переносить табличные части или сложные структуры.
- Предложение: Использовать функционал копирования данных в буфер обмена, если он подключен к документу, для переноса строк табличной части (сообщение 8) или стандартные комбинации Ctrl+A, Ctrl+Shift+C, Ctrl+Shift+V (сообщение 22).
- Анализ и ограничение: К сожалению, в данном случае речь идет о 1С:ЗУП (сообщение 9), где подобный расширенный функционал может быть не реализован в нужной форме. Как подтверждает автор, через стандартное Ctrl+C копируется только текст, а не структурированные данные. Специальные комбинации Ctrl+Shift+C/V, предназначенные для копирования табличных частей, также не работают в этой конфигурации ЗУП (сообщение 23).
- Дополнительный аспект: Начиная с версии платформы 1С:Предприятие 8.3.24, появились новые программные возможности для работы с буфером обмена через объект
СредстваБуфераОбмена. Это позволяет получать и помещать данные различных форматов, включая текст, изображения и даже документы. Потенциально, это могло бы упростить обмен информацией. Однако, для работы с файлами через буфер обмена требуется взаимодействие через события из-за особенностей API браузеров и операционных систем. Применимость этих функций для извлечения модифицированных, но несохраненных данных из формы ЗУП в веб-клиенте без доступа к конфигурации требует дополнительной проверки и, скорее всего, ограничена тем, как конкретная форма ЗУП предоставляет доступ к своим данным программно. Без возможности изменить конфигурацию для использования этих средств, их полезность сильно снижается.
5. Изменение формы и "Вывести список"
Иногда можно попытаться получить данные, манипулируя пользовательским интерфейсом — добавляя скрытые поля на форму и затем используя стандартные средства вывода.
- Предложение: Через «Изменить форму» добавить в табличную часть поля для ссылочных объектов (например, код) и затем использовать «Вывести список» для получения данных этих полей. Если есть подсистема «Загрузка данных из файла», то можно из сохраненного файла загрузить данные в табличную часть (сообщение 10).
- Анализ и ограничение: Этот вариант неплох, но имеет существенные ограничения. Во-первых, вы не сможете вывести все необходимые поля, особенно те, которые скрыты с формы по умолчанию и не предоставляются для выбора в режиме изменения формы (сообщение 11). Во-вторых, даже если поля можно добавить, «Вывести список» обычно дает плоский текстовый вывод, который требует дополнительной обработки для структурированной загрузки. В условиях «1С:Фреш» и без возможности написать внешнюю обработку, автоматизировать этот процесс будет крайне сложно.
6. Сохранение данных в файл из формы (с помощью конфигуратора)
Если бы был доступ к конфигуратору, можно было бы разработать специальную процедуру.
- Предложение: В конфигураторе проблемной базы соорудить в модуле формы-источника процедуру по сохранению данных формы в файлик и вызывать ее перед записью (сообщение 14).
- Анализ и ограничение: Опять же, это предложение наталкивается на фундаментальное ограничение — отсутствие доступа к конфигуратору, поскольку это «1С:Фреш» (сообщение 15). Без возможности модифицировать код конфигурации, такой подход не реализуем.
7. Внешняя компонента
В некоторых случаях для расширения функциональности 1С используются внешние компоненты.
- Предложение: Решить вопрос с помощью внешней компоненты (сообщение 25).
- Анализ и ограничение: Это предложение выглядит перспективным, однако само сообщение было скрыто модератором (сообщение 27), что лишает нас возможности оценить его полезность и доступность. Кроме того, в условиях «1С:Фреш», установка и использование внешних компонент без доступа к конфигурации (для их регистрации и программного вызова) крайне маловероятны. Большинство внешних компонент требуют либо установки на клиентской машине и регистрации, либо на сервере, а также внесения изменений в код 1С для их использования, что запрещено в облачных сервисах.
Общие ограничения и выводы
Мы видим, что основными барьерами для решения поставленной задачи являются следующие факторы:
- «1С:Фреш»: Отсутствие доступа к конфигуратору исключает любые решения, требующие изменения кода, публикации сервисов или использования внешних компонент.
- Веб-клиент: Ограничения браузерной среды затрудняют прямое взаимодействие с локальной файловой системой и буфером обмена для сложных структур данных без явной поддержки платформы 1С.
- Модифицированный, но несохраненный документ: Это ключевое условие. Любые операции, которые требуют предварительной записи документа (например, копирование), не могут быть выполнены. Попытка перечитать документ приведет к потере всех сделанных изменений (сообщение 19).
- Специфика ЗУП: В данной конфигурации стандартные расширенные функции копирования табличных частей (например, через Ctrl+Shift+C) отсутствуют.
Таким образом, учитывая все ограничения, наиболее вероятный и, к сожалению, трудоемкий путь решения проблемы — это ручной перенос данных. То есть, пользователю придется сохранить (возможно, на бумаге или в отдельном текстовом файле) все введенные данные, которые не могут быть записаны, и затем вручную ввести их в новый документ после перезапуска формы или решения проблемы с блокировкой (сообщение 12). Это не идеальное решение, но оно является единственно возможным в ситуации, когда все автоматизированные методы заблокированы архитектурными и политическими ограничениями сервиса «1С:Фреш» и платформы 1С:Предприятие.
Мы выяснили, что без возможности программно извлечь данные из формы, обойти эту проблему практически невозможно. Важность сохранения введенных данных подчеркивает ценность разработки таких механизмов непосредственно в типовых конфигурациях или сервисах, где они могут потребоваться.