Имя: Пароль:
1C
1C 7.7
v7: Как при открытии документа определить, что изменилось?
,
0 Масянька
 
18.02.16
16:50
День добрый!
Как при открытии документа (уже существующего) определить, что изменилось?
Ничего руками не менялось. Кода много.
Спасибо.
1 zak555
 
18.02.16
16:51
у тебя открывается док и сразу статус модифицированности ?*
2 Масянька
 
18.02.16
16:52
(1) Похоже, что да.
Документ существующий (заполнен, сохранен, проведен).
После открытия (ничего не изменялось руками) - при закрытии спрашивает "Сохранить?".
3 vicof
 
18.02.16
16:52
(0) "Ничего руками не менялось."
ню-ню
Ищи момент, когда модифицированность переходит из лжи в правду
4 Масянька
 
18.02.16
16:52
(3) Как?
5 vicof
 
18.02.16
16:53
Имя переменной и имяревизита совпадают, скорей всего
6 vicof
 
18.02.16
16:53
(4) Отладчиком, как еще-то?
7 Ёпрст
 
18.02.16
16:53
(4) включи замер производительности и смотри стек вызовов или результаты замера
8 Mikeware
 
18.02.16
16:54
Ну, или сравнивай с ТекущимДокументом()
9 zak555
 
18.02.16
16:54
(2) это надо найти г@внокод в модуле форму
или вызов какой-то процедуры/функции  из глобальника

скорей всего какой-то расчёт идёт
10 Mikeware
 
18.02.16
16:55
+(7) или в табло отладчика Модифицированность(), и пошагово....
11 zak555
 
18.02.16
16:57
отладчиком любой дурак найдёт
12 palpetrovich
 
18.02.16
16:57
(0) "Кода много" в процедуре ПриОткрытии?  ..правда еще могут выполняться процедурки в самой форме. Так что  - отладчик
13 Масянька
 
18.02.16
16:57
Мужики! Спасибо!
14 Mikeware
 
18.02.16
16:58
(11) тогда сидеть смотреть на код, медитировать...
15 Ёпрст
 
18.02.16
16:58
+ смотри формулы текстовых полей на форме, в них может торчать функция, которая изменяет какой-либо реквизит
16 trdm
 
18.02.16
16:59
Завели локальную переменную типа список, сгреби туда все значение всех реквизитов через перебор метаданных, а потом проверь этот список.

Но лучше ремить в при открытии весь код, а потом отремливать и искать где что меняется.
17 Масянька
 
18.02.16
16:59
(15) Оно и есть. Новая.
Для старых док-ов - не обойти?
18 Mikeware
 
18.02.16
17:01
(17) в смысле?
19 Ёпрст
 
18.02.16
17:01
(17) ну воткни залипуху в функцию, что ежели Выбран() = 1 то не присваивать ничего, если =0 , то бишь, док новый, тогда лепить
20 Mikeware
 
18.02.16
17:02
(19) телепат?
21 Ёпрст
 
18.02.16
17:04
(20) ну так, 80lvl
:)
22 Масянька
 
18.02.16
17:04
(20) Ё - ДА! :)))))
23 palpetrovich
 
18.02.16
17:06
абидна, я еще в (12) про это сказал... эх
24 Масянька
 
18.02.16
17:08
(23) Тебе тоже - спасибо! :)
25 palpetrovich
 
18.02.16
17:10
(24) :)
26 Злопчинский
 
18.02.16
22:31
но "Ничего руками не менялось."...
а ведь начинаешь верить...
27 Масянька
 
19.02.16
09:10
(26) Да ладно тебе... Кто бы говорил о "вере" :))))
28 Масянька
 
19.02.16
09:14
В общем, так...

В два разных документа добавлено: реквизит и реквизит таб. части, в таб. часть на форме добавлено текстовое поле, в нем вызывается функция:

Функция РасчетДохода(Списание)
    
    Если (Списание = 1) Тогда
        Доход = (Цена - ЦенаИсходная) * Количество;
    Иначе
        Доход = 0;
    КонецЕсли;
    
    Возврат Доход;
    
КонецФункции // РасчетДохода

И возникает такая ситуация:
один документ - открыли, закрываем - молча закрывает.
другой документ - открыли, закрываем - требует сохранить.
Вручную (чтобы некоторые товарищи не придирались :) ) ничего не меняется в документах.
Я не могу понять, почему так...
29 aka AMIGO
 
19.02.16
09:18
(28) Док самодельный?
30 Масянька
 
19.02.16
09:20
(29) Нет. Оба док-та стандартные, но дописанные.
31 Lexey_
 
19.02.16
09:21
(28) отладчик не помог что ли?
32 Масянька
 
19.02.16
09:23
(31) Мне - нет. Прошлась по всей ПриОткрытии...
33 ДемонМаксвелла
 
19.02.16
09:24
(32) попробуй таки (7)
34 Масянька
 
19.02.16
09:24
Как только в док-те, который требует сохранения, убираю эту функцию - открывает, закрывает молча.
35 Mikeware
 
19.02.16
09:25
(30) Ну дык "Доход" - это что?
36 ДемонМаксвелла
 
19.02.16
09:27
(35) правильный вопрос. Это переменная модуля или реквизит документа?
37 Масянька
 
19.02.16
09:28
(35) (36) Реквизит таб. части.
38 oslokot
 
19.02.16
09:28
не парься

Модифицированность = Ложь

и в продакшн.

Профит!
39 Масянька
 
19.02.16
09:28
+ (37) Повторюсь: в обоих док-ах - реквизит таб. части.
40 Mikeware
 
19.02.16
09:29
(37) ну вот...
ч.т.д.
41 Масянька
 
19.02.16
09:29
(38) Это - легко!
Но - почему в одном док-те не требует сохранения, а в другом требует?
42 Trotter
 
19.02.16
09:29
(32) Не зная про функции в текст полях, я долго гонял отладчик и не понимаю откуда функцию попадает значение для последнего прогона. Пока друг не подсказал ) И не показал на определённой задачки )
43 aka AMIGO
 
19.02.16
09:29
Когда-то давным-давно был такой популярный сайтик http://www.sinor.ru/~my1c/
Был такой примерчик: Иногда надо открыть док, чтобы распечатать, и тут-же закрыть его. Так вот, чтоб он не вякал "Записать?" предложена была вот такая схемка..
В ПриЗакрытии написать операторчик (догадайся сама..)
Остальное сделает функция в ГМ
//----- http://www.sinor.ru/~my1c/knowhow/clrmodif.html
Процедура глСброситьПризнакМодифицированности(Конт) Экспорт
     // сброс признака модифицированности для формы
     Если Конт.Модифицированность()=1 Тогда
          НачатьТранзакцию();
          Конт.Записать();    
          ОтменитьТранзакцию();
     КонецЕсли;
КонецПроцедуры // СброситьПризнакМодифицированности
44 Масянька
 
19.02.16
09:30
(42) Будь ласка - расскажи. Пожалуйста!
45 Mikeware
 
19.02.16
09:30
(41) потому, что в одном документе есть реквизит, а в другом нет, и работа с локальной переменной
46 Масянька
 
19.02.16
09:30
(45) Та ё-моё... В обоих док-тах - реквизит таб. части.
47 Mikeware
 
19.02.16
09:31
сделай хотя бы
Функция РасчетДохода(Списание)
    
    Если (Списание = 1) Тогда
        ПромДоход = (Цена - ЦенаИсходная) * Количество;
    Иначе
        ПромДоход = 0;
    КонецЕсли;
    
    Возврат ПромДоход;
    
КонецФункции// РасчетДохода
48 Масянька
 
19.02.16
09:32
(43) Тут еще есть такая фишка...
Во втором док-те реализована вторая таб. часть (через Хранилище). При закрытии - хранилище удаляется. А в первом нет вообще функции закрытия (в модуле).
49 Масянька
 
19.02.16
09:33
(47) Да, не вопрос. Мне интересно - почему по-разному в док-тах...
50 PuhUfa
 
19.02.16
09:34
(46) Ты же пишешь в (2): В два разных документа добавлено: реквизит и реквизит таб. части
51 PuhUfa
 
19.02.16
09:34
+ В (28)
52 aka AMIGO
 
19.02.16
09:34
(48) ЕслиПроц ПриЗакрытии() нет - можно ведь и дописать..
Касательно второй табчасти - делал я такую штуку лет 10 назад..
Увы, помочь не в силах :)
53 Масянька
 
19.02.16
09:35
(50) И?...
54 PuhUfa
 
19.02.16
09:38
(53) "Твоя" функция рассчитывает некую переменную "Доход" и возвращает полученное значение в место вызова.
Если у тебя есть РеквизитДокумента с именем "Доход", то при выполнении этой функции произойдет замена значения этого реквизита. И получаем модифицированность
55 Масянька
 
19.02.16
09:39
(54) Тоже самое и в первом док-те - но модифицированности не возникает. Почему?
56 Mikeware
 
19.02.16
09:43
(55) значит, в первом документе либо реквизит с другим именем, либо он не в документе, а, скажем, в ТЗ...
сделай в функции
Доход=50;, и увидишь, что изменилось
57 Масянька
 
19.02.16
09:48
(56) Будешь смеяться, но в первом док-те (который молча) - также молча закрылся. Хотя, в таб. части вижу "50".
В функцию "Доход" скопировала из реквизита таб. части.

По-моему, кто-то потихоньку сходит с ума...
58 Mikeware
 
19.02.16
10:03
(57) ну, значит в одной табчасти это текст, а в другой - реквизит дока
59 Mikeware
 
19.02.16
10:03
кинь "выкошеный" мд на почту
60 PuhUfa
 
19.02.16
10:03
Прикольно...
Документ Новый1
РеквизитШапки: новый1
На форме текст с функцией:

Функция ТекстНаФорме()
    новый1 = -330;
    Возврат новый1;
КонецФункции

https://pp.vk.me/c631524/v631524674/15551/b0WInB-bwRo.jpg
Никакой модифицированности после открытия... Документ закрывается молча. И даже пофиг что в записанной версии документа: новый1 = 50
61 Mikeware
 
19.02.16
10:04
(60) хочешь сказать, что локальная перекрывает реквизит?
62 PuhUfa
 
19.02.16
10:08
(61) на форме лежит и сам реквизит новый1 и там он поменялся...
63 Масянька
 
19.02.16
10:08
(60) А ты мне не верил :((((((


Я уже докопалась: во втором док-те есть ПослеОткрытия и там (как раз) и возникает модифицированность.
64 PuhUfa
 
19.02.16
10:16
(63) Ну потому, что это неправильно -)
65 palpetrovich
 
19.02.16
10:53
(60) +1 прикольно блин, это-ж наверное можно использовать когда нужно что-то записать Без перепроведения :)
66 HawkEye
 
19.02.16
10:55
(65) так то, для того чтобы что-то записать совсем не обязательно это перепроводить...
67 palpetrovich
 
19.02.16
11:08
(66) не знаю как кто, а мне, в документе с "ПриЗаписиПерепроводить", в случае необходимости записи "левого" реквизита, к примеру "ПутьКСкриншоту" приходится извращаться с "ложным закрытием"
68 Mikeware
 
19.02.16
11:19
(67) а таких реквизитов быть не должно :-)
69 HawkEye
 
19.02.16
11:20
(67) записывай программно, какие проблемы?
70 HawkEye
 
19.02.16
11:20
+69, в смысле без открытия формы
71 Масянька
 
19.02.16
11:31
Есть вопрос:
функция - когда ловить Модифицированность() до или после Возврат?
72 palpetrovich
 
19.02.16
11:36
(69) специфика такая, что некоторые реквизиты, типа "ПутьКСкриншоту", или "ДатаПечатиЦенников"
...можно конечно сделать обработку - почти копию документа и записывать оттуда, но - "работает-не трожь", да и лом :)
73 Масянька
 
19.02.16
13:08
Ну, что, мыслей никаких ни у кого?
74 Mikeware
 
19.02.16
13:15
(73) а зачем?
75 Mikeware
 
19.02.16
13:15
(74) ну, не "мысли зачем", а зачем ловить?
76 Gunner
 
19.02.16
13:18
(11) Да ты что? я смотрю тут одни гуру 1с сидят, а в реальной жизни с реал. задачами справиться не могут. Сколько видел программистов, которые отладчиком не умеют пользоваться
77 Масянька
 
19.02.16
13:19
(74) А нормально - документ открыли, посмотрели, закрывают - а он требует сохранить?
78 Mikeware
 
19.02.16
13:28
(77) ну так убери изменеие значений реквизитов документа, и все.
Если уж так надо - заполняй, только если новый док.
79 Масянька
 
19.02.16
13:30
(78) Видищь - двор, на дворе - кол, на колу - мочало, начинай сначала.  (С)

Почему в другом док-те не спрашивает при сохранении и модифицированность = 0?
80 Mikeware
 
19.02.16
13:32
Попутно вопрос Ёп'у - а что, ДобавитьАтрибут() атрибуты с 12 - CHECKBOX (Флажок) и 13 - RADIO (Переключатель) - не создает?
кнопки получаются, ТЗ получается, списки - коряво, а флажок и радиодырку - ну никак....
81 Mikeware
 
19.02.16
13:33
(79) ну, видимо, фича платформы. недокуметированная возможность. Используй нормальный правильный подход, и не будешь по граблям ходить.
82 Масянька
 
19.02.16
13:34
(81) О, как... А что не правильно?
83 Mikeware
 
19.02.16
13:35
(82) ну ты ж заполняешь документ? изменяешь его реквизиты?
84 Ёпрст
 
19.02.16
13:36
(80) там пришлось бы еще со стилем играть.  Вообще, в ДобавитьАтрибут не хватает только одной главной вещи - 9 контрол (текстовая колонка в многострочных частях)
85 Mikeware
 
19.02.16
13:37
(84) а как "поиграть"? кинь пример, или научим ламера. вроде все по инструкции, а оно никак. кнопка вместо флажка, и все тут...
86 Масянька
 
19.02.16
13:37
(83) И?...
В другом док-те - все аналогично. Но - при закрытии не спрашивает и модифицированность = 0.
87 Mikeware
 
19.02.16
13:39
(86) ну то, что "не спрашивает" - неправильное поведение. фича платформы.
88 Масянька
 
19.02.16
13:40
А джедай 80lvl - не объяснит? :)
89 Mikeware
 
19.02.16
13:42
(88) он, может, и объяснит. Хотя это нужно, наверное, АЛьФу вопрос задавать - он порядок прохождения смотрел, когда перехват событий делал.
но проще сделать, "как правильно", и не мучиться.
90 Ёпрст
 
19.02.16
13:42
(86) Другой документ, того же вида ?
91 Ёпрст
 
19.02.16
13:43
(85) проще уж контрол типа активикса кинуть через добавить атрибут
92 Mikeware
 
19.02.16
13:44
(90) нет, другого.
и в одном доке, в котором мудифицированность появляется, есть ПослеОткрытиия, а в том, в котором не появляется - нету
93 Ёпрст
 
19.02.16
13:44
чем играться со штатным радиобуттоном, aluev на 1cpp все знает про стили
94 Масянька
 
19.02.16
13:44
(90) Первый (в котором молча закрывает) - Розничная реализация. Второй (где ругается) - Реализация. Оба стандартные, но дописанные.
95 Ёпрст
 
19.02.16
13:45
(94) ну, чего ты хочешь тогда ? Можифицированность можно убрать же, как штатно, через записать, так и не штатно, тем же формексом + некоторые события можно отменить, тем же перехватчиком - вот и не будет модифицированности
96 Масянька
 
19.02.16
13:46
(92) Уже при входе в функцию подсчета - модифицированность = 1. Где меняется - не смогла поймать.
Везде воткнула (в каждой процедуре/функции) в начале и конце модифицированность().
97 Ёпрст
 
19.02.16
13:46
У тебя в ПослеОткрытия, чего хоть понаписано ?
98 Масянька
 
19.02.16
13:47
(95) Нету перехватчиков. и модифицированность не изменяется.
99 Масянька
 
19.02.16
13:47
(97)     оПривязки.ПослеОткрытия();
100 Масянька
 
19.02.16
13:47
Хоть сотку возьму...
101 Масянька
 
19.02.16
13:48
+ (99) В НастроитьПривязки и ПриИзмененииРазмераОкна - модиф. не меняется.

Кстати, в первом док-те - привязок нет.
102 Mikeware
 
19.02.16
13:51
(91) :-(
я уж форму сделал с двумя флажками, которую привязываю через Прикрепить форму. правда, при уменьшении ее размера 1с падает
(93) на форуме там шняга какая-то - сообщения непойми как отображаются.
103 Mikeware
 
19.02.16
13:51
(101) ну так поставь привязки, да глянь
104 Ёпрст
 
19.02.16
13:53
(102) прикрепитьформу - это вообще за гранью добра и зла :)
105 Ёпрст
 
19.02.16
13:56
(101) класс привязок то хоть чей ?
106 Ёпрст
 
19.02.16
13:56
напиши установку хоть одной привязки любого контрола (для понимания, какой у тя  класс)
107 Mikeware
 
19.02.16
13:56
(104) а в какую сторону "за гранью" - в сторону добра или в сторону зла? :-)
ну надо "два флажка". Блин, ну не делать же раскрашенными кнопками...
108 Ёпрст
 
19.02.16
13:58
(107) АЛьФ сам грил что глючный метод, + вызывает частое падение конфы и память не освобождает
109 Ёпрст
 
19.02.16
13:58
А зачем тебе лепить флажки динамически ? Не известно, че за форма будет ?
110 Масянька
 
19.02.16
13:58
(105) Ты давал. Не понмишь?
(106) Это -     оПривязки.Добавить("КодПроизводителя",          "ВН", "Форма");
Нет?
111 Mikeware
 
19.02.16
13:59
(108) посоветуй насчет двух флажков. а то придется готовить три конверта....
Лень на два десятка доков их вручную добавлять
112 Mikeware
 
19.02.16
14:00
(110) Вроде А.Диркса. который со сплиттерами?
113 Масянька
 
19.02.16
14:00
(112) Мне - Ё давал.
114 Ёпрст
 
19.02.16
14:00
(112) не, это типовой, из репозитария
115 Mikeware
 
19.02.16
14:03
(109) - см (111).
Хочу в перехватчике на формы документов лепить, в зависимости от типа документов и роли пользователя..
116 Масянька
 
19.02.16
14:05
Так...
Либо вы мне говорите в чем у меня проблема, либо ... (щас придумаю).
117 Mikeware
 
19.02.16
14:06
(116) не будить в тебе зверя, а то проснется заяц и убежит?
118 Масянька
 
19.02.16
14:10
Если дело в привязках - почему в НастроитьПривязки модиф. = 0?

(117) Насчет зайца - не уверена...
119 patapum
 
19.02.16
14:19
(0) все внимательно не прочитал, только просмотрел. если еще есть сомнения, почему встает модифицированность, напиши обработку, которая программно откроет форму, а потом пробежится по реквизитам контекста формы и документа в базе (по метаданным). вдруг чё покажет.
120 Ёпрст
 
19.02.16
14:23
(115) ну, на ум приходит только лепить кнопку через добавитьатрибут и натягивать на неё контрол с флажком, это проще всего.
121 Ёпрст
 
19.02.16
14:24
и уже ловить события активикса
122 Масянька
 
19.02.16
14:29
Кстати, в рабочей базе 2 док-т (который ругается) уже с привязками, но при открытии-закрытии не ругается.
Ничего не понимаю....
123 Mikeware
 
19.02.16
14:30
(120) контрол с флажком - в смысле, активикс?
124 Ёпрст
 
19.02.16
14:31
(123) ага
125 Ёпрст
 
19.02.16
14:32
(122) мот только на просмотр форма открывается у тебя ?
126 Mikeware
 
19.02.16
14:32
(124) понял.  Не удается обмануть природу.... :-(
127 Масянька
 
19.02.16
14:32
(125) Нет. Обычно.
128 Mikeware
 
19.02.16
14:33
(122)ну выклади на чонибуть кастрированный мд.
129 Масянька
 
19.02.16
14:50
Чем плохо так:

Функция РасчетДохода(Списание)

    Если (Списание = 1) Тогда
        Доход = (ЦенаИсходная - Цена) * Количество;
    КонецЕсли;

    Если (Число(ТекстОбщийДоход) > 0) Тогда
        Форма.ТекстОбщийДоход.Цвет(0, 0, 0);
    Иначе
        Форма.ТекстОбщийДоход.Цвет(128, 0, 0);
    КонецЕсли;

    Возврат Доход;
    
КонецФункции // РасчетДохода

Доход - реквизит таб. части док-та.
130 Ёпрст
 
19.02.16
14:50
(126) через стиль удалось добится, что он стал флажком, но.. пока не совсем работает, ща еще поиграюсь
131 Ёпрст
 
19.02.16
14:51
(129) вот так добавь и забудь о модифицированности

Функция РасчетДохода(Списание)
Перем Доход;
132 Масянька
 
19.02.16
15:02
(131) А чем плохо не инициализировать нулем?
133 Mikeware
 
19.02.16
15:06
(132) тем, что ты меняешь данные...
134 Масянька
 
19.02.16
15:08
(133) Не поняла - объясни.
135 Ёпрст
 
19.02.16
15:10
(133)

если делаешь вот так:

    Расш = СоздатьОбъект("РасширениеФормы");
    Расш.УстановитьФорму(Форма);
    Флажок= Расш.ПолучитьАтрибут("Флажок");

    Атр = Расш.ДобавитьАтрибут("Вася",12);
    Атр.Стиль = Флажок.Стиль;
//    Атр.ИзменитьСтиль(Атр.Стиль,Флажок.Стиль);

    Атр.Формула = "Сообщить(""ой-ё"")";

то новый атрибут выглфдит, как флажок, но, не работает :(
136 Ёпрст
 
19.02.16
15:14
Уррррааа!
Я подебил эту шляпу :))
137 Ёпрст
 
19.02.16
15:15
Короче, от так всё работает, как надо. Тебе всего лишь в перехватчике нужно на форме класса разместить флажок, чтобы взять его стиль, и далее:


Атр = Расш.ДобавитьАтрибут("Вася",12,"Число"); //тип надо было указать
138 Mikeware
 
19.02.16
15:17
(137) указывал. только что удалил
139 Ёпрст
 
19.02.16
15:17
Ну, или попрообовать Стиль сохранить где-нибудь еще
140 Масянька
 
19.02.16
15:18
Мальчики! Вы опять отвлеклись...
141 Mikeware
 
19.02.16
15:20
(134) ну ты меняешь данные документа на форме, у удивляешься, что у тебя флаг мудифицированности устанавливается...
а удивляться нужно тому, что он иногда не устанавливается.
а чтоб не удивляться вааще - нужно не менять данные. только и всего
142 Mikeware
 
19.02.16
15:20
(139) стиль - попробую
143 Ёпрст
 
19.02.16
15:20
144 Масянька
 
19.02.16
15:24
(141) Данные меняются только при определенном условии (ты, наверное, не увидел). Чтобы это условие возникло - нужно именно редактировать документ. При редактировании все, что надо работает. А при просмотре (но не в режиме просмотра) - условие не возникает, следовательно, данные менять не нужно.
И я спрашивала об инициализации 0.
А по поводу "модифицированности" - вопрос к разработчикам.
145 Ёпрст
 
19.02.16
15:37
(144) ты вот как в (131) добавь и успокойся :)
146 Ёпрст
 
19.02.16
15:38
на счет "не работает" в другом, проверь настройку порядка обхода, сделай, чтоб ТЧ дока была на первом месте и "заработает"
147 Ёпрст
 
19.02.16
15:39
т.е будет модифицированность при смене реквизита тч
148 Масянька
 
19.02.16
15:44
(146) Там (в котором работает) таб. часть одна из последних (при обходе).
(145) Я плохого ничего не нашла. Даже в dbf.
Вот и интересуюсь - может чего не увидела.
149 Mikeware
 
19.02.16
16:11
(143) спасибо!