7.7 Непонятное "зависание" 1С

Тема в разделе "Конфигурирование на платформе "1С:Предприятие 7.7"", создана пользователем X-Man, 14 дек 2012.

  1. TopicStarter Overlay
    X-Man
    Offline

    X-Man Опытный в 1С

    Регистрация:
    18 май 2007
    Сообщения:
    428
    Симпатии:
    3
    Баллы:
    29
    Всем доброго времени суток. Есть вот такой код:
    Код:
    Попытка
    ОткрытьФормуМодально(Эл,ФормаЗаписи);	 
    Исключение
    Предупреждение("Не судьба!");
    Возврат;
    КонецПопытки;
    Вызывается при щелчке по таблице значений. Проблема в том, что когда попытка удачна, то все работает нормально, но когда выполняется исключение, после того как на появившееся сообщение пользователь ответит "ОК"-1с зависает и закрыть ее можно только завершив соответствующий процесс. Если убрать попытку, то вылетает по ошибке "Ошибка обращения к данным при транзакции, выполняемой другим пользователем", и, что самое интересное ТОЖЕ ЗАВИСАЕТ!!!
    Помогите, я уже выбился из сил, не знаю, что делать. Надо работой серьезной заниматься, а тут эта мелочь пузатая, блин:(
  2. dianofob
    Offline

    dianofob (-_-)y-.o0O

    Регистрация:
    3 июл 2009
    Сообщения:
    711
    Симпатии:
    0
    Баллы:
    26
    м.б. так?

    попытка
    открытьмодально()
    исключение
    сообщить()
    конецпопытки;
  3. Бухгалтерский угодник
    Offline

    Бухгалтерский угодник Администраторы Команда форума Администратор

    Регистрация:
    29 дек 2008
    Сообщения:
    21.520
    Симпатии:
    407
    Баллы:
    104
    Можно более подробно описать в каком месте такое возникает? Что делаете?
  4. WaRDeR
    Offline

    WaRDeR Модераторы Команда форума Модератор

    Регистрация:
    23 ноя 2006
    Сообщения:
    3.263
    Симпатии:
    14
    Баллы:
    29
    Если есть транзакция, то открывать модальные окна (диалоги объектов и предупреждения/вопросы) категорически запрещено. За это сразу увольнять нужно!

    PS за использование запросов в циклах, кстати, тоже нужно "наказывать"
  5. TopicStarter Overlay
    X-Man
    Offline

    X-Man Опытный в 1С

    Регистрация:
    18 май 2007
    Сообщения:
    428
    Симпатии:
    3
    Баллы:
    29
    Ну и как же узнать, есть ли транзакция на момент открытия окна?
  6. TopicStarter Overlay
    X-Man
    Offline

    X-Man Опытный в 1С

    Регистрация:
    18 май 2007
    Сообщения:
    428
    Симпатии:
    3
    Баллы:
    29
    Есть справочник Пользователи, ему подчинен справочник ПраваНаДокументы, состоящий из реквизитов Право(Просмотр, ВводНового и т.д, перечисление) и Срок(число)-количество дней, в течение которого это право применимо(начиная от даты документа). На форме элемента справочника Пользователи есть таблица значений, заполненная на основании подчиненного справочника ПраваНаДокументы. При щелчке по ячейке таблицы значений в справочнике ПраваНаДокументы ищется соответствующий элемент и открывается модально его форма:
    Код:
    Попытка
    ОткрытьФормуМодально(Эл,ФормаЗаписи); 
    Исключение
    Предупреждение("Не судьба!");
    Возврат;
    КонецПопытки;
  7. Бухгалтерский угодник
    Offline

    Бухгалтерский угодник Администраторы Команда форума Администратор

    Регистрация:
    29 дек 2008
    Сообщения:
    21.520
    Симпатии:
    407
    Баллы:
    104
    а для чего вы вообще его открываете модально? Что за необходимость-то? ведь и без модального окна всегда можно знать принадлежность и открытость формы (ТипЗначения(ПереданныйПараметр)=100)
  8. TopicStarter Overlay
    X-Man
    Offline

    X-Man Опытный в 1С

    Регистрация:
    18 май 2007
    Сообщения:
    428
    Симпатии:
    3
    Баллы:
    29
    Дело не в этом. После открытия формы идёт последовательность операторов, которая должна выполняться ТОЛЬКО после закрытия формы. Если открывать форму в обычном режиме(что, кстати, тоже иногда вызывает подобную ошибку), то последовательность операторов начинает выполняться сразу же после открытия(не дожидаясь закрытия).

    А существует ли способ определить, выполняется ли другим пользователем транзакция в данный момент?

    P.S. За ТипЗначения() = 100 огромное спасибо:)
  9. Бухгалтерский угодник
    Offline

    Бухгалтерский угодник Администраторы Команда форума Администратор

    Регистрация:
    29 дек 2008
    Сообщения:
    21.520
    Симпатии:
    407
    Баллы:
    104
    Правильно... Выполняется... Потому что у вас не стоит условие из предыдущего топика..
    + если уж транзакция выскакивает и не на модальном окне, а при простом обращении к элементу......
    Тут надо копать в сторону процедуры которая читает этот подчиненный справочник со стороны юзера. При открытии документа где проверяются права...
    Может там вы чего громоздкого наворотили?
  10. TopicStarter Overlay
    X-Man
    Offline

    X-Man Опытный в 1С

    Регистрация:
    18 май 2007
    Сообщения:
    428
    Симпатии:
    3
    Баллы:
    29
    Да вроде ничего особенного:
    Код:
    Функция глПраваДействия(пКонтекст,пДействие) Экспорт
    СрокДо = 0;
    пСтатус=1;																					  
    //Переопределим права Пользователя
    Спр=СоздатьОбъект("Справочник.Пользователи");
    Спр.НайтиПоНаименованию(СокрЛП(ИмяПользователя()));
    Пользователь=Спр.ТекущийЭлемент();
    Если ПустоеЗначение(Пользователь)=1 Тогда
    Предупреждение("Пользователь системы неопределен!");
    КонецЕсли;
    Если Пользователь.Выбран()=0 Тогда
    Предупреждение("Пользователь не зарегистрирован в справочнике сотрудников! У вас нет права работать с документами!");
    Возврат 0;
    КонецЕсли;				
    Если пДействие <> Перечисление.Действия.просмотр Тогда  
    Если пКонтекст.ДатаДок<=Константа.ДатаЗапретаРедактирования Тогда
    Предупреждение("Нельзя работать с документами, выписанными раньше Константы ДатаЗапретаРедактирования!");
    Возврат 0;
    КонецЕсли;
    Если пКонтекст.ДатаДок<=пКонтекст.Фирма.ДатаЗапретаРедактирования Тогда
    Предупреждение("Нельзя работать с документами фирмы "+пКонтекст.Фирма+", выписанными до Даты запрета Редактирования!  - "+пКонтекст.Фирма.ДатаЗапретаРедактирования);
    Возврат 0;
    КонецЕсли;
    КонецЕсли;
    Если Пользователь.ФлагРедактированияЧужихДокументов = 0 Тогда
    Если пКонтекст.Автор <> Пользователь Тогда
    Предупреждение("У вас нет прав работать с документами других пользователей!");
    Возврат 0;
    КонецЕсли;
    КонецЕсли;
    Если Пользователь.ФлагДоступаКДаннымВсехПодразделений=0 Тогда
    Если пКонтекст.Подразделение <> Пользователь.Сотрудник.Подразделение Тогда
    Предупреждение("У вас нет прав работать с документами других подразделений!");
    Возврат 0;
    КонецЕсли;
    КонецЕсли;
    //Проверка прав пользователя по документам и срокам   
    СрокДо = 0;
    пВид = СокрЛП(Строка(пКонтекст.Вид()));  //ТекущийДокумент().
    Спр_Права = СоздатьОбъект("Справочник.Права");
    Спр_Права.ИспользоватьВладельца(Пользователь); 
    Если Спр_Права.ВыбратьЭлементыПоРеквизиту("Документ",пВид,1,0) = 1 Тогда
    Пока Спр_Права.ПолучитьЭлемент() = 1  Цикл
    Если Спр_Права.ПометкаУдаления() = 1 Тогда
    Продолжить;				  
    КонецЕсли;				   
    Если Спр_Права.Действие = пДействие Тогда	
    СрокДо = Спр_Права.СрокДо;
    Прервать;
    КонецЕсли;				   
    КонецЦикла;						   
    Иначе
    Предупреждение("Нельзя..."+лКрикДуши(пДействие));
    Возврат 0;
    КонецЕсли;
    Если СрокДо = 0 Тогда
    Предупреждение("Нельзя..."+лКрикДуши(пДействие));
    Возврат 0;
    Иначе	 
    Если (пКонтекст.ДатаДок - 1 + СрокДо) < ТекущаяДата() Тогда
    Предупреждение(лКрикДуши(пДействие)+" - срок действия "+СрокДо+лПадеж(СрокДо));
    Возврат 0;
    Иначе
    Возврат 1;
    КонецЕсли;
    КонецЕсли;
    КонецФункции
  11. Бухгалтерский угодник
    Offline

    Бухгалтерский угодник Администраторы Команда форума Администратор

    Регистрация:
    29 дек 2008
    Сообщения:
    21.520
    Симпатии:
    407
    Баллы:
    104
    вот все Энти ваши предупреждения.... Да еще без таймера.... Они то и блокируют! ОНИ МОДАЛЬНЫ. А вы-то как раз документ открываете... Транзакция!
    Попробуйте заменить на вызов обработки которая выводит окно сообщения (если вам надо в окне) НО НЕ МОДАЛЬНО. Или юзайте сообщить
  12. TopicStarter Overlay
    X-Man
    Offline

    X-Man Опытный в 1С

    Регистрация:
    18 май 2007
    Сообщения:
    428
    Симпатии:
    3
    Баллы:
    29
    А при открытии документа тоже транзакция открывается? Хотя, какая разница. Эта процедура и при записи вызывается:(

    Спасибо, попробую последовать Вашему совету.
  13. Бухгалтерский угодник
    Offline

    Бухгалтерский угодник Администраторы Команда форума Администратор

    Регистрация:
    29 дек 2008
    Сообщения:
    21.520
    Симпатии:
    407
    Баллы:
    104
    Да. Вы же журнал "хватаете". Золотое правило - при открытии/создании/проведении никаких модальных окон. WaRDeR верно сказал - за такое увольняют
  14. TopicStarter Overlay
    X-Man
    Offline

    X-Man Опытный в 1С

    Регистрация:
    18 май 2007
    Сообщения:
    428
    Симпатии:
    3
    Баллы:
    29
    Ну я еще только учусь:)
  15. Бухгалтерский угодник
    Offline

    Бухгалтерский угодник Администраторы Команда форума Администратор

    Регистрация:
    29 дек 2008
    Сообщения:
    21.520
    Симпатии:
    407
    Баллы:
    104
    Похвально... Но запомните ЭТО правило навсегда. Как можно меньше модальных окон
Похожие темы
  1. Ktyf
    Ответов:
    13
    Просмотров:
    764
  2. Bambrlog
    Ответов:
    4
    Просмотров:
    713
Загрузка...

Поделиться этой страницей