Проблема (или ошибка), чья?!



Posted by Yuri Kravtsov on February 22, 2000 at 05:57:46:

Уважаемые господа!

Хотелось бы вернуться к проблеме, поднятой нашей компанией в сообщении "проблема несоответствия локальной и сетевой FBP", если это не вызовет шквал эмоций :-).
Внимательно изучив ответ Аркадия Водяника, а также "Руководство к сетевой версии", где описан вариант выхода из ситуации, мы создали новый фрагмент, который и хотелось бы обсудить.

Итак, исходные данные следующие:
1. Имеется план счетов, моделирующий новый украинский План счетов, а именно, имеются счета первого уровня (2-значные), в качестве субсчетов к ним выступают счета второго уровня (3-значные). Кроме того, введены внебалансовые счета, которые имеют обозначение, идентичное обозначению счетов второго уровня, но в начале имеется символ X. Счета третьего уровня являются субсчетами этих внебалансовых счетов.
Хочется отметить, что Аркадий в своем ответе предложил другой План счетов, но, насколько я понял, это не является критическим требованием. Почему, можно увидеть далее.

2. Имеется следующий фрагмент дерева:

Початок
+-Грошові кошти
+-? Q які?{в баллоне ·R test ·}
+-отримання
+-від покупців
+-? PA рах.1 {в баллоне ·R test1 ·}
+-? SA {в баллоне ·R test2 ·рах.1·}
+-? PB рах.2 {в баллоне ·R test3 ·}
+-? SB {в баллоне ·R test2 ·рах.2·} !!!
[]*PA *PB
[]*SA *SB

и следующие файлы-коэффициенты:
a) Test.rpt:
Які?
рахунки
каса
всяк.рах


b) Test1.rpt
Q = [ct 'які?']
Виберіть субрахунок:
*
if Q = 'рахунки'
for i = 1 to [as 31]
nn = [sa 31, i]
nt = nn
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^nt^^^^^^^^^^^
endfor
*
elseif Q = 'каса'
for i = 1 to [as 30]
nn = [sa 30, i]
nt = nn + ' ' + [n2 *nn]
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^nt^^^^^^^^^^^
endfor
*
elseif Q = 'всяк.рах'
for i = 1 to [as 33]
nn = [sa 33, i]
nt = nn + ' ' + [n2 *nn]
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^nt^^^^^^^^^^^
endfor
*
endif

c) Test2.rpt
? SS
*
TT = [ct SS]
PP = 'X'+[n1 *TT]
*
Виберіть субрахунок 3-го рівня:
for i = 1 to [as *PP]
nn = [sa *PP, i]
nt = nn
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^nt^^^^^^^^^^^
endfor

d) Test3.rpt
Виберіть субрахунок:
for i = 1 to [as 36]
nn = [sa 36, i]
nt = nn + ' ' + [n2 *nn]
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^nt^^^^^^^^^^
endfor

В двух словах сформулирую идею:
Выполняется спуск по плану счетов начиная со счета первого уровня к счету третьего уровня, естественно через внебалансовый счет X...
Для передачи параметра в файл-коэффициент, вызываемый в баллоне используется функция [ct].
Сразу хочется задать вопрос: почему в баллоне в файл-коэффициент нельзя передавать значение переменной, ведь данный вариант так и просится :-)?

Все работает до листа дерева, обозначенного мной как (!!!), где выдается следующая ошибка:
E-27: 7:18 Счет "*TT" отсутствует

Хочется отметить, что данный вариант дерева не является единственным, который использовался при отладке. Использовались и более "облегченные" варианты дерева. И в этих вариантах ошибки возникали уже и в самих проводках:
E-06: неправильно указан вид операции
в том месте, где стояла проводка вида:
X *PA

Мой небольшой ( :-) ) опыт программирования подсказывает мне, что идет переполнение (вероятнее всего стека). Хотелось бы узнать, во-первых насколько верна догадка, а во-вторых, что делать (просто как у Чернышевского :-) )?

P.S. Возможно, изначально существуют ограничения, налагаемые на дерево?

P.S.S. Возвращаясь к варианту:
[] @01 X
.....
A = '@01' в каком-то файле-коэффициенте
......
[] *A X Что не воспринимается

Насколько я понял, в локальной версии, да и в сетевой тоже комбинация @счет, один раз получив значение субсчета, дальше не изменяет его, а используется в качестве своего рода временной переменной. Но переменной слегка урезанной, что показывает приведенный выше фрагмент.
Возникает вопрос - а нельзя ли запоминать это раз введенное значение субсчета в какой-нибудь полноценной переменной, которая создается только на время проведения операции и сохраняется не на время одной проводки как $D, например, а на время всей операции и к которой можно было бы обращаться файлам-коэффициентам?

Буду благодарен за любую помощь!
Юрий Кравцов, Киев



Пpишедшие ответы: