7.7 Не блокируется документ в 1С Предприятие

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

  1. TopicStarter Overlay
    Demag
    Offline

    Demag Опытный в 1С

    Регистрация:
    1 дек 2009
    Сообщения:
    67
    Симпатии:
    0
    Баллы:
    26
    Добрый день. Помогите разобраться. Ситуация следующая: перестал блокироваться документ, те, если один пользователь его открыл то его может открыть и другой.
    Заранее спасибо за помощь.
  2. Бухгалтерский угодник
    Offline

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

    Регистрация:
    29 дек 2008
    Сообщения:
    21.520
    Симпатии:
    407
    Баллы:
    104
    Нереально! Скорее всего пользователи работают В РАЗНЫХ базах.... (проверьте пути)
  3. TopicStarter Overlay
    Demag
    Offline

    Demag Опытный в 1С

    Регистрация:
    1 дек 2009
    Сообщения:
    67
    Симпатии:
    0
    Баллы:
    26
    Проверил. База одна.
    Конфигурация сильно дописано, но не мной.
    Есть один пользователь, который может просматривать расходные накладные все остальных, этот пользователь, начальник склада. Ему это нужно чтобы собрать отгрузку. Другие пользователи не могут просматривать документы друг-друга. Возникла ситуация когда расходная накладная была проведена, но автор продолжал с ней работать, в это время склад открыл ее и собрал отгрузку по неполной накладной. А автор дописал еще несколько позиций. Был скандал в итоге, склад отгрузил без последних позиций. Подскажите как сделать так чтобы склад не мог смотреть документы пока они открыты авторами?
  4. Бухгалтерский угодник
    Offline

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

    Регистрация:
    29 дек 2008
    Сообщения:
    21.520
    Симпатии:
    407
    Баллы:
    104
    Еще раз повторюсь - ОДНОВРЕМЕННО ПРОСМАТРИВАТЬ ДОКУМЕНТ НЕЛЬЗЯ. За это отвечает внутренний механизм блокировки. Исключение - если данные храняться во внешних файлах (что малореально). Так что вам "пудрят мозги". Наверняка менеджер ПОТОМ дописал строчки в уже проведенный документ! Посмотрите по журналу регистраций и изоблечите пользователя.... Что можно сделать в вашей ситуации - блокировать редактирование проведенного документа при повторном открытии - тогда точно такой ситуации не повторится.
  5. TopicStarter Overlay
    Demag
    Offline

    Demag Опытный в 1С

    Регистрация:
    1 дек 2009
    Сообщения:
    67
    Симпатии:
    0
    Баллы:
    26
    Я знаю что такого не должно быть.
    Повторное редактирование как раз нужно, но менеджеры не закрывают документ пока он окончательно не будет сформирован. И после этого они его не открывают больше на редактирование.
    В процессе формирования они его иногда проводят по нескольку раз.
    Все пользователи в базе не могут просматривать открытый документ, но что-то произошло и пользователь Склад теперь може просматривать открытые документы.
    Я все проверил по нескольку раз, ни админ базы никто не может просмотреть открытый документ кроме склада, хотя у него права очень урезаны, и может он только просматривать расходные накладные.
    В глобальном модуле есть дописанные код:
    ============================================
    Код:
    Функция юраПроверкаАвторства(Докум) Экспорт //юра добавил 150601
    Перем Папка, КодПз, АвторДок, ВидДокумента, ЕстьКлиент;
    КодПз		 = Строка(ПолноеИмяПользователя());
    АвторДок	 = Строка(Докум.Автор);
    Папка		 = СоздатьОбъект("Справочник.Контрагенты");
    Папка1		 = СоздатьОбъект("Справочник.Контрагенты");
    Папка2		 = СоздатьОбъект("Справочник.Контрагенты");
    Папка3		 = СоздатьОбъект("Справочник.Контрагенты");
    Папка4		 = СоздатьОбъект("Справочник.Контрагенты");
    Папка5		 = СоздатьОбъект("Справочник.Контрагенты");
    Папка6		 = СоздатьОбъект("Справочник.Контрагенты");
    Папка7		 = СоздатьОбъект("Справочник.Контрагенты");
    Папка8		 = СоздатьОбъект("Справочник.Контрагенты");
    Папка9		 = СоздатьОбъект("Справочник.Контрагенты");
    ПапкаА		 = СоздатьОбъект("Справочник.Контрагенты");
    ВидДокумента = Докум.Вид();
    ЕстьКлиент	 = глЕстьРеквизитШапки("Клиент", Докум.Вид());
    
    Если (НазваниеНабораПрав() = "Администратор") ИЛИ (АвторДок = Строка(ИмяПользователя())) ИЛИ (НазваниеНабораПрав() = "Sklad1") Тогда
    Возврат(1);//проверка пройдена - это Администрация или Автор
    ИначеЕсли (КодПз = "05") Тогда
    Папка.НайтиПоНаименованию("Покупатели г. Иванова1",0,1);
    Папка1.НайтиПоНаименованию("Покупатели г. Иванова2",0,1);
    ИначеЕсли (КодПз = "07") Тогда
    Папка.НайтиПоНаименованию("Покупатели г. Иванова1",0,1);
    Папка1.НайтиПоНаименованию("Покупатели г. Иванова2",0,1);
    ИначеЕсли (КодПз = "08") Тогда
    Папка.НайтиПоНаименованию("Покупатели г. Иванова3",0,1);
    Папка1.НайтиПоНаименованию("Покупатели г. Иванова4",0,1);
    ИначеЕсли (КодПз = "09") Тогда
    Папка.НайтиПоНаименованию("Покупатели г. Иванова4",0,1);
    Папка1.НайтиПоНаименованию("Покупатели г. Иванова3",0,1);
    ИначеЕсли (КодПз = "10") Тогда
    Папка.НайтиПоНаименованию("Покупатели г. Иванова5",0,1);
    ИначеЕсли (КодПз = "11") Тогда
    Папка.НайтиПоНаименованию("Покупатели г. Иванова5",0,1);
    ИначеЕсли (КодПз = "12") Тогда
    Папка.НайтиПоНаименованию("Покупатели г. Иванова3",0,1);
    Папка1.НайтиПоНаименованию("Покупатели г. Иванова5",0,1);
    Папка2.НайтиПоНаименованию("Покупатели г. Иванова1",0,1);
    Папка3.НайтиПоНаименованию("Покупатели г. Иванова6",0,1);
    Папка4.НайтиПоНаименованию("Покупатели г. Иванова2",0,1);
    Папка5.НайтиПоНаименованию("Покупатели г. Иванова7",0,1);
    Папка6.НайтиПоНаименованию("Покупатели г. Иванова8",0,1);
    Папка7.НайтиПоНаименованию("Покупатели г. Иванова9",0,1);
    Папка8.НайтиПоНаименованию("Покупатели г. Иванова4",0,1);
    Папка9.НайтиПоНаименованию("Покупатели г. Иванова10",0,1);
    ПапкаА.НайтиПоНаименованию("Покупатели г. Иванова11",0,1);
    ИначеЕсли (КодПз = "20") Тогда
    Папка.НайтиПоНаименованию("Покупатели г. Иванова8",0,1);
    Папка1.НайтиПоНаименованию("Покупатели г. Иванова10",0,1);
    Папка2.НайтиПоНаименованию("Покупатели г. Иванова11",0,1);
    ИначеЕсли (КодПз = "21") Тогда
    Папка.НайтиПоНаименованию("Покупатели г. Иванова8",0,1);
    Папка1.НайтиПоНаименованию("Покупатели г. Иванова10",0,1);
    Папка2.НайтиПоНаименованию("Покупатели г. Иванова11",0,1);
    ИначеЕсли (КодПз = "25") Тогда
    Папка.НайтиПоНаименованию("Покупатели г. Иванова6",0,1);
    ИначеЕсли (КодПз = "26") Тогда
    Папка.НайтиПоНаименованию("Покупатели г. Иванова6",0,1);
    ИначеЕсли (КодПз = "28") Тогда
    Папка.НайтиПоНаименованию("Покупатели г. Иванова2",0,1);
    ИначеЕсли (КодПз = "66") Тогда
    Папка.НайтиПоНаименованию("Покупатели г. Иванова2",0,1);
    ИначеЕсли (КодПз = "47") Тогда
    Папка.НайтиПоНаименованию("Покупатели г. Иванова7",0,1);
    ИначеЕсли (КодПз = "48") Тогда
    Папка.НайтиПоНаименованию("Покупатели г. Иванова9",0,1);
    ИначеЕсли (КодПз = "50") Тогда
    Папка.НайтиПоНаименованию("Покупатели",0,1);
    ИначеЕсли (КодПз = "49") Тогда
    Папка.НайтиПоНаименованию("Покупатели г. Иванова8",0,1);
    Папка1.НайтиПоНаименованию("Покупатели г. Иванова10",0,1);
    ИначеЕсли (КодПз = "51") Тогда
    Папка.НайтиПоНаименованию("Покупатели г. Иванова4",0,1);
    ИначеЕсли (КодПз = "73") Тогда
    Папка.НайтиПоНаименованию("Покупатели г. Иванова11",0,1);
    ИначеЕсли (КодПз = "107") Тогда
    Папка.НайтиПоНаименованию("Покупатели г. Иванова12",0,1);
    Папка1.НайтиПоНаименованию("Покупатели г. Иванова5",0,1);
    Иначе // если, например, Товаровед, пусть смотрит "Архив"
    Папка.НайтиПоНаименованию("Покупатели",0,1);
    КонецЕсли;
    
    Если  (ВидДокумента = "АктПереоценки") ИЛИ (ВидДокумента = "ВводЗаказовТоваров") ИЛИ
    (ВидДокумента = "ВводОстатковКредита") ИЛИ (ВидДокумента = "ВводОстатковТМЦ") ИЛИ
    (ВидДокумента = "ВводОстатковТоваров") ИЛИ (ВидДокумента = "ВводПартийТоваров") ИЛИ
    (ВидДокумента = "ВводРезервовТоваров") ИЛИ (ВидДокумента = "ДвиженияДенежныхСредств") ИЛИ
    (ВидДокумента = "Заказ") 			   ИЛИ (ВидДокумента = "ОприходованиеИзлишков") ИЛИ
    (ВидДокумента = "Инвентаризация")	   ИЛИ (ВидДокумента = "КорректировкаОстатковПоГТД") ИЛИ
    (ВидДокумента = "ОтчетКассовойСмены")  ИЛИ (ВидДокумента = "Переоценка") ИЛИ
    (ВидДокумента = "ПлатежноеПоручение")  ИЛИ (ВидДокумента = "ПриходнаяНакладная") ИЛИ
    (ВидДокумента = "ПриходныйОрдерТБ")    ИЛИ (ВидДокумента = "РегистрацияСчета_фактуры") ИЛИ
    (ВидДокумента = "СнятиеЗаказа")		   ИЛИ (ВидДокумента = "Списание") ИЛИ
    //Административные
    
    (ЕстьКлиент = Нет)
    //Без Клиента
    Тогда
    Если (((ВидДокумента = "Заказ") ИЛИ (ВидДокумента = "ПриходнаяНакладная") ИЛИ (ВидДокумента = "ПриходныйОрдерТБ")) И (КодПз = "10")) Тогда
    Возврат(1);
    КонецЕсли;// юра 270701
    
    Возврат(0);
    
    ИначеЕсли (ВидДокумента = "Счет_фактура") ИЛИ (ВидДокумента = "ВводОстатковРеализации") ИЛИ
    (ВидДокумента = "ПриходнаяРеализатора")   ИЛИ (ВидДокумента = "ОтчетРеализатора") ИЛИ
    (ВидДокумента = "РасходнаяРеализатора")   ИЛИ (ВидДокумента = "РасходныйОрдерТБ") ИЛИ
    (ВидДокумента = "РасходнаяНакладная")	  ИЛИ (ВидДокумента = "ИнвентаризацияРеализатора") ИЛИ
    (ВидДокумента = "РасходнаяРозничная")	  ИЛИ (ВидДокумента = "Чек") ИЛИ (ВидДокумента = "Счет")
    //В этих Документах есть поле "Клиент"
    Тогда
    
    Если ((ВидДокумента = "Счет_фактура") И ((КодПз="07") ИЛИ (КодПз="66") ИЛИ (КодПз="12"))) Тогда
    Возврат(0);
    КонецЕсли;// юра 240701
    
    Если Докум.Клиент.ПринадлежитГруппе(Папка.ТекущийЭлемент())=1 Тогда
    Возврат(1);//проверка пройдена - в документе использован клиент Пользователя!!!
    ИначеЕсли Докум.Клиент.ПринадлежитГруппе(Папка1.ТекущийЭлемент())=1 Тогда
    Возврат(1);//проверка пройдена - в документе использован клиент Пользователя!!!
    ИначеЕсли Докум.Клиент.ПринадлежитГруппе(Папка2.ТекущийЭлемент())=1 Тогда
    Возврат(1);//проверка пройдена - в документе использован клиент Пользователя!!!
    ИначеЕсли Докум.Клиент.ПринадлежитГруппе(Папка3.ТекущийЭлемент())=1 Тогда
    Возврат(1);//проверка пройдена - в документе использован клиент Пользователя!!!
    ИначеЕсли Докум.Клиент.ПринадлежитГруппе(Папка4.ТекущийЭлемент())=1 Тогда
    Возврат(1);//проверка пройдена - в документе использован клиент Пользователя!!!
    ИначеЕсли Докум.Клиент.ПринадлежитГруппе(Папка5.ТекущийЭлемент())=1 Тогда
    Возврат(1);//проверка пройдена - в документе использован клиент Пользователя!!!
    ИначеЕсли Докум.Клиент.ПринадлежитГруппе(Папка6.ТекущийЭлемент())=1 Тогда
    Возврат(1);//проверка пройдена - в документе использован клиент Пользователя!!!
    ИначеЕсли Докум.Клиент.ПринадлежитГруппе(Папка7.ТекущийЭлемент())=1 Тогда
    Возврат(1);//проверка пройдена - в документе использован клиент Пользователя!!!
    ИначеЕсли Докум.Клиент.ПринадлежитГруппе(Папка8.ТекущийЭлемент())=1 Тогда
    Возврат(1);//проверка пройдена - в документе использован клиент Пользователя!!!
    ИначеЕсли Докум.Клиент.ПринадлежитГруппе(Папка9.ТекущийЭлемент())=1 Тогда
    Возврат(1);//проверка пройдена - в документе использован клиент Пользователя!!!
    ИначеЕсли Докум.Клиент.ПринадлежитГруппе(ПапкаА.ТекущийЭлемент())=1 Тогда
    Возврат(1);//проверка пройдена - в документе использован клиент Пользователя!!!
    КонецЕсли;
    Возврат(0);
    Иначе//ненужный вид документа
    Предупреждение("Ух, ты!? Подойдите к Администратору сети!!!",1);
    Возврат(0);//проверка непройдена - чужой документ
    КонецЕсли;
    КонецФункции  //юраПроверкаАвторства
    
    ==========================================
    Вот как раз Sklad1 и может все просматривать.
  6. Бухгалтерский угодник
    Offline

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

    Регистрация:
    29 дек 2008
    Сообщения:
    21.520
    Симпатии:
    407
    Баллы:
    104
    За подобные "художества" ручки нужно отрывать. Желательно под самый корень. Код написан учеником церковно-приходского училища. Проверка авторизации обходится элементарно, но повторюсь - попробуйте открыть один и тот же документ - НЕ ПОЛУЧИТСЯ.
  7. TopicStarter Overlay
    Demag
    Offline

    Demag Опытный в 1С

    Регистрация:
    1 дек 2009
    Сообщения:
    67
    Симпатии:
    0
    Баллы:
    26
    Любым другим пользователем не получается открыть а пользователь Sklad1 открывает.
  8. Бухгалтерский угодник
    Offline

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

    Регистрация:
    29 дек 2008
    Сообщения:
    21.520
    Симпатии:
    407
    Баллы:
    104
    Ошибка в алгоритме (что совсем не удивительно). Пройдитесь по процедуре отладчиком - сразу сами увидите... Настоятельно рекомендую переписать процедуру проверки. Для этого достаточно сделать пользователей не в виде строки, а в виде справочника.
  9. TopicStarter Overlay
    Demag
    Offline

    Demag Опытный в 1С

    Регистрация:
    1 дек 2009
    Сообщения:
    67
    Симпатии:
    0
    Баллы:
    26
    Спасибо за наводку.
    К сожалению я не программист.
    Буду разбираться.
  10. WaRDeR
    Offline

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

    Регистрация:
    23 ноя 2006
    Сообщения:
    3.263
    Симпатии:
    14
    Баллы:
    29
    Поправлю
    ОДНОВРЕМЕННО РЕДАКТИРОВАТЬ ДОКУМЕНТ НЕЛЬЗЯ.

    Если один пользователь открыл в режиме редактирования, то второй может открыть в режиме просмотра.

    Если выборка идет программным способом - то выбираются только сохраненные данные, и такая ситуация могла быть при сохранении документа в несколько заходов (обычно так делают при большом количестве строк).
  11. TopicStarter Overlay
    Demag
    Offline

    Demag Опытный в 1С

    Регистрация:
    1 дек 2009
    Сообщения:
    67
    Симпатии:
    0
    Баллы:
    26
    Должно быть так, чтобы пользователи не могли открывать чужие документы даже в режиме просмотра.
  12. Бухгалтерский угодник
    Offline

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

    Регистрация:
    29 дек 2008
    Сообщения:
    21.520
    Симпатии:
    407
    Баллы:
    104
    Судя по процедуре проверки приблизительный код в модуле формы документа должен быть такой:
    Код:
    Процедура ПриОткрытии()
    Если юраПроверкаАвторства(Контекст)=0 Тогда
    СтатусВозврата(0);
    Возврат;
    КонецПроцедуры;
    //...................
    КонецПроцедуры
    
    
  13. TopicStarter Overlay
    Demag
    Offline

    Demag Опытный в 1С

    Регистрация:
    1 дек 2009
    Сообщения:
    67
    Симпатии:
    0
    Баллы:
    26
    =================================================
    Да, есть такая часть кода:

    Код:
    	Если юраПроверкаАвторства(Контекст) = 0 Тогда 
    Предупреждение("Вам запрещено просматривать данный документ !!!");
    СтатусВозврата(0);
    КонецЕсли;
    
  14. Бухгалтерский угодник
    Offline

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

    Регистрация:
    29 дек 2008
    Сообщения:
    21.520
    Симпатии:
    407
    Баллы:
    104
    Без вызова функции Возврат он не имеет смысла, т.к. после выполения условия продолжится выполнение кода.... (если это условие не завершает процедуру)
  15. TopicStarter Overlay
    Demag
    Offline

    Demag Опытный в 1С

    Регистрация:
    1 дек 2009
    Сообщения:
    67
    Симпатии:
    0
    Баллы:
    26
    Поставил Возрат, не помогло.
  16. Бухгалтерский угодник
    Offline

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

    Регистрация:
    29 дек 2008
    Сообщения:
    21.520
    Симпатии:
    407
    Баллы:
    104
    Нужно смотреть в отладчике - какое из условий не срабатывает... По одной процедуре сложно судить - пробуйте
Похожие темы
  1. sp0_of
    Ответов:
    1
    Просмотров:
    4.006
  2. Mar
    Ответов:
    0
    Просмотров:
    531
  3. MasterT
    Ответов:
    3
    Просмотров:
    1.165
  4. Pollv
    Ответов:
    4
    Просмотров:
    624
  5. Elena_gp
    Ответов:
    4
    Просмотров:
    1.229
Загрузка...

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