Имя: Пароль:
1C
1С v8
Убрать рекурсию при записи документов.
0 Dastes
 
27.03.14
16:27
Есть два связанных документа. При записи каждого из них переносятся данные в другой и он разумеется тоже записывается и инициирует перенос данных обратно в первый документ, и до бесконечности, что бессмысленно. Весь код в модулях объекта в "при записи".

Есть ли какой то лаконичный способ убрать рекурсию без участия пользователя, как то узнать, например откуда инициализирована запись документа или что другое?
1 ДенисЧ
 
27.03.14
16:29
ОбменДанными.Загрузка = Истина.
2 ДенисЧ
 
27.03.14
16:29
А вообще - проще пристрелить автора механизма...
3 butterbean
 
27.03.14
16:29
убрать дебильную схему записи данных в посторонние документы
4 dj_serega
 
27.03.14
16:29
Установи в начале процедуры
ОбменДанными.Загрузка = Истина
5 Господин ПЖ
 
27.03.14
16:30
проще разработчика за ноги об забор пару раз
6 dj_serega
 
27.03.14
16:30
(2) (5) оба нужно реализовать.
7 х86
 
27.03.14
16:30
(1)+1
(2)+100

можно еще в доп.свойства флаг писАть
8 Господин ПЖ
 
27.03.14
16:31
>ОбменДанными.Загрузка = Истина

а кто сказал что на это будет какая-то реакция в коде?
9 dj_serega
 
27.03.14
16:32
(8) Так написать реакцию.
10 cw014
 
27.03.14
16:32
Заноси при проведении ДополнительныеСвойства в объект, что бы определять, что именно ты кладешь в рекурсию. Потом проверяй, есть ли в этом свойство с твоим документом и пропускай его...
11 dj_serega
 
27.03.14
16:33
(4) Ну да. Ошибся.
Если ОбменДанными.Загрузка Тогда
    Возврат;
КонецЕсли;
12 ptiz
 
27.03.14
16:35
(5) рекурсивно...
13 Dastes
 
27.03.14
16:36
Ахахаха)) Какие все доброжелательные

Меня заказчик заставил так сделать, не получилось его переубедить отказаться от этой затеи.
14 х86
 
27.03.14
16:37
(13)тогда за такую бню нужно по тройному тарифу брать
чтоб потом когда уши будут гореть не обидно бы за что
15 Господин ПЖ
 
27.03.14
16:40
>Меня заказчик заставил так сделать

спорим, что он хотел нормальные подписки на событие, меняющие статусы в связанных документах, а не (0)
16 Fish
 
27.03.14
16:42
(0) могу тебя обрадовать, бесконечных рекурсий в 1С не бывает.
17 Ненавижу 1С
 
гуру
27.03.14
16:45
В модуле каждого из документов создаешь
в начале модуля:

Перем ЭтоПринудительнаяЗапись Экспорт;

в конце модуля:

ЭтоПринудительнаяЗапись = Ложь;

в месте вызова записи другого документа (также для каждого модуля):

Если Не ЭтоПринудительнаяЗапись Тогда
  ДругойДокументОбъект.ЭтоПринудительнаяЗапись = Истина;
  ДругойДокументОбъект.Записать();
КонецЕсли;
18 Dastes
 
27.03.14
16:45
(15) Они формируют заказ-покупателю в строках ТЧ которого выбирается заказ-поставщику в который нужно эти строки перенести.  Сделать перенос по кнопке не захотел, нужно было именно при записи. Первое время все было отлично.

Вскоре появилось необходимость откорректированные позиции из заказа-поставщику переносить обратно в заказ покупателя.
19 Timon1405
 
27.03.14
16:49
(16)
Функция аРавноА(А)     
  Возврат аРавноА(А);
КонецФункции

АА = аРавноА(5);
20 Ненавижу 1С
 
гуру
27.03.14
16:54
(19) на 100500 миллионной итерации она упадет
21 DexterMorgan
 
27.03.14
17:24
(17) Можно в доп свойства пихать и анализировать
22 cw014
 
27.03.14
17:40
Я рад, что вы меня в (10) проигнорировали ))))
23 Ненавижу 1С
 
гуру
27.03.14
20:45
(21)вот все пишут про доп. свойства, чем они лучше обычных экспортных переменных, если текст модуля все равно кромсать?
24 Dastes
 
28.03.14
14:53
(17) Спасибо, взлетело.
25 Jonny_Khomich
 
28.03.14
14:54
я бы сделал запись изменений в модуле формы, тогда бы взлетело
26 Starhan
 
28.03.14
14:55
(24) по ходу ты очень далек от программирования и занимаешь чье-то место, потому что это (17) первое что приходит в голову после прочтения (0).
Оптимист верит, что мы живем в лучшем из миров. Пессимист боится, что так оно и есть.