|
Связанные документы (Переполнение стека) | ☑ | ||
---|---|---|---|---|
0
Юлианна_Н
26.04.23
✎
10:23
|
Всем привет.
Помогите добрым советом. Суть проблемы: Есть УТ 11.4.13.85, в которой пользователи загружают банк, разносят денежку по РТУ (в договорах Расчет стоит как "По накладным"), иногда бывает, что появляется нераспределенный остаток, который в этом же документе (Поступление безналичных) отображаетсяя отдельной строкой и в объекте расчетов кладет сам себя. После какого то времени формируется документ Взаимозачета, в котором в Авансах указывается документ Поступления безнала и сумма аванса (+ еще какие то рандомные суммы, которые как по мне не влияют на проблему)... и дальше происходит самое интересное, все документы РТУ из поступления безнала не могут открыть связанные документы из-за ошибки переполнения стека, при отладке нашла зацикливание документов Взаимозачет и Поступление безнала. При этом Если выводить связанные по Взаимозачету - норм, во всех остальных случаях - ошибка. Ах да, механизм вывода связанных документов типовой, руками там никто не лазил, смотрела по сравнению конфы с конфой поставщика, все четко. Вопросов собсна несколько: 1. Правильное ли это оформление аванса? Я думаю, что да, но есть сомнения... может аванс нужно или можно на договор класть? Увы опыта не хватает, что бы ответить правильно. 2. Как правильно будет исправить этот момент? Может дело в "возрасте" конфигурации? И достаточно будет обновиться (ну или скопипастить часть механизма с новой версии)? Всем заранее спасибо за советы. Добра вам. |
|||
1
shuhard
26.04.23
✎
10:26
|
(0)[при отладке нашла зацикливание документов Взаимозачет и Поступление безнала]
ну поставь счетчик циклов - в чём проблема ? |
|||
2
Юлианна_Н
26.04.23
✎
10:29
|
(1) мммм, думаю, что не вариант... в связанных может быть 1 документ, может быть 10 (Заказы, РТУ, СЧФ и прочие) проверить на тип документа можно, но в теории по одной РТУ может быть два поступления безнала. Думала об этом, но пока подожду еще советов.
Спасиб |
|||
3
CepeLLlka
26.04.23
✎
10:32
|
(2)Запоминайте ссылки по которым уже были выведены родительские/подчиненные документы и когда в цикле на такой снова натыкаетесь, пропускайте.
|
|||
4
Мультук
гуру
26.04.23
✎
10:34
|
(0)
>>Ах да, механизм вывода связанных документов типовой, руками там никто не лазил Программисты 1С тоже ошибаются, они тоже люди. >> И достаточно будет обновиться (ну или скопипастить часть механизма с новой версии)? В обновлениях УТ 11.5 несчастный отчет по связанным переделывался раз три (это то, что я видел). Он то собирался по критериям отбора, потом по некоему запросу, потом опять вернулись к критериям отбора Я бы пошел по пути (1) или (3) >> мммм, думаю, что не вариант... в связанных может быть 1 документ Вам говорят не про кол-во документов, а про глубину рекурсии. |
|||
5
Юлианна_Н
26.04.23
✎
10:36
|
(3) и об этом думала, типа завести переменную, класть туда текобъект и потом сравнивать, предпочтения пока этому варианту и были, но хотелось экспертное мнение большинства.
Мерси. |
|||
6
Юлианна_Н
26.04.23
✎
10:40
|
(5) вот про глубину как раз и беда, т.к. Критерии отбора берут связанные только вниз, и вот тут как раз если связанные по заказу смотреть - то будут РТУ - СЧФ - и.т. все, что вниз, а Поступление то к РТУ вяжется и оно вниз находит снова себя и взаимозачет.
Мне по душе больше третий вариант, по первому все рано придется писать проверки из серии "Что за объект и куда направляемся" а третьим вариантом мы будем проверять каждого на дубль... Благодарю за совет, и да... я ни чуть не против того что разрабы тоже люди. вопрос больше был может в какой то версии пофиксили и можно копипастнуть оттуда. (Ни капли претензий к окружающим) |
|||
7
unenu
26.04.23
✎
10:50
|
на удивление грамотный стажер
|
|||
8
dmt
26.04.23
✎
10:57
|
(5) ждем прибытия экспертов
|
|||
9
unenu
26.04.23
✎
11:13
|
я бы поставил точку останова в
СтруктураПодчиненностиПереопределяемый.ПередВыводомСвязанногоОбъекта(Объект, СвойстваОбъекта, Отказ) и "проехал" по связанным докам где идет зацикливание. ПередВыводомСвязанногоОбъекта(Объект, СвойстваОбъекта, Отказ) СвойстваОбъекта имеют данные для принятия решения Отказ = Истина для документа зацикливания, пример: Выражение Значение Тип Объект Реализация товаров и услуг ...-115... от 30.12.2022 8:34:17 ДокументСсылка.РеализацияТоваровУслуг СвойстваОбъекта Структура Структура Выводился Структура Структура ВПодчиненных 1 Число Итого 1 Число ЭтоОсновной Ложь Булево ЭтоПодчиненный Истина Булево ЭтоСлужебный Ложь Булево в этом методе можно писать свой костыль, сбросив замок или в расширении. |
|||
10
Юлианна_Н
26.04.23
✎
11:17
|
а картинку тут можно загрузить? Или только ссылкой?
|
|||
11
Юлианна_Н
26.04.23
✎
11:32
|
ОбщаяФорма.СвязанныеДокументы
Процедура ВывестиПодчиненныеОбъекты(ТекущийОбъект, ДеревоРодитель, ВыведенныеОбъекты) Часть процедуры: Таблица = ОбъектыПоКритериюОтбора(ТекущийОбъект); Если Таблица = Неопределено Тогда Возврат; КонецЕсли; В ТекущийОбъект попадает стартовый объект, к примеру РТУ, после в Таблица - попадает ТЗ со всеми объектами вниз, подчиненными Тут уже Взаимозачет и Поступление В конце этой же процедуры формируется запрос из типов документов (Взаимозачет и Поступление) и Выбираются объекты и потом эти объекты выборкой... Пока Выборка.Следующий() Цикл НоваяСтрока = ДобавитьСтрокуВДерево(ДеревоРодитель, Выборка, ВыведенныеОбъекты, Истина); Если НоваяСтрока <> Неопределено И Не ДобавляемыйОбъектИмеетсяСредиРодителей(ДеревоРодитель, Выборка.Ссылка) Тогда ВывестиПодчиненныеОбъекты(Выборка.Ссылка, НоваяСтрока, ВыведенныеОбъекты); Иначе ВывестиПодчиненныеОбъекты(Выборка.Ссылка, ДеревоРодитель, ВыведенныеОбъекты); КонецЕсли; КонецЦикла; Вызывается та же процедура с Поступлением к примеру, проходит она же, процедура, в Текущий объект попадает поступление, выборкой находит себя же и начинает снова то же самое Вот место цикличности (вызов процедуры с самим собой же) |
|||
12
Юлианна_Н
26.04.23
✎
11:27
|
Надеюсь получилось объяснить, т.к. это выжимка какая то а не описание
|
|||
13
lubitelxml
26.04.23
✎
11:28
|
Может просто убрать лишнюю галку в критериях отбора?
|
|||
14
Юлианна_Н
26.04.23
✎
11:30
|
(13) дай я тя расцелую....
это был бы джек пот, но тут будут потери, в зависимости от исключенной галки - кто то исчезнет из связанных, к примеру Взаимозачет (его не жалко), но нужно как то это юзерам объяснить, что бы вопросов не было потом |
|||
15
Юлианна_Н
26.04.23
✎
11:34
|
я все таки за переменную, т.к. цикличность в рамках одной процедуры - завернуть всю ее же (процедуру) в условие, но боюсь, что нужно продумать детально, а вдруг связанные вниз выведутся не все... тут нужно поэкспериментировать... или же заполнение ТЗ Таблица завернуть в условие, и пускай будет Неопределено если дубль
С Неопределено я смотрела по другим документам, у которых нет ошибки, Таблица = Неопределено и все работает норм |
|||
16
lubitelxml
26.04.23
✎
11:34
|
(14) если циклится - скорее всего стоит лишняя галка, и если уберешь - все останется на месте, даже если вы свои документы добавляли. Я очень много переписывал УТ, ни разу проблем с зацикливанием не видел в связанных документах. Вы где-то лишнюю галку определенно поставили.
|
|||
17
Юлианна_Н
26.04.23
✎
11:43
|
(16) Блин, ну тогда давай попробуем так...
Нетиповые документы там есть - факт Ругается на типовые документы - факт (Взаимозачет и Поступление) Эти два документа в состав добавлены поставщиком и они там в той же форме и остались, то есть и сам документ и определенные реквизиты. С чего начать тестировать? Кикнуть с критерия нетиповые документы (вместе с реквизитами)? Могу на тестовой, легко. могу вернуть Критерий отбора в первоначальный вид и протестить. А потом, если вдруг заработает - добавлять по одному и смотреть на каком объекте рухнет. Об этом речь? Я правильно поняла? |
|||
18
unenu
26.04.23
✎
11:46
|
(11) это сложный путь.
по моему, ловить зацикливание логичнее внутри метода который для этого уже создан (9). Просто анализировать свойство Выводился.ВПодчиненных |
|||
19
Юлианна_Н
26.04.23
✎
11:53
|
(18) Функция ВыводитьТекущийОбъект(ТекущийОбъект, ВыведенныеОбъекты, ЭтоПодчиненный, Отказ = Ложь)
Выводился = ВыведенныеОбъекты[ТекущийОбъект]; Если Выводился = Неопределено Тогда Выводился = НовыеСвойстваЧастотыВыводаОбъекта(); КонецЕсли; СвойстваОбъекта = НовыеСвойстваОбъекта(); СвойстваОбъекта.ЭтоОсновной = (ТекущийОбъект = ОсновнойОбъект); СвойстваОбъекта.ЭтоПодчиненный = ЭтоПодчиненный; СвойстваОбъекта.Выводился = Выводился; Если СвойстваОбъекта.ЭтоОсновной Или ЭтоПодчиненный И Выводился.ВПодчиненных > 0 Или Не ЭтоПодчиненный И (Выводился.Итого - Выводился.ВПодчиненных) > 0 Тогда Отказ = Истина; КонецЕсли; СтруктураПодчиненностиПереопределяемый.ПередВыводомСвязанногоОбъекта(ТекущийОбъект, СвойстваОбъекта, Отказ); Возврат Не Отказ; КонецФункции Об этом речь? Скорее всего да... Тут я не была, странно что пропустила... да, согласна... нужно отладить тут еще, почему ОНО постоянно возвращает НЕОПРЕДЕЛЕНО, если документ нужно вывести а |
|||
20
Юлианна_Н
26.04.23
✎
11:59
|
Ребята, огромное вам спасибо.... я теперь получила кучу новых вводных "нормальных", а это и была цель поднятия темы, что бы меньше костылить.
С весной вас всех PS. Писать результат починки? Или не нужно? А то могу написать потом типа "Все починила" и все :) |
|||
21
unenu
26.04.23
✎
12:02
|
(20) конечно писать, среда - маленькая пятница
|
|||
22
Юлианна_Н
27.04.23
✎
12:11
|
И снова всем привет...
Исправила... 1. СтруктураПодчиненностиПереопределяемый.ПередВыводомСвязанногоОбъекта(ТекущийОбъект, СвойстваОбъекта, Отказ); - вот тут пусто, решила так и оставить 2. Как сделала?: - в месте где происхоодит вывод документа - проверила был выведен или нет и , если нет - выводим, если да - пропускаем Если НЕ ВыведенныеОбъекты.Получить(ТекущийОбъект) = Неопределено Тогда . . . КонецЕсли; - а в месте где происходит зацикливание, не поверите, сделала то же самое. только красное, если документ выведен, то хватит Если ВыведенныеОбъекты.Получить(Выборка.Ссылка) = Неопределено Тогда ВывестиПодчиненныеОбъекты(Выборка.Ссылка, ДеревоРодитель, ВыведенныеОбъекты); КонецЕсли; Как говориться: "Без пап, мам и переменных" ☝️Народная мудрость☝️ Как минимум все заработало, протестила на множестве вариантов, вроде документы выводятся все. |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |