gifts2017

UE: Copy/Paste через буфер обмена Windows справочников, документов и др. ссылочных объектов между идентичными конфигурациями

Опубликовал Сергей Марченко (MarSeN) в раздел Обработки - Универсальные обработки

Реализация копи-паста ссылочных объектов между идентичными конфигурациями сделана в виде расширения Universal Extensions (v 3.1) с использованием буфера обмена Windows. Это рабочий механизм которым Вы можете перенести выделенные непосредственно в списках форм объектов из одной базы в другую без каких - либо временных файлов.  

Новая версия UE дает возможность использовать буфер обмена по вашему усмотрению.

В новой версии UE (3.1) реализована работа с буфером обмена Windows. Для этого реализовано 2 метода

  1. ПоместитьДанныеВБуферОбмена(Данные, ФорматДанных)
  2. ПолучитьДанныеИзБуфераОбмена(ФорматДанных)

Процедура ПоместитьДанныеВБуферОбмена принимает 2 параметра:

  1. Данные (тип строка) - данные для помещения в буфер обмена.
  2. ФорматДанных (тип строка) - произвольный строковый идентификатор имени формата данных. Используется для того, чтобы в последствии получить помещенные данные из буфера.
Функция ПолучитьДанныеИзБуфераОбмена принимает один параметр - ФорматДанных (тип строка). Используется для получения из буфера данных, помещенных в него предыдущим методом.

Оба этих метода определены в форме UE. Доступ к ним из расширения осуществляется ч/з переменную "ВладелецФормы".
Пример:
ВладелецФормы.ПоместитьДанныеВБуферОбмена(ПолучитьСерелизованныйМассивXMLДанныхОбъектов(ВыделенныеСтроки),"XML_Data (Серелиз массив)");
XML_Data = ВладелецФормы.ПолучитьДанныеИзБуфераОбмена("XML_Data (Серелиз массив)"); 
 
В примере показано, как данные (строковые данные) помещаются в буфер, и как их из буфера получить.
 
Если UE не нашел данных в буфере запрашиваемого формата, то функция возвращает пустую строку.
 

Функционал представленного расширения

В архиве лежит обработка Universal Extensions v3.1, изначатьный состав которой (описан в главной статье) расширен новым Расширением Расширение_БуферОбменаWin.

В нем реализовано 2 команды:

Copy

 

 

Данная команда помещает выделенные объекты в ввиде XML в буфер обмена

Paste (после вставки надо немного подождать, чтоб данные внеслись в базу, и обновить список :-) )

 

 

Копирование в буфер возможно как из списка объектов, в котором в ВыделенныеСтроки находятся ссылки, так и непосредственно из открытой формы объекта (копирование одиночного объекта).

Реализация очень простая. Заняла не более 1 часа.

Жду Ваших комментариев и предложений.

PS: на примере копирование происходит в УТ11 на платформе 8.2, а вставка на копии этой базы (до добавления 2-х новых заказов), но уже на платформе 8.3 

Скачать файлы

Наименование Файл Версия Размер
UE 3.1 с расширением Copy/Paste 112
.epf 392,85Kb
01.04.14
112
.epf 392,85Kb Скачать

См. также

PowerTools от 1 000
Подписаться Добавить вознаграждение

Комментарии

1. Призрак (davdykin) 31.03.14 10:38
А как в данном решение на счет ссылочной целостности. Синхронизация, я так понимаю, по ГУИД?
2. Сергей Марченко (MarSeN) 31.03.14 10:52
Перенос происходит средствами серелизации.
Да, получается что переносятня гуиды ссылочных объектов и простые типы.
3. Wiza.rd (Dr.Aziw) 01.04.14 09:35
4. Евгений Пономаренко (Evgen.Ponomarenko) 01.04.14 14:34
5. Алексей Белоусов (AllexSoft) 01.04.14 14:46
давно пора подобный механизм да средствами платформы, жаль 1С нас пока не слышет (
6. Сергей Марченко (MarSeN) 01.04.14 14:56
(5) AllexSoft,
У 1С рабочих рук не хватает. Хорошо они не ставят палки в колеса нам, смертным, кто пытается упростить некоторые операции )
GalKo; AllexSoft; +2 Ответить 1
7. ssn5810 (ssn5810) 02.04.14 08:02
они только конфигурации до "ожирения" могут доводить
8. Павел Бодунов (BodunOff) 02.04.14 09:04
Кхм, у меня кроме пунктов "Справка" и "Закрыть" ничего не отображается. Розница 2.1, платформа 8.3.4.437. Как быть?
9. Сергей Марченко (MarSeN) 02.04.14 09:24
(8) BodunOff,
У вас режим работы "отдельные окна"?
если да, тогда Вам надо открыть форму списка в режиме отдельного окна. Т.е. нажимаете на shift и кликаете на ссылку списка в панели навигации.

Можно так-же копировать одиночные объекты. Открываете документ и в меню именно документа (как на gif-ках только не главного окна, а окна документа) выбираете Copy. Так-же для вставки нужно проделать
Но лучше конечно, если у вас режим отдельных окон - использовать shift при открытии списков.

Дело в том что UE работает только если текущее окно есть в наборе окон, возвращаемых методом ПолучитьОкна(). В режиме отдельных окон все что открывается не в режиме окна - окна не имеет и UE не может работать с такой формой.
То же самое для рабочего стола в режима закладок
10. Сергей Марченко (MarSeN) 02.04.14 09:26
(8) BodunOff,
Если не получится, обязательно напишите в личку. Я Вам помогу разобраться.
11. Артём Шумкин (Temniy) 02.04.14 09:30
12. Павел Бодунов (BodunOff) 02.04.14 09:57
(10) MarSeN, Спасибо, всё заработало! "+" обязательно за меганужную полезняшку!
13. Сергей Марченко (MarSeN) 02.04.14 10:01
14. Евгений Пономаренко (Evgen.Ponomarenko) 02.04.14 10:19
(6) MarSeN,
У 1С рабочих рук не хватает.
Мозгов у них рабочих не хватает ))) Хорошо, что на ИС хватает и того и другого ;)
ZVN; wolfsoft; +2 1 Ответить 1
15. Алексей Белоусов (AllexSoft) 02.04.14 12:12
(14) Evgen.Ponomarenko, надеюсь они сюда заглядывают и черпают идеи... кстати, зазеркалье 1С оживилось, постоянно новости интересные появляются... это не может ни радовать ! лично у меня появилась надежда что какие то подвижки в сторону улучшений связей с 1С-общественностью все же есть!
16. Сергей Марченко (MarSeN) 02.04.14 12:24
(15) AllexSoft,
Да, 1С стала обращать внимание на то, в какую сторону смотрит общество 1С-программистов.
Новшества в 8.3 явно взяты не с потолка. Обратите внимание на то, что сделанные "фишки" покрывают некоторые сторонние разработки.
17. Евгений Пономаренко (Evgen.Ponomarenko) 02.04.14 12:37
(15) AllexSoft,
Зазеркалье оживилось действительно... в целом это радует. Печалит то, что к примеру "Рефакторинг" от 1С ничего общего с действительным рефакторингом не имеет. В данном случае произошла подмена понятий: "Поиск и замена модальных диалогов" ;)
Типа "Смотрите! - В конфигураторе теперь есть новая фишка!" Вот если бы в зазеркалье была возможность постить, вот это был бы шаг навстречу сообществу...
А так у Нуралиева свои мечты, у разработчиков платформы свои, у нас свои.
А пользователь хотел только одного: "Стабильности" ))))

ПС
К стати, "нормальный рефакторинг" начинается с нормализации структуры БД.
Потом начинается уже функциональный рефакторинг.
18. Сергей Марченко (MarSeN) 02.04.14 13:00
(17) Evgen.Ponomarenko,
Согласен.
Еще вариант "подьбы навтсречу" - если бы в конфигуратор добавили возможность подгружать свои скрипты и модули. Тогда бы 1С могла сосредоточить свои усилия на стратегических направлениях разработки
19. Алексей Белоусов (AllexSoft) 02.04.14 13:06
(17) Evgen.Ponomarenko, согласен полностью... хотя с другой стороны сколько времени конфигуратор вообще не развивался, что я рад даже этому "псевдо зачатку рефакторинга"
А вот камментить статьи в зазеркалье действительно было бы полезно! Может Доржи предложить сделать тут раздел в типа Замеки из зазеркалья, чтобы все могли каментить не на 1с.ру, так хоть тут...
Evgen.Ponomarenko; MarSeN; +2 Ответить 1
20. Евгений Пономаренко (Evgen.Ponomarenko) 02.04.14 13:16
(18) MarSeN,
Если бы в конфигуратор добавили возможность подгружать свои скрипты и модули.

Я себе уже сделал такую фишку - пятый год наслаждаюсь )))

Тогда бы 1С могла сосредоточить свои усилия на стратегических направлениях разработки

Мне понравилась идея виждетов в Wordpress-е. Инсталируешь плагин (модуль) и виджет (визуальную часть)
настраиваешь параметры и вперед!!! Они не делят приложение на серверную часть и клиентскую.
Они делят приложение на: Базу данных, функциональную часть, визуальную часть.
И точка! красота )))
21. Adapter Бахтыреев (adapter) 02.04.14 13:17
идея с копи\пастом хорошая. только некоторые баги в реализации. Например запустить обработку в двух базах одновременно не удалось. Пытается при втором запуске переписать длл-ки, а они открыты при первом запуске. Пришлось код немного поправить:

&НаКлиенте
Процедура ПриОткрытии(Отказ)

	ПутьККомпоненте	= КаталогВременныхФайлов() + "UniversalExtensions.dll";
	ВремФайл = Новый Файл(ПутьККомпоненте);
	Если Не ВремФайл.Существует() Тогда
		ДвоичныеДанные	= ПолучитьИзВременногоХранилища(ПолучитьДЛЛ());
		ДвоичныеДанные.Записать(ПутьККомпоненте);
	КонецЕсли;
	
	ПутьКЛицензии	= КаталогВременныхФайлов() + "license.key";
	ВремФайл = Новый Файл(ПутьКЛицензии);
	Если Не ВремФайл.Существует() Тогда
		ДвоичныеДанные	= ПолучитьИзВременногоХранилища(ПолучитьЛицензию());
		ДвоичныеДанные.Записать(ПутьКЛицензии);
	КонецЕсли;
	
	Успех = ПодключитьВнешнююКомпоненту(ПутьККомпоненте,"UniversalExtensions",AddInType.Native);
	Если Успех Тогда 
		
		ПолноеИмяОбработки = ПолучитьИмяОбработки();
		ФормаМеню 	= ПолучитьФорму(ПолноеИмяОбработки + ".Форма.ue",Новый Структура("ПутьККомпоненте,ПутьКЛицензии",ПутьККомпоненте,ПутьКЛицензии),,,ВариантОткрытияОкна.ОтдельноеОкно);
		ФормаМеню.Init(ПолучитьПользовательскиеНастройки());

	КонецЕсли;
	
	Отказ 		= Истина;
КонецПроцедуры

&НаСервере
Функция ПолучитьИмяОбработки()
	вОбъект				= РеквизитФормыВЗначение("Объект");
	ПолноеИмяОбработки  = вОбъект.Метаданные().ПолноеИмя();
    Возврат ПолноеИмяОбработки;
КонецФункции // ПолучитьИмяОбработки()


Функция ПолучитьДЛЛ()
	вОбъект				= РеквизитФормыВЗначение("Объект");
	ДвоичныеДанные		= вОбъект.ПолучитьМакет("UniversalExtensions");
	Возврат ПоместитьВоВременноеХранилище(ДвоичныеДанные);
КонецФункции	
...Показать Скрыть


Ну и ссылочной целостности у подхода нет. Т.е. перенос объектов возможен только если в реквизитах ссылочных типов ничего не менялось. А если допустим добавили нового поставщика в спр, то накладная уже переносится с <Объект не найден>. Надо рекурсии прикручивать и т.д.
22. Евгений Пономаренко (Evgen.Ponomarenko) 02.04.14 13:17
23. Сергей Марченко (MarSeN) 02.04.14 13:24
(21) adapter,
при таком подходе при закрытии UE или закрытии базы должна валиться ошибка при попытке удалить файл dll (в форме ue). Там тогда временно поставьте попытку/исключение. Думаю даче обфусцированность кода не помешает вам это сделать )
Я обязательно предусмотрю одновременное открытие обработки в нескольких базах.
почему не сделал сразу - это временная защита от того чтобы нельзя было запустить обработку в базе повторно.
Спасибо!
24. Сергей Марченко (MarSeN) 02.04.14 13:28
(21) adapter,
По ссылочной целостности - тут не так все однозначно.. Наверное проще открыть документ, увидеть что есть битая ссылка и скопипастить недостающий объект. Ваш вариант предполагает перенос большого объема информации, отчасти ненужной.
Как вариант можно прикрутить механизмы конвертации данных
но, ИМХО, изначально предложенный подход более прост в использовании и прозрачен в понимании того, что надо сделать при появлении битых ссылок.
25. Алексей Роза (DoctorRoza) 02.04.14 13:36
26. Константин Куликов (Светлый ум) 04.04.14 09:46
*А на обычных формах вариант есть ?
27. Сергей Марченко (MarSeN) 04.04.14 09:55
(26) Светлый ум,
На обычных формах такого варианта нет, так как 1С в обычном режиме не предоставляет список открытых окон 1С ( ПолучитьОкна() не работает )

Обычные формы постепенно вымирают.
28. Андрей Хиневич (Himik861) 18.04.14 07:34
Скажите пожалуйста в подбор товара в документах закупки можно сделать что бы тоже работало.
29. Андрей Хиневич (Himik861) 18.04.14 09:38
Ошибка не найдено поле ВналичииОстаток. У меня запрос в подборе переделан и не работает теперь. Не подскажите как это исправить.
30. Сергей Марченко (MarSeN) 18.04.14 10:21
(28) Himik861,
Да, быстрый поиск работает во всех динамических списках
31. Сергей Марченко (MarSeN) 18.04.14 10:23
(29) Himik861,
ВналичииОстаток

Быстрый поиск не использует таких полей. Смотрите ваш подбор. Видимо там где-то ошибка
32. Андрей Хиневич (Himik861) 21.04.14 04:05
У вас ошибка!!!! если в подборе стоит галочка "Только в наличии на складе" то выскакивает ошибка "не найдено поле ВНаличииОСтаток", как это исправить. Пробовал на типовой 11.1.2.31. Есл она не стоит то все проходит нормально.
33. Сергей Марченко (MarSeN) 21.04.14 09:12
(32) Himik861,
Форма обработки QuickSearch - не 100% рабочий вариант. Об этом написано в статье.
UE предоставляет Вам возможность организовать поиск. Вам надо самим написать-допилить безбажный код.
34. Андрей (AKV77) 03.09.15 11:41
Автор, указывайте что ваша разработка требует лицензию ! Тратить стартмани на просмотр окошка не есть хорошо !
35. Сергей Марченко (MarSeN) 03.09.15 15:55
(34) AKV77,
Согласен, не хорошо.
напишите в личку или на почту s.marchenko77 собака mail ру и я вам вышлю актуальную лицензию.
36. Алексей Олешко (retif) 16.03.16 00:39
37. Алексей Олешко (retif) 16.03.16 00:41
а строки в ТЧ тоже копирует и вставляет?
38. Сергей Марченко (MarSeN) 16.03.16 10:13
(37) retif,
В примере копирования через буфер обмена этого нет.
UE, это механизм, который дает вам возможность сделать копирование строчек документа.
Для написания сообщения необходимо авторизоваться
Прикрепить файл
Дополнительные параметры ответа