Имя: Пароль:
1C
 
Нужно чтобы при закрытии документа через крестик он не запрашивал сохранение
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С у меня просо расширенная и глючная стоит