Как скопировать текст в буфер обмена (программно)

КАК В 1С СКОПИРОВАТЬ ТЕКСТ В БУФЕР ОБМЕНА (программно)?
Привет, друзья! Хороший программист 1С старается думать об удобстве пользователей при работе с 1С. Сегодня мы с вами научимся копировать текст в буфер обмена по кнопке.
Обработка с примером из видео: clck.ru/32bpqM
Поддержать канал можно по ссылке: donate.stream/ya410011655962993
☝Записаться на курс "Профессия программист 1С: с нуля до профи": ironskills.by/programmist-1c
#1с #ironskills
---
С уважением, команда IRONSKILLS

Пікірлер: 80

  • @user-ob8qz1en7m
    @user-ob8qz1en7m Жыл бұрын

    не знал что с помощью страниц можно скрыть элемент, спасибо, познавательно)

  • @NikolaiKrylofff
    @NikolaiKrylofff Жыл бұрын

    Браво, Иван! Мало того, что по теме видео всегда все очень информативно, так и косвенно совершаемые Вами действия прямо открывают глаза на новые возможности. Спасибо!

  • @user-xw6on2gz2r
    @user-xw6on2gz2r Жыл бұрын

    Ссылку можно выводить в реквизит с типом ФорматированыйДокумент. Потом на вкладке Команды у формы раскрыть этот реквизит и там будут стандартные команды форматированного документа. Вырезать, копировать и т.д. Их можно перетаскивать на форму как обычные команды. Перетаскиваем кнопку Копировать на форму. И надо дописать код при открытии формы: программно выделить текст Документа (процедура УстановитьГраницыВыделения). По итогу: форма открывается с выделенной строкой. Пользователь нажимает кнопку и текст копируется стандартным образом. Работает везде и никакого огорода с HTML.

  • @anwarakramovch7127
    @anwarakramovch7127 Жыл бұрын

    Иван, как всегда на высоте! очень все доходчиво объясняете!!

  • @shuvol7516
    @shuvol7516 Жыл бұрын

    Иван, спасибо, как всегда, все доступно и понятно

  • @MotoCrankshaft
    @MotoCrankshaft Жыл бұрын

    Блин, давно занимаюсь программированием и каждый раз что то новое из видео узнаю :) Лайк видосу :)

  • @igorkolegov
    @igorkolegov Жыл бұрын

    В УХе это сделано так ОбъектКопирования = Новый COMОбъект("htmlfile"); ДанныеБуфера =ОбъектКопирования.ParentWindow.ClipboardData.GETdata("Text");

  • @Nosferatudima

    @Nosferatudima

    Жыл бұрын

    Объект = Новый COMОбъект("htmlfile"); Объект.ParentWindow.ClipboardData.Setdata("Text", СодержимоеВБуферОбмена);

  • @maksimblinov6103
    @maksimblinov6103 Жыл бұрын

    Иван, спасибо! Возьму на заметку

  • @ultrabiba9064
    @ultrabiba9064 Жыл бұрын

    Доступно и коротко объяснил, спасибо!

  • @mynumbers5746
    @mynumbers5746 Жыл бұрын

    Красавчик Иван, отличный урок.

  • @user-fp7jn9ev4v
    @user-fp7jn9ev4v Жыл бұрын

    Очень круто! Спасибо!

  • @seastraus1
    @seastraus1 Жыл бұрын

    Отличное видео! Спасибо!👍

  • @user-we4cl7mp2b
    @user-we4cl7mp2b Жыл бұрын

    Просто офигенно!

  • @fastAbout1s
    @fastAbout1s Жыл бұрын

    Подход интересный, но смотрится костыльно, даже для 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

    @ironskills-1c

    Жыл бұрын

    У Вашего первого способа также есть недостаток - нужна COM-компонента. По второй части: создать элемент программно можно, но в чем будет выйгрыш?

  • @fastAbout1s

    @fastAbout1s

    Жыл бұрын

    @@ironskills-1c Именно эту COM-компоненту специально регистрировать не надо, она из коробки идет во всех windows. Если бы надо было отдельно регистрировать, то да, возможно было бы не универсально. По программному созданию, это просто удобнее. Функцию создания можно вынести в отдельный клиентский модуль, и просто вызывать метод, передавая ему форму и текст который надо поместить в буфер. н.п. так "ОбщийМодульНаКлиенте.ПоместитьВБуферЧерезHTMLПоле(ЭтаФорма, "Некий текст")". Это же намного удобнее, чем каждый раз делать столько действий, да и к тому же на форме будет всегда храниться это поле и закладки...

  • @lord40200

    @lord40200

    5 ай бұрын

    Проверил для винды - работает) Занес к себе в заметки)

  • @user-mb6rs6fu7m
    @user-mb6rs6fu7m Жыл бұрын

    Спасибо за пример работы с буфером Часто стоит задача по работе с платежными системами в частности и по ссылкам на оплату. В своей ИБ так же сделаю копирование. Но, конечно, работа с HTML и видимостью это какой-то костыль костыля. В 1с в целом не очень приятно работать с дом структурами. Спасибо еще раз.

  • @serg0ffan
    @serg0ffanАй бұрын

    Уважаемый Ведущий! Спасибо Вам за серию очень полезных видео, огромное! Очень познавательно, легко воспринимаемо, потому что хорошо подаётся (что не каждому дано). Давно ъотел спросить: как мне настроить такую же штучку как у Вас в браузере? Там циферки какие-то бегут на пустой странице. :)

  • @grekovtube
    @grekovtube Жыл бұрын

    Твик отличный!

  • @SharapovaMasha
    @SharapovaMasha Жыл бұрын

    спасибо!

  • @user-cl1tm8id4z
    @user-cl1tm8id4z Жыл бұрын

    Лайк, интересный подход. Если решение пишется только под Windows, то можно реализовать в две строки ОбъектКопирования = Новый COMОбъект("htmlfile"); ОбъектКопирования.ParentWindow.ClipboardData.SetData("Text", ПлатежнаяСсылка);

  • @vladyan01

    @vladyan01

    Жыл бұрын

    Подскажи откуда узнавать такие ком объекты? Это документация виндовс или что?

  • @user-sd9oc4qh2c

    @user-sd9oc4qh2c

    7 ай бұрын

    А если запустим вэб-клиента??

  • @user-lb3em4pj1m
    @user-lb3em4pj1m7 ай бұрын

    Можно ли подобным образом очистить буфер обмена?

  • @iyad9813
    @iyad9813 Жыл бұрын

    Кстати, интересно как реализована эта кнопка когда копируешь ссылку на какой-нибудь объект в 1С?

  • @user-ny5pp9oh1c
    @user-ny5pp9oh1c Жыл бұрын

    Как всегда интересное видео! Иван, подскажи как у тебя сделано закладками снизу основная конфигурация и расширение? А то у меня отдельными окнами открывается и не могу найти как это сделать

  • @Asakra-irk

    @Asakra-irk

    Жыл бұрын

    Дословно не помню, но примерно так. В конкретном меню окна выбрать Восстановить положение окна.

  • @user-ny5pp9oh1c

    @user-ny5pp9oh1c

    Жыл бұрын

    @@Asakra-irk , я пробовал. Не помогает!

  • @Asakra-irk

    @Asakra-irk

    Жыл бұрын

    @@user-ny5pp9oh1c, затягиваешь мышкой окно расширения на окно основной кофигурации. Когда окна соединятся и будут видны оба (без вкладок), надо восстановить положение окна основной конфигурации.

  • @Asakra-irk

    @Asakra-irk

    Жыл бұрын

    Вкладки тоже перетаскиваются мышкой...

  • @user-ny5pp9oh1c

    @user-ny5pp9oh1c

    Жыл бұрын

    @@Asakra-irk , не получается. Поставил у обоих окон вид "Обычное" (галочкой), затащил расширение на конфигурацию, на основной конфигурации восстановил положение окна, оно стало ровно прижато к левой части, а расширение так и осталось отдельно

  • @KorayKeles
    @KorayKeles Жыл бұрын

    Вы можете поделиться файлом базы данных?

  • @Podorozhnyky
    @Podorozhnyky Жыл бұрын

    А є якісь варіанти копіювання в буфер обміну на мобільному клієнті?

  • @dazz1eshp
    @dazz1eshp9 ай бұрын

    а что если текст многострочный?

  • @ironskills-1c

    @ironskills-1c

    8 ай бұрын

    Попробуйте включить у элемента формы, который связан со строковым реквизитом, многострочный режим.

  • @AlexeySimf
    @AlexeySimf7 ай бұрын

    Слишком много лишних действий пользователя. В буфер обмена ссылка должна копироваться при открытии формы, где она генерируется; естественно, что генерация тоже будет выполняться при открытии формы. В идеале, конечно, отдельная форма вообще не должна открываться. В остальном, методика очень полезная - раньше я знал только способ через виндовый комобъект копировать

  • @baconpancake6316
    @baconpancake63168 ай бұрын

    Может кто подсказать, как в таком "механизме" сделать перенос строки? Ибо стандартные символы 1С не работают (строка просто не копируется)

  • @yumit677

    @yumit677

    26 күн бұрын

    Если вам нужно, чтобы текст разделялся автоматически, то можно вставить в места где нужен перенос строки какой-нибудь символ, который не будет встречаться в вашем тексте, типа: ~ А в js скрипте заменить: “” НА "" Чтобы поле было не однострочным в самом html И "var text = '%1';" НА "var text = `%1`.replace(/~/g, ' ');" Чтобы ваш символ заменялся на " ", который движок интерпретирует как перенос строки Таким образом в буфере обмена будет текст с переносами в необходимых местах

  • @IT-Science
    @IT-Science Жыл бұрын

    Здравствуйте у меня такая проблема. Есть конфигурация 1С Бухгалтерии, в которой есть документ "РеализацияТоваровИУслуг" в документе есть форма в которой при нажатии на кнопку "выгрузить ТТН" должна выгружаться товарно-транспортная накладная. И документ должен появляться в поле таблицы. Но выгрузки не происходить и документ не появляется, подскажите в чем может быть проблема?

  • @ironskills-1c

    @ironskills-1c

    Жыл бұрын

    Сходу сказать трудно, нужно смотреть код. У нас есть сообщество в telegram, можете там вопрос задать: t.me/ironskills_community1c

  • @Asakra-irk
    @Asakra-irk Жыл бұрын

    cmd /c echo Мой текст | clip

  • @uppinua

    @uppinua

    Жыл бұрын

    Не, не. Мы пойдем другим путем! Велосипед должен быть с квадратными колесами!!!

  • @ironskills-1c

    @ironskills-1c

    Жыл бұрын

    Спасибо за альтернативный способ, Алексей)

  • @grekovtube

    @grekovtube

    Жыл бұрын

    В Линуксе не прокатит

  • @Asakra-irk

    @Asakra-irk

    Жыл бұрын

    @@grekovtube в линуксе есть питон

  • @uppinua

    @uppinua

    Жыл бұрын

    @@grekovtube xclip есть в никсах и много других для баша. Не факт, что скрипт на видео корректно отработает. А нас скоро ждет увлекательный переход госов на никсы. И куча проблем типовых связанных с этим.

  • @matinjonsafarov8479
    @matinjonsafarov8479 Жыл бұрын

    Можно вопросы

  • @user-mi8ms5zc7d
    @user-mi8ms5zc7dАй бұрын

    Можно создать общую форму, открывать ее с параметром текст, при событии поля хтмл "Документ сформирован" закрывать форму и выдавать сообщение об успешном копировании. Пользователь открытия формы не увидит, только сообщение об успешном копировании нужного текста.

  • @ironskills-1c

    @ironskills-1c

    Ай бұрын

    Тоже вариант, спасибо за комментарий)

  • @user-qu7nf7ru5j
    @user-qu7nf7ru5j Жыл бұрын

    А вот так нельзя: Процедура СкопироватьВБуферОбмена(Команда) ОбъектКопирования = Новый COMОбъект("htmlfile"); ОбъектКопирования.ParentWindow.ClipboardData.SetData("Text", Объект.Логин); КонецПроцедуры ??

  • @evgenievgeni2016

    @evgenievgeni2016

    Жыл бұрын

    более того, мы так передавали вообще кучу данных. Кодируем в XML любой тип данных, а потом делаем вставку. Удобно списки какие-нибудь копировать или даже таблицы значений для вставки в другие элементы справочника. даже между разными однотипными базами ссылки копировал так из тесовой в рабочую. В линухе наверное не заработает правда.

  • @salvatoreganacci9002

    @salvatoreganacci9002

    Жыл бұрын

    Сделал так, все работает) Зачем тогда эти пляски с хтмл?

  • @matinjonsafarov8479
    @matinjonsafarov8479 Жыл бұрын

    Привет

  • @dazz1eshp
    @dazz1eshp9 ай бұрын

    Все супер, но оказалось что копируется только в том случае когда текст в поле идет одной строкой) Кто то может подсказать что делать если есть переносы строки в тексте?)))

  • @ironskills-1c

    @ironskills-1c

    8 ай бұрын

    А попробуйте для элемента формы включить многострочный режим)

  • @dazz1eshp

    @dazz1eshp

    8 ай бұрын

    А у меня нет поля на форме из которого я беру значение для копирования в буфер. Я это значение формирую программно. А если речь о Поле HTML документа то у него вроде как нет такой опции. @@ironskills-1c

  • @yumit677

    @yumit677

    26 күн бұрын

    @@dazz1eshp Если вам нужно, чтобы текст разделялся автоматически, то можно вставить в места где нужен перенос строки какой-нибудь символ, который не будет встречаться в вашем тексте, типа: ~ А в js скрипте заменить: “” НА "" Чтобы поле было не однострочным в самом html И "var text = '%1';" НА "var text = `%1`.replace(/~/g, ' ');" Чтобы ваш символ заменялся на " ", который движок интерпретирует как перенос строки Таким образом в буфере обмена будет текст с переносами в необходимых местах

  • @arxxximed
    @arxxximed Жыл бұрын

    А решение работает на всех тонких клиентах? Работает на вебклиенте?

  • @ironskills-1c

    @ironskills-1c

    Жыл бұрын

    В веб-клиенте не тестировал, работает в тонком)

  • @arxxximed

    @arxxximed

    Жыл бұрын

    @@ironskills-1c а. В тонком на линуксе пробовали?

  • @rom-x

    @rom-x

    7 ай бұрын

    в вебе не работает.

  • @bsnchita
    @bsnchita10 ай бұрын

    Почему не работает тот же самый код только в конце закрываю форму( Закрыть(); ). Пробовал даже сделать паузу на 3 секунды все равно не работает.

  • @ironskills-1c

    @ironskills-1c

    10 ай бұрын

    А попробуйте в метод Закрыть() передать скопированную ссылку, а на стороне формы, из которой открывалась форма со ссылкой, обработать результат закрытия.

  • @bsnchita

    @bsnchita

    10 ай бұрын

    @@ironskills-1c Сделал на форме владельца обработчик закрытия вызываемой формы и думал его вызывать в обоих случаях(скопировать и скопировать и закрыть) но тоже не взлетело. По итогу получился задублированный функционал(в обоих формах есть реквизит буфер обмена) который работает.

  • @user-eq2yn2ju2s
    @user-eq2yn2ju2s Жыл бұрын

    Люблю Белоруссию, она хороша во всем и в еде и в качестве одежды, обуви, ну и конечно же самое главное в людях. Спасибо Ваня.

  • @ironskills-1c

    @ironskills-1c

    Жыл бұрын

    Спасибо за добрые слова, Юрий)

  • @arxxximed
    @arxxximed Жыл бұрын

    ВОт почему разработка 1С (платформы ) такая тормознутая... Еще с 8,1 люди извращались костылями , что бы просто скопировать в буфер обмена. Только включили в 8,3,24!!!! Очень жду когда ж форматированный текст включат в ячейку табличного документа где нибудь в 8,3,52 :)

  • @ironskills-1c

    @ironskills-1c

    Жыл бұрын

    Спасибо за комментарий) Форматированный текст в ячейке табличного документа тоже в 8.3.24 анонсировали, поэтому ждать осталось не так долго)

  • @krutoyinfo
    @krutoyinfo4 ай бұрын

    што???

  • @user-ii4rq2ry4n
    @user-ii4rq2ry4n Жыл бұрын

    А теперь представьте обьем вот таких вот говно-решений во всей конфигурации, потом ERP весит как гта 5.Лучше уж вообще не делать чем делать так.Мне чуть плохо не стало от такого решения...А скопировать можно и ручками.

  • @ironskills-1c

    @ironskills-1c

    Жыл бұрын

    Предложите более красивое решение, наверняка у Вас оно есть ;)

Келесі