Имя: Пароль:
1C
1С v8
Автозапись документа во время время !
, ,
0 Шахзод
 
23.07.21
09:23
Нашёл код автозаписи документа,но он работает после записи и при редактировании документа:

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

// ...

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

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

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

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