TGViewer
Журнал инженера-программиста Журнал инженера-программиста @software_engineer_notes · 247 subscribers
Post #345 326
На днях у клиентов было интересное требование: при копировании документа из поля ввода на табличной части управляемой формы 1С в буфер обмена должно попадать не его полное представление, а только номер (далее они его куда-то вносят и постоянно вынуждены делать очистку от лишнего).

Для начала попробовал с условным оформлением. У меня была гипотеза, что если текущее поле скрыть и на его место поместить новое поле с номером, в котором с помощью оформления делать подмену текста на представление оригинального поля, то при его копировании в буфер обмена попадет истинное значение - номер. Но нет, копируется именно тот текст, который видит на форме пользователь.

===

Пора посмотреть, что там за новые мультиплатформенные возможности по работе с буфером обмена добавили в 1С с версии 8.3.24

🟡 обработчик события ПриВставкеИзБуфераОбмена (OnPasteFromClipboard) в каждой форме и один глобальный в модуле приложения, который срабатывает при попытке вставить картинку или файлы;

🟡 библиотека СредстваБуфераОбмена (ClipboardTools), в которой реализованы следующие методы:
➖ ИспользованиеДоступно (CanUse) - Проверка доступности использования буфера обмена;
➖ ПоддерживаетсяФорматДанных<ФорматДанных> (DataFormatSupported<DataFormat>) - Проверка поддержки указанного формата данных (помимо картинок и HTML, еще могут быть MIME-типы);
➖ СодержитДанныеАсинх<ФорматДанных> (ContainsDataAsync<DataFormat>) - Проверка наличия в буфере обмена данных указанного формата;
➖ ПолучитьДанныеАсинх<ФорматДанных> (GetDataAsync<DataFormat>) - Получение из буфера обмена данных указанного формата;
➖ ПоместитьДанныеАсинх (PutDataAsync) - Помещение данные в буфер обмена.


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

Вторая претензия - нет очистки из буфера существующих элементов, которые могут мешать. По умолчанию в Windows журнал буфера обмена содержит 25 элементов, из которых происходит вставка по запросу значений требуемого типа. Следовательно есть вероятность, что внешняя программа, куда копируют значения, может отдать приоритет для вставки значениям вместо обычного текста тому типу, под которым помещено представление документа. И еще не забываем, что копирование в буфер из 1С является асинхронным и следовательно порядок размещения в памяти не строго предопределен.

===

Новые возможности 1С позволили мне сделать на форме новую команду, которая успешно копировала в буфер только номер выбранного документа. Но как теперь ее удобно "подсунуть" пользователю?

Попробовал переопределить Ctrl+C для ее вызова и не получилось - комбинация системного копирования имеет приоритет выше чем у команд на форме. Ладно, тогда повесил вызов на похожую комбинацию Alt+C и дополнительно добавил ее в контекстное меню для любителей кликать мышкой.

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

#1С #рабочиебудни
  • 🔥 7
More from @software_engineer_notes
  1. Oct 3, 2026"Вы автоматизируете хаос" - этим страхом любят пугать своих бизнес-заказчиков консалтеры,…
  2. Sep 28, 2026Уже второй проект на работе делаю в методике "парного программирования" с Claude Code. И с…
  3. Sep 13, 2026За последний месяц произошло много событий, но наиболее интересным является использование…
  4. Sep 1, 2026Самая обычная бумажная книга учета - это пока лучший инструмент фиксации проектных изменен…
  5. Aug 31, 2026Очень показательная причина моей нелюбви реализации сравнения/объединения конфигураций в 1…
  6. Aug 29, 2026О концепции LLM-Wiki я впервые прочитал на X (Twitter). Чтобы позже ознакомится детальнее,…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →