8.х Блокировка документов

Тема в разделе "Общие вопросы "1С:Предприятие 8"", создана пользователем pash_ka_1984, 7 май 2009.

  1. TopicStarter Overlay
    pash_ka_1984
    Offline

    pash_ka_1984

    Регистрация:
    6 май 2009
    Сообщения:
    7
    Симпатии:
    0
    Баллы:
    1
    Здравствуйте.

    Стоит следующая задача. Есть несколько десятков документом в которые заносят данные (пусть документ А). Затем данные из этих документов попадают в несколько других в которых они утверждаются (пусть документ Б). Необходимо чтобы когда открыт документ Б документы А не могли быть изменены. И когда открыт документ А то в документе Б утвердить эти данные нельзя.

    Есть следующие мысли по решению. Сделать регистр сведений и туда записывать какой документ каким блокируется и указывается пользователь кто заблокировал.

    Проблема в следующем. Запись в регистр заносится при открытии а удаляется при закрытии. Но очень часто пользователи закрывают 1С неправильно и в регистре остаются ссылки. как можно проверить действительно открыт документ или ссылка неверная.
  2. BabySG
    Offline

    BabySG Администраторы Команда форума Администратор

    Регистрация:
    10 июн 2007
    Сообщения:
    11.853
    Симпатии:
    12
    Баллы:
    29
    Можно, например, через транзакции сделать, но с блокировками будут проблемы.

    А так - задача странная - если УЖЕ существует документ Б (утверждающий данные из документа А) - как можно менять документа А?

    Расскажите подробнее, что за задача, может есть просто другое решение?
  3. TopicStarter Overlay
    pash_ka_1984
    Offline

    pash_ka_1984

    Регистрация:
    6 май 2009
    Сообщения:
    7
    Симпатии:
    0
    Баллы:
    1
    Ситуация следующая. Документ А содержит бюджет подразделения по статьям затрат. Бюджет подразделения утверждается последовательно 1-5 людьми. Когда весь бюджет подразделения утвержден то данные из него попадаеют на утверждение к руководителям направления. Их к примеру три и они утверждают одновременно. при этом в одном документе А могут быть строки которые должны быть утверждены всеми руководителями. Для отметки утверждена строка или нет я использую реквизит в таблице документа А. Соответственно может возникнуть ситуация когда ктото решит открыть документ А когда его будут утверждать в документах Б. Вот нужно чтобы зайти можно было бы а изменить нельзя.

    В 7 я делал следующим образом. В спец таблице хранил ссылки на все документы которыми заблокирован данный и при открытии проверял каждый из них на попытку записи. Там если документ открыт одним пользователем второй его записать не мог. А в 8 как я понял можно записывать документ независимо открыт он у другого или нет.
  4. BabySG
    Offline

    BabySG Администраторы Команда форума Администратор

    Регистрация:
    10 июн 2007
    Сообщения:
    11.853
    Симпатии:
    12
    Баллы:
    29
    Используйте для утверждения РС и не парьтесь.
    Перед записью проверяйте изменения и наличие утверждения.
    Использовать реквизит в документе - неверная методология.
  5. TopicStarter Overlay
    pash_ka_1984
    Offline

    pash_ka_1984

    Регистрация:
    6 май 2009
    Сообщения:
    7
    Симпатии:
    0
    Баллы:
    1
    А можно поподробнее я чтото не уловил мысль до конца к сожалению.

    Вот типичная ситуация. Человек открывает документ Б в этот документ при открытии попадает информация из 10 документов А по статьям затрат Оснащение офиса. Он начинает смотреть что там за суммы и утверждать их. через минуту после открытия документа Б открывают документ А и добавляют в него в статью затрат Оснащение офиса часть суммы. В документе Б при этом сумма осталась неизмененной а при утверждении утверждении утвердится сумма большая. Единственный вариант который я вижу это при открытии документа Б чтобы все документы А которые в нем используются открывались только на чтение.
  6. BabySG
    Offline

    BabySG Администраторы Команда форума Администратор

    Регистрация:
    10 июн 2007
    Сообщения:
    11.853
    Симпатии:
    12
    Баллы:
    29
    Ну так проверяйте, что за суммы утверждаются!

    Создайте РС, в который при проведении док-та А записываются данные.
    Структура регистра (периодический):
    Измерения:
    - Документ
    - Статья
    Ресурсы:
    - Утверждено
    - Сумма
    При проведении док-та Б берется срез последних (на текущую дату, а не время документа) и сверяется значение суммы.

    При проведении док-та А проверяется наличие утверженности по
    измереням.. Задача-то выеденного яйца не стоит
  7. TopicStarter Overlay
    pash_ka_1984
    Offline

    pash_ka_1984

    Регистрация:
    6 май 2009
    Сообщения:
    7
    Симпатии:
    0
    Баллы:
    1
    Понятно спасибо а как бороться со следующей проблемой. Документ А сам по себе утверждается несколькими людьми перед тем как попасть в Б. Так вот А могут одновременно открыть двое и редактировать не зная об этом.
  8. Senya
    Offline

    Senya Опытный в 1С

    Регистрация:
    6 июн 2006
    Сообщения:
    594
    Симпатии:
    0
    Баллы:
    26
    Убрать автоматическую блокировку, если она стоит. Затем в процедуру, например ПередЗаписью добавить команду блокировки, предварительно перечитав данные документа. Задача довольно простая.
    Успехов.
  9. TopicStarter Overlay
    pash_ka_1984
    Offline

    pash_ka_1984

    Регистрация:
    6 май 2009
    Сообщения:
    7
    Симпатии:
    0
    Баллы:
    1
    Если я в процедуру ПриОткрытии буду добавлять команду блокировки а при закрытии ее убирать. То если программа будет завершена аварийно и при этом Обработчик при закрытии не сработает блокировка снимется или нет???
  10. Senya
    Offline

    Senya Опытный в 1С

    Регистрация:
    6 июн 2006
    Сообщения:
    594
    Симпатии:
    0
    Баллы:
    26
    Я разве что-нибудь говорил о блокировке при открытии? Блокировать надобно только при записи, а затем сразу же снимать блокировку. Например так.

    Код:
    Процедура ПередЗаписью(Отказ, РежимЗаписи, РежимПроведения)
    // Вставить содержимое обработчика.
    ЭтаФорма.Обновить();
    Если НЕ ЭтотОбъект.Заблокирован() Тогда
    ЭтотОбъект.Заблокировать();		
    КонецЕсли; 
    
    КонецПроцедуры
    
    Процедура ПослеЗаписи()
    // Вставить содержимое обработчика.
    Если ЭтотОбъект.Заблокирован() Тогда
    ЭтотОбъект.Разблокировать();		
    КонецЕсли; 
    ЭтаФорма.Обновить();
    КонецПроцедуры
    
    
  11. BabySG
    Offline

    BabySG Администраторы Команда форума Администратор

    Регистрация:
    10 июн 2007
    Сообщения:
    11.853
    Симпатии:
    12
    Баллы:
    29
    А что они там редактируют?
  12. TopicStarter Overlay
    pash_ka_1984
    Offline

    pash_ka_1984

    Регистрация:
    6 май 2009
    Сообщения:
    7
    Симпатии:
    0
    Баллы:
    1
    Суммы по бюджету. Например есть проект его курируют человек 10 и все там вносят изменения по цифрам по материалам. А потом его еще 3 человека утверждают. А так как бюджеты как всегда составляются не вовремя получается что его начинают усиленно делать уже во время утверждения. вот и надо сделать так чтобы с документом мог работать на запись только 1 человек а на чтоение все. и чтобы каждый мог получить кто документ блокирует

    не пойдет так. чел открывает документ Б при этом А в а ничего не записывается но данные в Б для анализа уже попали. В А заходит после этого другой менятет там все и записывает без проблем. А потом Б нажимает утвердить сумму по А. Утвердит старую сумму до изменения. надо чтобы открытие Б блокировало Документ А на запись на все время работы с ним.
  13. BabySG
    Offline

    BabySG Администраторы Команда форума Администратор

    Регистрация:
    10 июн 2007
    Сообщения:
    11.853
    Симпатии:
    12
    Баллы:
    29
    НУ что я могу сказать - я вам уже даже дал структуру регистра...
    Задача-то стандартная...

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