Имя: Пароль:
1C
 
ПослеЗаписи выполняется 2 раза!
0 AndreiS
 
27.06.08
09:17
В справочнике контрагенты в общем модуле прописана процедура выгрузки элемента. В модуле формы она вызывается из процедуры ПослеЗаписи.
Дак вот, при простом изменении данных справочника, процедура выполняется один раз, а при вводе нового выполняется два раза.
Я так понимаю что при вводе нового ета процедура вызывается гдето еще раз. Но где в модуле я не нашел.
??? как можно ето пофикситить???
1 ТелепатБот
 
гуру
27.06.08
09:17
2 AndreiS
 
27.06.08
09:47
ап
3 zbv
 
27.06.08
09:50
нельзя пофиксить... это установка ГоловногоКонтрагента...
4 H A D G E H O G s
 
27.06.08
09:54
(3) Пофиксить можно, если умеючи.
(0) Стэк вызовов о чем нибудь говорит?
5 AndreiS
 
27.06.08
09:55
(3) а где тогда вставить процедуру выгрузки, чтоб она выполнялось один раз при изменении и один раз при записи нового?
6 AndreiS
 
27.06.08
09:55
(4) а поподробней....
7 zbv
 
27.06.08
10:00
(4) я имел ввиду двойную запись...

(5) перед записью не катит?
8 H A D G E H O G s
 
27.06.08
10:04
Вообще то это запись основного договора.
Пофиксить можно через Получить/УстановитьСсылкуНового и НачатьТранзакцию()
Но лом
9 AndreiS
 
27.06.08
10:34
(7) да пробовал перед записью. тоже при вводе нового 2 раза выполняет.
10 zbv
 
27.06.08
10:36
(9) а что за конфа то...
11 AndreiS
 
27.06.08
10:38
УПП 1.1.3.5
12 H A D G E H O G s
 
27.06.08
10:39
ППЦ, заведи переменную в модуле, там пропиши, это 2 запись или первая.. И при 2-ой записи пускай свою процедуру..
13 zbv
 
27.06.08
10:41
(12) + проверку на новый (тоже переменной), а то измененные не взлетят...
14 AndreiS
 
27.06.08
10:44
(12) а почему при второй? может тока при перво? мне ведь вторую как раз нужно пофиксить.
15 AndreiS
 
27.06.08
10:46
(12)
я сделал проверку на первый прогон тогда все пишется по одному разу
(13) лучше наверно всетаки прикрутить и проверку на новый и поставить запись при втором прогоне, а то так при простом нажатии Ок срабатывает.
16 AndreiS
 
27.06.08
10:48
(15) неее всетаки лучше пусть будет при первом вызове выполняется, а то если делать при втором и проверку, то будет делаться тока при вводе нового а при изм не будет.
17 simol
 
27.06.08
11:05
(11) де ты ее откопал :). А по теме - ищи в отработке проведения принудительную запись
18 AndreiS
 
27.06.08
11:07
(17)Я когда пришел она стояла, переписанная вся и потому не обнавлялась довно.
Щас какраз потихоньку идет подготовка к перезоду на 8.1 и посл релиз. с минимон наших доработок.
19 AndreiS
 
27.06.08
11:12
(17) а не подскажешь приблизительно в каком месте его искать?
20 AndreiS
 
27.06.08
11:36
ап
21 zbv
 
27.06.08
11:38
(16) Выгружать Если (Новый и ВтораяЗапись) или (не Новый и ПерваяЗапись)
22 Fynjy
 
27.06.08
11:43
(0) Посмотри в подписке на событие.
23 AndreiS
 
27.06.08
11:45
(21) новый и вторая запись. выгружается тока новый. т.к. вторая запись появляется тока при вводе нового.
не новый и первая запись всеравно что просто первая запись. т.к. при вводе нового запись срабатывае при второй не пройдет условие не новый.
24 AndreiS
 
27.06.08
11:46
там есть при ОбработкаВводаНового это понятно. и есть ПриИзменении.
ставлю тока во вторую. дак он срабатывает просто при открытии.
25 AndreiS
 
27.06.08
11:46
(24)->(22)
26 zbv
 
27.06.08
11:47
(23) см (13)

... проверку на новый (тоже ПЕРЕМЕННОЙ)...
27 AndreiS
 
27.06.08
12:08
(26)
ставим 2 переменные:

первый вариант:
1.новый (срабатывает на Да)
2.количество раз. (срабатывает на 2)
при вводе нового:
новый=да.
при выполнении первый раз в услосии не проходит то что переменная "кол-во раз"=1, при выполнении второй раз все нормально срабатывает.
при изменении.
новый = нет.
первый раз опять же срабатывает условие по переменной "кол-во раз", далеее при "изменении" процедура не вызывается второй раз

второй вариант:
1.новый (срабатывает на Нет)
2.количество раз. (срабатывает на 2)
при вводе нового:
новый=да
Первый раз отбрасывается и 1 условие и второе, при втором выполнении отврасывается только первое условие.
при изменении:
выгрузка не проходит из-за того что второе условие не выполнено.

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

разве я не прав?
28 zbv
 
27.06.08
12:35
(27) см (21)

второе условие даже можно сократить...
29 Aprobator
 
27.06.08
12:38
а одной переменной не хватит для контрольки, что выгрузка уже делалась?
30 AndreiS
 
27.06.08
12:42
(28) получается тоже самое, что и просто выгружать только при первом вызове.
31 zbv
 
27.06.08
12:42
(29) если новый, то правильнее выгружать при последей записи...

Хотя спорно... ;)
32 zbv
 
27.06.08
12:44
(30) код
33 AndreiS
 
27.06.08
12:44
в общем понят пусть вызружается при любом нажатии на ок. и плевать.
34 AndreiS
 
27.06.08
12:45
(32) всмысле?
35 zbv
 
27.06.08
12:45
(34) ну код как реализуешь...
36 AndreiS
 
27.06.08
12:48
Перем флаг;
........
Процедура ПриОткрытии()
   флаг=1;
.....
КонецПроцедуры
.......
Процедура ПослеЗаписи(Отказ)
   Если (Родитель=Справочники.Контрагенты.НайтиПоКоду("01966")) и (флаготкрытия=1) Тогда
       ВыгрузитьИзмененияПоставщику(Ссылка,Отказ);
   КонецЕсли;
   флаг=флаг+1;
КонецПроцедуры
.........
37 AndreiS
 
27.06.08
12:48
ой там не (флаготкрытия а флаг
38 Aprobator
 
27.06.08
12:50
Ну тады создаем переменную НадоВыгружать - тип Булево. Делаем ее = Истина В Процедуре ПередЗаписью() (если она кончено тоже 2 раза вызывается)
лепим
    Если ЭтоНовый() Тогда
          Если НадоВыгружать = Истина Тогда
               НадоВыгружать = Ложь
          Иначе
               НадоВыгружать = Истина
          КонецЕсли;
     КонецЕсли;
39 Aprobator
 
27.06.08
12:53
(+38) Хотя надо смотреть как себя в этом случае Метод ЭтоНовый() ведет. Если Перед второй записью он покажет Ложь, то все становится более проще.
40 AndreiS
 
27.06.08
13:08
вставляю в проц ПередЗаписью:
сообщить(ЭтоНовый());
при вводе нового:
истина
ложь
Идет формирование файла выгрузки.
Идет запись файла выгрузки.
Файл записан.
при изменении:
ложь
Идет формирование файла выгрузки.
Идет запись файла выгрузки.
Файл записан.

но впинципе получается тоже что и при переменной флаг. или я не прав?
41 Aprobator
 
27.06.08
13:22
(36) а что после первой записи элемента метод
Справочники.Контрагенты.НайтиПоКоду("01966") возращает неопределенно? И как отрабатывает этот код при записи не нового элемента?
42 AndreiS
 
27.06.08
13:30
(41)точно также как и при записи нового. только разнича в том, что при записи нового он отрабатывает 2 раза.
Справочники.Контрагенты.НайтиПоКоду("01966") - всегда возвращает "Поставщики".

если я правильно понял тебя.
43 Aprobator
 
27.06.08
13:38
(38) Выгрузка происходит при 2 - й записи. А у в твоем коде при первой.
44 AndreiS
 
27.06.08
13:47
дак в том то и прикол, что втая запись появляется только при вводе нового, а мне надо еще выгружать если у элемента справочника изменились какие либо данные.
45 Aprobator
 
27.06.08
14:05
(38) для нового пишет при второй, для старого при первой.
После
Ну тады создаем переменную НадоВыгружать - тип Булево. Делаем ее = Истина.
Я пропустил точку.
т.е. должно быть еще

Перем НадоВыгружать;

и где - нить лепим ее начальное значение НадоВыгружать = Истина.
Если Метод ЭтоНовый() перед второй записью покажет Ложь, То код в (38)

сокритится до
Если ЭтоНовый() Тогда
    НадоВыгружать = Ложь
Иначе
    НадоВыгружать = Истина
КонецЕсли;
46 Aprobator
 
27.06.08
14:06
(+45 довесок к окончанию) и первоначальная установка значения НадоВыгружать в данном случае не потребуется.
47 AndreiS
 
27.06.08
14:10
дак я не вижу смысла в том чтоб разделять одну при первой записи другую при второй. если можно все при первой выгрузить. вот еслиб отследить момент что в элементе что то изменено, что тогда выгружать а то получается что выгружает даже если просто нажимаешь кнопку ок без изменений. но я решил наверно оставлю все как есть. и так пойдет, пусть они там грузят одно и тоже несколько раз, славо богу в справочник редко заходят и нажимают ок.
48 Aprobator
 
27.06.08
14:26
а Модифированность() в процедуре ПередЗаписью не поможет?
49 Said_We
 
27.06.08
14:28
(0) Модуль формы вызывается два раза. Старая байда.
50 Said_We
 
27.06.08
14:30
Объясняется просто (самими разработчиками 1С) Один раз вы инициализируете сам объект и один раз форма инициализирует объект. Как итог если ПолучитьОбъект() то модуль выполняется один раз, а из формы дважды.
51 AndreiS
 
27.06.08
14:50
(49)посмотрел, вроде подходит. ща тока подумаю как прикрутить получше это все.
52 Said_We
 
27.06.08
14:55
к (49) модуль ОБЪЕКТА вызывается два раза... описался... по (50) это понятно..
53 NewNick
 
27.06.08
15:54
вобше то НадоВыгружать придумывать не надо. ее итак придумали называется оно ОбменДанными. через него и надо работать а не через левые переменные.