Снегопат
https://snegopat.ru/forum/

Хочу скрипт который копирует значение выражения в буфер
https://snegopat.ru/forum/viewtopic.php?f=3&t=407
Страница 1 из 3

Автор:  vladnet [ 15 мар 2013, 12:56 ]
Заголовок сообщения:  Хочу скрипт который копирует значение выражения в буфер

Из этого диалога:
http://screencast.com/t/BgLqGIcAOpFG
Или просто по выделенной строке сразу считать значение и в буфер.

Подскажите как написать данный скрипт.

Автор:  orefkov [ 15 мар 2013, 13:03 ]
Заголовок сообщения:  Re: Хочу скрипт который копирует значение выражения в буфер

А что, там ctrl+C не работает?

Автор:  vladnet [ 15 мар 2013, 16:20 ]
Заголовок сообщения:  Re: Хочу скрипт который копирует значение выражения в буфер

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

Автор:  artbear [ 18 мар 2013, 19:55 ]
Заголовок сообщения:  Re: Хочу скрипт который копирует значение выражения в буфер

В принципе, не должно быть сложно.
по хоткею делаешь:
1. проверяешь тип окна (заголовок. контролы или еще что)
2. если не подходит, выход
3. если нужно окно, то перебираешь контролы и смотришь тип контрола.
4. если это грид, то перебираешь его (datasource) - примеры в скриптах есть.
в первой строке находишь нужное.

Автор:  vladnet [ 19 мар 2013, 14:21 ]
Заголовок сообщения:  Re: Хочу скрипт который копирует значение выражения в буфер

Спасибо. Попробую!

Автор:  orefkov [ 19 мар 2013, 15:08 ]
Заголовок сообщения:  Re: Хочу скрипт который копирует значение выражения в буфер

Этот диалог - модальный. Поэтому в произвольный момент времени ты его окно не получишь, т.к. windows.getActiveView() не возвращает окон модальных диалогов.
Поэтому надо подписаться на команду "Рассчитать", в ней ставить отлов onDoModal, там запоминать форму.
То есть будет вот так:
Код:
var grid
stdcommands.CDebug.EvalExpr.addHandler(SelfScript.self, "onEvalExpr")
function onEvalExpr(cmd)
{
    if(cmd.isBefore)    // Вызывается до обработки команды 1С
        events.connect(windows, "onDoModal", SelfScript.self)
    else                // вызывается после обработки команды 1С
    {
        events.disconnect(windows, "onDoModal", SelfScript.self)
        grid = null
    }
}

function onDoModal(dlgInfo)
{
    try{
    if(dlgInfo.stage == afterInitial)
        grid = dlgInfo.form.getControl('ResultGrid').extInterface
    }catch(e){}
}

function macrosСкопироватьЗначение()
{
    if(!grid)
        return
    var row = grid.currentRow
    if(row)
    {
        var value = row.getCellValue(1)
        Message(value)
        // Вот тут надо value поместить в клипборд
    }
}

Автор:  artbear [ 19 мар 2013, 18:38 ]
Заголовок сообщения:  Re: Хочу скрипт который копирует значение выражения в буфер

Ну вот Саша все и расписал :)
А в буфер можешь копировать с помощью моего скрипта БуферОбмена

Автор:  vladnet [ 20 мар 2013, 16:05 ]
Заголовок сообщения:  Re: Хочу скрипт который копирует значение выражения в буфер

Спасибо огромное все работает. Но понадобилось как то забрать если не выбрана текущая строка.
Там получается нужно не к Таблице обращаться а к реквизиту. Как это можно реализовать?

orefkov писал(а):
Этот диалог - модальный. Поэтому в произвольный момент времени ты его окно не получишь, т.к. windows.getActiveView() не возвращает окон модальных диалогов.
Поэтому надо подписаться на команду "Рассчитать", в ней ставить отлов onDoModal, там запоминать форму.
То есть будет вот так:
Код:
var grid
stdcommands.CDebug.EvalExpr.addHandler(SelfScript.self, "onEvalExpr")
function onEvalExpr(cmd)
{
    if(cmd.isBefore)    // Вызывается до обработки команды 1С
        events.connect(windows, "onDoModal", SelfScript.self)
    else                // вызывается после обработки команды 1С
    {
        events.disconnect(windows, "onDoModal", SelfScript.self)
        grid = null
    }
}

function onDoModal(dlgInfo)
{
    try{
    if(dlgInfo.stage == afterInitial)
        grid = dlgInfo.form.getControl('ResultGrid').extInterface
    }catch(e){}
}

function macrosСкопироватьЗначение()
{
    if(!grid)
        return
    var row = grid.currentRow
    if(row)
    {
        var value = row.getCellValue(1)
        Message(value)
        // Вот тут надо value поместить в клипборд
    }
}

Автор:  orefkov [ 20 мар 2013, 16:15 ]
Заголовок сообщения:  Re: Хочу скрипт который копирует значение выражения в буфер

У грида есть свойство dataSource, через него можно все строки перебрать.
В каталоге scripts сделал поиск dataSource, вот готов пример:
Код:
for(var row = grid.dataSource.root.firstChild; row ; row = row.next)
      Message(row.getCellValue(1));

Автор:  vladnet [ 20 мар 2013, 16:16 ]
Заголовок сообщения:  Re: Хочу скрипт который копирует значение выражения в буфер

artbear писал(а):
Ну вот Саша все и расписал :)
А в буфер можешь копировать с помощью моего скрипта БуферОбмена

Подскажи а как делать обращения к функциям других скриптов?

Вроде все правильно добавил:
$addin Clipboard

и пишу обращение

Clipboard.CopyToClipboard(value)

Он мне начал писать:

Скрипт ....\my.js
В директиве $addin не указано имя аддина

Страница 1 из 3 Часовой пояс: UTC + 3 часа
Powered by phpBB® Forum Software © phpBB Group
http://www.phpbb.com/