|
v7: Глюк 7.7. ищу способ лечения. | ☑ | ||
---|---|---|---|---|
0
Alexor
28.01.14
✎
17:51
|
Всем привет.
Комплекная 7.7.533, но релиз не важен. База DBF. В терминале 2008. В документе реализация я создаю счет-фактуру, нажав кнопку "Счет-фактура" Если в этот момент, кто-то проводит другой документ, возникает транзакция. и появляется сообщение об ошибке: ОткрытьФорму("Документ."+ВидСФ,ФормаНакладной,Конт.ТекущийДокумент()); {Глобальный модуль(4769)}: Таблица: 1SJOURN Ошибка обращения к данным при транзакции, выполняемой другим пользователем У пользователя время захвата таблицы стоит 0. Поэтому выдает это сообщение почти сразу. Она может кучу раз нажать на кнопку и получить данное сообщение. Потом она в итоге проводит документ. Но возникает следующий момент. Пользователь закрыла все документы, открытого ничего нет. закрывает программу и возникает окно "Сохранить документ?" Причем этот вопрос вылезет столько раз, сколько у нее было безуспешных попыток. Может кто-то сталкивался и лечил этот момент? Пока мысли вернуть время захвата на 5-10 сек и vk_sleep поставить. |
|||
1
vladko
28.01.14
✎
17:56
|
попробуй минуту поставить
|
|||
2
Ёпрст
28.01.14
✎
17:56
|
поставить цикл на открытие и количество попыток, скажем, 20.
После неуспешного количества попыток юзверю отбой с выдачей сообщения - повтори ышо разок. Усё. |
|||
3
Nandarou
28.01.14
✎
17:58
|
"У пользователя время захвата таблицы стоит 0" имхо для 1с 7.7 это слишком жестко.
|
|||
4
Alexor
28.01.14
✎
17:59
|
(2) Я так понимаю, цикл только ухудшит ситуацию.
(1) Угу, сразу час можно. Или программу закрывать. |
|||
5
Ёпрст
28.01.14
✎
17:59
|
(3) это самое православное решение
|
|||
6
Ёпрст
28.01.14
✎
17:59
|
(4) ничем не ухудшит
|
|||
7
Alexor
28.01.14
✎
18:01
|
(6) Так программа 20 раз попробует, предположим на 19 проведет.
Тогда у пользователя при закрытии 19 раз будет программа спрашивать "сохранить?" |
|||
8
Alexor
28.01.14
✎
18:01
|
Сейчас Попытку с Исключением попробую туда воткнуть.
|
|||
9
Ёпрст
28.01.14
✎
18:02
|
(7) не факт, у нас не спрашивает.
У тя еще какие вк используются ? Такое сообщение тоже было. Не помню ужо, чем вылечилось. |
|||
10
Ёпрст
28.01.14
✎
18:02
|
И то не у всех.
|
|||
11
Alexor
28.01.14
✎
18:03
|
(9) Для проверки все ВК отключил.
используем 1cpp.dll formex.dll 1sqlite.dll |
|||
12
Alexor
28.01.14
✎
18:05
|
Я просто для проверки в одном документе ПКО в модуле проведения Предупреждение поставил.
под одним пользователем это ПКО проводить поставил, транзакцию создал. Под другим пытался из реализации счет-фактуру создать. Пробовал на разных релизах и железе. |
|||
13
Alexor
28.01.14
✎
18:16
|
Вставил Попытка Исключение.
не помогло. Сообщение ...Таблица: 1SJOURN Ошибка обращ... не пишет, но при закрытии спрашивает. Процедура глВводСчетаФактуры(Конт,ВидСФ) Экспорт Перем ФормаСчФ; Если Конт.Проведен()=0 Тогда Предупреждение("Счет-фактуру нельзя вводить на основании не проведенного документа!", 60); Возврат; КонецЕсли; СчетФактура = глНайтиСчетФактуру(Конт,ВидСФ); ФормаНакладной = Конт; Если ПустоеЗначение(СчетФактура) = 1 Тогда Если Конт.Модифицированность() = 1 Тогда Предупреждение("Документ был изменен! Сначала следует записать документ!", 60); Возврат; КонецЕсли; Попытка ОткрытьФорму("Документ."+ВидСФ,ФормаНакладной,Конт.ТекущийДокумент()); Исключение Сообщить("Ошибка создания документ попробуйте позднее."); КонецПопытки; Иначе ОткрытьФорму(СчетФактура,ФормаНакладной); КонецЕсли; КонецПроцедуры //глВводСчетаФактуры() |
|||
14
Мимохожий Однако
28.01.14
✎
18:17
|
В похожих ситуациях я объяснял, чтобы не жмакала 19 раз, а досчитала до 10 )) . Но , судя по всему, этот вариант ТС не устраивает.
|
|||
15
Alexor
28.01.14
✎
18:22
|
(14) Беседа проведена. :)
Но им же надо всегда срочно. Буду vk_sleep пробовать, в свое время что то не удалось поставить. |
|||
16
Мимохожий Однако
28.01.14
✎
18:24
|
(15)Я объяснил, что если будут торопиться, то будет еще медленнее. А все попытки обмануть транзакцию бесполезны. Можно обмануть только пользователя.
|
|||
17
temsa
28.01.14
✎
19:00
|
А что если врубить "начатьтрнзакцию " тд?
|
|||
18
Klesk666
28.01.14
✎
19:07
|
не знаю чьё, но спасибо ему:
//****************************************************************************** // Предопределенная процедура // Процедура УстановитьВремяОжиданияЗахватаТаблиц() Кат = КаталогПользователя(); Файл = СоздатьОбъект("Текст"); Файл.Открыть(Кат+"1Cv7.CFG"); флИзменилиRefreshTime = 0; флИзменилиLockWaitTime = 0; ФлИзменилиПараметрыОперативногоУчета=0; СтрокаRefreshTime = "{"+Симв(34)+"RefreshTime"+Симв(34); ПараметрRefreshTime = ","+Симв(34)+"30"+Симв(34)+"},"; СтрокаLockWaitTime = "{"+Симв(34)+"LockWaitTime"+Симв(34); ПараметрLockWaitTime = ","+Симв(34)+"0"+Симв(34)+"}},"; СтрокаNewNotAskTime = "{"+Симв(34)+"NewNotAskTime"+Симв(34); ПараметрNewNotAskTime = ","+Симв(34)+"1"+Симв(34)+"},"; СтрокаNewAfterAP = "{"+Симв(34)+"NewAfterAP"+Симв(34); ПараметрNewAfterAP = ","+Симв(34)+"1"+Симв(34)+"},"; СтрокаNewCloseInStream = "{"+Симв(34)+"NewCloseInStream"+Симв(34); ПараметрNewCloseInStream = ","+Симв(34)+"1"+Симв(34)+"},"; СтрокаNewSetCurTime = "{"+Симв(34)+"NewSetCurTime"+Симв(34); ПараметрNewSetCurTime = ","+Симв(34)+"0"+Симв(34)+"}},";; КвоСтрокТекста = Файл.КоличествоСтрок(); Для Н = 1 По КвоСтрокТекста Цикл //Если (флИзменилиLockWaitTime = 1) //И (флИзменилиRefreshTime = 1) Тогда // Прервать; //КонецЕсли; ТекСтрока = Файл.ПолучитьСтроку(Н); Если Лев(ТекСтрока,14) = СтрокаRefreshTime Тогда Если Прав(ТекСтрока,8) <> ПараметрRefreshTime+Симв(10) Тогда ТекСтрока = "{"+Симв(34)+"RefreshTime"+Симв(34)+","+Симв(34)+"30"+Симв(34)+"},"; Файл.УдалитьСтроку(Н); Файл.ВставитьСтроку(Н,ТекСтрока); флИзменилиRefreshTime = 1; КонецЕсли; ИначеЕсли Лев(ТекСтрока,15) = СтрокаLockWaitTime Тогда Если Прав(ТекСтрока,8) <> ПараметрLockWaitTime+Симв(10) Тогда ТекСтрока = "{"+Симв(34)+"LockWaitTime"+Симв(34)+","+Симв(34)+"0"+Симв(34)+"}},"; Файл.УдалитьСтроку(Н); Файл.ВставитьСтроку(Н,ТекСтрока); флИзменилиLockWaitTime = 1; КонецЕсли; ИначеЕсли Лев(ТекСтрока,16) = СтрокаNewNotAskTime Тогда Если Прав(ТекСтрока,7) <> ПараметрNewNotAskTime+Симв(10) Тогда ТекСтрока =СтрокаNewNotAskTime+ПараметрNewNotAskTime+Симв(10); Файл.УдалитьСтроку(Н); Файл.ВставитьСтроку(Н,ТекСтрока); ФлИзменилиПараметрыОперативногоУчета = 1; КонецЕсли; ИначеЕсли Лев(ТекСтрока,13) = СтрокаNewAfterAP Тогда Если Прав(ТекСтрока,7) <> ПараметрNewAfterAP+Симв(10) Тогда ТекСтрока =СтрокаNewAfterAP+ПараметрNewAfterAP+Симв(10); Файл.УдалитьСтроку(Н); Файл.ВставитьСтроку(Н,ТекСтрока); ФлИзменилиПараметрыОперативногоУчета = 1; КонецЕсли; ИначеЕсли Лев(ТекСтрока,19) = СтрокаNewCloseInStream Тогда Если Прав(ТекСтрока,7) <> ПараметрNewCloseInStream+Симв(10) Тогда ТекСтрока =СтрокаNewCloseInStream+ПараметрNewCloseInStream+Симв(10); Файл.УдалитьСтроку(Н); Файл.ВставитьСтроку(Н,ТекСтрока); ФлИзменилиПараметрыОперативногоУчета = 1; КонецЕсли; ИначеЕсли Лев(ТекСтрока,16) = СтрокаNewSetCurTime Тогда Если Прав(ТекСтрока,8) <> ПараметрNewSetCurTime+Симв(10) Тогда ТекСтрока =СтрокаNewSetCurTime+ПараметрNewSetCurTime+Симв(10); Файл.УдалитьСтроку(Н); Файл.ВставитьСтроку(Н,ТекСтрока); ФлИзменилиПараметрыОперативногоУчета = 1; КонецЕсли; КонецЕсли КонецЦикла; Если (флИзменилиLockWaitTime = 1) Или (флИзменилиRefreshTime = 1) или (ФлИзменилиПараметрыОперативногоУчета=1) Тогда Попытка Файл.Записать(Кат+"1Cv7.CFG"); Записан = 1; Исключение Сообщить(ОписаниеОшибки()); КонецПопытки; Файл = 0; Если Записан = 1 Тогда Предупреждение("Изменились параметры опроса данных БД или |параметры проведения оперативных документов, |необходимо завершить работу 1С и войти снова",5); СтатусВозврата(0); //ЗавершитьРаботуСистемы(0); КонецЕсли; КонецЕсли; КонецПроцедуры |
|||
19
Ёпрст
29.01.14
✎
09:55
|
попробуй занулять переменные в глобальнике на выходе
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |