Как скопировать текст в буфер обмена (программно)
КАК В 1С СКОПИРОВАТЬ ТЕКСТ В БУФЕР ОБМЕНА (программно)?
Привет, друзья! Хороший программист 1С старается думать об удобстве пользователей при работе с 1С. Сегодня мы с вами научимся копировать текст в буфер обмена по кнопке.
Обработка с примером из видео: clck.ru/32bpqM
Поддержать канал можно по ссылке: donate.stream/ya410011655962993
☝Записаться на курс "Профессия программист 1С: с нуля до профи": ironskills.by/programmist-1c
#1с #ironskills
---
С уважением, команда IRONSKILLS
Пікірлер: 80
не знал что с помощью страниц можно скрыть элемент, спасибо, познавательно)
Браво, Иван! Мало того, что по теме видео всегда все очень информативно, так и косвенно совершаемые Вами действия прямо открывают глаза на новые возможности. Спасибо!
Ссылку можно выводить в реквизит с типом ФорматированыйДокумент. Потом на вкладке Команды у формы раскрыть этот реквизит и там будут стандартные команды форматированного документа. Вырезать, копировать и т.д. Их можно перетаскивать на форму как обычные команды. Перетаскиваем кнопку Копировать на форму. И надо дописать код при открытии формы: программно выделить текст Документа (процедура УстановитьГраницыВыделения). По итогу: форма открывается с выделенной строкой. Пользователь нажимает кнопку и текст копируется стандартным образом. Работает везде и никакого огорода с HTML.
Иван, как всегда на высоте! очень все доходчиво объясняете!!
Иван, спасибо, как всегда, все доступно и понятно
Блин, давно занимаюсь программированием и каждый раз что то новое из видео узнаю :) Лайк видосу :)
В УХе это сделано так ОбъектКопирования = Новый COMОбъект("htmlfile"); ДанныеБуфера =ОбъектКопирования.ParentWindow.ClipboardData.GETdata("Text");
@Nosferatudima
Жыл бұрын
Объект = Новый COMОбъект("htmlfile"); Объект.ParentWindow.ClipboardData.Setdata("Text", СодержимоеВБуферОбмена);
Иван, спасибо! Возьму на заметку
Доступно и коротко объяснил, спасибо!
Красавчик Иван, отличный урок.
Очень круто! Спасибо!
Отличное видео! Спасибо!👍
Просто офигенно!
Подход интересный, но смотрится костыльно, даже для 1С. Если клиент работает на Windows, то можно через COM сделать, намного проще: Функция УстановитьТекстВБуферОбмена(Текст) Экспорт Объект = Новый COMОбъект("htmlfile"); Объект.ParentWindow.ClipboardData.Setdata("Text", Текст); Возврат Текст; КонецФункции Если для Linux, то надо хотя бы программно создавать элемент, на время копирования показать, потом удалить. Пользователь ничего не увидит, но все отработает. Код примерно такой: &НаКлиенте Процедура ПоместитьВБуферНаСервере(Команда) СоздатьЭлементНаСервере(); document = Элементы.Поле_HTML.Документ.defaultView.document; document.write(СтрШаблон("", ЧтоПоместить)); document.getElementById("forCopy").select(); document.execCommand("copy"); УдалитьЭлементыНаСервере(); КонецПроцедуры Процедура УдалитьЭлементыНаСервере() Элементы.удалить(Элементы.Найти("Поле_HTML")); ДобавляемыеРеквизиты = Новый Массив; ДобавляемыеРеквизиты.Добавить("Поле_HTML"); ИзменитьРеквизиты(,ДобавляемыеРеквизиты); КонецПроцедуры &НаСервере Процедура СоздатьЭлементНаСервере() ДобавляемыеРеквизиты = Новый Массив; ДобавляемыеРеквизиты.Добавить(Новый РеквизитФормы("Поле_HTML",Новый ОписаниеТипов("Строка"))); ИзменитьРеквизиты(ДобавляемыеРеквизиты); ПолеВвода = Элементы.Добавить("Поле_HTML", Тип("ПолеФормы"), ЭтаФорма); ПолеВвода.Вид = ВидПоляФормы.ПолеHTMLДокумента; ПолеВвода.ПутьКДанным = "Поле_HTML"; КонецПроцедуры
@ironskills-1c
Жыл бұрын
У Вашего первого способа также есть недостаток - нужна COM-компонента. По второй части: создать элемент программно можно, но в чем будет выйгрыш?
@fastAbout1s
Жыл бұрын
@@ironskills-1c Именно эту COM-компоненту специально регистрировать не надо, она из коробки идет во всех windows. Если бы надо было отдельно регистрировать, то да, возможно было бы не универсально. По программному созданию, это просто удобнее. Функцию создания можно вынести в отдельный клиентский модуль, и просто вызывать метод, передавая ему форму и текст который надо поместить в буфер. н.п. так "ОбщийМодульНаКлиенте.ПоместитьВБуферЧерезHTMLПоле(ЭтаФорма, "Некий текст")". Это же намного удобнее, чем каждый раз делать столько действий, да и к тому же на форме будет всегда храниться это поле и закладки...
@lord40200
5 ай бұрын
Проверил для винды - работает) Занес к себе в заметки)
Спасибо за пример работы с буфером Часто стоит задача по работе с платежными системами в частности и по ссылкам на оплату. В своей ИБ так же сделаю копирование. Но, конечно, работа с HTML и видимостью это какой-то костыль костыля. В 1с в целом не очень приятно работать с дом структурами. Спасибо еще раз.
Уважаемый Ведущий! Спасибо Вам за серию очень полезных видео, огромное! Очень познавательно, легко воспринимаемо, потому что хорошо подаётся (что не каждому дано). Давно ъотел спросить: как мне настроить такую же штучку как у Вас в браузере? Там циферки какие-то бегут на пустой странице. :)
Твик отличный!
спасибо!
Лайк, интересный подход. Если решение пишется только под Windows, то можно реализовать в две строки ОбъектКопирования = Новый COMОбъект("htmlfile"); ОбъектКопирования.ParentWindow.ClipboardData.SetData("Text", ПлатежнаяСсылка);
@vladyan01
Жыл бұрын
Подскажи откуда узнавать такие ком объекты? Это документация виндовс или что?
@user-sd9oc4qh2c
7 ай бұрын
А если запустим вэб-клиента??
Можно ли подобным образом очистить буфер обмена?
Кстати, интересно как реализована эта кнопка когда копируешь ссылку на какой-нибудь объект в 1С?
Как всегда интересное видео! Иван, подскажи как у тебя сделано закладками снизу основная конфигурация и расширение? А то у меня отдельными окнами открывается и не могу найти как это сделать
@Asakra-irk
Жыл бұрын
Дословно не помню, но примерно так. В конкретном меню окна выбрать Восстановить положение окна.
@user-ny5pp9oh1c
Жыл бұрын
@@Asakra-irk , я пробовал. Не помогает!
@Asakra-irk
Жыл бұрын
@@user-ny5pp9oh1c, затягиваешь мышкой окно расширения на окно основной кофигурации. Когда окна соединятся и будут видны оба (без вкладок), надо восстановить положение окна основной конфигурации.
@Asakra-irk
Жыл бұрын
Вкладки тоже перетаскиваются мышкой...
@user-ny5pp9oh1c
Жыл бұрын
@@Asakra-irk , не получается. Поставил у обоих окон вид "Обычное" (галочкой), затащил расширение на конфигурацию, на основной конфигурации восстановил положение окна, оно стало ровно прижато к левой части, а расширение так и осталось отдельно
Вы можете поделиться файлом базы данных?
А є якісь варіанти копіювання в буфер обміну на мобільному клієнті?
а что если текст многострочный?
@ironskills-1c
8 ай бұрын
Попробуйте включить у элемента формы, который связан со строковым реквизитом, многострочный режим.
Слишком много лишних действий пользователя. В буфер обмена ссылка должна копироваться при открытии формы, где она генерируется; естественно, что генерация тоже будет выполняться при открытии формы. В идеале, конечно, отдельная форма вообще не должна открываться. В остальном, методика очень полезная - раньше я знал только способ через виндовый комобъект копировать
Может кто подсказать, как в таком "механизме" сделать перенос строки? Ибо стандартные символы 1С не работают (строка просто не копируется)
@yumit677
26 күн бұрын
Если вам нужно, чтобы текст разделялся автоматически, то можно вставить в места где нужен перенос строки какой-нибудь символ, который не будет встречаться в вашем тексте, типа: ~ А в js скрипте заменить: “” НА "" Чтобы поле было не однострочным в самом html И "var text = '%1';" НА "var text = `%1`.replace(/~/g, ' ');" Чтобы ваш символ заменялся на " ", который движок интерпретирует как перенос строки Таким образом в буфере обмена будет текст с переносами в необходимых местах
Здравствуйте у меня такая проблема. Есть конфигурация 1С Бухгалтерии, в которой есть документ "РеализацияТоваровИУслуг" в документе есть форма в которой при нажатии на кнопку "выгрузить ТТН" должна выгружаться товарно-транспортная накладная. И документ должен появляться в поле таблицы. Но выгрузки не происходить и документ не появляется, подскажите в чем может быть проблема?
@ironskills-1c
Жыл бұрын
Сходу сказать трудно, нужно смотреть код. У нас есть сообщество в telegram, можете там вопрос задать: t.me/ironskills_community1c
cmd /c echo Мой текст | clip
@uppinua
Жыл бұрын
Не, не. Мы пойдем другим путем! Велосипед должен быть с квадратными колесами!!!
@ironskills-1c
Жыл бұрын
Спасибо за альтернативный способ, Алексей)
@grekovtube
Жыл бұрын
В Линуксе не прокатит
@Asakra-irk
Жыл бұрын
@@grekovtube в линуксе есть питон
@uppinua
Жыл бұрын
@@grekovtube xclip есть в никсах и много других для баша. Не факт, что скрипт на видео корректно отработает. А нас скоро ждет увлекательный переход госов на никсы. И куча проблем типовых связанных с этим.
Можно вопросы
Можно создать общую форму, открывать ее с параметром текст, при событии поля хтмл "Документ сформирован" закрывать форму и выдавать сообщение об успешном копировании. Пользователь открытия формы не увидит, только сообщение об успешном копировании нужного текста.
@ironskills-1c
Ай бұрын
Тоже вариант, спасибо за комментарий)
А вот так нельзя: Процедура СкопироватьВБуферОбмена(Команда) ОбъектКопирования = Новый COMОбъект("htmlfile"); ОбъектКопирования.ParentWindow.ClipboardData.SetData("Text", Объект.Логин); КонецПроцедуры ??
@evgenievgeni2016
Жыл бұрын
более того, мы так передавали вообще кучу данных. Кодируем в XML любой тип данных, а потом делаем вставку. Удобно списки какие-нибудь копировать или даже таблицы значений для вставки в другие элементы справочника. даже между разными однотипными базами ссылки копировал так из тесовой в рабочую. В линухе наверное не заработает правда.
@salvatoreganacci9002
Жыл бұрын
Сделал так, все работает) Зачем тогда эти пляски с хтмл?
Привет
Все супер, но оказалось что копируется только в том случае когда текст в поле идет одной строкой) Кто то может подсказать что делать если есть переносы строки в тексте?)))
@ironskills-1c
8 ай бұрын
А попробуйте для элемента формы включить многострочный режим)
@dazz1eshp
8 ай бұрын
А у меня нет поля на форме из которого я беру значение для копирования в буфер. Я это значение формирую программно. А если речь о Поле HTML документа то у него вроде как нет такой опции. @@ironskills-1c
@yumit677
26 күн бұрын
@@dazz1eshp Если вам нужно, чтобы текст разделялся автоматически, то можно вставить в места где нужен перенос строки какой-нибудь символ, который не будет встречаться в вашем тексте, типа: ~ А в js скрипте заменить: “” НА "" Чтобы поле было не однострочным в самом html И "var text = '%1';" НА "var text = `%1`.replace(/~/g, ' ');" Чтобы ваш символ заменялся на " ", который движок интерпретирует как перенос строки Таким образом в буфере обмена будет текст с переносами в необходимых местах
А решение работает на всех тонких клиентах? Работает на вебклиенте?
@ironskills-1c
Жыл бұрын
В веб-клиенте не тестировал, работает в тонком)
@arxxximed
Жыл бұрын
@@ironskills-1c а. В тонком на линуксе пробовали?
@rom-x
7 ай бұрын
в вебе не работает.
Почему не работает тот же самый код только в конце закрываю форму( Закрыть(); ). Пробовал даже сделать паузу на 3 секунды все равно не работает.
@ironskills-1c
10 ай бұрын
А попробуйте в метод Закрыть() передать скопированную ссылку, а на стороне формы, из которой открывалась форма со ссылкой, обработать результат закрытия.
@bsnchita
10 ай бұрын
@@ironskills-1c Сделал на форме владельца обработчик закрытия вызываемой формы и думал его вызывать в обоих случаях(скопировать и скопировать и закрыть) но тоже не взлетело. По итогу получился задублированный функционал(в обоих формах есть реквизит буфер обмена) который работает.
Люблю Белоруссию, она хороша во всем и в еде и в качестве одежды, обуви, ну и конечно же самое главное в людях. Спасибо Ваня.
@ironskills-1c
Жыл бұрын
Спасибо за добрые слова, Юрий)
ВОт почему разработка 1С (платформы ) такая тормознутая... Еще с 8,1 люди извращались костылями , что бы просто скопировать в буфер обмена. Только включили в 8,3,24!!!! Очень жду когда ж форматированный текст включат в ячейку табличного документа где нибудь в 8,3,52 :)
@ironskills-1c
Жыл бұрын
Спасибо за комментарий) Форматированный текст в ячейке табличного документа тоже в 8.3.24 анонсировали, поэтому ждать осталось не так долго)
што???
А теперь представьте обьем вот таких вот говно-решений во всей конфигурации, потом ERP весит как гта 5.Лучше уж вообще не делать чем делать так.Мне чуть плохо не стало от такого решения...А скопировать можно и ручками.
@ironskills-1c
Жыл бұрын
Предложите более красивое решение, наверняка у Вас оно есть ;)