|
1C:Fresh. Обновление областей | ☑ | ||
---|---|---|---|---|
0
lucifer
14.04.15
✎
11:12
|
Люди сталкивающиеся с фрешом, как там обновлять клиентские области данных? Мне деже больше интересует как сделать что бы скрипты обновления отрабатывали в каждой области данных.
В книге "Технология публикации решений 1C Fresh" есть данная инфа (140 стр.), только там все так просто, фигак фигак, тут создали, тут сохранили и у вас все работает, но реальность не такая сладкая как в книге написано. Немного пожалуюсь тут на 1С'ников что конфу "Менеджер сервиса" писали. // начало жалоб Не хилый такой запросик (в конце поста выложу), есть внутреннее соединение, но почему-то автор запроса был уверен что одна строка полюбе будет ) Запрос.Выполнить().Выгрузить()[0]; Как оказалось фигушки ), если не создан агент сервиса, мы получаем ошибку «индекс элемента находится за границами» и главное этот агент сервиса вовсе и не обязателен, т.е. никто не где не требовал вводить его. И в процедуре нет бы проверить есть ли агент сервиса рас уж к этой таблице делается внутреннее соединение. Дальше - больше, мастер создания обновления создан так, при каждом нажатии на кнопку далее инкрементируется некий счетчик что бы понять на каком мы сейчас этапе, доходим до конца мастера, сохраняем настройки, получаем ошибку «индекс элемента находится за границами», при следующих нажатиях получаем ошибку «Не определена страница для отображения» т.к. счетчик продолжает инкрементироваться при каждом нажатии, получается при любой ошибке мы ее видим ровно 1 раз, все остальное время мы наблюдаем «Не определена страница для отображения» Слов нет, одни эмоции. И вообще при ошибке приходится все закрывать и создавать новый элемент. // конец жалоб Ну ок, поигравшись с отладчиков в конфигураторе, причину установил (потому как без конфигуратора причину установить не реально, если конечно ты не Ванга), создал агент сервиса, тут появилась новая страшная ошибка "{ОбщийМодуль.АгентСервиса.Модуль(196)}: Не удалось выполнить трансляцию типа {http://www.1c.ru/1cFresh/agent/scripts/1.0.0.2}UpdateFile в версию, поддерживаемую агентом сервиса "имя агента"(ссылка 575b3665-e203-11e4-8bfa-0050569f78e2, URL подключения http://***:8888/***) - не обнаружено совместимых версий для интерфейса AgentScripts! ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(" Взяв в руки отладчик полез по просторам типовой конфы, правда заблудился тут же. Там почему-то получаются какие-то версии интерфейсов из регистра КэшПрограммныхИнтерфейсов, как говорил классик "wtf"© Я ж конфу добавляю в справочник "ВерсииКонфигураций", причем тут КэшПрограммныхИнтерфейсов и как он завязан на обновлении, т.е. накручина какая-то логика в книге о какой не слово, и в нете прям ооочень нет инфы по фрешу. Что делать подскажете? Запрос: Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | ИнформационныеБазы.Кластер.Порт КАК ПортКластера, | ЕСТЬNULL(АдмнистраторыКластера.Имя, """") КАК АдминистраторКластера, | ЕСТЬNULL(АдмнистраторыКластера.Пароль, """") КАК ПарольАдминистратораКластера, | ИнформационныеБазы.НаПоддержке КАК НаПоддержке, | ИнформационныеБазы.ИмяВКластере КАК ИмяВКластере, | ЕСТЬNULL(АдминистраторыИБ.Имя, """") КАК АдминистраторИБ, | ЕСТЬNULL(АдминистраторыИБ.Пароль, """") КАК ПарольАдминистратораИБ, | ИнформационныеБазыАгентовСервиса.КонечнаяТочка КАК КонечнаяТочка, | ИнформационныеБазы.Кластер.СпособПодключения КАК СпособПодключения, | ЕСТЬNULL(ИнформационныеБазы.Кластер.ЦентральныйСервер.Адрес, """") КАК АдресСервера, | ЕСТЬNULL(ИнформационныеБазы.Кластер.ЦентральныйСервер.Порт, 0) КАК ПортСервера, | ЕСТЬNULL(ИнформационныеБазы.Кластер.СерверАдминистрирования.Адрес, """") КАК АдресСервераАдминистрирования, | ЕСТЬNULL(ИнформационныеБазы.Кластер.СерверАдминистрирования.Порт, 0) КАК ПортСервераАдминистрирования, | АгентыСервиса.Ссылка КАК АгентСервиса |ИЗ | Справочник.ИнформационныеБазы КАК ИнформационныеБазы | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.УчетныеЗаписиАдминистрирования КАК АдмнистраторыКластера | ПО ИнформационныеБазы.Кластер = АдмнистраторыКластера.Объект | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.УчетныеЗаписиАдминистрирования КАК АдминистраторыИБ | ПО ИнформационныеБазы.Ссылка = АдминистраторыИБ.Объект | ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ИнформационныеБазы КАК ИнформационныеБазыАгентовСервиса | ПО ИнформационныеБазы.Кластер.Владелец = ИнформационныеБазыАгентовСервиса.Кластер.Владелец | И ИнформационныеБазы.Кластер.ВерсияПлатформы1СПредприятия = ИнформационныеБазыАгентовСервиса.Кластер.ВерсияПлатформы1СПредприятия | ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.АгентыСервиса КАК АгентыСервиса | ПО (ИнформационныеБазыАгентовСервиса.Ссылка = АгентыСервиса.ИнформационнаяБаза) |ГДЕ | ИнформационныеБазы.Ссылка = &ИнформационнаяБаза"; Запрос.УстановитьПараметр("ИнформационнаяБаза", ИнформационнаяБаза); Возврат Запрос.Выполнить().Выгрузить()[0]; |
|||
1
tridog
14.04.15
✎
12:08
|
(0) Если ничего не путаю - этот мастер обновления и прочие прелести жизни нужны тока если хочешь обновлять конфигурацию через как раз таки через этот агент.
Совершенно точно помню, что можно просто обновить конфигурацию конфигуратором, после чего разблокировать рег. задания и база сама начнет обновлять области (даже при временно выключенном менеджере сервиса). Тока после ручного обновления надо не забыть в менеджере поменять версию в справочнике баз, иначе были адовые глюки. >> Не хилый такой запросик (в конце поста выложу) Чтобы проникнуться сильнее - можешь посмотреть на запросы из ЗУПа, или на УТ11, там круче. >> И в процедуре нет бы проверить есть ли агент сервиса рас >> уж к этой таблице делается внутреннее соединение ЕМНИП - раньше этот визард даже не открывался, если нет агентов, ошибку кидал. |
|||
2
lucifer
14.04.15
✎
12:31
|
(1) "Совершенно точно помню, что можно просто обновить конфигурацию конфигуратором, после чего разблокировать рег. задания и база сама начнет обновлять области"
Нет, если после обновления конфы зайти в разделенную область 1С скажет, что нужно обновить конфигурацию (дословно ругань не помню) а обновить можно только зайдя под админом с выключенным разделением, обновление пройдет, только естественно разделеные данные не будут обновлены, логично т.к. мы ж не в области. В книге по фрешу (в (0) писал про нее) как раз написано что фреш выполняет обновление в каждой области, но вот только до этого дойти не как не получается. Я уж думал, что на крайняк влезу в БСПшный механиз обновлений, что бы при обновлении переключались области программно и скрипты выполнялись в каждой области |
|||
3
tridog
14.04.15
✎
12:53
|
(2) >> Нет, если после обновления конфы зайти в разделенную
>> область 1С скажет, что нужно обновить конфигурацию >> (дословно ругань не помню) Если область еще не обновлена - то да. Они не мгновенно обновляются, а по очереди, этим специальное рег. задание занимается. Я делал так: 1. Обновил через конфигуратор 2. Зашел в предприятие админом без разделителей 3. Разлочил рег. задания 4. Дождался пока обновится пара областей без ошибок 5. Через пару часов посмотрел, все ли обновилось Если кому из пользователей невтерпеж и он в область лезет - у него обновится при входе, "вперед очереди". Смотреть регистр ВерсииПодсистемОбластейДанных, журнал регистрации, и выполняется ли вообще это рег. задание, которое обновлять области должно. >> Я уж думал, что на крайняк влезу в БСПшный механиз >> обновлений, что бы при обновлении переключались области >> программно и скрипты выполнялись в каждой области Там это все есть уже, надо просто научиться пользоваться) |
|||
4
lucifer
14.04.15
✎
16:32
|
(3) нет такого регламентного, есть "ОбновлениеОбластейДанных" и вроде как задумывалось по всей видимости то что мне нужно, но
это в самой процедуре обработчик рег. задания // Вызов ПриНачалеВыполненияРегламентногоЗадания не используется, // т.к. необходимые действия выполняются в частном порядке. это в вызываемой ЗапланироватьОбновлениеОбластейДанных(Истина); Если ОбновлениеИнформационнойБазыСлужебный.НеобходимоВыполнитьОбновление(ВерсияМетаданных, ВерсияОбщихДанных) Тогда // Не выполнено обновление общих данных смысла планировать // обновление областей нет. Возврат; КонецЕсли; Короче проблемы сплошные. |
|||
5
tridog
14.04.15
✎
22:14
|
(4) >> есть "ОбновлениеОбластейДанных" и вроде как
>> задумывалось по всей видимости то что мне нужно Оно тебе и нужно. Припоминаю это место) После того, как ты обновишь базу конфигуратором - енто НеобходимоВыполнитьОбновление(ВерсияМетаданных, ВерсияОбщихДанных) будет возвращать Истина до тех пор, пока не запустишь один раз предприятие под неразделенным админом. При этом выполнится первая часть обновления, которая для общих данных. Вот после этого НеобходимоВыполнитьОбновление(ВерсияМетаданных, ВерсияОбщихДанных) станет возвращать Ложь, и рег. задание будет выполняться дальше этой проверки. Во всяком случае так было с год назад) |
|||
6
lucifer
16.04.15
✎
10:26
|
(5) так если обновление пройдет под админом в регистре ВерсииПодсистем версия станет текущая, а т.к. этот регистр не разделенный получается области уже не смогут обновиться т.к. версии метаданных и в регистре не будут отличаться.
Я все что тут написал транслировал на оф. форум https://partners.v8.1c.ru/forum/ там разработчики написали что фреш должен это делать, то о чем я писал в (0) и сослались на книгу, что я в (0) упоминал, только в жизне не работает не фига, они порекомендовали почистить записи в регистре КэшПрограммныхИнтерфейсов, еще не пробовал, но почему-то кажется сто не поможет ) |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |