0. t.v.s. 88 12.02.18 15:28 Сейчас в теме

Обновление конфигураций на БСП, у которых в расширениях есть собственные объекты с данными

Показан способ обновления конфигураций, основанных на БСП, в тех случаях, когда в расширениях имеются собственные объекты данных (Справочники, Документы, Регистры сведений, Планы обмена).

Перейти к публикации

Комментарии
Избранное Подписка Сортировка: Древо
1. kwazi 253 12.02.18 22:26 Сейчас в теме
какой режим совместимости у конфигурации?
2. t.v.s. 88 12.02.18 22:28 Сейчас в теме
(1)
"Не использовать", если у вас платформа 8.3.11;
"8.3.11", если у вас платформа 8.3.12
3. mitia.mackarevich 23 13.02.18 13:51 Сейчас в теме
Смотрите на версию БСП, раньше такая же проблема с ролями была. Прежде чем что то добавить в типовой на базе БСП, имеет смысл посмотреть какие типы объектов расширения она поддерживает (сама БСП). Для этого есть справочник "Идентификаторы объектов расширения" . Раньше такая проблема была с ролями, в 2.4 проблему решили. Поэтому эта проблема не новость
4. t.v.s. 88 13.02.18 13:58 Сейчас в теме
(3) Вы правы, что нужно смотреть какие возможности поддерживает БСП. Моя статья о том, что делать, когда "нельзя, но очень хочется"
5. Dmitriy_Kolesnikov 13.02.18 19:58 Сейчас в теме
Интересно, а в ИТС вы об этом писали? Разработчики в курсе?
6. t.v.s. 88 13.02.18 20:03 Сейчас в теме
(5)Я полагаю, что разработчики в курсе и с новых версиях БСП это будет исправлено
user676977_slkruto; +1 Ответить
7. user676977_slkruto 13.03.18 15:47 Сейчас в теме
Виктор, спасибо! Тоже столкнулся с такой ошибкой при обновлении. С этим расширением все прошло отлично!
8. zender911 15.03.18 17:41 Сейчас в теме
Заставить систему игнорировать наши объекты, для этого в модуле ИнтеграцияСТехнологиейСервиса есть процедура ПриОпределенииИсключенийНеразделенныхДанных

Так, а что конкретно прописали, можно поподробнее ?
9. t.v.s. 88 16.03.18 07:00 Сейчас в теме
(8)
&После("ПриОпределенииИсключенийНеразделенныхДанных")
Процедура Фикс_ПриОпределенииИсключенийНеразделенныхДанных(Исключения)
	
	//Раскомментировать Возврат, если используется разделение
	//Возврат;
	
	Если Метаданные.ЕстьИзмененияРасширениямиКонфигурации() Тогда
		//Справочники
		Для Каждого ОбъектМетаданных Из Метаданные.Справочники Цикл
			Расш = ОбъектМетаданных.РасширениеКонфигурации();
			Если Расш <> Неопределено Тогда
				Если ОбъектМетаданных.ПринадлежностьОбъекта = Метаданные.СвойстваОбъектов.ПринадлежностьОбъекта.Собственный Тогда
					Исключения.Добавить(ОбъектМетаданных);					
				КонецЕсли;
			КонецЕсли;
		КонецЦикла;
		//Регистры сведений
		Для Каждого ОбъектМетаданных Из Метаданные.РегистрыСведений Цикл
			Расш = ОбъектМетаданных.РасширениеКонфигурации();
			Если Расш <> Неопределено Тогда
				Если ОбъектМетаданных.ПринадлежностьОбъекта = Метаданные.СвойстваОбъектов.ПринадлежностьОбъекта.Собственный Тогда
					Исключения.Добавить(ОбъектМетаданных);
				КонецЕсли;
			КонецЕсли;
		КонецЦикла;
		//Документы
		Для Каждого ОбъектМетаданных Из Метаданные.Документы Цикл
			Расш = ОбъектМетаданных.РасширениеКонфигурации();
			Если Расш <> Неопределено Тогда
				Если ОбъектМетаданных.ПринадлежностьОбъекта = Метаданные.СвойстваОбъектов.ПринадлежностьОбъекта.Собственный Тогда
					Исключения.Добавить(ОбъектМетаданных);
				КонецЕсли;
			КонецЕсли;
		КонецЦикла;
		//Планы обмена
		Для Каждого ОбъектМетаданных Из Метаданные.ПланыОбмена Цикл
			Расш = ОбъектМетаданных.РасширениеКонфигурации();
			Если Расш <> Неопределено Тогда
				Если ОбъектМетаданных.ПринадлежностьОбъекта = Метаданные.СвойстваОбъектов.ПринадлежностьОбъекта.Собственный Тогда
					Исключения.Добавить(ОбъектМетаданных);
				КонецЕсли;
			КонецЕсли;
		КонецЦикла;
	КонецЕсли;

