![]() |
![]() |
|
Нужно чтобы при закрытии документа через крестик он не запрашивал сохранение | ☑ | ||
---|---|---|---|---|
0
Вовчик
24.06.10
✎
13:06
|
Собственно, вот и весь вопрос))) Надо чтобы не выскакивал вопрос о сохранении документа при закрытии его через крестик в углу формы.
|
|||
1
Вовчик
24.06.10
✎
13:07
|
Извиняюсь не в ту секцию написал вопрос по 1С 7.7
|
|||
2
IronDemon
24.06.10
✎
13:07
|
Не открывай документ.
|
|||
3
Вовчик
24.06.10
✎
13:10
|
(2)Отличный совет но в моем случае не подходит))
|
|||
4
lals
24.06.10
✎
13:12
|
Так Если ты в нем не ковырялся он и не запросит подтверждения, а если влез ручками своими то идет запрос по любому
|
|||
5
dk
24.06.10
✎
13:17
|
как уже сказали - ничего не меняй на форме - тогы и спрашивать не будет
есть исключения - тупо изменяется реквизит при открытии - можно убрать отчет через изврат (начатьтранзакцию();ЗАписать();ОтменитьТранзакцию()) но лучше не надо |
|||
6
Вовчик
24.06.10
✎
13:18
|
(4) То есть при изменении документа, от этого вопроса уже никак не избавится? Нельзя как нибудь сбросить свойтво модифицированности опять на ноль?
|
|||
7
mr_K
24.06.10
✎
13:18
|
Если в ПриОткрытии() программно меняются реквизиты, то вне зависимости от того, были ли интерактивные изменения получишь запрос на сохранение. Этого можно избежать сбрасывая флаг модицированности в ПриОткрытии после программных изменений реквизитов.
Если в ПриОткрытии ничего не происходит, и все изменения "интерективны" - то по крестику в любом случае будет запрос на сохранение. Можно конечно извратиться и обойти, но в данном случае это вообще не имеет смысла, имхо. |
|||
8
vasilii85
24.06.10
✎
13:19
|
Чем тебе это мешает?
|
|||
9
strange2007
24.06.10
✎
13:20
|
(0) отверткой или молотком на крестик надо нажать
|
|||
10
Вовчик
24.06.10
✎
13:22
|
(7) имеет смысл, просот форма документа используется как вспомогательная для заполнения другого докуента. Она не должна нигде записываться. И вопросов тоже желательно чтоб не задавала. Конечно можно вместо формы документа использовать обработку, но просто у документа у же готовый функционал, типа ввода новой строки и удаления. Как сбросить флаг модифицированности?
|
|||
11
DEVIce
24.06.10
✎
13:27
|
(10). Наверное в таком случае надо использовать не документ, а обработку?
|
|||
12
mr_K
24.06.10
✎
13:29
|
В (5) уже был способ. Главный вопрос - в какой момент вызывать этот код. Насколько я помню нажатие на крестик сначала спрашивает про запись и только потом вызывает обрабатываемое событие(призаписи(если необходимо), призакрытии).
|
|||
13
mr_K
24.06.10
✎
13:29
|
(12) к (10)
|
|||
14
Вовчик
24.06.10
✎
13:45
|
(13)Если честно то про "можно убрать отчет через изврат (начатьтранзакцию();ЗАписать();ОтменитьТранзакцию()) но лучше не надо" я не очень понял где это делать и что это даст
И подскажите как флаг модифицированности сбрасывается? |
|||
15
NS
24.06.10
✎
13:47
|
пример есть на sinor-е у mszsuz-а
|
|||
16
Rie
24.06.10
✎
13:47
|
(14) Модифицированность(0);
|
|||
17
lals
24.06.10
✎
13:54
|
Может это и смешно кому то покажется а я бы его все время после использования перезаписывал по ОК только менял постоянно ДатаДок и ВремяДок на текущее чтобы он вечно болтался в конце журнала и был под рукой. Естественно с очисткой реквизитов.
Процедура ПриЗаписи() ВсеРеквизитыШапки = ""; УдалитьСтроки(); КонецПроцедуры |
|||
18
Вовчик
24.06.10
✎
13:57
|
(16) Я так пробовал, выдает ошибку "слишком много фактических параметров"
|
|||
19
lals
24.06.10
✎
13:58
|
+(19) пропустил
Процедура ПриЗаписи() ВсеРеквизитыШапки = ""; УдалитьСтроки(); ДатаДок = РабочаяДата(); АвтоВремяТекущее(); КонецПроцедуры |
|||
20
UprDem
24.06.10
✎
14:06
|
(17) Что ж это за база такая? Где ДатаДок всегда текущая? Просто интересно...
|
|||
21
Fram
24.06.10
✎
14:11
|
(20) странный вопрос
|
|||
22
lals
24.06.10
✎
14:11
|
Читай (10) у него не док как таковой а обработка в виде дока, ему его хранить вообще не надо он хочет его создать, сделать то что он должен сделать и закрыть не сохраняя.
Я предложил вариант когда существует всего один док на всю базу он находится постоянно в конце журнала, по крайней мере в зоне видимости , открывается делает свое дело и по ок записывается в последнюю позицию(перезаписывается) |
|||
23
lals
24.06.10
✎
14:12
|
всю!базт = всю базу
|
|||
24
DrZombi
гуру
24.06.10
✎
14:13
|
(18)Пользователь документ та хоть меняет?
Или он до такой степени ленив, что отредактировав документ ему вломы нажимать нет, когда 1С спрашивает, про сохранение документа ? :) |
|||
25
UprDem
24.06.10
✎
14:20
|
Понятно... Не дочитал... Но в любом случае... Прогмеру лень десяток строк перебить, а пользователю - "нет" нажать... Свои люди,договорятся...
|
|||
26
aka AMIGO
24.06.10
✎
14:21
|
в архиве на синор.ру что-то было..
только у меня он не открывается :(( а было вот что: документ, открытый только для печати, приобретал свойство модифицированности умные головы обходили этот момент.. попытайте счастья, может, откроется - тогда найдете :) http://web.archive.org/web/20080512041617rn_1/www.sinor.ru/~my1c/ |
|||
27
Вовчик
24.06.10
✎
14:24
|
(25) Да не вопрос договоримся)))) Я сделал запрет на сохранение, если пользователь нажмет "да" при закрытии. Но начальник говорит лучше чтоб вообще не задавал вопросов, а то некоторые пользователи когда видят сообщения типа " Эту форму нельзя сохранять" сами начинают много вопросов задавать))))
|
|||
28
Вовчик
24.06.10
✎
14:24
|
(26)Спасибо, щас гляну.
|
|||
29
Вовчик
24.06.10
✎
14:28
|
(26) а как статья хоть называлась не помнишь?
|
|||
30
aka AMIGO
24.06.10
✎
14:34
|
""Сбросить признак модифицированности формы""
http://web.archive.org/web/20080110134648/www.sinor.ru/~my1c/knowhow/clrmodif.html текст: Такая штука пригодится, когда документом пользуются не по назначению - т.е. как формой ввода - и чтобы не было вопроса о сохранении при закрытии этого служ.дока можно воспользоваться решением: Процедура глСброситьПризнакМодифицированности(Конт) Экспорт // сброс признака модифицированности для формы Если Конт.Модифицированность()=1 Тогда НачатьТранзакцию(); Конт.Записать(); ОтменитьТранзакцию(); КонецЕсли; КонецПроцедуры // СброситьПризнакМодифицированности <сообщил Олег Тихоненко> |
|||
31
aka AMIGO
24.06.10
✎
14:35
|
похоже, немного не то, что тебе надо
|
|||
32
Вовчик
24.06.10
✎
14:39
|
(31) Это то что нужно))) Спасибо, щас обмозгую как применить)))
|
|||
33
DrZombi
гуру
24.06.10
✎
14:39
|
(27)Вот оно что :) Ты не документ сохраняешь, а редактируемую таблицу :)
Тогда и писал бы яснее, а то написал "Документ" :) Оставь как есть, или выстави у формы "Только чтение" ;) |
|||
34
aka AMIGO
24.06.10
✎
14:42
|
(32) однако, нет, там есть "..Записать()" - и это плохо.. если внесены изменения!?!? они сохранятся.. :((
|
|||
35
Ёпрст
гуру
24.06.10
✎
14:44
|
(34) не сохранятся.
|
|||
36
Попытка1С
24.06.10
✎
14:45
|
Только в журнале будет инфа о том что док записан.
|
|||
37
Ёпрст
гуру
24.06.10
✎
14:46
|
(36) не будет
|
|||
38
Попытка1С
24.06.10
✎
14:47
|
(37) Будет
|
|||
39
Ёпрст
гуру
24.06.10
✎
14:48
|
(38) с какой радости?
|
|||
40
Ёпрст
гуру
24.06.10
✎
14:49
|
при програмном проведении документа, в ЖР вообще ничего никогда не пишется, это раз, тут отмена транзакции(записи вообще не было) - это два
|
|||
41
Вовчик
24.06.10
✎
14:50
|
(30) Так мне надо будет эту процедуру применить ко всем реквизитам формы? И где это надо делать, в процедуре ПриЗакрытии?
|
|||
42
Ёпрст
гуру
24.06.10
✎
14:51
|
(41) нет.
|
|||
43
Попытка1С
24.06.10
✎
14:52
|
(40) Процедура ПриОткрытии()
НачатьТранзакцию(); Записать(); ОтменитьТранзакцию(); КонецПроцедуры Событие: Документ записан. |
|||
44
Вовчик
24.06.10
✎
15:05
|
(43)При открытии работает,т.е. програмные изменения которые производятся при открытии сбрасываюся, но если я произведу изменения на форме в ручную, то не получается. Или для интерактивных изменений это не подходит?
|
|||
45
Попытка1С
24.06.10
✎
15:06
|
(44) Это я написал как пример, что событие пишется в ЖР при отмене транзакции.
|
|||
46
Попытка1С
24.06.10
✎
15:08
|
Для интерактивных изменений нужно вставлять не процедуру ПриОткрытии(), а например ПриЗакрытии()
|
|||
47
aka AMIGO
24.06.10
✎
15:08
|
(44) это надо в ПриЗакрытии() отслеживать..
|
|||
48
Вовчик
24.06.10
✎
15:11
|
(44) Не работает в ПриЗакрытии(). Похоже этот вопрос задается до начала процедуры ПриЗакрытии()
|
|||
49
NS
24.06.10
✎
15:11
|
Если вставить в приЗакрытии() то конечно вопрос о сохранении не уберется.
Но в (0) что нужно? Чтоб не было вопроса, или чтоб не сохранялся? |
|||
50
NS
24.06.10
✎
15:12
|
(48) Не похоже, а точно задается до входа в процедуру призакрытии().
|
|||
51
Вовчик
24.06.10
✎
15:12
|
(49) И то и другое
|
|||
52
Ёпрст
гуру
24.06.10
✎
15:16
|
(43) возможно.. у меня вообще отключен ЖР всегда.
(51) Зачем ? |
|||
53
Попытка1С
24.06.10
✎
15:17
|
(52).1 Ну так у тебя он вообще не пишет =)
|
|||
54
NS
24.06.10
✎
15:20
|
(51) Сделай кнопку Закрыть, в которой закрывай без предупреждения.
А на крестике пущай ругается... но не записывает. |
|||
55
Попытка1С
24.06.10
✎
15:24
|
Интересно а если повесить на форму формековскую СбросМодифицированности() что будет...
|
|||
56
Вовчик
24.06.10
✎
15:25
|
(54) На данный момент так и есть. Ну ладно раз уж ничего не сделать пусть так и будет.
|
|||
57
NS
24.06.10
✎
15:27
|
(56) отслеживай изменения формы, и сбрасывай признак модифицированности.
отслеживать легко - функция на форме, в ней смотришь признак, и если модифицированна, то "хитро" сбрасываешь через форма.закрыть |
|||
58
NS
24.06.10
✎
15:28
|
(55) А зачем? Всё штатно делается.
|
|||
59
Ёпрст
гуру
24.06.10
✎
15:29
|
я бы вообще не баловался с модифицированностью..ни так, ни с помощью формекса - баловство..
Если модифицированность "завязана" на текстовом реквизите, он от неё никогда не избавится. |
|||
60
NS
24.06.10
✎
15:31
|
перем флаг;
Функция Функциянаформе() Если модифицированность()=1 тогда флаг=1; Форма.Закрыть(0); Конецесли; возврат ""; Конецфункции ПриЗакрытии() Если флаг=1 тогда НачатьТранзакцию(); записать(); Отменитьтразакцию(); флаг=0; статусвозврата(0); Конецесли; Конецпроцедуры флаг=0; |
|||
61
Вовчик
24.06.10
✎
15:35
|
(60) я не понял а зачем Форма.закрыть?
И мы же вроде выяснили что процедура ПриЗакрытии() выполняется уже после вопроа о сохранении. |
|||
62
NS
24.06.10
✎
15:42
|
(61) Для того чтоб сбросить признак модифицированности.
В функции на форме тебе ругнется на записать(); Там неточность - нужно конечно в функции на форме - флаг=флаг+1; а при закрытии - если флаг<>0 тогда |
|||
63
Вовчик
24.06.10
✎
15:47
|
(62) Так у меня ж форма закроется как только я чтонибудь на ней изменю, разве нет?
|
|||
64
Вовчик
24.06.10
✎
15:49
|
Да закрывается
|
|||
65
NS
24.06.10
✎
15:53
|
Функция Функциянаформе()
Если модифицированность()=1 тогда Форма.Закрыть(0); Конецесли; Конецфункции Процедура ПриЗакрытии() Если модифицированность()=1 тогда НачатьТранзакцию(); записать(); Отменитьтранзакцию(); статусвозврата(0); Конецесли; Конецпроцедуры вот так. Но вычисляемые текстовые поля конечно поломают тебе всю малину. Модифицированность() будет 0, а спрашивать будет... |
|||
66
NS
24.06.10
✎
15:56
|
(63) Если что-то поменяешь, то сработает статусвозврата(0),
а если нажмешь на крестик - то не модифицирована, поэтому закроется. |
|||
67
Guk
24.06.10
✎
15:58
|
(65) помница на форме с кучей реквизитов, такая конструкция тормозит безбожно...
|
|||
68
NS
24.06.10
✎
16:05
|
(67) Её еще нужно доработать -
иногда два раза подряд вызывается процедура на форме с попыткой закрыть, а потом два раза подряд пытается зарыть... То есть надо всё-таки Функция Функциянаформе() Если модифицированность()=1 тогда флаг=флаг+1; Форма.Закрыть(0); Конецесли; Конецфункции Процедура ПриЗакрытии() Если флаг>0 тогда НачатьТранзакцию(); записать(); Отменитьтранзакцию(); флаг=флаг-1; статусвозврата(0); Конецесли; Конецпроцедуры |
|||
69
Ёпрст
гуру
24.06.10
✎
16:06
|
(0) лучше внедри мой класс Undo - там сможешь циклически менять всё, что на форме изменил (все реквизиты документа) по Ctrl+z
|
|||
70
Вовчик
24.06.10
✎
16:17
|
(68) При применении твоего способа, у меня вылетает 1С при внесении изменений в форму.
Попробовал также обработать эту конструкцию в процедуре ПриОкончанииРедактированияСтроки() и тоже вылетает. А у тебя нормально работает? |
|||
71
NS
24.06.10
✎
16:21
|
(70) Нормально. Последний вариант. Предпоследний - иногда форма закрывается при изменении реквизита.
А "флаг" ты предварительно сбрасываешь? Где вылетает можно посмотреть в отладчике. |
|||
72
Вовчик
24.06.10
✎
16:24
|
(71)Попробуй у себя вставить эту конструкцию с транзакциями в процедуру ПриОкончанииРедактированияСтроки(). Будет работать или нет.
Кстати как ты листинг кода выкладываешь здесь? |
|||
73
NS
24.06.10
✎
16:32
|
(72) Движок форума сам может определить что это код.
В приокончанииредактирования() вставил - ничего не вылетает. Если и там и там, то конфликтуют между собой и начинается свистопляска. |
|||
74
NS
24.06.10
✎
16:35
|
(+73) То есть если и функция на форме, и в приокончанииредактированиястроки() либо пытаемся закрыть, либо сбросить флаг модифицированности начинается беда. Но ничего не вылетает.
|
|||
75
Вовчик
24.06.10
✎
16:42
|
(74) нет ты все что у тебя было убери и сделай
Процедура ПриОкончанииРедактированияСтроки() Если Модифицированность()=1 Тогда НачатьТранзакцию(); Записать(); ОтменитьТранзакцию(); КонецЕсли; КонецПроцедуры Попробуй что нибудь ввести в табличной части, и проверь закрывается ли после этого без вопросов. Если тебе не трудно, конечно)))) |
|||
76
NS
24.06.10
✎
16:47
|
(75) Мне никак сейчас - нужно срочно писать по-работе.
|
|||
77
Вовчик
24.06.10
✎
16:50
|
(76) ладно спасибо) сам найду нормальную 1С у меня просо расширенная и глючная стоит
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |