Групповое изменение реквизитов объектов расширений

07.11.20

Разработка - Механизмы платформы 1С

Доработка встроенной обработки "Групповое изменение реквизитов" для возможности изменения ссылочных реквизитов с ссылками на объекты расширения. Работает в Комплексной конфигурации 2.4.

Началось все как всегда с малого.

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

И все было бы хорошо, если бы эти объекты не стали плодиться как... ну дальше понятно все )

И вот однажды понадобилось нам изменить объекты за период. Ну способ то известный: Администрирование - Обслуживание - Корректировка данных - Групповое изменение реквизитов.

А не тут то было. Не видит обработка типы наших объектов. Не видит по причине отсутствия таковых в ТипВсеСсылки().

Пришлось взять напильник и...  все описание взято из реально работающего расширения, в котором присутствуют 2 новых объекта метаданных:

  1. Перечисление.ПРП_СтатусыПропусков

  2. Справочник ПРП_РеестрПропусков с реквизитом статус с типом - ПеречислениеСсылка.ПРП_СтатусыПропусков

 

   

Что и как было сделано:

1. в расширение была "затянута" основная форма обработки ГрупповоеИзменениеРеквизитов,

и добавлен реквизит этой формы: РеквизитыОбъекта (таблица значений).

В этой таблице был изменен тип колонки Значение на Произвольный.

   

 

2. в модуль формы были добавлены 4 функции, обрабатывающие типы значений:

   

 
ВидОбъектаПоТипу() 
 
ЭтоСсылка() 
 
ЗначениеСсылочногоТипа() 
&НаСервереБезКонтекста
&Вместо("ЗначениеСсылочногоТипа")
Функция ПРП_ЗначениеСсылочногоТипа(Значение)
	Возврат Значение <> Неопределено И ПРП_ЭтоСсылка(ТипЗнч(Значение));
КонецФункции

 

 
СтроковоеПредставлениеТипа()

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

 

3. Кроме того, в модуле объекта все той же обработки были изменены еще две функции

   

 
ВидОбъектаПоТипу()
 
ЗначениеСсылочногоТипа() 

И здесь функции были добавлены с типом вызова &Вместо.

 

Больше никаких изменений не потребовалось, и обработка "увидела" наши объекты.

Причем если у вас несколько расширений, то можно сделать это в каждом из них, для собственных объектов этих самых расширений. И оно будет работать... проверено.

Все это делалось на КА-2.4, не проверял, но думаю что на УТ11 и ERP2 тоже будет работать

Обработка реквизитов Групповое изменение

См. также

Сервисы интеграции без Шины и интеграции

Механизмы платформы 1С Программист Стажер Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

Пример использования «Сервисов интеграции» без подключения к Шине и без обменов.

13.03.2024    3212    dsdred    16    

65

Как готовить и есть массивы

Механизмы платформы 1С Программист Стажер Платформа 1С v8.3 Бесплатно (free)

Все мы используем массивы в своем коде. Это один из первых объектов, который дают ученикам при прохождении обучения программированию. Но умеем ли мы ими пользоваться? В этой статье я хочу показать все методы массива, а также некоторые фишки в работе с массивами.

24.01.2024    7498    YA_418728146    25    

69

Планы обмена VS История данных

Перенос данных 1C Механизмы платформы 1С Системный администратор Программист Стажер Платформа 1С v8.3 Бесплатно (free)

Вы все еще регистрируете изменения только на Планах обмена и Регистрах сведений?

11.12.2023    7745    dsdred    36    

115

1С-ная магия

Механизмы платформы 1С Программист Бесплатно (free)

Язык программирования 1С содержит много нюансов и особенностей, которые могут приводить к неожиданным для разработчика результатам. Сталкиваясь с ними, программист начинает лучше понимать логику платформы, а значит, быстрее выявлять ошибки и видеть потенциальные узкие места своего кода там, где позже можно было бы ещё долго медитировать с отладчиком в поисках источника проблемы. Мы рассмотрим разные примеры поведения кода 1С. Разберём результаты выполнения и ответим на вопросы «Почему?», «Как же так?» и «Зачем нам это знать?». 

06.10.2023    20103    SeiOkami    46    

124

Дефрагментация и реиндексация после перехода на платформу 8.3.22

Механизмы платформы 1С Системный администратор Платформа 1С v8.3 Бесплатно (free)

Начиная с версии платформы 8.3.22 1С снимает стандартные блокировки БД на уровне страниц. Делаем рабочий скрипт, как раньше.

14.09.2023    14035    human_new    27    

77

Валидация JSON через XDTO (включая массивы)

WEB-интеграция Универсальные функции Механизмы платформы 1С Программист Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

При работе с интеграциями рано или поздно придется столкнуться с получением JSON файлов. И, конечно же, жизнь заставит проверять файлы перед тем, как записывать данные в БД.