КонецПроцедуры
Показать
msergeev79; +1 Ответить
10. zender911 18.03.18 15:37 Сейчас в теме
Огромное спасибо, все получилось. Только один вопрос, ну это понятно, что не к вам, а к разработчикам. Получается все равно нужно править конфигурацию, а вроде как, этого мы хотели избежать с помощью расширений, ну может исправят в будущем...
11. t.v.s. 88 18.03.18 19:08 Сейчас в теме
(10) Ну теоретически можно и не править, расширением оно тоже работает.
Другое дело, что если вы хотите использовать новые возможности, то нужно режим совместимости у конфигурации менять. Но это меняет только корень, да и в последующем новые релизы будут штатно поддерживать 8.3.11
12. hanio 46 07.06.18 09:29 Сейчас в теме
Дорогой ты просто чудо сделал понимаешь? я думал все кранты моему расширению придется подождать обновления БСП в конфигурации ЗУП 3.1, потом накатить обновления и уже потом цеплять расширение. Но с твоим расширением все идентификаторы появились даже на моей версии БВСП 2.4.2.124. ТАК ДЕРЖАТЬ!!!
Новиков; +1 Ответить
13. hanio 46 07.06.18 10:07 Сейчас в теме
Виктор вы не забудете что там еще перечисления и прочее будет появляться я уже перешел на платформу 8.3.121440 из-за перечислений так что думаю надо свое расширение вам своевременно обновлять.
14. t.v.s. 88 07.06.18 15:01 Сейчас в теме
В ближайшем будущем проверю как дела с перечислениями, если что доделаю расширение. Мы на 8.3.12 перешли совсем недавно, месяца три назад
15. dinn 08.06.18 11:04 Сейчас в теме
Спасибо! Реально с расширениями пока как на минном поле, вроде с поддержки не снимаешь и должно быть меньше времени уходить, но функционал расширения всеравно приходится проверять и адаптировать под обновления конфигурации.
16. Brawler 404 09.06.18 12:19 Сейчас в теме
Я до такого сам дошел, однако не все проблемы это дело решает.

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

В БСП 3.Х ряд проблем 1С уже порешала давно, однако в типовых пока этой БСП не видел.
17. t.v.s. 88 09.06.18 13:10 Сейчас в теме
(16)
В БСП 3.Х ряд проблем 1С уже порешала давно, однако в типовых пока этой БСП не видел.

Есть стойкое ощущение, что мы БСП 3 еще не скоро увидим в типовых

Тогда приходится лезть и ломать эту проверку все так же редактируя типовыую.

Либо опять же перекрывать проверку в расширении.
18. Brawler 404 09.06.18 13:49 Сейчас в теме
(17) пытался, но видимо в ряде ситуаций перекрываемый код не хочет перекрываться при запуске системы, возможно это багофичи такие в платформе
25. АлександрЯрославичъ 28.06.18 10:09 Сейчас в теме
(17)
Есть стойкое ощущение, что мы БСП 3 еще не скоро увидим в типовых

Поддерживаю )))

(17)
Либо опять же перекрывать проверку в расширении.

Верно, у меня получилось
19. Brawler 404 14.06.18 19:26 Сейчас в теме
Придумали как обходить ошибки связанные со сменой режима совместимости с 8.3.10 на 8.3.12?
Например, если к примеру в ERP под юзером с правами маркетолога и манагера по продажам попытаться открыть справочник номенклатуры то ловится ошибка


{ОбщийМодуль.ПодборТоваровСервер.Модуль(2872)}: Поле объекта не обнаружено (ВидыНоменклатурыСоздать)
Форма.Элементы.ВидыНоменклатурыСоздать.Видимость = Ложь;


Я воспринимаю это как ошибку платформы, так как что-то не нашел в описании к платформе 8.3.12 такого нового поведения.

Суть того что происходит: В форме списка номенклатуры есть панель справа в которой можно осуществлять навигацию по иерархии папок или видов номенклатуры. В навигации по видам номенклатуры используется динамический список по справочнику ВидыНоменклатуры. В этом списке есть контекстное меню с добавленными разработчиками конфигурации вручную командами типа Создать, СоздатьГруппу... Команды самые стандартные, платформенные. В коде же разработчики конфы проверяют есть ли у юзера права на редактирование справочника ВидыНоменклатуры и если их нет, то программно прячут пункты контекстного меню. Но вот на 8.3.12 по видимому платформа стала сама прятать эти пункты меню со стандартными командами, если у юзера нет прав. В итоге имеем массу ошибок. Было дело думаю давай заглушек расширением наставлю, а оно то в одном месте, то в другом глюк, и сразу бросил это дело, так как так можно всю конфу заплатками облепить.
20. t.v.s. 88 14.06.18 19:47 Сейчас в теме
(19) Мы для себя решили не бороться с такими глюками, а просто подождать пока конфа "дорастет" до нужной версии платформы. В критичных местах нивелируем кодом типа.
&НаСервере
Процедура ПриСозданииНаСервереПеред(Отказ, СтандартнаяОбработка)
	
	// Добавление этих элементов необходимо для того, чтобы при выполнении штатного кода модуля "ПодборТоваровСервер"
	// не вываливалось с ошибкой об их отсутствии (функция "УстановитьСтраницуВариантаНавигации()" (2865))
	// при попытке открыть подбор номенклатуры под пользователем, у которого нет прав на изменение видов номенклатуры.
	Если Элементы.Найти("ВидыНоменклатурыСоздать") = Неопределено Тогда
		НовЭлемент = ЭтаФорма.Элементы.Добавить("ВидыНоменклатурыСоздать", Тип("КнопкаФормы"));
	КонецЕсли;
	Если Элементы.Найти("ВидыНоменклатурыСоздатьГруппу") = Неопределено Тогда
		НовЭлемент = ЭтаФорма.Элементы.Добавить("ВидыНоменклатурыСоздатьГруппу", Тип("КнопкаФормы"));
	КонецЕсли;
	Если Элементы.Найти("ВидыНоменклатурыИзменить") = Неопределено Тогда
		НовЭлемент = ЭтаФорма.Элементы.Добавить("ВидыНоменклатурыИзменить", Тип("КнопкаФормы"));
	КонецЕсли;
	Если Элементы.Найти("ВидыНоменклатурыСкопировать") = Неопределено Тогда
		НовЭлемент = ЭтаФорма.Элементы.Добавить("ВидыНоменклатурыСкопировать", Тип("КнопкаФормы"));
	КонецЕсли;
	Если Элементы.Найти("ВидыНоменклатурыУстановитьПометкуУдаления") = Неопределено Тогда
		НовЭлемент = ЭтаФорма.Элементы.Добавить("ВидыНоменклатурыУстановитьПометкуУдаления", Тип("КнопкаФормы"));
	КонецЕсли;
	Если Элементы.Найти("СоздатьВидНоменклатуры") = Неопределено Тогда
		НовЭлемент = ЭтаФорма.Элементы.Добавить("СоздатьВидНоменклатуры", Тип("КнопкаФормы"));
	КонецЕсли;
	Если Элементы.Найти("СоздатьГруппуВидовНоменклатуры") = Неопределено Тогда
		НовЭлемент = ЭтаФорма.Элементы.Добавить("СоздатьГруппуВидовНоменклатуры", Тип("КнопкаФормы"));
	КонецЕсли;
	Если Элементы.Найти("СоздатьГруппуНоменклатуры") = Неопределено Тогда
		НовЭлемент = ЭтаФорма.Элементы.Добавить("СоздатьГруппуНоменклатуры", Тип("КнопкаФормы"));
	КонецЕсли;
	
	Если Элементы.Найти("ИерархияНоменклатурыКонтекстноеМенюСоздатьГруппу") = Неопределено Тогда
		НовЭлемент = ЭтаФорма.Элементы.Добавить("ИерархияНоменклатурыКонтекстноеМенюСоздатьГруппу", Тип("КнопкаФормы"));
	КонецЕсли;
	Если Элементы.Найти("ИерархияНоменклатурыКонтекстноеМенюИзменить") = Неопределено Тогда
		НовЭлемент = ЭтаФорма.Элементы.Добавить("ИерархияНоменклатурыКонтекстноеМенюИзменить", Тип("КнопкаФормы"));
	КонецЕсли;
	Если Элементы.Найти("ИерархияНоменклатурыКонтекстноеМенюСкопировать") = Неопределено Тогда
		НовЭлемент = ЭтаФорма.Элементы.Добавить("ИерархияНоменклатурыКонтекстноеМенюСкопировать", Тип("КнопкаФормы"));
	КонецЕсли;
	Если Элементы.Найти("ИерархияНоменклатурыКонтекстноеМенюУстановитьПометкуУдалени­я") = Неопределено Тогда
		НовЭлемент = ЭтаФорма.Элементы.Добавить("ИерархияНоменклатурыКонтекстноеМенюУстановитьПометкуУдалени­я", Тип("КнопкаФормы"));
	КонецЕсли;
	
	Если Элементы.Найти("СписокСтандартныйПоискНоменклатураСоздать") = Неопределено Тогда
		НовЭлемент = ЭтаФорма.Элементы.Добавить("СписокСтандартныйПоискНоменклатураСоздать", Тип("КнопкаФормы"));
	КонецЕсли;
	Если Элементы.Найти("СписокСтандартныйПоискНоменклатураСкопировать") = Неопределено Тогда
		НовЭлемент = ЭтаФорма.Элементы.Добавить("СписокСтандартныйПоискНоменклатураСкопировать", Тип("КнопкаФормы"));
	КонецЕсли;
	Если Элементы.Найти("СписокСтандартныйПоискНоменклатураУстановитьПометкуУдаления­") = Неопределено Тогда
		НовЭлемент = ЭтаФорма.Элементы.Добавить("СписокСтандартныйПоискНоменклатураУстановитьПометкуУдаления­", Тип("КнопкаФормы"));
	КонецЕсли;
	Если Элементы.Найти("СписокРасширенныйПоискНоменклатураСоздать") = Неопределено Тогда
		НовЭлемент = ЭтаФорма.Элементы.Добавить("СписокРасширенныйПоискНоменклатураСоздать", Тип("КнопкаФормы"));
	КонецЕсли;
	Если Элементы.Найти("СписокРасширенныйПоискНоменклатураСкопировать") = Неопределено Тогда
		НовЭлемент = ЭтаФорма.Элементы.Добавить("СписокРасширенныйПоискНоменклатураСкопировать", Тип("КнопкаФормы"));
	КонецЕсли;
	Если Элементы.Найти("СписокРасширенныйПоискНоменклатураУстановитьПометкуУдаления­") = Неопределено Тогда
		НовЭлемент = ЭтаФорма.Элементы.Добавить("СписокРасширенныйПоискНоменклатураУстановитьПометкуУдаления­", Тип("КнопкаФормы"));
	КонецЕсли;
	
