В типовых конфигурациях был добавлен удобный функционал копирования табличной части между документами. Недостаток данного механизма в том, что применять его можно внутри только одной конфигурации. Возникла необходимость переноса объектов / табличных частей из одного документа в другой, находящихся в разных конфигурациях. Притом, перенос необходим был не просто между разными конфигурациями, а между конфигурациями, находящимися на разных серверах, пользователи которых находятся на разных терминалах.
В качестве решения было предложено реализовать "буфер обмена" с помощью web-сервиса. Не секрет, что можно настроить синхронизацию данных (средствами БСП). Но что если конфигурация достаточно старая или самописная, и в ней нет БСП? К тому же настройка БСП довольно хлопотное занятие (Настройка регистрации, создание правил конвертации и т.д.).
Идея решения заключается в том, что данные сохраняются не в хранилище значения текущей конфигурации, а сериализуется и хранится в дополнительной конфигурации "Сервер буфера обмена". Эта дополнительная конфигурация имеет методы web-сервиса для добавления, получения и удаления данных:
getData(id, erase);
Возвращает данные типа строка. Данные которые были ранее скопированы (добавлены) в виде строки.
• id, строка – ИД записи для считывания;
• erase, булево – признак необходимости удаления записи после передачи
getLastData (erase);
Возвращает данные типа строка. Самые последние данные, которые были ранее скопированы (добавлены) в виде строки.
• erase, булево – признак необходимости удаления записи после передачи
putData(dataType, data, dataName, id);
Возвращает значение типа строка (id сохранения данных). Помещает данные для хранения.
• dataType, строка – Тип данных хранения (см. тестовые конфигурации);
• data, строка – сохраняемые данные;
• dataName, строка – представление хранимых данных;
• id, строка – необязательный – присвоить собственный id для хранения.
getStoreList ();
Возвращает данные типа строка. Сериализованное значение типа «Таблица значений». См. тестовые конфигурации. Получает текущий состав сохраненных данных.
eraseData(id);
Возвращает данные типа булево (успех). Удаляет запись по id.
• id, строка – ИД записи для удаления;
eraseLastData ();
Возвращает данные типа булево (успех). Удаляет самую последнюю добавленную запись.
Во вложении 2-е БД клиенты для проверки и БД с сервисом. В doc файле описана установка.
Может кому-нибудь пригодится.
Тестировалось на платформа 1С 8.3.9.
Интересно.
Пользователь видит только свой буфер?
Т.к. буфер собирает их нескольких баз, то мне кажется надо больше инфы для выбора объекта вставки — хотя бы видеть из какой базы лежит и, возможно, предварительный просмотр самих вставляемых данных…
(1) Любое описание данных можно сформировать для буфера. В методе putData — 3 параметр. Для примера упростил.