|
не работает ЭтаФорма.Модифицированность. | ☑ | ||
---|---|---|---|---|
0
andron81_81
09.11.18
✎
13:58
|
всем добра.
У меня так устроено, что при открытии документа в него подтягивается данные из регистров сведений в табличные части (почему так сделано - отдельная тема). Тем самым документ как бы уже "редактировался" - это понятно. Поэтому при закрытии документа даже если пользователем там ничего не изменялось система предлагает сохранить документ - высвечивая звездочку на форме. Поэтому я свойство ЭтаФорма.Модифицированность сбрасываю в ложь. Но это не работает. Процедура ПриОткрытии() ОбновимПараметры(); ПрайсМатериалов = Новый ТаблицаЗначений; ЭтаФорма.Модифицированность=Ложь; КонецПроцедуры процедура ОбновимПараметры(); как раз и подтягивает из регистра сведений данные в таб. части. Я думал , что не важно что там в ней происходит, если в конце ЭтаФорма.Модифицированность=Ложь - должен быть выполнен сброс в ложь ; а не тут - то было. После этого события никакой код более не выполняется(проверял отладкой). а "звездочка" появляется это значит , что ЭтаФорма.Модифицированность каким-то образом обратилась в истину. Проверял отладкой работу события ПриОткрытии(). на строке ЭтаФорма.Модифицированность=Ложь; присвоение происходит - вижу в табло. затем происходит завершение процедуры - форма документа. ВСЁ !!! на этой стадии ЭтаФорма.Модифицированность=истина; пробовал чистить кэш, "тестирование и исправление" . ничего не помогает. |
|||
1
Cyberhawk
09.11.18
✎
13:59
|
Подключи однократный обработчик ожидания и ужк там сбрось модифицированность
|
|||
2
andron81_81
09.11.18
✎
14:15
|
(1) костыль, но если ничего не выйдет, то придется.
может ещё версии будут ? )) |
|||
3
Ns33
09.11.18
✎
14:15
|
НовСтр=Услуги.Добавить();
Контрагент=Справочники.Контрагенты.ПустаяСсылка(); Модифицированность=ложь; Странно, добавил код в ПриОткрытии(), визуально видно что он отработал, но документ закрывается без вопросов. Возможно где-то модифицируется позже, ПриВыводеСтроки(), например. |
|||
4
Ns33
09.11.18
✎
14:18
|
А если закоментить ОбновимПараметры() ? Дело точно в них? Там никакой обработчик ожидания не подключается?
|
|||
5
andron81_81
09.11.18
✎
14:19
|
(3) да в пустой базе у меня тоже работает ! при выводе строки есть, конечно, но почему я по кнопке Ф11 туда не проваливаюсь
после выполнения строки ЭтаФорма.Модифицированность=Ложь; из моего события приОткрытии() . |
|||
6
Kigo_Kigo
09.11.18
✎
14:20
|
А так
Форма.Модифицированность=Ложь; |
|||
7
andron81_81
09.11.18
✎
14:21
|
(4) комментил уже . да в этом случае работает. но странность в том , что чтобы там не делалось - какая разница. за ней ведь идет ЭтаФорма.Модифицированность=Ложь;
|
|||
8
andron81_81
09.11.18
✎
14:24
|
(6) а "Форма" это что ? моя конфига не знает такую
|
|||
9
Cyberhawk
09.11.18
✎
14:24
|
(8) Он брешет, не слушай его
|
|||
10
Cyberhawk
09.11.18
✎
14:25
|
Какой релиз платформы?
|
|||
11
Cyberhawk
09.11.18
✎
14:25
|
В порядке бреда: "ЭтаФорма" заменить на "ЭтотОбъект"
|
|||
12
andron81_81
09.11.18
✎
14:28
|
(11) в ЭтотОбъект там модифицируемость не свойство , а метод-функция. только на чтение.
|
|||
13
andron81_81
09.11.18
✎
14:28
|
(10) 1С:Предприятие 8.3 (8.3.10.2667)
|
|||
14
Kigo_Kigo
09.11.18
✎
14:29
|
(8) С клюшками попутал
|
|||
15
Ns33
09.11.18
✎
14:30
|
Значит ОбновимПараметры() какой-то обработчик добавляет.
Коментить по частям код этой функции пока не найдешь нужное место. |
|||
16
Cyberhawk
09.11.18
✎
14:30
|
(12) Не в коня корм, ясно
|
|||
17
andron81_81
09.11.18
✎
14:38
|
(15) я находил уже ту часть таким образом как рекомендуешь .
Распишу процедуры Процедура ОбновимПараметры() СейчасСтраница=0; ЗаполнитьТаблицуПараметровЗаказа(); ЗаполнитьТаблицуПараметровДетали(false,); КонецПроцедуры если закомментить ЗаполнитьТаблицуПараметровЗаказа(); , то работает . То есть суть в ней (что странно). Таким образом : ЗаполнитьТаблицуПараметровЗаказа(); - виновата ЗаполнитьТаблицуПараметровДетали(false,); - проходит успешно. теперь привожу их : Процедура ЗаполнитьТаблицуПараметровЗаказа() Объект = ЭтаФорма.ДокументОбъект; Реквизиты = Новый Запрос( "Выбрать Различные | ОТ.ПометкаУдаления,СВР.ТипРеквизита , СВР.Ссылка Реквизит, знРекв.Значение, СВР.Код , | NULL как Отображать | из | Справочник.БЗ_СвойстваРеквизитов СВР | левое соединение Справочник.БЗ_ОтображениеИПоследовательностьРеквизитов.РеквизитыЗаказа РЗ ПО СВР.Ссылка=РЗ.Реквизит | левое соединение Справочник.БЗ_ОтображениеИПоследовательностьРеквизитов.СоставРеквизитовНаПараметрах СРНП ПО СВР.Ссылка=СРНП.Реквизит | Левое соединение Справочник.БЗ_ОтображениеИПоследовательностьРеквизитов ОТ ПО ОТ.Ссылка=РЗ.Ссылка или СРНП.Ссылка=ОТ.Ссылка | Левое соединение РегистрСведений.БЗ_ЗначенияРеквизитов знРекв ПО знРекв.Заказ=&заказ и знРекв.Реквизит=СВР.Ссылка и знРекв.Объект=-1 | где | ОТ.ПометкаУдаления=&пометканаудаление и СВР.ПометкаУдаления=&пометканаудаление | и | (РЗ.Отображать = &отображать или СРНП.Отображать=&отображать или (Не (знРекв.Значение ЕСТЬ NULL )))" ); Реквизиты.УстановитьПараметр("заказ", Объект.Ссылка); Реквизиты.УстановитьПараметр("отображать", истина); Реквизиты.УстановитьПараметр("пометканаудаление", Ложь); Реквизиты.УстановитьПараметр("пренадл", "з"); РеквизитыЗаказа.Очистить(); РезультатЗапроса = Реквизиты.Выполнить(); Выборка = РезультатЗапроса.Выбрать(); Пока Выборка.Следующий() Цикл СтрокаПараметров = Объект.РеквизитыЗаказа.Добавить(); СтрокаПараметров.Реквизит = Выборка.Реквизит; СтрокаПараметров.Значение = Выборка.Значение; СтрокаПараметров.Код = Выборка.Код; СтрокаПараметров.ТипПоля = Выборка.ТипРеквизита; КонецЦикла; КонецПроцедуры Процедура ЗаполнитьТаблицуПараметровДетали(НоваяДеталь, номердетали) Объект = ЭтаФорма.ДокументОбъект; Если НоваяДеталь тогда //Если деталь новая (нажата кнопка добавить деталь) , то добавляем один комплект реквизитов для этой новой детали Реквизиты = Новый Запрос( "Выбрать Различные СВР.ТипРеквизита , СВР.Ссылка Реквизит, NULL как Значение, СВР.Код из | Справочник.БЗ_СвойстваРеквизитов СВР | левое соединение Справочник.БЗ_ОтображениеИПоследовательностьРеквизитов.РеквизитыДетали РЗ ПО СВР.Ссылка=РЗ.Реквизит | Левое соединение Справочник.БЗ_ОтображениеИПоследовательностьРеквизитов ОТ ПО ОТ.Ссылка=РЗ.Ссылка | где СВР.ОтдельноеЗначениеДляОбъекта=Истина и | СВР.Пренадлежность=&пренадл И СВР.ОтдельноеЗначениеДляОбъекта=Истина И ((ОТ.ПометкаУдаления=&пометканаудаление и СВР.ПометкаУдаления=&пометканаудаление и РЗ.Отображать = &отображать))"); //Реквизиты.УстановитьПараметр("заказ", Объект.Ссылка); Реквизиты.УстановитьПараметр("пометканаудаление", False); Реквизиты.УстановитьПараметр("пренадл", "д"); Реквизиты.УстановитьПараметр("отображать", истина); РезультатЗапроса = Реквизиты.Выполнить(); Выборка = РезультатЗапроса.Выбрать(); Пока Выборка.Следующий() Цикл СтрокаПараметров = Объект.РеквизитыДетали.Добавить(); СтрокаПараметров.Реквизит = Выборка.Реквизит; СтрокаПараметров.БылоИзменение=Ложь; СтрокаПараметров.ТипПоля = Выборка.ТипРеквизита; СтрокаПараметров.НомерДетали = номердетали; СтрокаПараметров.Код = Выборка.Код; КонецЦикла; Иначе //Если деталь не новая (это происходит при запуске заказа) значит выдадим по всем листам Объект.РеквизитыДетали.Очистить(); Для Каждого Деталь из Объект.Детали цикл //Пока Деталь из Объект.Детали цикл Реквизиты = Новый Запрос( "Выбрать Различные СВР.ТипРеквизита , СВР.Ссылка Реквизит, знРекв.Значение Значение, СВР.Код из | Справочник.БЗ_СвойстваРеквизитов СВР | левое соединение Справочник.БЗ_ОтображениеИПоследовательностьРеквизитов.РеквизитыДетали РЗ ПО СВР.Ссылка=РЗ.Реквизит | Левое соединение Справочник.БЗ_ОтображениеИПоследовательностьРеквизитов ОТ ПО ОТ.Ссылка=РЗ.Ссылка | Левое соединение РегистрСведений.БЗ_ЗначенияРеквизитов знРекв ПО знРекв.Заказ=&заказ и знРекв.Реквизит=СВР.Ссылка и знРекв.Объект=&коддетали | где СВР.ОтдельноеЗначениеДляОбъекта=Истина И | СВР.Пренадлежность=&пренадл И СВР.ОтдельноеЗначениеДляОбъекта=Истина И ((ОТ.ПометкаУдаления=&пометканаудаление и СВР.ПометкаУдаления=&пометканаудаление и РЗ.Отображать = &отображать) или (Не (знРекв.Значение ЕСТЬ NULL )))" ); Реквизиты.УстановитьПараметр("заказ", Объект.Ссылка); Реквизиты.УстановитьПараметр("коддетали", Деталь.ИДДетали); Реквизиты.УстановитьПараметр("отображать", истина); Реквизиты.УстановитьПараметр("пометканаудаление", Ложь); Реквизиты.УстановитьПараметр("пренадл", "д"); РезультатЗапроса = Реквизиты.Выполнить(); //Сообщить(Реквизиты.Текст); Выборка = РезультатЗапроса.Выбрать(); //Сообщить(Выборка.Количество()); Пока Выборка.Следующий() Цикл СтрокаПараметров = Объект.РеквизитыДетали.Добавить(); СтрокаПараметров.Реквизит = Выборка.Реквизит; СтрокаПараметров.Значение = Выборка.Значение; СтрокаПараметров.БылоИзменение=Ложь; СтрокаПараметров.ТипПоля = Выборка.ТипРеквизита; СтрокаПараметров.НомерДетали = Деталь.ИДДетали; СтрокаПараметров.Код = Выборка.Код; // СтрокаПараметров.ОтдельноеЗначениеДляОбъекта = Выборка.ОтдельноеЗначениеДляОбъекта; КонецЦикла; КонецЦикла; КонецЕсли; //конец блока деталь не новая новаядеталь=false КонецПроцедуры |
|||
18
andron81_81
09.11.18
✎
14:44
|
то есть процедуры аналогичные . что одна , что вторая выполняют заполнения двух разных таб. частей.
после этих заполнений не делаю ничего кроме Форма.Модифицированность=Ложь; и это проверено отладчиком . хотя есть в одной из таб. частей событие ПриАктивизацииЯчейки, но туда при отладке не залезает ход выполнения. Форма.Модифицированность=Ложь; должно отработоть. а ни фига ((( |
|||
19
Ns33
09.11.18
✎
14:52
|
Та вроде норм, единственное что возможно может быть - это обработчик ПриВыводеСтроки() табл. части. РеквизитыЗаказа.
Получается если процедуру не вызвать (кстати, а что там содержится в сохраненном документе?), то обработчик не вызывается. А что будет если РеквизитыЗаказа.Очистить(); добавить в самый конец процедуры, т.е. заполнили и сразу очистили? |
|||
20
hhhh
09.11.18
✎
14:56
|
(18) проверь при выводе строки, чего там. и другие похожие процедуры
|
|||
21
andron81_81
09.11.18
✎
14:58
|
(20) почему события при выводе строки нету. Есть
ПриАктивизацииЯчейки , но как писал ранее отладчик туда не лезет. |
|||
22
andron81_81
09.11.18
✎
14:59
|
(21) перепишу : события при выводе строки нету. Есть
ПриАктивизацииЯчейки , но как писал ранее отладчик туда не лезет. |
|||
23
Buster007
09.11.18
✎
14:59
|
если предполагается, что данные не должны сохраняться, то использование такого подхода вообще не оправдано.
С учетом того, что это Объект.РеквизитыДетали.Добавить(); то это вообще полная №%; |
|||
24
andron81_81
09.11.18
✎
15:01
|
(23) почему ? у меня в документе в таб. частях данные не хранятся . и на это есть причины.
|
|||
25
andron81_81
09.11.18
✎
15:01
|
они хранятся в регистрах сведений
|
|||
26
andron81_81
09.11.18
✎
15:02
|
(23) какой подход вы предлагаете ?
|
|||
27
Buster007
09.11.18
✎
15:03
|
(26) сделай набор записей
|
|||
28
andron81_81
09.11.18
✎
15:04
|
(27) то есть ?
|
|||
29
Buster007
09.11.18
✎
15:05
|
(26) еще можешь сделать реквизит формы, у которого снять галку "Сохраняемые данные"
|
|||
30
andron81_81
09.11.18
✎
15:10
|
(19) будет всё такой же косяк.
|
|||
31
andron81_81
09.11.18
✎
15:11
|
не, я все же не пойму. выходит Форма.Модифицированность=Ложь; работает с причудами ?
|
|||
32
andron81_81
09.11.18
✎
15:13
|
(29) объясните чуть подробнее и про набор записей тоже
|
|||
33
Sayan_mi
09.11.18
✎
15:22
|
А если в табличных частях не храните данные зачем в них вообще пишите, добавите реквизит формы таблица значений и отображайте его, вообще ничего не будет модифицироваться.
|
|||
34
andron81_81
09.11.18
✎
15:24
|
(33) потому что я зелень . Но тоже репу чешу уже по этому поводу.
|
|||
35
andron81_81
09.11.18
✎
15:24
|
(33) то есть на форме размещаем скажем табличное поле РеквизитыЗаказа и связываем его не с таб. частью документа , а с реквизитом формы. так ?
выходит форма перестанет вообще реагировать на какие-либо изменение в таб.поле формы. Верно я понял ? |
|||
36
andron81_81
09.11.18
✎
15:27
|
(33) тогда необходимо свой велосипед делать в виде глобальной переменной Модифицированность . и его сам я должен ставить в истину в событиях на изменении в таб. части . верно я понимаю ?
|
|||
37
Sayan_mi
09.11.18
✎
15:28
|
(35) да.
|
|||
38
andron81_81
09.11.18
✎
15:29
|
(37) спасибо. думаю это верно !
|
|||
39
Sayan_mi
09.11.18
✎
15:29
|
(36) или ставить модифицированность в истину при редактировании этих полей.
|
|||
40
andron81_81
09.11.18
✎
15:30
|
(39) ну да
|
|||
41
andron81_81
09.11.18
✎
16:12
|
(33) а отбор строк можно осуществлять в таком случае ? пусть элемент формы это ЭлементФормыРеквизитыЗаказа. он связан с реквизитом формы РеквизитыЗаказа.
вот такое перестало прокатывать : ЭлементыФормы.ЭлементФормыРеквизитыЗаказа.ОтборСтрок.Отображать.Использование=Истина; ЭлементыФормы.ЭлементФормыРеквизитыЗаказа.ОтборСтрок.Отображать.ВидСравнения= ВидСравнения.Равно; ЭлементыФормы.ЭлементФормыРеквизитыЗаказа.ОтборСтрок.Отображать.Значение= Истина; |
|||
42
andron81_81
10.11.18
✎
15:06
|
сделаю отдельную тему
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |