Layer not visible

I have a L&L29 report definition that defines 4 layers. As far as I can see in the designer everything looks correct. However, when I run the report, two of the layers do not print.
Debwin4 reports the problem as:
“Not painted, reason(s): layer 2 not visible”
What does that mean? I can find nothing in the documentation about making layers visible (other than in the designer itself, of course).

Hi Peter,

Welcome to our community!

Using four layers means you have defined them by your own. Then the question is, what are the conditions of each layer and can they really happend - e.g. the conditions are pending on the pages of the report, but your data does not produce a report with such pages the layer could become active.

Hi Oliver,

Thank you for your prompt response.
The layers are selected by setting the variable OTHER.Layer = 1,2,3 or 4.
However, OTHER.layer 2 and 3 are set by a field in the incoming data records. This has worked in earlier versions of L&L. Perhaps L&L29 needs to know the layer to use before the data starts arriving?

I cannot define what are the variables in OTHER.Layer are and what are their defined conditions - seems to be application specified. But as I know e.g. is, so-called user variables are not allowed to use as condition for layers - see also Defining Layers.

In which version of List & Label your scenario works before using List & Label in version 29?

Thanks Oliver,
The mechanism we use is:
We define a set of OTHER variables and fields in L&L. One of these is is called OTHER.Layer.
We set the values of these variables in L&L using: lldefinevariableExt
We set use conditions for the layers:
Layer 1, condition = OTHER.Layer1 etc.
Then during the print run we manipulate the layer to use by changing the content of OTHER.Layer.
This whole project has emerged as a requirement to upgrade all the tools used to generate a legacy application. So the L&L version where this all works is L&L11! Yes, I know . . .
But as I have mentioned L&L29 understands OTHER.Layer = 1 and OTHER.Layer = 4.
OTHER.Layer = 2 and = 3 are set in a slightly different way as described in my last post.

Yeaha… version 11… But from the current point of view I would first try to create a Log with the Debugging Tool Debwin4. Maybe you can see there any interesting outputs for all your LlDefineVariableExt() calls with the mentioned variable OTHER.Layer if its updated as expected with the expected value. And often you can see within the Log outputs like them to identify the reason:

...
>OBJSTATE(<ObjectNameInDesigner>): WAITINGFORPRINT
Text({1FE59FF8-FD92-4C28-8BE8-52BDA32B9E45} ('clsObject::Draw()::!bPaint')): IDLE COUNTER -> 1
 not painted, reason(s): layer 2 not visible
<OBJSTATE(<ObjectNameInDesigner>): WAITINGFORPRINT
...

Maybe also the timing of updating the variable-contents could be the reason.

Thanks again.
I can do that analysis of the LlDefineVariableExt() calls in the Debwin4 log.
But it looks like L&L does know something about layer 2 because it says:
“Not painted, reason(s): layer 2 not visible”
Is it possible to say what are the conditions in L&L that trigger that not visible log entry?

I would say this message says, the evaluation of the condition of that layer results into false = not visible.

You can try to check all conditions of all your layers by placing their conditions to a simple text object (assigned to the base layer) to check the evaluated expressions at printing time.

Thank you aagain and thank you for your patience.
We are confident of the layer conditions as, remember, this report runs successfully in LL11.
However, using exactly the same code our side and the same .LST file (now read in by LL29, and looking fine in the Designer), the report fails.
We are pretty sure we understand why. But we don’t know how to fix it!
The file of records we are sending to L&L has a ‘general’ row layout. I.e. it just comprises of columns named Co1, Col2, Col3 etc. Also, crucially, each row is given a Layer Number. So there can be 20 rows marked as Layer1, 50 rows marked as Layer2 etc. The file is sent in Layer Number order.
In LL11 we simply set the L&L OTHER.Layer variable as equal to our Layer Number.
L&L detected changes in the Layer Number via OTHER.Layer and then selected/used the appropriate Layer to format the record contents for that Layer.
Surprisingly, LL29 does appear able to do this.
We have adjusted our code to set OTHER.Layer prior to sending the records for that Layer but this does not seem to work. I can’t even see the assignment setting OTHER.LAYER to, say, 2 in Debwin.
So we are stuck!

I think this could be handled better by our support team. Would it be feasible to send an app that repros the issue? From your last post, it might have to do with the usage check for identifiers (as this would result in the declaration of vars not showing up at all in the log file), however this is just an educated guess. Once we got this sorted out you could return here and follow up with the solution.

We have eventually identified the problem (there is a change of behavious between LL1 and LL29).
After making code changes our side to adjust for this, the report is running now.
If you want feedback on our findings, we should probably use another thread.
We really do appreciate the positive responses we have received in this forum.
Thank you!

2 Likes