Имя: Пароль:
1C
 
Модифицированность()
0 antoneus
 
18.06.08
11:05
Здравствуйте! Расскажите, что может влиять на модифицированность формы? Дело в том, что в сильно изнасилованной конфе (буха) записанный и проведённый документ (расходная) при открытии постоянно становится модифицированным. В ПриОткрытии() никакие реквизиты дока не затрагиваются, естессно.
1 чувак
 
18.06.08
11:06
А ВводНового() ?
2 Kondarat
 
18.06.08
11:07
>>В ПриОткрытии() никакие реквизиты дока не затрагиваются, естессно.
Чет с трудом верится.
3 чувак
 
18.06.08
11:07
Еще в самом теле формы за процедурами?
4 Нуф-Нуф
 
18.06.08
11:07
смотри при открытии, а еще раньше, в самом низу, до всех процедур
5 Warlock
 
18.06.08
11:08
Еще есть формулы на форме и код под всеми процедурами
6 Ёпрст
 
гуру
18.06.08
11:09
(0) Иши в формулах элементов диалога вызовы функций ... они и модифицируют...
Либо открывай форму ТолькоПросмотр(1) всегда..:)
7 antoneus
 
18.06.08
11:19
В теле ничего такого нет. Ловлю отладчиком - на выходе из ПриОткрытии() Модифицированность - 0. Дальше бегит в функции элементов диалога - на входе Модифицированность - 1. Пока забодал Формексом в ПослеОткрытия. Значит, ТолькоПросмотр(1)?
8 ДенисЧ
 
18.06.08
11:20
(7) неправильно делаешь. Комменти весь код ПриОткрытии() и открывай по строке, по документ не начнет изменяться
9 Ёпрст
 
гуру
18.06.08
11:22
(7) Ключевая фраза - "бегает в функциях .. " вот в них то и меняется модифицированность... :)
Можешь её принудительно сбросить - записать() в ложной транзакции, например..
Тебе проще - у тя есть формекс, там СбросМодифицированности() есть
10 antoneus
 
18.06.08
11:27
Ну, закомментил. Ну, не изменяется. а работать как? Там и УправлениеСлоями и куча условий - кому из юзеров что можно.
11 antoneus
 
18.06.08
11:28
дык сбросом модифицированности и победил. но хотелось бы докопаться...
12 ДенисЧ
 
18.06.08
11:29
(10) повторяю. ОТкрывай по строке - так найдёшь, которая из них меняет.
13 antoneus
 
18.06.08
11:30
Ёпрст, я поставил точки останова ВЕЗДЕ. после ПриОткрытии скачет в функцию элемента диалога - и на входе уже 1.
14 Ёпрст
 
гуру
18.06.08
11:30
(11) Тебе вроде как всё уже ответили ... Модифицированность ставится в функциях твоих... Значение переключателю ставишь, галочки там,ТЗ на форме заполняешь еще чего и всё - форма можифицированна.
15 ДенисЧ
 
18.06.08
11:31
(13) павтаряю. В отладчике ты изменение Модифицированности() не отловишь.
16 antoneus
 
18.06.08
11:36
(15) это я понял, когда впихнул в приотрытии наглое изменение реквизита.

(14) то есть, если я ставлю списку значений на форме текущую строку - то пипец?
17 Ёпрст
 
гуру
18.06.08
11:38
(16) яя, натюрлих :)
18 antoneus
 
18.06.08
11:43
о как. Спасибо, Ёпрст, в который раз выручаешь. Формекс рулит :)
19 Chieftain
 
18.06.08
12:10
(17) Данунах
20 antoneus
 
18.06.08
12:23
(17) ну да. проверил на типовом "Оказание услуг"
21 antoneus
 
18.06.08
12:24
не то.
22 Ёпрст
 
гуру
18.06.08
12:28
(19) ? Не забудь, что помимо установки текущего значения, тебе еще сам список на форме заполнить надобно :))
23 Chieftain
 
18.06.08
12:32
(22) Что делаю не так? Модуль формы элемента справочника:

Процедура ПриОткрытии()
 Флажок=1;
 Список.ТекущаяСтрока(2);
 Комбо.ТекущаяСтрока(3);
КонецПроцедуры    // ПриОткрытии

Список.ДобавитьЗначение(1);
Список.ДобавитьЗначение(2);
Список.ДобавитьЗначение(3);
Список.ДобавитьЗначение(4);

Комбо.ДобавитьЗначение(1);
Комбо.ДобавитьЗначение(2);
Комбо.ДобавитьЗначение(3);
Комбо.ДобавитьЗначение(4);
24 Chieftain
 
18.06.08
12:33
+(23) модифицированность не ставится
Список - СписокЗначений на форме
Комбо - Полу со списком
Флажок - Флажок (не реквизит)
25 antoneus
 
18.06.08
12:34
(22) В типовой заполняется. у меня заполняется. В типовой устанавливается текущая строка (тащут из реквизита). У меня устанавливается текущая строка (тащу из реквизита). В типовой - не модифицировано.
26 Cap_1977
 
18.06.08
12:39
(25) У тебя при открытии модифицируется какой то реквизит документа - ищи.
27 Ёпрст
 
гуру
18.06.08
12:39
(23,25) Может быть, соврал значит :)
Видать еще где-то значения реквизитов меняешь.
Форма.Обновить(1) нет случаем в коде ?
28 Chieftain
 
18.06.08
12:44
(27) Вот тут ты прав)) Либо "реквизит=значение", либо "Обновить(1)"
29 Ёпрст
 
гуру
18.06.08
12:48
ну вот .. опять
Флаг Модифицированность()
:))
30 AlexWolf
 
18.06.08
12:49
+(28) так же замечательно ставит модифицированность метод Реквизит.ВидыДляВыбора("");
31 antoneus
 
18.06.08
13:05
(26-30) в отладчике прополз всю приотрытии и реквизиты дока НЕ МЕНЯЮТСЯ. ни один из предложенных вариантов тоже не присутствует. треплют реквизит формы - флажок, правда.
32 antoneus
 
18.06.08
13:10
закомментил - та же хня.
33 Ёпрст
 
гуру
18.06.08
13:13
(32) Функции в текстовых реквизитах гляди ...
34 antoneus
 
18.06.08
13:23
(33) см. (13)
35 Ёпрст
 
гуру
18.06.08
13:23
(34) Ты 29 глядел ?
36 antoneus
 
18.06.08
13:28
Кстати, в процессе (тк я типа прогер), Форма.ТолькоПросмотр() = 1
37 Ёпрст
 
гуру
18.06.08
13:32
(36) Может того, код свой покажешь ?
38 antoneus
 
18.06.08
13:33
(35) ох, мать. Закладки?
39 AlexWolf
 
18.06.08
13:41
(38) переключение закладок не устанавливает флаг модифицированности....
40 antoneus
 
18.06.08
13:42
(37) та код элементарный.

   ПриЗаписиПерепроводить(?(глПользователь.Наименование = "Петя", 0, 1));
   глПроверкаРазрешенияРедактирования(Контекст);
   Доступность = ?((ИмяПользователя() = "Маша"), 1, 0);
   
   Если Проведен() = 0 Тогда
       ДатаДок = ТекущаяДата();
   Иначе
       НачальныйВидОтгрузки = ВидОтгрузки;
   КонецЕсли;
   
   Если ИмяПользователя() = "Коля" Тогда
       Если (глПользователь <> Автор) Тогда
           Форма.ТолькоПросмотр(?(НазваниеНабораПрав() = "Администратор", 0, 1));
       КонецЕсли;
   КонецЕсли;
   
   Если ФлагЗаявки = 1 Тогда
       Если ДатаДок < РабочаяДата() Тогда
           Форма.ТолькоПросмотр(1);
       ИначеЕсли ДатаДок = РабочаяДата() Тогда            
           Если (НазваниеНабораПрав() = "Администратор") или (НазваниеНабораПрав() = "Бухгалтер") ИЛИ (НазваниеНабораПрав() = "Кладовщик") Тогда
               Форма.ТолькоПросмотр(0);
           КонецЕсли;
       КонецЕсли;
   КонецЕсли;
   
   Если Автор.Наименование = "Коля" Тогда
       Если (Автор <> глПользователь) и (глПользователь.Наименование <> "Оля") и (глПользователь.Наименование <> "Света")
       и (глПользователь.Наименование <> "Рита") Тогда
           Форма.ТолькоПросмотр(?(НазваниеНабораПрав() <> "Администратор", 0, 1));
       КонецЕсли;
   КонецЕсли;
   
   Если (ВидОтгрузки <> 1) и (ВидОтгрузки <> 2) Тогда
       Если Проведен() = 1 Тогда            
           Если глПользователь.Наименование <> "Маша" Тогда
               Форма.ТолькоПросмотр(1);
           КонецЕсли;
       КонецЕсли;
   КонецЕсли;
   
   Активизировать("НомерДок");
   
   Форма.Товар.ВыполнятьФормулуТолькоПриИзменении(1);
   Форма.Цена.ВыполнятьФормулуТолькоПриИзменении(1);
   Форма.Сумма.ВыполнятьФормулуТолькоПриИзменении(1);
   Форма.НДС.ВыполнятьФормулуТолькоПриИзменении(1);
   Форма.НП.ВыполнятьФормулуТолькоПриИзменении(1);
   
   ВариантЗачетаАванса.ДобавитьЗначение(1, "не зачитывать");
   ВариантЗачетаАванса.ДобавитьЗначение(2, "только по договору");
   ВариантЗачетаАванса.ДобавитьЗначение(0, "без указания договора");
   ВариантЗачетаАванса.ТекущаяСтрока(ВариантЗачетаАванса.НайтиЗначение(ЗачитыватьАванс));
   
   Если Константа.ИспользоватьТипыЦен = Нет Тогда
       Форма.ПодписьТипаЦен.Видимость(0);
       Форма.ТипЦен.Видимость(0);
   Иначе
       Форма.ПодписьТипаЦен.Видимость(1);
       Форма.ТипЦен.Видимость(1);
   КонецЕсли;
   
   НачальнаяДатаДокумента = ДатаДок;
   УправлениеКурсом(0);
   Форма.НДС.Видимость(глПризнакУчетаНалога(Контекст, "НДС"));
   Форма.НП.Видимость(глПризнакУчетаНалога(Контекст, "НП"));
   
   СписокВидовОтгрузки.ДобавитьЗначение(1, "1. первый способ");
   СписокВидовОтгрузки.ДобавитьЗначение(2, "2. второй способ");
   
   СписокВидовОтгрузки.ТекущаяСтрока(ВидОтгрузки);
   
   УправлениеВидимостьюРеквизитов();
   
   Если Выбран() = 0 Тогда
       ПриВыбореВидовОтгрузки();
   КонецЕсли;
   
   // Управление видимостью реквизитов "Грузополучатель" и "Грузотправитель".
   Если ПустоеЗначение(Грузоотправитель) = 1 Тогда
       ВариантОтправки = 1;
   КонецЕсли;
   УправлениеВидимостьюГрузоотправителя();
   
   Если ПустоеЗначение(Грузополучатель) = 1 Тогда
       ВариантПолучения = 1;
   КонецЕсли;
   УправлениеВидимостьюГрузополучателя();
   
   // Заполним таблицу для выбора печатной формы
   НомерТекущейФормы = глУстановкаКнопкиПечать(Контекст, "Документ." + Вид(), ТаблицаПечФорм);
   
   Если глПользователь.Наименование = "Петя" Тогда
       Если (ВидОтгрузки = 3) ИЛИ (ВидОтгрузки = 4) Тогда
           РеквКолвоКоробов = Итог("КоличествоМест");
           Форма.ИспользоватьСлой("Транспорт, Кнопки");
           Форма.ТолькоПросмотр(0);
           Форма.КнопкаОК.Доступность(0);
           Форма.ДатаНепринятия.Доступность(0);
           Форма.ДатаПовторнойДоставки.Доступность(0);            
       Иначе
           СтатусВозврата(0);
           Возврат;
       КонецЕсли;
   Иначе
       УправлениеЗакладками();
       Форма.ИспользоватьСлой("Основной, Кнопки");
   КонецЕсли;
   
   Если Контрагент.Выбран() = 1 Тогда
       РеквАдресДоставки = Контрагент.АдресДоставки;
   КонецЕсли;
   
   Если Форма.ТолькоПросмотр() = 1 Тогда
       Форма.КнопкаЗаписать.Доступность(0);
       Форма.КнопкаОК.Доступность(0);
       Форма.КнопкаПодбор.Доступность(0);
       Форма.КнопкаОчистить.Доступность(0);
       Форма.КнопкаВыбораКомитента.Доступность(0);
       Форма.КнопкаВыбораДоговораКомиссии.Доступность(0);            
       КонтекстФормыПодбора = 0;
   КонецЕсли;
   
   УправлениеДоступностьюРеквизитов();
41 Chieftain
 
18.06.08
13:45
(40) Структуру документа тогда дай чтоль
42 ДенисЧ
 
18.06.08
13:46
Если Проведен() = 0 Тогда
       ДатаДок = ТекущаяДата();
   Иначе
       НачальныйВидОтгрузки = ВидОтгрузки;
   КонецЕсли;

ЕСли это не реквизиты документа, то я римский Папа
43 Chieftain
 
18.06.08
13:49
(42) В сабже проведенный документ, а "НачальныйВидОтгрузки" - хз что это такое
44 Ёпрст
 
гуру
18.06.08
13:49
А это что ? Вот этот кусок только приводит к модифицированности, даже если
РеквАдресДоставки  - просто реквизит формы, а не документа.


Если Контрагент.Выбран() = 1 Тогда
       РеквАдресДоставки = Контрагент.АдресДоставки;
КонецЕсли;
45 antoneus
 
18.06.08
13:50
В структуре дофига реквизитов шапки и немножко меньше табличной части. Оно надо?
46 Ёпрст
 
гуру
18.06.08
13:51
(45) не надо, и так видно, что Модифицированность у тебя возникает сплошь и рядом :))
47 antoneus
 
18.06.08
13:52
(42) Док изменяется и если Проведен() = 1.
Все, что с префиксом Рекв - текстовые реквизиты формы.
48 Chieftain
 
18.06.08
13:53
(44) Опять не прав. Группа - реквизит формы. Никакой модифицированности
Процедура ПриОткрытии()
 Группа    = Родитель;
КонецПроцедуры    // ПриОткрытии
49 antoneus
 
18.06.08
13:53
(43) НачальныйВидОтгрузки - переменная модуля формы. Ещё вопросы?
50 Chieftain
 
18.06.08
13:55
(49)Что есть:
ВариантОтправки
РеквКолвоКоробов
РеквАдресДоставки
51 antoneus
 
18.06.08
13:57
(50) ВариантОтправки - флажок на форме.
РеквКолвоКоробов - числовое поле на форме
РеквАдресДоставки - текстовое поле на форме
52 Ёпрст
 
гуру
18.06.08
13:58
(48) Возможно..:)
Но если есть присвоение в функции в текстовом реквизите - привет :)
53 Ёпрст
 
гуру
18.06.08
13:59
+52 Всё равно видать реквизиты дёргает :)
Или Закладки виноваты.
54 Chieftain
 
18.06.08
14:03
(53) Да полюбасу где-то изменяет реквизиты
55 Колхозник-внедренец
 
18.06.08
14:22
Вместо
РеквКолвоКоробов = Итог("КоличествоМест");
на будущее делай так:
Если РеквКолвоКоробов <> Итог("КоличествоМест") Тогда
РеквКолвоКоробов = Итог("КоличествоМест");
КонецЕсли;
и остальные из (50) по аналогии
56 antoneus
 
18.06.08
14:23
Процедура глПроверкаРазрешенияРедактирования(Конт) Экспорт
   Если Конт.Выбран() = 1 Тогда
       Если Конт.ДатаДок <= Константа.ДатаЗапретаРедактирования Тогда
           Конт.Форма.ТолькоПросмотр(1)            
       КонецЕсли;
       Если Конт.Вид() = "РасходнаяНакладная" Тогда
           Если Конт.Проведен() = 1 Тогда
               Если Конт.ДатаДок < РабочаяДата() Тогда
                   Если НазваниеНабораПрав() <> "Администратор" Тогда
                       Конт.Форма.ТолькоПросмотр(1);
                   КонецЕсли;                    
               КонецЕсли;
           КонецЕсли;
       КонецЕсли;
   КонецЕсли;
КонецПроцедуры

Процедура УправлениеВидимостьюРеквизитов()
   
   Видимость = ?((ВидОтгрузки = 1) ИЛИ (ВидОтгрузки = 2) , 0, 1);
   
   Форма.Сумма.Видимость(Видимость);
   Форма.НДС.Видимость(Видимость);    
   Форма.ГТД.Видимость(Видимость);
   Форма.Всего.Видимость(?(ВидОтгрузки = 1, 0, 1));
   Форма.КоличествоМест.Видимость(?(ВидОтгрузки = 2, 1, 0));    
   Форма.Цена.Видимость(?(ВидОтгрузки = 1, 0, 1));
   Форма.ТекстТипаЦен.Видимость(?(ВидОтгрузки = 12, 1, 0));
   Форма.ТипЦенПоступления.Видимость(?(ВидОтгрузки = 12, 1, 0));
   
КонецПроцедуры

Процедура УправлениеЗакладками()
   
   Если НазваниеНабораПрав() = "Администратор" Тогда
       Если ВидОтгрузки > 2 Тогда
           Форма.ИспользоватьЗакладки(1);
           Форма.Закладки.ДобавитьЗначение(1, "Товарная часть");
           Форма.Закладки.ДобавитьЗначение(2, "Транспортная часть");
       Иначе
           Форма.ИспользоватьЗакладки(0);
           Форма.ИспользоватьСлой("Основной, Кнопки");
       КонецЕсли;        
   КонецЕсли;
   
КонецПроцедуры
57 antoneus
 
18.06.08
14:27
(55) глПользователь.Наименование <> "Петя". а ваще, попробую
58 antoneus
 
18.06.08
14:30
(+57) да и это реквизит формы, вообще-то
59 Колхозник-внедренец
 
18.06.08
14:36
Чтобы не скакать по процедурам в поисках изменяемого реквизита делай так:
включай в Отладчике "Замер производительности", открывай форму и выключай "Замер".
В результате выйдет листинг строчек кода, которые выполнялись. Вот среди них и ищи  присвоение значения реквизиту.
60 antoneus
 
18.06.08
14:51
(59) -> (13, 40, 56)
61 antoneus
 
18.06.08
15:17
эх, ладно, сходил за пивом уже. Формекс - так Формекс
2 + 2 = 3.9999999999999999999999999999999...