Вход | Регистрация
 
1С:Предприятие :: 1С:Предприятие 8 общая

Автозапись документа во время время !

Автозапись документа во время время !
Я
   Шахзод
 
23.07.21 - 09:23
Нашёл код автозаписи документа,но он работает после записи и при редактировании документа:

&НаКлиенте
Перем ПоследнееСохранение;

// ...

&НаКлиенте
Процедура АвтосохранениеДокумента() Экспорт
    
    Если ПоследнееСохранение = Неопределено Тогда
        ПоследнееСохранение = ТекущаяДата();
    ИначеЕсли Не Объект.Проведен И Модифицированность И ( Объект.Товары.Количество() Или          Объект.ВозвратнаяТара.Количество() )
    И ТекущаяДата() - ПоследнееСохранение >= 30    
    Тогда
        ПоследнееСохранение = ТекущаяДата();
        Попытка
            Записать(Новый Структура("Автосохранение", Истина));
        Исключение
            Сообщить(ОписаниеОшибки());
            ОтключитьОбработчикОжидания("АвтосохранениеДокумента");
        КонецПопытки;
    КонецЕсли;
    
КонецПроцедуры

&НаКлиенте
Процедура ПриОткрытии(Отказ)
    ПодключитьОбработчикОжидания("АвтосохранениеДокумента", 1, Ложь);
КонецПроцедуры

&НаСервере
Процедура ПередЗаписьюНаСервере(Отказ, ТекущийОбъект, ПараметрыЗаписи)
    Если ПараметрыЗаписи.Свойство("Автосохранение") И ПараметрыЗаписи.Автосохранение Тогда
        ПараметрыЗаписи.РежимЗаписи = РежимЗаписиДокумента.Запись;
    КонецЕсли;
КонецПроцедуры

Нужно чтобы он срабатывал во время написании списка т.е во время работы с ним,
Не могу догнать,что переделать в коде,помогите пожалуйста докончить это задание!
   Pro-tone
 
1 - 23.07.21 - 09:26
(0) мало чего понял, но похоже тебе надо ПодключитьОбработчикОжидания
   Beduin
 
2 - 23.07.21 - 09:27
&НаКлиенте
Процедура ТутЧтоТоТвоеПриОкончанииРедактирования(Элемент, НоваяСтрока, ОтменаРедактирования)
    // Вставить содержимое обработчика.

КонецПроцедуры
   ДенисЧ
 
3 - 23.07.21 - 09:31
ПодключитьОбработчикОжидания("АвтосохранениеДокумента", 1, Ложь);
10 раз в секунду сохраняться - это круто...
   Kassern
 
4 - 23.07.21 - 09:35
(3) почему 10 раз в секунду то? Вроде как интервал там в секундах, раз в секунду получается) Да и новое сохранение не запустится по идее, пока старый обработчик не отработал. Вряд ли документ за 1 сек запишется
   ДенисЧ
 
5 - 23.07.21 - 09:45
(4) "<Интервал> (обязательный)
Тип: Число. 
Интервал времени в секундах с точностью до 1/10 секунды"

Продам СП, дорого.
   Чинухов
 
6 - 23.07.21 - 09:47
(5) Так разве если 10 раз в секунду надо, не 0.1 в параметрах указывают? Сдаётся, что нет у тебя права СП продавать...
   ДенисЧ
 
7 - 23.07.21 - 09:49
(6) нет.
   Beduin
 
14 - 23.07.21 - 09:59
А цель же при редактировании списка записать. Чем (2) не подходит?
   Serg_1960
 
15 - 23.07.21 - 10:01
2. Флейм и оффтопик в тематических разделах 1С и IT не допускается.
PS: ДенисЧ признал отсутствие права на продажу СП :)
   Kassern
 
16 - 23.07.21 - 10:02
(0) вы чего этим кодом добиться хотите? Зачем мучить 1ску вашими обработчиками с такой периодичностью? "Нужно чтобы он срабатывал во время написании списка" для чего? О каком списке речь?
   Pro-tone
 
19 - 23.07.21 - 10:05
(16) там похоже табчасть на 100к строк, операторы бд забывают нажать записать каждые 3 минуты, закрывают случайно, все теряется и потом у них истерика в адрес тс
   fisher
 
20 - 23.07.21 - 10:05
(16) Например, в документе происходит взвешивание. Одна строка - одно взвешивание. Взвешивания трудоемкие. Если "слетит" документ - беда. Задача нетривиальная. Отдельные документы, регистр, автосохранение - все со своими подводными камнями.
   Kassern
 
21 - 23.07.21 - 10:07
(19) (20) хочется от ТС услышать, что у него там твориться, может и без таких танцев с бубном можно реализовать
   Чинухов
 
22 - 23.07.21 - 10:08
(19) При такой постановке, код в (0), в общем, вполне подходит :)
   Serg_1960
 
23 - 23.07.21 - 10:08
Эээ... автор как бэ предупредил, что "это задание". Нет смысла искать смысл :)
   Шахзод
 
24 - 23.07.21 - 10:42
(1) Обработчик ожидания уже подключен, не понял тебя?
   Шахзод
 
25 - 23.07.21 - 10:50
Пользователь работает сразу в n-документах или набивает большую накладную, и обрывается связь с сервером или происходит обновление базы, то велика вероятность, что он (пользователь) будет не очень счастлив, когда поймёт, что теперь придётся делать всё заново.
Нашёл код автозаписи, но он сохраняет документы после записи или при редактировании, надо чтобы он записивал документ хотябы каждую минтуту во время написнии накладного!
   Kassern
 
26 - 23.07.21 - 11:07
(25) в клиент серверном варианте новые платформы более менее нормально разрывы связи отрабатывают.
А теперь по поводу кода:
1)"И ТекущаяДата() - ПоследнееСохранение >= 30 " накой это дело, когда можно задать интервал в обработчике ожидания?
2) "Если ПоследнееСохранение = Неопределено Тогда " Тогда у тебя ничего не запишется.
3)  "Не Объект.Проведен И Модифицированность И ( Объект.Товары.Количество() Или          Объект.ВозвратнаяТара.Количество() ) И ТекущаяДата() - ПоследнееСохранение >= 30 " 
Это значит, что у вас документ запишется только в случае, если он не проведен и есть изменения и Табличная часть ПУСТАЯ И прошло 30сек с момент "последней записи".
В вашем случае достаточно проверить на модификацию, проведен и чтобы ТЧ была хоть чем то заполнена, в этом случае записывайте документ. Интервал записи укажите в обработчике.
   fisher
 
27 - 23.07.21 - 11:08
Вероятнее всего, документ уже проведен.
   Kassern
 
28 - 23.07.21 - 11:19
(26) С ТЧ я конечно загнал, Объект.Товары.Количество() нормально отрабатывает. Но лучше явно писать. Скорее всего да, (27)  документ проведен.
   Шахзод
 
29 - 23.07.21 - 12:42
(26) Можете написать код или исправить мой код, голова сильно кипит, буду очень благодарен!
   Kassern
 
30 - 23.07.21 - 12:45
(29) так не интересно. Уберите условие "Не Объект.Проведен" может вам поможет)
 
 
   Kassern
 
31 - 23.07.21 - 12:46
(29) либо скажите сотрудникам, чтобы документ проводили в самом конце, иначе после проведения автосохранения не будет. Еще лучше бы убрать контроль по времени и увеличить интервал до 30сек. Это чтобы каждую секунду эту процедуру не дергать и не проверять на время.
   Pro-tone
 
32 - 23.07.21 - 13:33
(24) попробуй запускать автосохранение в фоне (другим сеансом), тогда это не будет мешать работе, при создании на сервере его вызывай, можешь даже регзадание сделать, и регистр сведений, в который будешь накидывать ссылок для обработки, а после закрытия формы пользователем удалять из него эти ссылки
   Pro-tone
 
33 - 23.07.21 - 13:35
регистр сведений "Объекты для автосохранения", с одним измерением "Объект", можешь историю сохранений там оставлять, тогда периодическим его сделай
   Kassern
 
34 - 23.07.21 - 13:40
(32) а разве так можно? Разве не будет ошибки, когда человек работает с открытой формой документа, а ты пытаешься его записать из вне?
   acht
 
35 - 23.07.21 - 13:59
(32) > автосохранение в фоне (другим сеансом),
Вот даже любопытно стало - как ты собираешся передать мутабельный измененный объект в другой сеанс, чтобы он там записался?
   Kassern
 
36 - 23.07.21 - 14:00
(35) а я думал чудес не бывает)
   Обработка
 
37 - 23.07.21 - 14:10
(25) Не изобретайте велосипеды.
1. организуйте  нормальную связь клиента и сервера
2. Организуйте нормальное обновление базы или конфы.
3. Организуйте юзера чтоб сохранял после каждой строки если надо!
   acht
 
38 - 23.07.21 - 14:32
(36) Ну, говорят, что при записи препаратов на сахар или крупку такой подход работает =)
   Kassern
 
39 - 23.07.21 - 14:36
(37) а юзверы привыкли в экселе, что он автоматом сохраняет вот и начинают капать начальству, а те уже прогера начинают заставлять писать велосипеды. Тут или ты убеждаешь в корявом подходе, или реализуешь с минимальными последствиями (производительность, запись корявых данных, без возможности восстановления, версирование и т.д.)
   Kassern
 
40 - 23.07.21 - 14:37
(39) у меня обычно получается отстоять свою позицию и показать, что будет при реализации их хотелки. Надо уметь находить компромиссы и отстаивать свою позицию)


Список тем форума
 
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.