Доброго всем времени суток. Иногда (может и частенько) возникает потребность в автосохранении документа. Бывают ситуации, когда набили кучу инфы в документ и бац… вырубили электричество, а у вас нет ИБП (источник бесперебойного питания). И вот начинается ВЕЛИКИЙ и МОГУЧИЙ РУССКИЙ ЯЗЫК! Возможны конечно другие, прочие потребности в автосохранении, но это уже у каждого свое. Итак,… приступим.
Мне была поставлена задача написать автосохранение документа на 1С 7.7 (Сельхозка). Имеется документ: Продажа товаров в розницу, его мы и будем автосохранять. (принцип одинаков, практически для всех конфиг на 7.7, возможны некоторые отличия, но не значительные).
Все выполняется в форме документа. Код изменненного документа:
//Общая переменная
Перем НадоЗаписать;
//Изменения в предопределенную процедуру, для сохранения
Процедура ПриЗакрытии()
Если НадоЗаписать=1 Тогда
Записать();
СтатусВозврата(0);
ОчиститьОкноСообщений();
Сообщить("Документ Автосохранен "+ТекущееВремя());
Возврат;
ИначеЕсли
НадоЗаписать=0 Тогда
ОчиститьОкноСообщений();
глОткрытьЖурнал(Контекст, Новый);
КонецЕсли;
КонецПроцедуры // ПриЗакрытии()
// Для корректного закрытия документа
Процедура ЗакрытьДокумент()
НадоЗаписать=0;
Форма.Закрыть(1);
КонецПроцедуры
//Процедура проверки на модификацию
Процедура АвтоЗапись()
Если (Модифицированность()=1) Тогда
НадоЗаписать=1;
Форма.Закрыть(0);
Иначе НадоЗаписать=0;
КонецЕсли;
Конец
Процедуры
//Вызов процедуры, через определнный интервал времени
Форма.ОбработкаОжидания(«АвтоЗапись»,180); //время в секундах 180 секунд
Повторюсь, в других конфигурациях аналогичные действия, может за исключением нескольких ньюансов, если таковые имеются!
для чего запись реализована в ПриЗакрытии()?
(0)Мой компьютер- свойства — диспетчер устройств — дисковые устройства — нужный диск —
свойства — политика — разрешить кеширование » снять «.
(1) andrewks, Процедура ПриЗакрытии — это предопределенная процедура закрывающая документ. Т.к. мы не можем использовать метод Записать() в 1С 7.7 в любом месте кода, как в 1С 8, приходится извращаться. А использовать метод Записать() в процедуре ПриЗакрытии() срабатывает несколько не удобно, скорее не так как хотелось бы.
А мы перешли на 8-ку и забыли про 7-ку
(3)
это кто такое сказал? расшифруйте, может, я чего-то не так понял
Решение правильное. Сам попадал в подобных ситуациях. Спасибо
andrewks, попробуйте выполнить метод Записать() в форме документа в любом месте или своей процедуре в модуле формы. у меня не получилось.
Иваныч, пользуйтесь. спасибо.
(7) не только пробую, но и пользуюсь в своих конфах уже несколько лет. а вот в коде, вызываемом из ОбработкаОжидания() — действительно болт, поэтому выход — через ложное закрытие
andrewks, приведите пример своего кода пожалуйста, где используете в модуле формы метод Записать(). интересно как вы реализовали!
(10) да чего приводить, создайте кнопку, и в её обработчике сразу напишите Записать(); — всё работает. а вот если этот же обработчик назначить в ОбработкаОжидания() — будет выдавать ошибку
По кнопке то понятно, тут имеется ввиду запись через определенное время.
Если бы можно было бы сделать так ОбработкаОжидания(Записать(),180) — это другое дело
(13) А если форма документа открыта модально или человек ушел курить при открытом окне вопроса,предупреждения и т.п.? Штатная ОбработкаОжидания тогда не сработает. Лучше, мне кажется, вызывать метод Записать() в процедуре
ПриОкончанииРедактированияСтроки(), причем можно не в каждой строке, а через установленное количество.
1. это не критично.
2. можно много чего нагородить
3. у каждого условия и требования определенные.
Делал подобное, правда в обработке загрузки данных с банк-клиента, не в документе. Причем сериализовал данные в XML, и его сохранял локально у пользователя, не дергая каждый раз сервер на запись. При сбое питания/сервера/etc пользователь открывает заново обработку и ему систем подсказывает, что есть бэкап данных.
Тоже как вариант!
(0)
м-да… это садо-мазо
интересно, какие еще потребности , кроме приведенного Вами садо-мазо, возможны?
Специально для Вас, ЛЕНЬ к примеру.
Если не интересна тема или что-то не устраивает. Лучше не пишите ерунды!)
Метод скорее вредный, чем полезный.
Если и сохранять — то отдельно куда угодно — в файло, в стороннюю базу и т.д. Но только не записать() в обработке ожидания.
Открыли документ, что-то изминили, сохранять не собирались при этом, а тут такой п…ц с этим «автосохранением»
+ при использовании ложного закрытия, сбивается фокус с ТЧ дока.. + если набивали текст, он тоже в проё..бе будет, ну и т.д.
тьфу мля, тема то баян.. реинкорнаторы на
автор молодец, иногда нужно сохранить изменения в конфигурации, а бухгалтер оставил наполовину заполненый приходник и ушел на обед. ты его кышнул а потом выслушиваешь, но это все в прошлом)