28.08.2023    10391    YA_418728146    7    

148

Внешние компоненты Native API на языке Rust - Просто!

Механизмы платформы 1С Программист Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

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

20.08.2023    7009    sebekerga    54    

99
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. RustIG 1643 07.11.20 16:19 Сейчас в теме
(0) молодцы! рабочий инструмент описали.
только укажите еще какая версия платформы (обычно без этой информации статью не допускают до публикации)
2. Alfn 60 07.11.20 16:21 Сейчас в теме
да любая, с которой работает КА-2
3. chg 08.11.20 09:12 Сейчас в теме
(2)ну тогда и ERP, разница незначительна для расширений
4. pr_woland 01.12.20 08:58 Сейчас в теме
Как Вы поменяли тип колонки таблицы значений в расширении формы? (пункт 1). У меня расширение не дает изменять тип... Платформа 8.3.17.1549
5. Alfn 60 01.12.20 10:37 Сейчас в теме
(4) выделил реквизит и нажал кнопку "Добавить в расширение"
Прикрепленные файлы:
6. pr_woland 02.12.20 07:58 Сейчас в теме
(5) Реквизит "РеквизитыОбъекта" (таблица значений) и его колонки добавились без проблем, но изменить тип колонки "Значение" невозможно (кнопки в окне выбора типов неактивны). Хотя изменить тип самого реквизита формы "РеквизитыОбъекта" можно. Видимо, это баг платформы, потому что я сталкивался с похожей ситуацией раньше... Короче, решил добавлением нужного мне объекта расширения в ОписаниеТипов этого реквизита. Написал в модуле формы:


&НаСервере
Процедура БКР_ПриСозданииНаСервереПосле(Отказ, СтандартнаяОбработка)
	МассивРеквизитов = ЭтаФорма.ПолучитьРеквизиты("РеквизитыОбъекта");
	Для Каждого ОчереднойРеквизит Из МассивРеквизитов Цикл
		Если ОчереднойРеквизит.Имя <> "Значение" Тогда
			Продолжить;
		Иначе
			РасширенныеТипы = Новый ОписаниеТипов(ОчереднойРеквизит.ТипЗначения, "СправочникСсылка.БК_ОстаткиПоБанковскимВыпискам");
			ОчереднойРеквизит.ТипЗначения = РасширенныеТипы;
			Прервать;
		КонецЕсли;
	КонецЦикла;
	
КонецПроцедуры
Показать



Это на заметку тем, кто с такой же проблемой столкнётся.
igor-gtc; +1 Ответить
7. un2qum 6 18.01.21 08:25 Сейчас в теме
(6)

Это на заметку тем, кто с такой же проблемой столкнётся.

