Объект заблокирован

Тема в разделе "1C и всё что с ней связано", создана пользователем krenk, 22 янв 2009.

Статус темы:
Закрыта.
  1. krenk

    krenk Гость

    Ситуация такая: есть документ2, у него есть докОснование. при работе с документом2 необходимо записать изменения в докОснование, чтоб прочитать их потом из других документов2 с этим докОснованием.

    порядок действий -> делаем докОснование ручкуми, записсываем, проводим -> жмем ВвестиНаОсновании, получаем документ2, делаем в нем манипуляции (флажки, даты) -> жмем записать и закрыть.... вот тут естьпроблема:

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

    //********************* ДокДиагностики - ДокументОснование для текущего документа

    ДокДиагностики.Контрагент=Контрагент;
    ДокДиагностики.Автомобиль =Авто.ТекущийЭлемент();
    ДокДиагностики.БыстрыйВвод=0;
    ДокДиагностики.ВремяЗаезда =Время;
    ДокДиагностики.ДатаНаРемонт=сзДниМастера.ПолучитьЗначение(сзДниМастера.ТекущаяСт
    рока());
    ДокДиагностики.ДатаВозврата=фДатаВозврата;
    ДокДиагностики.СостояниеОбращения=Макс(СостояниеОбращения,ДокДиагностики.Состоян
    иеОбращения);

    ДокДиагностики.Записать(); //вот тут
    ДокДиагностики.Провести();

    //*********************

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

    проблема в том, что если документ2 был только что создан, то выпадает ошибка " Объект заблокирован: ...", а если открываем уже давно созданный и записаный документ2, проделываем аналогичные операции, ошибка не вылезает... :(

    Вопрос: ЧТО блокирует документ??? (я в базе один и монопольно, открыт только один документ2)

    спасите!!! уволят!!! B)
     
  2. Hryv

    Hryv Гость

    Видимо из-за того, что в процедуру ВводНаОсновании передается ДокументОснование, то вводящийся док и блокирует свое основание, пока не закроется

    Решить, наверное, можно если вводить не на основании а повесить кнопочку в журнале где лежат ДокДиагностики
    и по ней делать вызов формы нового документа ОткрытьФорму(<ОписательОбъекта>,<КонтекстФормы>,<ДокументОснование>)
    только ДокументОснование (атрибут журнала ТекущийДокумент) передавай как <КонтекстФормы>, а не <ДокументОснование>

    Подробнее посмотри в синтакс-помощнике "Открыть форму нового документа"

    Код из ВводНаОсновании перекинь в ВводНового
     
  3. krenk

    krenk Гость

    мдя.... убрал процедуру ВводНаОсновании, сделал открытие с передачей ДокДиагностики как параметра, заполнил по нему документ2....

    результат не особо изменился....

    Видимо, записать ДокДиагностики не получится пока он висит в ДокументОснование в новом документе2...
    пойду думать че-нить другое...
     
  4. Hryv

    Hryv Гость

    А ДокДиагностики - это реквизит в документе2
    Или ДокДиагностики = СоздатьОбъект("...");
     
  5. puh14

    puh14 Well-Known Member
    1C Team

    Регистрация:
    11 июл 2008
    Сообщения:
    1.412
    Симпатии:
    0
    Судя по тому, что у тебя ДокДиагностити не через СоздатьОбъект, то он идет как переменная Модуля. Если он не переменная модуля - тогда как глобальная. Если он идет как реквизит тогда лучше сделать

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

    //********************* ДокДиагностики - ДокументОснование для текущего документа
    ДокДиагностики1 = СоздатьОбъект("Документ");
    Если ДокДиагностики1.НайтиДокумент(ДокДиагностики) = 1 Тогда
    ДокДиагностики1.Контрагент=Контрагент;
    ДокДиагностики1.Автомобиль =Авто.ТекущийЭлемент();
    ДокДиагностики1.БыстрыйВвод=0;
    ДокДиагностики1.ВремяЗаезда =Время;
    ДокДиагностики1.ДатаНаРемонт=сзДниМастера.ПолучитьЗначение(сзДниМастера.ТекущаяС
    т
    рока());
    ДокДиагностики1.ДатаВозврата=фДатаВозврата;
    ДокДиагностики1.СостояниеОбращения=Макс(СостояниеОбращения,ДокДиагностики.Состоя
    н
    иеОбращения);

    ДокДиагностики1.Записать();
    ДокДиагностики1.Провести();
    КонецЕСли;

    //*********************

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

    Если таки переменная - постарайся использовать её только в ПРиЗаписи
     
Загрузка...
Статус темы:
Закрыта.

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