Автосохранение документа в 1С 7.7


В данной статье мы рассмотрим автосохранение документа в 1С 7.7!

Доброго всем времени суток. Иногда (может и частенько) возникает потребность в автосохранении документа. Бывают ситуации, когда набили кучу инфы в документ и бац… вырубили электричество, а у вас нет ИБП (источник бесперебойного питания). И вот начинается ВЕЛИКИЙ и МОГУЧИЙ РУССКИЙ ЯЗЫК! Возможны конечно другие, прочие потребности в автосохранении, но это уже у каждого свое. Итак,… приступим.

Мне была поставлена задача написать автосохранение документа на 1С 7.7 (Сельхозка). Имеется документ: Продажа товаров в розницу, его мы и будем автосохранять. (принцип одинаков, практически для всех конфиг на 7.7, возможны некоторые отличия, но не значительные).

Все выполняется в форме документа. Код изменненного документа:


//Общая переменная

Перем НадоЗаписать;


//Изменения в предопределенную процедуру, для сохранения

Процедура ПриЗакрытии()

Если НадоЗаписать=1 Тогда

Записать();

СтатусВозврата(0);

ОчиститьОкноСообщений();

Сообщить("Документ Автосохранен "+ТекущееВремя());

Возврат;

ИначеЕсли НадоЗаписать=0 Тогда

ОчиститьОкноСообщений();

глОткрытьЖурнал(Контекст, Новый);

КонецЕсли;

КонецПроцедуры // ПриЗакрытии()


 // Для корректного закрытия документа

Процедура ЗакрытьДокумент()

НадоЗаписать=0;

Форма.Закрыть(1);

КонецПроцедуры

  

//Процедура проверки на модификацию

Процедура АвтоЗапись()

Если (Модифицированность()=1) Тогда

НадоЗаписать=1;

Форма.Закрыть(0);

Иначе НадоЗаписать=0;

КонецЕсли;

КонецПроцедуры


//Вызов процедуры, через определнный интервал времени

Форма.ОбработкаОжидания(«АвтоЗапись»,180); //время в секундах 180 секунд

 

Повторюсь, в других конфигурациях аналогичные действия, может за исключением нескольких ньюансов, если таковые имеются!

 


24 Comments

  1. andrewks

    для чего запись реализована в ПриЗакрытии()?

    Reply
  2. kompas-dm

    (0)Мой компьютер- свойства — диспетчер устройств — дисковые устройства — нужный диск —

    свойства — политика — разрешить кеширование » снять «.

    Reply
  3. aagubarev

    (1) andrewks, Процедура ПриЗакрытии — это предопределенная процедура закрывающая документ. Т.к. мы не можем использовать метод Записать() в 1С 7.7 в любом месте кода, как в 1С 8, приходится извращаться. А использовать метод Записать() в процедуре ПриЗакрытии() срабатывает несколько не удобно, скорее не так как хотелось бы.

    Reply
  4. Степанова Н.

    А мы перешли на 8-ку и забыли про 7-ку

    Reply
  5. andrewks

    (3)

    Т.к. мы не можем использовать метод Записать() в 1С 7.7 в любом месте кода

    это кто такое сказал? расшифруйте, может, я чего-то не так понял

    Reply
  6. Иваныч

    Решение правильное. Сам попадал в подобных ситуациях. Спасибо

    Reply
  7. aagubarev

    andrewks, попробуйте выполнить метод Записать() в форме документа в любом месте или своей процедуре в модуле формы. у меня не получилось.

    Reply
  8. aagubarev

    Иваныч, пользуйтесь. спасибо.

    Reply
  9. andrewks

    (7) не только пробую, но и пользуюсь в своих конфах уже несколько лет. а вот в коде, вызываемом из ОбработкаОжидания() — действительно болт, поэтому выход — через ложное закрытие

    Reply
  10. aagubarev

    andrewks, приведите пример своего кода пожалуйста, где используете в модуле формы метод Записать(). интересно как вы реализовали!

    Reply
  11. andrewks

    (10) да чего приводить, создайте кнопку, и в её обработчике сразу напишите Записать(); — всё работает. а вот если этот же обработчик назначить в ОбработкаОжидания() — будет выдавать ошибку

    Reply
  12. aagubarev

    По кнопке то понятно, тут имеется ввиду запись через определенное время.

    Reply
  13. aagubarev

    Если бы можно было бы сделать так ОбработкаОжидания(Записать(),180) — это другое дело

    Reply
  14. pan76

    (13) А если форма документа открыта модально или человек ушел курить при открытом окне вопроса,предупреждения и т.п.? Штатная ОбработкаОжидания тогда не сработает. Лучше, мне кажется, вызывать метод Записать() в процедуре

    ПриОкончанииРедактированияСтроки(), причем можно не в каждой строке, а через установленное количество.

    Reply
  15. aagubarev

    1. это не критично.

    2. можно много чего нагородить

    3. у каждого условия и требования определенные.

    Reply
  16. Dimasik2007

    Делал подобное, правда в обработке загрузки данных с банк-клиента, не в документе. Причем сериализовал данные в XML, и его сохранял локально у пользователя, не дергая каждый раз сервер на запись. При сбое питания/сервера/etc пользователь открывает заново обработку и ему систем подсказывает, что есть бэкап данных.

    Reply
  17. aagubarev

    Тоже как вариант!

    Reply
  18. piloturs

    (0)

    вырубили электричество, а у вас нет ИБП

    м-да… это садо-мазо

    Возможны конечно другие, прочие потребности в автосохранении

    интересно, какие еще потребности , кроме приведенного Вами садо-мазо, возможны?

    Reply
  19. aagubarev

    Специально для Вас, ЛЕНЬ к примеру.

    Reply
  20. aagubarev

    Если не интересна тема или что-то не устраивает. Лучше не пишите ерунды!)

    Reply
  21. Ёпрст

    Метод скорее вредный, чем полезный.

    Если и сохранять — то отдельно куда угодно — в файло, в стороннюю базу и т.д. Но только не записать() в обработке ожидания.

    Открыли документ, что-то изминили, сохранять не собирались при этом, а тут такой п…ц с этим «автосохранением»

    Reply
  22. Ёпрст

    + при использовании ложного закрытия, сбивается фокус с ТЧ дока.. + если набивали текст, он тоже в проё..бе будет, ну и т.д.

    Reply
  23. Ёпрст

    тьфу мля, тема то баян.. реинкорнаторы на

    Reply
  24. mt111

    автор молодец, иногда нужно сохранить изменения в конфигурации, а бухгалтер оставил наполовину заполненый приходник и ушел на обед. ты его кышнул а потом выслушиваешь, но это все в прошлом)

    Reply

Leave a Comment

Ваш адрес email не будет опубликован. Обязательные поля помечены *