скрыть Embeddedview с ответными документами

  • Автор темы Автор темы Klido
  • Дата начала Дата начала
K

Klido

Обычное дело - внедренная вьюха, показывающая ответы к данному документу (ктагоризация по униду, шоу сингл категория).
Что-то с утра в понедельник :rolleyes: не пойму как скрыть её, если нет ни единого ответа. Для простого случая через @DbColumn работает нормально скрытие, но тут-то во вьюхе будут ответы и на другие документы и формула вроде
@If(@Elements(@Dbcolumn("":NoCashe;"":"";"EmbeddedViewName";1))=0;"0";"1")
не отработает корректно...
Можно ли скрыть и куда копнуть?
 
Там должен быть @DbLookup по той же SingleCategory, по который ты ограничиваешь embedded view.
В данный момент времени у тебя возвратится 0 только если вообще ни одного документа из эмбеднутых не существует.

Ну и кагбэ не NoCashe, а NoCaсhe

И вообще тут можно не делать @If
А просто в HideFormula написать
Код:
@Elements(@DbLookup(...)) = 0

И текущую базу в @DbColumn/@DbLookup лучше отдавать не через "":"", а просто через ""
Подробности .
 
А просто в HideFormula написать
ага, спсб, как-то не подумал, что так проще :rolleyes: правда там ещё текст хотелось бы скрывать, одновременно с вьюхой, но это мелочи...
тем не менее упрощенная формула прямо на вьюхе
Код:
@Elements(@DbColumn("":NoCaсhe;"";"EmbeddedViewName";1))=0
не дает результата - вьюха видна всегда, даже в новом документе...
SingleCategory, понятно, в первом столбце (скрытом). Пробовал и по 2-му лукапить - тот же эффект, т.е. не хочет работать...
Что ещё может быть?

Добавлено:
а где проверка на ошибку?
о, вот это сегодня меня плющит :) наверняка из-за этого не идёт...
 
спсб всем - немного отвлекли от темы, но...

формула сокрытия внедренной вьюхи (показывает ответы текущего документа)
Код:
@Elements(@DbLookup("":NoCaсhe;"";"EmbeddedViewName";@Text(@DocumentUniqueID);2;[FailSilent]))=0
обновление индекса вьюхи - автоматическое

работает через раз :newconfus: для контроля вывел в вычислемое поле формы значение этой формулы...

создаём документ - вьюха скрыта, @elements показывает 0
создаём респонс, сохраняем его, документ, закрываем, открываем руками - вьюха скрыта, @elements показывает 0 (респонсы явно видны при просмотре вьюхи или снятия сокрытия с внедренной)

пересохраняем документ несколько раз, добавляем ответы и пр. - в какой-то момент ррраз и вьюха видна, @elements показывает правильное значение кол-ва респонсов...

удаляем респонсы - вьюха скрыта, @elements показывают старое значение, иногда элементы=0, а вьюха с респонсами показана...

менял обновление индекса на auto, aftеr first use - работает сразу после переоткрытия базы - вьюха показывается, а элементы могут быть 0
пробовал ReCache, явно убивал и перестраивал индекс вьюхи - нестабильно по-прежнему... это 8.5.1...

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

может ещё какой ньюанс есть с сокрытием внедренной вьюхи со скрытой категоризацией по @DocumentUniqueID?
 
Для начала NoCaсhe - в ковычки по синтаксису.
Может в этом дело? :nomat:
 
Вообще странно, у меня точно такая же конструкция работает нормально.
Я поставил ReCache, правда я нахдясь в форме не добавляю/удаляю респонсы.

Но в других базах есть такая функиональность, что респонсы удаляются/добавляются при открытом доке.
Там сделано, что это возможно только про uidoc.EditMode = True и после каждого добавления/удаления стоит uidoc.Refresh.
Работает стабильно.

Теоретически, я бы сам не делал ограничение на uidoc.EditMode, а сделал бы кнопку доступную всегда + uidoc.RefreshHideFormulas
 
респонсы удаляются/добавляются при открытом доке
у меня хотспот доступен только в режиме редактирования и после создания респонса, конечно, рефреш есть... но работать вот не желает, хотя остальное всё перестраивается, в т.ч. и ещё одна внедренная вьюха видимость меняет по другим флагам....
 
А попробовать еще с вьюху рефрешить после создания респонса?
Нечто подобное:
Код:
'refresh embedded view
Call evview.Refresh()
Call w.ViewRefresh
Call uidoc.RefreshHideFormulas
Правда, если вьюха тяжелая - тормоза ;)
 
OKEN
Call w.ViewRefresh
этого + автоматик в индексе вида чаще всего достаточно
 
ToxaRat
Тут я спросить не буду. В большинстве случаев так и делаем.
Но в одном тяжелом случае с вьюхой, обновляемой "Auto, after first use" и пересчетом кнопок помогла именно подобная конструкция. (Хз, мож просто глючил ViewRefresh - давно проверяли. Сейчас заново с Automatic тестить влом)
 
А попробовать еще с вьюху рефрешить после создания респонса?

неделя эпизодической борьбы с отображением скрытой вьюхи не принесла 100%-го результата..
на данный момент ситуация такая - в контексте поста 7:

внедренная вьюха по сингл-категории родителя скрыта формулой
Код:
@Elements(@DbLookup("":"ReCaсhe";"";"EmbeddedViewName";@Text(@DocumentUniqueID);2;[FailSilent]))=0

при новом доке вьюха скрыта - всё ОК

в режиме редактирования хотспот выполняет код
'всякие действия
Код:
Call ws.CurrentDocument.Save()
Call ws.currentdocument.Close(True)
Delete ND
Set ND = ns.currentdatabase.GetDocumentByID(noteID)
'вызов агента по созданию респонсов
If agent.Run(ND.NoteID) = 0 Then
'всякое-разное
Call ND.Sign()
Call ND.save(True,False)
Call ws.Editdocument(True, ND)
'применяем в разных комбинациях и последовательности обновления какие есть, т.к. переоткрытие не спасет...
Call ws.ViewRefresh
Call ws.CurrentDocument.RefreshHideFormulas
Call ws.CurrentDocument.Refresh
'и даже
Call ws.ReloadWindow
End If

в агенте на всякий пожарный ещё и явно бэквью рефрешу перед выходом
Код:
Set nv=s.Currentdatabase.Getview("EmbeddedViewName")
Call nv.Refresh()

в итоге имеем 1 или более респонсов (сразу видны во вьюхе, если её не скрывать), но формула сокрытия не отрабатывает и вьюха не видна...

пересохранения, переоткрытия в какой-то момент дают эффект, но зависимость не ощущается...
чаще всего вьюха показывается даже после перовой операции сохранения, если полностью перезапустить клиента и войти под другим пользователем...
какой-то дикий кэш? или опять я каких-нибудь кавычек не поставил куда надо?? :) сокрытие вьюхи не даёт мне покоя ;) как же заставить отрабатывать нормально...
 
ДБлукап этот в поле запихните и посмотрите что в каком случае получается. После отладки этой части уже можно идти дальше.

Можно вместо ReCache попробовать NoCache кстати.
 
Можно вместо ReCache попробовать NoCache кстати.
так было сначала, результат тот же

ДБлукап этот в поле запихните и посмотрите что в каком случае получается
выше в топике есть эта инфа - в поле чаще всего 0, но в какой-то момент положительное значение (не обязательно совпадает с кол-ом респонсов...) и тогда срабатывает как раз формула сокрытия...

После отладки этой части
в том и дело, что не выходит :please: стал бы я тут постить, если б не уткнулся в непонятки....
 
Может по правам что-нить?
Респонсы с Ридер полями генерятся?
Должно всё работать...

Может у тебя локальная реплика, а генеришь серверным агентом?

Там у тебя, конечно, жестковато написано: сохранение, закрытие, запуск на документе агента, подпись, сохранение, открытие.
Нельзя это дело как-то упростить?
 
Может по правам что-нить?
а админ со всеми правами и пр. ладно бы под остальными не работало...

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

Может у тебя локальная реплика, а генеришь серверным агентом?
не, ну это я бы заметил, да и реплик нет вообще - один экземпляр на сервере...

ам у тебя, конечно, жестковато написано: сохранение, закрытие, запуск на документе агента, подпись, сохранение, открытие.
Нельзя это дело как-то упростить?

начал-то с простого, добавилось остальное по факту борьбы....

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

упростить хотелось бы, но пока не получается даже так..

Делов-то всего - в доке с аттачем заменить аттач новой версией, а старый сохранить в респонсе и показать во внедренной вьюхе, которая скрыта, если респонсов нет....
 
На правах идеи.

1. Лучше всего вычисляемое поле с формулой вверху формы + рефрэш дока при изменениях - должно корректно скрывать/отображать.
Но это если действия из дока производятся, а не из вьюхи. Из вьюхи при рэфрэше 8.5.1 клиент крашится, как и раньше - я проверял; похоже исправлять это не собираются.

2. Можно попробовать внедрённую вьюху засунуть в секцию и скрывать по формуле секцию.
По крайней мере её можно программно свернуть! и вьюха будет не видна.
Цвет текста секции и "треугольничек" подобрать под цвет фона формы чтобы их не было видно - я так OLE-объекты скрывал.

Если не заработает, то переоткрывать док - я так под 6.x.x делал, т.к. тогда ничего с этим не вышло...
 
Мы в соцсетях:

Взломай свой первый сервер и прокачай скилл — Начни игру на HackerLab