КонецПроцедуры
Показать

Костыль конечно, но городить что-то более основательное нет желания, потом все равно исправят
21. Brawler 404 14.06.18 20:46 Сейчас в теме
(20) ну да, временный компромисс
22. t.v.s. 88 14.06.18 20:52 Сейчас в теме
(21) А чтобы не городить такое в куче мест, можно перехватить процедуру ПриСозданииНаСервере из переопределяемого общего модуля. По крайней мере в УТ, КА и ERP 95% форм в него заходят. Весь код в одном месте будет и удалить потом легко
Grigoripal; +1 Ответить
23. Brawler 404 14.06.18 21:11 Сейчас в теме
(22) Идея понятна.
Если не секрет, какой объем затычек таким образом сделан?
В 1С не писали по этой фиче?
Может это реально косяк такой.
Хотя с другой стороны судя по тому количеству кода, что они пишут сейчас в типовой сами, наверное это их забадало и решили платформу научить делать скрытие кнопок самостоятельно.
24. АлександрЯрославичъ 28.06.18 10:01 Сейчас в теме
Спасибо Вам! Помогло данное решение.
26. Help Center 28.06.18 10:23 Сейчас в теме
27. wing 20 04.07.18 19:29 Сейчас в теме
А что делать, если все выше написанное не помогает? При обновлении все равно выдается сообщение об ошибке...
1С жалуется на справочник и регистр сведений.

В расширении перекрыт метод &После("ПриОпределенииИсключенийНеразделенныхДанных") модуля ИнтеграцияСТехнологиейСервиса, в менеджере справочника ИдентификаторыОбъектовМетаданных перекрыт &Вместо("СвойстваКоллекцийОбъектовМетаданных").
Чего ей ещё не хватает?
28. t.v.s. 88 04.07.18 21:06 Сейчас в теме
(27) Какая у вас версия платформы и режим совместимости? И скриншот ошибки было бы неплохо
29. wing 20 05.07.18 05:14 Сейчас в теме
(28) Да ошибка та же, что у вас в заголовке темы, только имена объектов другие: справочник и регистр сведений.
Платформа 8.3.11.3034, режим совместимости: не использовать. Конфигурация УП. Модифицированная псевдофранчами (судя по ужастному коду). Пытался обновить до версии 2.4.2.144. Но первый запуск после обновления вызывает "рекурсию": упомянутая выше ошибка с возможностью лишь выйти, перезапустить, или открыть обработку, т.е. обновление не завершается.
30. t.v.s. 88 05.07.18 06:34 Сейчас в теме
(29) А расширение вообще применилось? Снимите у него безопасный режим и защиту от опасных действий
31. wing 20 05.07.18 07:13 Сейчас в теме
(30) Спасибо большое. Поиграть с галками расширения не догадался. Самим расширением то пользуемся уже давно, т.е. оно не могло не примениться. Если б оно было новое, то проще было бы отключить, но данные терять не хочется...
32. wing 20 05.07.18 07:23 Сейчас в теме
Вопрос не совсем по статье, но тоже в тему расширений, вдруг уже были мысли: Как будет правильно настроить обновление данных при изменении версии расширения? Какие модули и функции стоит перекрыть, и как проверить сам факт изменения версии, чтобы вызвать нужные обработчики?

Ситуация на данный момент самая стандартная: производится перенос изменений из основной базы в расширение. Это должно вызвать и перенос данных в объекты расширения. Для каждого этапа ваять отдельную обработку переноса несколько нелогично. Корректнее было бы использовать типовой механизм обновления, но с опорой уже на версию расширения, а не подсистемы.
33. t.v.s. 88 05.07.18 07:28 Сейчас в теме
(32) Таким вопросом не задавался, но думаю стоит посмотреть как это сделано в БСП и перекрыть нужные методы
34. wing 20 06.07.18 09:50 Сейчас в теме
(33) Этот вопрос решил. там всего 2 модуля надо перекрыть и один добавить. Довольно просто.

Но при переносе объектов из конфы в расширение обнаружена серьезная проблема: Есть справочник, в котором есть только Наименование и еще один реквизит - строка без ограничений. Этот справочник невозможно открыть в 1С, - выдается ошибка "Отсутствует отображение для типа '<некий_guid>'". У справочника нет ни одной формы. Не понимаю, чего ему от меня надо...?
Еще хуже обстоит дело с регистром сведений, - выдается ошибка "Отсутствует отображение для типа '<некий_guid>'" и далее две кнопки: Закрыть или Перезапустить. Но у РС я догадываюсь о возможной причине: в одном из измерений используется перечисление, а перечисления в расширения добавлены только в 12 релизе. Будем думать, что это глюк именно 11 релиза...
Но почему простейший справочник нельзя создать в расширении? - это непонятно...
Да. Пробовал менять вид расширения, - не помогает (предположил, что новые объекты будут работать только в режиме "Дополнение").
Оставьте свое сообщение
Новые вопросы с вознаграждением
Автор темы объявил вознаграждение за найденный ответ, его получит тот, кто первый поможет автору.

Вакансии

Старший Программист 1С НОВОСИБИРСК
Новосибирск
зарплата до 130 000 руб.
Полный день

Программист 1С
Новосибирск
зарплата от 75 000 руб.
Полный день



Руководитель проектов 1С
Санкт-Петербург
По совместительству