Попробывал, тип добавился. Но при присвоении значения преобразуется к строка.
(8.3.15.1778) ут 11.4.6.207
8. pr_woland 18.01.21 09:11 Сейчас в теме
(7) А все остальные пункты сделали? Мне кажется, в модуле объекта что-то забыли (или неправильно работает). Проверьте процедуры ВидОбъектаПоТипу и ЗначениеСсылочногоТипа
9. un2qum 6 18.01.21 14:46 Сейчас в теме
(8) Да нет, я проверил. суть в том что при таком указании типа как у вас, он меняется
в МассивРеквизитов
но в самом объекте остается тем же. если еще раз получить ПолучитьРеквизиты("РеквизитыОбъекта");
то будет видно что тип не указался. Кроме того возможности изменить тип используя функцию изменитьреквизиты тоже нет,
потом что она не может удалить реквизиты созданные не программно
10. pr_woland 19.01.21 03:00 Сейчас в теме
(9) Видимо, это глюк платформы =( Я уже не раз сталкивался с тем, что в расширении много проблем именно с формами - в частности, с реквизитами...
15. Varozh 27.05.23 15:07 Сейчас в теме
(6) Так не работает, тип значения у реквизита остается прежний. В интерфейсе выбрать свой по-прежнему не удается. Если заново вызвать метод ПолучитьРеквизиты() после вашего кода, то можно увидеть, что тип значения у реквизита "Значение" остался прежний.
11. igor-gtc 21.01.21 14:29 Сейчас в теме
1С:Предприятие 8.3 (8.3.17.1851)
Бухгалтерия предприятия КОРП, редакция 3.0 (3.0.87.28)
Для тех кому по каким-либо причинам не подходит данное решение могу сказать свое- просто выгрузить обработку как внешнюю и в таблице "РеквизитыОбъекта " изменить тип колонки Значение на Произвольный.
Проверено- работает.
Автору статьи огромное спасибо.
12. o6opkot 14 08.09.21 14:12 Сейчас в теме
У меня тоже платформа не даёт изменить тип колонки "Значение" в "РеквизитыОбъекта". Проблему решил не заимствованием таблицы значений, а созданием на заимствованной форме нового реквизита с типом "Таблица значений" с именем "РеквизитыОбъекта". В него уже добавил колонку реквизита "Значение" с типом "Произвольный". После этого всё заработало.
Прикрепленные файлы:
user2041726; asdPerepel; +2 Ответить
13. check2 365 04.12.21 14:17 Сейчас в теме
Здравствуйте!

Мне хватило в модуле объекта - обработки написать так:
#Если Сервер Или ТолстыйКлиентОбычноеПриложение Тогда

&ИзменениеИКонтроль("ВидОбъектаПоТипу")
Функция GLI_ВидОбъектаПоТипу(Тип) Экспорт
	
#Удаление
	Если Справочники.ТипВсеСсылки().СодержитТип(Тип) Тогда
		Возврат "Справочник";
	
	ИначеЕсли Документы.ТипВсеСсылки().СодержитТип(Тип) Тогда
		Возврат "Документ";
	
	ИначеЕсли БизнесПроцессы.ТипВсеСсылки().СодержитТип(Тип) Тогда
		Возврат "БизнесПроцесс";
	
	ИначеЕсли ПланыВидовХарактеристик.ТипВсеСсылки().СодержитТип(Тип) Тогда
		Возврат "ПланВидовХарактеристик";
	
	ИначеЕсли ПланыСчетов.ТипВсеСсылки().СодержитТип(Тип) Тогда
		Возврат "ПланСчетов";
	
	ИначеЕсли ПланыВидовРасчета.ТипВсеСсылки().СодержитТип(Тип) Тогда
		Возврат "ПланВидовРасчета";
	
	ИначеЕсли Задачи.ТипВсеСсылки().СодержитТип(Тип) Тогда
		Возврат "Задача";
	
	ИначеЕсли ПланыОбмена.ТипВсеСсылки().СодержитТип(Тип) Тогда
		Возврат "ПланОбмена";
	
	ИначеЕсли Перечисления.ТипВсеСсылки().СодержитТип(Тип) Тогда
		Возврат "Перечисление";
	
	Иначе
		ВызватьИсключение ПодставитьПараметрыВСтроку(НСтр("ru = 'Неверный тип значения параметра (%1)'"), Строка(Тип));
	
	КонецЕсли;
#КонецУдаления
#Вставка
	XMLИмяТипа = XMLТип(Тип).ИмяТипа;
	ИмяКлассаМетаданных = СтрРазделить(XMLИмяТипа, ".")[0];
	
	Если ИмяКлассаМетаданных = "CatalogRef" Тогда
	    Возврат "Справочник";    
	ИначеЕсли ИмяКлассаМетаданных = "ChartOfAccountsRef" Тогда
	    Возврат "ПланСчетов"
	ИначеЕсли ИмяКлассаМетаданных = "ChartOfCharacteristicTypesRef" Тогда
	    Возврат "ПланВидовХарактеристик"
	ИначеЕсли ИмяКлассаМетаданных = "BusinessProcessRef" Тогда
	    Возврат "БизнесПроцесс"
	ИначеЕсли ИмяКлассаМетаданных = "TaskRef" Тогда
	    Возврат "Задача"    
	ИначеЕсли ИмяКлассаМетаданных = "ChartOfCalculationTypesRef" Тогда
	    Возврат "ПланВидовРасчета"
	ИначеЕсли ИмяКлассаМетаданных = "DocumentRef" Тогда
	    Возврат "Документ"
	ИначеЕсли ИмяКлассаМетаданных = "EnumRef" Тогда
		Возврат "Перечисление"
	ИначеЕсли ИмяКлассаМетаданных = "ExchangePlanRef" Тогда
		Возврат "ПланОбмена"
	Иначе
		ВызватьИсключение ПодставитьПараметрыВСтроку(НСтр("ru = 'Неверный тип значения параметра (%1)'"), Строка(Тип));
	КонецЕсли;

#КонецВставки	
КонецФункции

#КонецЕсли
Показать


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

В любом случае огромное спасибо автору, за сэкономленное время за идею решения проблемы.
BarsukM; user728942; buy_sale; +3 Ответить
14. buy_sale 220 22.12.21 17:41 Сейчас в теме
Спасибо за рабочее решение !
16. user2041726 08.02.24 09:10 Сейчас в теме
Подскажите пожалуйста! В документе есть реквизит ссылочного типа на справочник, но когда пытаешься обработкой изменить выделенные в форме списка, обработка реквизит видит, а там справа напротив реквизита в поле "Новое значение" нет этого справочника в списке.
17. user2041726 09.02.24 15:33 Сейчас в теме
(16) Проблема была в том, что не менялся тип реквизита Значение. Сделал как в (12), все заработало! Спасибо!
Оставьте свое сообщение