7.7 Помогите пожалуйста с блокировкой документа

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

  1. TopicStarter Overlay
    Double_Medved
    Offline

    Double_Medved

    Регистрация:
    23 авг 2012
    Сообщения:
    4
    Симпатии:
    0
    Баллы:
    1
    Попытаюсь быть кратким.
    1с 7.7 торговля и склад дописанная
    есть 2 склада, оформленные на разные фирмы
    Продают с 1-го, но на нем ничего нет, при проведении документа "реализация - розница" (Например продают 10 гаек) с 1-го склада автоматически формируются 2
    документа:
    1) реализация 10 гаек со 2-го склада (Р)
    2) поступление 10 гаек на 1-й склад. (П)
    И тут же при проведении реализации - розницы 10 гаек списываются с 1-го склада - покупателю.
    Эти документы (Р) и (П) создаются по одному в день, про проведении нескольких реализаций-розниц они открываются и дописываются,
    добавляя стоки в табличную часть, и перепроводятся.

    Почему нельзя было придумать проще 0 не знаю, но от такой системы отказываться не хотят

    проблема в следующем: пользователь 1 за каким-то фигом открывает документ (Р) или (П), пользователь 2 проводит реализацию-розницу, она пытается дописать номенклатуру в (Р) или (П), а он заблокирован, потому что открыт пользователем 1. И (Р) или (П) не обновляется, а реализация - розница проводится, получается расхождение.

    Как мне программно определить хотя бы открыт ли (Р) или (П), чтобы сообщить об этом пользователю, проводящему реализацию - розницу? Заблокирован() не помогает
    В идеале нужно еще сообщить, у какого пользователя открыт документ, но мне хотя бы первое узнать.
  2. Бухгалтерский угодник
    Offline

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

    Регистрация:
    29 дек 2008
    Сообщения:
    21.520
    Симпатии:
    407
    Баллы:
    104
    самое тривиальное и легкореализуемое через файл-флаг. Пишите в него имя пользователя при открытии документа. Ну и удаляйте при закрытии соответственно.
  3. TopicStarter Overlay
    Double_Medved
    Offline

    Double_Medved

    Регистрация:
    23 авг 2012
    Сообщения:
    4
    Симпатии:
    0
    Баллы:
    1
    А можно ли какой нибудь функцией проверить, открыт ли документ в текущий момент времени? Я нашел что-то типа Блокировка(), Заблокирован(), но что-то не катит. А есть что-то типа Открыт()? И при открытии автоматически ставится блокировка? Как 1с отслеживает открыт документ или нет? Извиняюсь за назойливость, очень интересует.
  4. Бухгалтерский угодник
    Offline

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

    Регистрация:
    29 дек 2008
    Сообщения:
    21.520
    Симпатии:
    407
    Баллы:
    104
    Если через создание объекта, то Заблокирован().
    Открыт() - нет такого метода.
    Да. При открытии блокируется файл автоматически самой 1с.
    Информацию об открытых файлах она хранит в служебном файл-флаге 1SDNLOCK.DBF.
  5. WaRDeR
    Offline

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

    Регистрация:
    23 ноя 2006
    Сообщения:
    3.263
    Симпатии:
    14
    Баллы:
    29
    Для решения данной задачи существует масса способов:
    1. Встречал обработку в клубе профессионалов _http://1c.proclub.ru/modules/mydownloads/personal.php?cid=5&lid=2059
    2. и на инфостаре _http://forum.infostart.ru/forum24/topic34969/message665703/
    3. Реализовывал через внешние компоненты _http://antiinfostart.my1.ru/publ/kto_zablokiroval_obekt_7_7_sql_dbf/1-1-0-2
    4. Да и просто использовать встроенные возможности
    Код:
    Если Док.Блокировка(1) = 1 Тогда // документ удалось заблокировать
    // тут наши действия
    Док.Блокировка(0); // Обязательно нужно разблокировать объект
    КонецЕсли;
    
    Можно и комбинировать варианты, в зависимости от задачи.
  6. ZaharovAleksandr
    Offline

    ZaharovAleksandr

    Регистрация:
    17 авг 2012
    Сообщения:
    22
    Симпатии:
    0
    Баллы:
    1
    Была у меня такая же проблема с заблокированными документами. Небольшой модуль для выгонялки.
    Может пригодится кому...
    Новая Константа ДокументЗаблокирован
    В форме любого Документа
    Форма.ОбработкаОжидания("Выгоним",5);

    Код:
    Процедура Выгоним()
    Если ТекущийДокумент() = Константа.ДокументЗаблокированТогда
    Константа.ДокументЗаблокирован= "";
    Сообщить("Документ " + Вид() + " номер: " + НомерДок + " был принудительно закрыт!");
    Форма.Закрыть(0);
    КонецЕсли;   
    КонецПроцедуры  
    Ну соответственно создайте внешнюю обработку-выгонялку Где в форме подставляете нужный Вам документ а в модуле присваиваете константе данный объект
    Или через Общий журнал создать Кнопку , где описать процедурку выгонялки.
    Можно просто предупредить человека, мол у Вас открыт документ, закройте плиз...
  7. WaRDeR
    Offline

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

    Регистрация:
    23 ноя 2006
    Сообщения:
    3.263
    Симпатии:
    14
    Баллы:
    29
    У данного способа одна только проблема - если открыто диалоговое окно (предупреждение, вопрос и т.п.), то обработка ожидания не работает. Нужно использовать внешнюю компоненту.
  8. Saver
    Offline

    Saver

    Регистрация:
    2 авг 2012
    Сообщения:
    19
    Симпатии:
    0
    Баллы:
    1
    я в таких случаях использую конструкцию попытка - исключение...и в случае невозможности сохранения документа(исключение) сообщаю пользователю, что мол пока нельзя и запрещаю дальнейшее сохранение-проведение. Если очень нужно сообщить у кого именно открыт документ - вводим доп реквизит в который сохраняем кто открыл док и соответственно выводим в сообщении о невозможности проведения в данный момент.
  9. WaRDeR
    Offline

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

    Регистрация:
    23 ноя 2006
    Сообщения:
    3.263
    Симпатии:
    14
    Баллы:
    29
    Полагаю, база не большая и пользователей не много :)

    При активном использовании базы - это серьезный удар по производительности.
  10. Saver
    Offline

    Saver

    Регистрация:
    2 авг 2012
    Сообщения:
    19
    Симпатии:
    0
    Баллы:
    1
    постоянно активных пользователей около 30 - полет нормальный

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