ОбъектИзБуфера = ирОбщий.БуферОбменаПриложения_ЗначениеЛкс(); Если Ложь Или ТипЗнч(ОбъектИзБуфера) = Тип("Массив") Или ТипЗнч(ОбъектИзБуфера) = Тип("ФиксированныйМассив") Тогда УстановитьРедактируемоеЗначение(ОбъектИзБуфера); ЭтаФорма.Модифицированность = Истина; ИначеЕсли ТипЗнч(ОбъектИзБуфера) = Тип("СписокЗначений") Тогда УстановитьРедактируемоеЗначение(ОбъектИзБуфера.ВыгрузитьЗначения()); ЭтаФорма.Модифицированность = Истина; КонецЕсли;
КонецПроцедуры
Функция "ирОбщий.БуферОбменаПриложения_ЗначениеЛкс()" возвращает Неопределено
Не понятно, зачем тогда "вставка из буфера обмена" вообще существует
ожидалось что-то типа получения из общего (а не внутреннего) буфера обмена (и что такое внутренний буфер обмена тоже не понял)
сам использую такой метод: ОбъектИзБуфера = ПолучитьБуферОбмена();
Код
Функция ПолучитьБуферОбмена(ТипДанных="Text", ЗаменитьНеразрывныйПробелОбычным=Истина) Экспорт #Если Клиент Тогда Объект = Новый COMОбъект("htmlfile"); Результат = Объект.ParentWindow.ClipboardData.GetData(ТипДанных); Возврат ?(ЗаменитьНеразрывныйПробелОбычным, СтрЗаменить(Результат, Символ(160), " "), Результат); #КонецЕсли КонецФункции
потом преобразование в массив: если (на первом этапе внедрения) предположить, что это исключительно текстовые данные, то можно сформировать массив по принципу СтрРазделить(ОбъектИзБуфера, Разделитель) а Разделитель тогда желательно вынести на форму, чтобы он сохранялся
не знаю, как кто, но я в 90% случаев использую загрузку из столбика экселя, там разделитель "перевод строки", но вставка из буфера не может этого знать наверняка, поэтому настройка разделителя должна быть отдельно, чтобы каждый раз его не выбирать
У меня загрузка из буфера реализована не только текста, но и объектов из списка справочников и документов (по их представлению), но там код очень специфический, адаптировать нужно (но это как минимум после).
Хотя было бы очень удобно, скажем, список для обработки Подбор и Обработка объектов заполнять из буфера (например, из отчета берется список документов, точнее, их представлений) и вставляется. Вот я получил этот список из анализа метаданных удаленных случайно объектов, и хотел выгрузить ИХ с копии базы для восстановления, и этот процесс затянулся на несколько шагов.
А так бы просто скопировал и вставил (вставились бы сами документы, а не их представление), далее выгрузка в файл и загрузка на другой базе. Хотел было отобрать по "ссылка.представление в списке", но такой опции тоже не нашел, пришлось использовать другие средства.
Сейчас, чтобы это реализовать, нужно вставлять его как текст и уже работать со вставленным текстом, самостоятельно преобразуя его в нужный документ.
П.С. прошу прощения за сумбур (очень болит голова), но уже в который раз откладываю написать, так как постоянно куча работы, а потом сложно моделировать ситуацию или описывать её по памяти...
Непонятно, о какой пользовательской функции речь. Хотя бы один маленький пример нужен типа "Нахожусь в форме ХХХ в поле ЦЦЦ и нажимаю CTRL+V и происходит ... , а ожидалось ..."
Еще имеет смысл описать типовые задачи, решение которых тебя интересует. Возможно для них уже есть способ решения, который ты просто не нашел. Например заполнить список значений ссылками из списка кодов/номеров/УИДов/наименований/представлений документов можно командой "Получить/Из текста".
В принципе, любое заполнение массива из буфера обмена. Он не заполняется.
Но решил написать конкретно решая такую задачу:
Один программист запустил стандартную обработку "поиск и удаление помеченных на удаление". Но запустил её в 14:00, а потом ушёл и вечером в 22:00 подтвердил удаление.
И надо же так случиться, что как раз в это время операторы переделывали перемещения, помечали их на удаление, чтобы что-то там "приостановить". Позже они сняли пометку, сменили им дату, провели, потом распечатали, кладовщики подправили количество (с учётом физических остатков весовых товаров) отправили обменом на магазины, там товар приняли физически по этим же документам. А на утро ничего не продаётся, так как документов перемещения уже... не существует.
Восстановив хронологию событий по журналу, определил то, что написано выше. Коснулось 1620 документов. Понятно, что сидеть набивать такое количество документов по фоткам бумажных копий не улыбалось. Решили загрузить позавчерашнюю копию базы, там по журналу определить измененные и удалённые перемещения и восстановить их уже в своей базе. Но так как менялись даты, то менялись и представления. Поэтому из журнала вытащили массив представлений, этот массив был скопирован в столбик экселя.
Далее планировалось сделать подбор объектов по представлению в копии базы. Но не нашел такой опции, представление невозможно выбрать отбором. Решил сделать подбор запросом (получить ссылки из представлений), засунув в него массив представлений. И этот массив, как оказалось, невозможно заполнить "скопировать колонку в экселе" - "заполнить из буфера обмена". Но догадался "заполнить из текста", вставив текстом и задав разделитель "конец строки".
После этого получил более 2000 строк, были повторы и некоторые из них были пустые, так как ссылок для них не нашло. Сейчас уже понимаю, что в запросе нужно было их отсечь, но почему-то понадеялся на галочку "уникальные", но с ней возникла какая-то заминка, она почему-то не отрабатывала как нужно (либо запутался в кнопках) и пустые ссылки удалить не получилось (думал, будет одна и удалю физически, но оказалось много и не подряд, вперемешку с живыми ссылками). По итогу решил выгрузить как есть (пустые пропускать). Выгрузил и загрузил в основной базе. Вот, собственно и вся история.
Конечно, наиболее "грустными" моментами оказалось то, что загрузка из буфера не работает и то, что нельзя просто в подбор и обработка засунуть условие "представление в массиве".
Сообщение отредактировал GetNight - Пятница, 23.09.2022, 07:48
Теперь стало немного понятнее. Но опять же нет четкой конкретики применительно в ИР. Хотелось бы увидеть четкие шаги пользователя с примером конкретных данных. Думаю тебе не стоит ограничиваться привязкой к вставке из буфера, а переместить фокус на конкретную задачу пользователя. Вставка из буфера - лишь один из способов переноса данных.
Пока кажется что команда "Получить/Из текста" для списка значений или массива значений должна была решить твою задачу. Она открывает инструмент "Загрузка табличных данных", который в частности из стандартных представлений документов умеет делать ссылки. Из твоего описания я так понял, что ты даже не пытался этого делать. Вот и хочется понять, как так получилось? А если все таки получилось, то вообще не понятно в чем проблема то, т.е. чем этот способ не удобен?
Цитата
сделать подбор объектов по представлению в копии базы. Но не нашел такой опции, представление невозможно выбрать отбором
Это в каком инструменте и в каком поле? Хотелось бы больше картинок. Пока я вижу 0 картинок.
Вот теперь я понял о чем речь. Отбор по представлению объекта платформа не предоставляет. Но ты можешь добавить элемент отбора по полю "Ссылка" и в список загрузить ссылки из представлений как я уже 2 раза описал выше.
Да. В подсистеме все работает =) Внутренний буфер обмена - означает, что он не выходит за пределы этого экземпляра клиентского приложения. Использовать его для работы с текстом не подразумевалось, т.к. есть обычный буфер обмена и команда "Получить/Из текста".