7.7 Блокировка нескольких документов ОДНОВРЕМЕННО!

Тема в разделе "Конфигурирование на платформе "1С:Предприятие 7.7"", создана пользователем Asttoxa, 16 май 2011.

  1. TopicStarter Overlay
    Asttoxa
    Offline

    Asttoxa Опытный в 1С

    Регистрация:
    18 май 2010
    Сообщения:
    525
    Симпатии:
    0
    Баллы:
    26
    Ребят подскажите как заблокировать несколько доков одновременно?
    Процедурка Блокировать() работает только с одним документом! Тоесть если я в ЦИкле буду блокировать несколько доков ы итоде окажется заблокированным только последний в цикле.
  2. Бухгалтерский угодник
    Offline

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

    Регистрация:
    29 дек 2008
    Сообщения:
    21.520
    Симпатии:
    407
    Баллы:
    104
    Вот рабочий пример.
    Дальше думаю догадаетесь как сделать в цикле.

    Вложения:

    • блок.ert
      Размер файла:
      45 КБ
      Просмотров:
      28
  3. TopicStarter Overlay
    Asttoxa
    Offline

    Asttoxa Опытный в 1С

    Регистрация:
    18 май 2010
    Сообщения:
    525
    Симпатии:
    0
    Баллы:
    26
    В том то и дело, что я так и делал и это на одном доке работает! А если я начинаю два документа закрывать предыдущий снимается.
    По Вашему примеру так:

    Код:
            Д=СоздатьОбъект("Документ");
    Д.НайтиДокумент(ДД);
    Д.Блокировка(1);
    
    Документ который мы выбрали залочит
    Но если сделать на форме 2 окна для доков и код сделать таким:

    Код:
            Д=СоздатьОбъект("Документ");
    Д.НайтиДокумент(ДД);
    Д.Блокировка(1);
    Д.НайтиДокумент(ДД1);
    Д.Блокировка(1);
    
    
    То заблочится только тот док который в конце (в нашем случае это док указанный в поле ДД1)

    Правда если сделать так
    Код:
        
    Д=СоздатьОбъект("Документ");
    Д1=СоздатьОбъект("Документ");
    Д.НайтиДокумент(ДД);
    Д.Блокировка(1);
    Д1.НайтиДокумент(ДД1);
    Д1.Блокировка(1);
    
    То блочится наоборот первый документ а последний остается открытым.
  4. Бухгалтерский угодник
    Offline

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

    Регистрация:
    29 дек 2008
    Сообщения:
    21.520
    Симпатии:
    407
    Баллы:
    104
    Эхххх.... Разумеется.
    Все очевидное - просто. Для аккумулирования объектов можно использовать СписокЗначений или ТаблицуЗначений.
  5. TopicStarter Overlay
    Asttoxa
    Offline

    Asttoxa Опытный в 1С

    Регистрация:
    18 май 2010
    Сообщения:
    525
    Симпатии:
    0
    Баллы:
    26
    Тоесть? Заносить в список значений блоченные Документы? Или я что то не понял??
  6. Бухгалтерский угодник
    Offline

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

    Регистрация:
    29 дек 2008
    Сообщения:
    21.520
    Симпатии:
    407
    Баллы:
    104
    Именно так. Пока список существует - существуют и ссылки, а значит и блокировки
  7. TopicStarter Overlay
    Asttoxa
    Offline

    Asttoxa Опытный в 1С

    Регистрация:
    18 май 2010
    Сообщения:
    525
    Симпатии:
    0
    Баллы:
    26
    Все отлично.
    Теперь без цикла выглядит так:
    Код:
    Перем Д, Спис;
    
    //*******************************************
    Процедура Сформировать()
    Д=СоздатьОбъект("Документ");
    Д1=СоздатьОбъект("Документ");
    
    Д.НайтиДокумент(ДД);
    Д1.НайтиДокумент(ДД1);
    
    Спис.ДобавитьЗначение(Д);
    Спис.ДобавитьЗначение(Д1);
    
    Спис.ПолучитьЗначение(1).Блокировка(1);
    Спис.ПолучитьЗначение(2).Блокировка(1);
    КонецПроцедуры
    
    
    Процедура ПриОткрытии()
    Спис=СоздатьОбъект("СписокЗначений");
    КонецПРоцедуры
    
    Запихну в цикл. И все ок. Спасибо.
  8. Бухгалтерский угодник
    Offline

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

    Регистрация:
    29 дек 2008
    Сообщения:
    21.520
    Симпатии:
    407
    Баллы:
    104
    А так не проще:

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

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