Заказы на доработку 1С (сервис удаленной работы)

Хранилище

База знаний
Неназначенных незавершенных заказов: 2, свеженьких 1
Бесплатные отчеты, обработки, конфигурации, внешние компоненты для 1С Статьи, описание работы, методики по работе с 1С

Здравствуйте, гость ( Вход | Зарегистрироваться )



> Запрет на открытие формы          
ZhenyaYa Подменю пользователя
сообщение 21.11.12, 17:57
Сообщение #1

Завсегдатай
****
Группа: Пользователи
Сообщений: 105
Из: Киев
Спасибо сказали: 0 раз
Рейтинг: 0

Подскажите, пожалуйста, как запретить открытие формы, если открыта другая форма. Например, запретить открытие справочник по коду "32", если открыт документ "32". Что то в таком роде...
Ну или как переловить, открыта ли форма документа "32", тогда можно будет вписать в справочник ПриОткрытии запрет

Kutuzov Подменю пользователя
сообщение 21.11.12, 18:18
Сообщение #2

Оратор
Иконка группы
Группа: Местный
Сообщений: 328
Из: Одесса
Спасибо сказали: 144 раз
Рейтинг: 0

Цитата(ZhenyaYa @ 21.11.12, 17:57) *
Подскажите, пожалуйста, как запретить открытие формы, если открыта другая форма. Например, запретить открытие справочник по коду "32", если открыт документ "32". Что то в таком роде...
Ну или как переловить, открыта ли форма документа "32", тогда можно будет вписать в справочник ПриОткрытии запрет


А надо ли открывать документ или справочник с кодом 33?
если нет, тогда открыть форму модально надо


Signature
Вы станете богаче, лишь став умнее...
Чем дальше в лес, тем толще партизаны.
Нельзя недооценивать, не предсказуемость тупизны...

Спасибо сказали: ZhenyaYa,

ZhenyaYa Подменю пользователя
сообщение 21.11.12, 18:28
Сообщение #3

Завсегдатай
****
Группа: Пользователи
Сообщений: 105
Из: Киев
Спасибо сказали: 0 раз
Рейтинг: 0

Цитата
А надо ли открывать документ или справочник с кодом 33?

простите, не понял вопрос...
если я открою документ 33 модально, так я тогда вообще ничего открыть не смогу, а мне нужно запрет именно на соответствующий элемент справочника

Zaval Подменю пользователя
сообщение 21.11.12, 18:32
Сообщение #4

Крутой
Иконка группы
Группа: Местный
Сообщений: 1994
Из: Киева и окрестностей
Спасибо сказали: 406 раз
Рейтинг: 0

Цитата(ZhenyaYa @ 21.11.12, 17:57) *
Что то в таком роде...


Так не пойдет, давайте конкретнее.
Какая связь между доком "32" и справочником "32*. В чем вообще смысл такой блокировки?
Может просто слегка развить много где имеющийся механизм, блокирующий изменение некоторых реквизитов справочника при наличиии в системе документов определенного вида?

ZhenyaYa Подменю пользователя
сообщение 21.11.12, 18:48
Сообщение #5

Завсегдатай
****
Группа: Пользователи
Сообщений: 105
Из: Киев
Спасибо сказали: 0 раз
Рейтинг: 0

Цитата
Какая связь между доком "32" и справочником "32*. В чем вообще смысл такой блокировки?

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

Цитата
блокирующий изменение некоторых реквизитов справочника при наличиии в системе документов определенного вида?

открытых документов?

Zaval Подменю пользователя
сообщение 21.11.12, 18:58
Сообщение #6

Крутой
Иконка группы
Группа: Местный
Сообщений: 1994
Из: Киева и окрестностей
Спасибо сказали: 406 раз
Рейтинг: 0

Цитата(ZhenyaYa @ 21.11.12, 18:48) *
При открытии, как и при записи, справочника происходит изменение документа соответствующего ему документа, и наоборот

Это уже неразбериха. При открытии ничего меняться не должно в принципе. Давайте реальный пример.

2. Просто наличие проведенных документов.


ZhenyaYa Подменю пользователя
сообщение 21.11.12, 19:06
Сообщение #7

Завсегдатай
****
Группа: Пользователи
Сообщений: 105
Из: Киев
Спасибо сказали: 0 раз
Рейтинг: 0

Цитата
Это уже неразбериха. При открытии ничего меняться не должно в принципе

Согласен, погорячился smile.gif
Не при открытии, а во время работы, запустили процедуру в доке, в справочнике поменялась информация, плюс при записи дока информация меняется...
Реальный пример очееень долго нужно будет объяснять) Просто подскажите можно ли это сделать каким то способом? Если нет, буду искать как обойти...

Zaval Подменю пользователя
сообщение 21.11.12, 21:09
Сообщение #8

Крутой
Иконка группы
Группа: Местный
Сообщений: 1994
Из: Киева и окрестностей
Спасибо сказали: 406 раз
Рейтинг: 0

В справочнике для реквизита достаточно запретить ручное изменение, оставить только документом?

mister-x Подменю пользователя
сообщение 21.11.12, 21:37
Сообщение #9

...
Иконка группы
Модератору Про1С (за заслуги в 2011 году)
Группа: Местный
Сообщений: 3477
Из: Тернопіль
Спасибо сказали: 1417 раз
Рейтинг: 0

Цитата(ZhenyaYa @ 21.11.12, 19:06) *
Реальный пример очееень долго нужно будет объяснять)

зробіть скріншоти чи відео

Цитата(ZhenyaYa @ 21.11.12, 19:06) *
Не при открытии, а во время работы, запустили процедуру в доке, в справочнике поменялась информация, плюс при записи дока информация меняется...

тобто двічі при роботі із одним документом інформація змінюється в одному і тому ж елементі довіднику?

Спасибо сказали: ZhenyaYa,

Zaval Подменю пользователя
сообщение 21.11.12, 21:52
Сообщение #10

Крутой
Иконка группы
Группа: Местный
Сообщений: 1994
Из: Киева и окрестностей
Спасибо сказали: 406 раз
Рейтинг: 0

Хм... "Изменяется документами" доступно только для периодических.

Спасибо сказали: ZhenyaYa,

faiden Подменю пользователя
сообщение 21.11.12, 21:58
Сообщение #11

Общительный
**
Группа: Пользователи
Сообщений: 27
Из: Евпатория
Спасибо сказали: 9 раз
Рейтинг: 0

Цитата(ZhenyaYa @ 21.11.12, 17:57) *
Подскажите, пожалуйста, как запретить открытие формы, если открыта другая форма. Например, запретить открытие справочник по коду "32", если открыт документ "32". Что то в таком роде...
Ну или как переловить, открыта ли форма документа "32", тогда можно будет вписать в справочник ПриОткрытии запрет


Ну, как вариант, завести глобальную переменную - флаг, в которую при открытии документа "32" будет записываться какая-то инфа. А при октрытии элемента справочника - анализировать оную инфу и, в случае необходимости, блокировать открытие формы элемента. Как-то так.

Спасибо сказали: ZhenyaYa,

ZhenyaYa Подменю пользователя
сообщение 22.11.12, 8:47
Сообщение #12

Завсегдатай
****
Группа: Пользователи
Сообщений: 105
Из: Киев
Спасибо сказали: 0 раз
Рейтинг: 0

Цитата
Ну, как вариант, завести глобальную переменную - флаг, в которую при открытии документа "32" будет записываться какая-то инфа. А при октрытии элемента справочника - анализировать оную инфу и, в случае необходимости, блокировать открытие формы элемента. Как-то так.

Спасибо, это оно smile.gif

Cthulhu Подменю пользователя
сообщение 22.11.12, 9:29
Сообщение #13

Завсегдатай
Иконка группы
Группа: Местный
Сообщений: 224
Из: не ту страну назвали Гондурасом
Спасибо сказали: 83 раз
Рейтинг: 0

Использовать метод встроенного языка "Блокировка".

ZhenyaYa Подменю пользователя
сообщение 22.11.12, 12:04
Сообщение #14

Завсегдатай
****
Группа: Пользователи
Сообщений: 105
Из: Киев
Спасибо сказали: 0 раз
Рейтинг: 0

Цитата
Использовать метод встроенного языка "Блокировка".


Не получалось у меня это сделать с помощью блокировки...возможно я что то не так делал...можно поподробней?

ZhenyaYa Подменю пользователя
сообщение 22.11.12, 14:13
Сообщение #15

Завсегдатай
****
Группа: Пользователи
Сообщений: 105
Из: Киев
Спасибо сказали: 0 раз
Рейтинг: 0

Сделал по совету Faiden
в глоб:
Перем глВозвр Экспорт;
Процедура глБлок(Флаг1) Экспорт;
    глВозвр=Флаг1;
КонецПроцедуры


в доке:
Процедура ПриОткрытии()
глБлок(НомерДок);
КонецПроцедуры


Процедура ПриЗакрытии()
глБлок("");
КонецПроцедуры


в справочнике:
Процедура ПриОткрытии()
Если СокрЛП(глВозвр)=СокрЛП(Наименование) Тогда
СтатусВозврата(0);
КонецЕсли;
КонецПроцедуры


Вродь работает...


Хотя...Обойти все равно можно : открыть другой документ, и значение в глВозвр поменяется...Придется запрещать вообще открытие всех доков при этом...

Vofka Подменю пользователя
сообщение 22.11.12, 14:57
Сообщение #16

У нас здесь своя атмосфера...
***********
Группа: Основатель
Сообщений: 13955
Из: Киев
Спасибо сказали: 4520 раз
Рейтинг: 3642.8

ZhenyaYa, храните не просто глобальную переменную, а глобальную переменную в виде таблицы значений с 2 колонками: Документ, Справочник. При открытии документа туда будет добавляться строка какой документ какой элемент справочника блокирует. Так же при открытии проверяйте есть ли в таблице элемент справочника, который в данном документе. Если есть - значит документ не открываем и пишем, что элемент заблокирован таким-то документом. При закрытии, соответственно, удаляем соответствующую строку из таблицы.

Сообщение отредактировал Vofka - 22.11.12, 14:57

Спасибо сказали: ZhenyaYa,

ZhenyaYa Подменю пользователя
сообщение 22.11.12, 16:40
Сообщение #17

Завсегдатай
****
Группа: Пользователи
Сообщений: 105
Из: Киев
Спасибо сказали: 0 раз
Рейтинг: 0

Цитата(Vofka @ 22.11.12, 14:57) *
ZhenyaYa, храните не просто глобальную переменную, а глобальную переменную в виде таблицы значений с 2 колонками: Документ, Справочник. При открытии документа туда будет добавляться строка какой документ какой элемент справочника блокирует. Так же при открытии проверяйте есть ли в таблице элемент справочника, который в данном документе. Если есть - значит документ не открываем и пишем, что элемент заблокирован таким-то документом. При закрытии, соответственно, удаляем соответствующую строку из таблицы.



Спасибо smile.gif Работает как надо smile.gif

Еще один вопрос, я в глобальном переменной глВозвр делаю таблицей значений в процедуре ПриНачалеРаботыСистемы

глВозвр=СоздатьОбъект("ТаблицаЗначений");
    глВозвр.НоваяКолонка("Док");
    глВозвр.НоваяКолонка("Спр");


а значения в нее добавляю в другой процедуре

Процедура глБлок(Флаг1,Флаг2) Экспорт; 
    глВозвр.НоваяСтрока();
    глВозвр.Док=СокрЛП(Флаг1);
    глВозвр.Спр=СокрЛП(Флаг2);
КонецПроцедуры


Это правильно?

Cthulhu Подменю пользователя
сообщение 22.11.12, 18:01
Сообщение #18

Завсегдатай
Иконка группы
Группа: Местный
Сообщений: 224
Из: не ту страну назвали Гондурасом
Спасибо сказали: 83 раз
Рейтинг: 0

кхм.
а что, если один пользователь открыл документ "ЫЫЫ" (который будет пытаться откорректировать элемент справочника "ыыы") - а другой пользователь в это время открыл элемент справочника "ыыы" (который будет пытаться откорректировать документ "ЫЫЫ", котороый открыт у первого пользователя), ммм?..

Цитата(ZhenyaYa @ 21.11.12, 18:48) *
В доке есть реквизит, ссылаемый на справочник, и наоборот
При открытии, как и при записи, справочника происходит изменение документа соответствующего ему документа, и наоборот. Может получится неразбериха...

Допустим, что. Документ нельзя открывать на редактирование, если кто-то (кто угодно!) в это время редактирует элемент справочника, который прописан в реквизите, допустим, "ыыы" этого документа. Тогда достаточно в модуле формы такого документа, в предопределенной процедуре "ПриОткрытии" добавить следующий код:
  Если Форма.ТолькоПросмотр()<>1 Тогда Если ыыы.Выбран()<>0 Тогда
    тСпр=СоздатьОбъект("Справочник."+ыыы.Вид()); тСпр.НайтиЭлемент(ыыы);
    Если тСпр.Блокировка(1)<>1 Тогда
      Предупреждение("Ненене. Кто-то корректирует """+ыыы.ПолноеНаименование()+"""... приходите в єтот документ чуть позже.",12);
      СтатусВозврата(0); Возврат; // ну или Форма.ТолькоПросмотр(1); чтобы не скучал человек...
    Иначе тСпр.Блокировка(0) КонецЕсли;
  КонецЕсли КонецЕсли;
КонецПроцедуры //ПриОткрытии

Допустим, что. Элемент справочника нельзя открывать на редактирование, если кто-то (кто угодно!) в это время редактирует элемент справочника, который прописан в реквизите, допустим, "ЫЫЫ" элемента справочника. Тогда достаточно в модуле формы элемента такого справочника, в предопределенной процедуре "ПриЗаписи" добавить следующий код:
  Если Форма.ТолькоПросмотр()<>1 Тогда
      тДок=СоздатьОбъект("Документ"); Если тДок.НайтиДокумент(ЫЫЫ)<>0 Тогда
        Если тДок.Блокировка(1)<>1 Тогда
          Предупреждение("Ненене. Кто-то корректирует Документ """+ЫЫЫ+"""... приходите в єтот элемент справочника чуть позже.",12);
          СтатусВозврата(0); Возврат; // ну или Форма.ТолькоПросмотр(1); чтобы не скучал человек...
        Иначе тДок.Блокировка(0) КонецЕсли;
    КонецЕсли;
  КонецЕсли;
КонецПроцедуры //ПриОткрытии

как-то так...

Сообщение отредактировал Cthulhu - 22.11.12, 18:03

Спасибо сказали: ZhenyaYa,

ZhenyaYa Подменю пользователя
сообщение 23.11.12, 13:39
Сообщение #19

Завсегдатай
****
Группа: Пользователи
Сообщений: 105
Из: Киев
Спасибо сказали: 0 раз
Рейтинг: 0

Cthulhu, да, вашим методом получше будет smile.gif

Cthulhu Подменю пользователя
сообщение 23.11.12, 14:14
Сообщение #20

Завсегдатай
Иконка группы
Группа: Местный
Сообщений: 224
Из: не ту страну назвали Гондурасом
Спасибо сказали: 83 раз
Рейтинг: 0

Цитата(ZhenyaYa @ 23.11.12, 13:39) *
Cthulhu, да, вашим методом получше будет

Только ещё надо себе отчет отдавать, например, ещё в следующем.
если упомянутые реквизиты в процессе редактирования могут быть изменены... а кто-то в это время уже редактирует тот самый элемент справочника/документ, который выбирается в етот реквизит.... тоо....
ну, например.
32000000.gif

Не нашли ответа на свой вопрос?
Зарегистрируйтесь и задайте новый вопрос.


Ответить Новая тема
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 

RSS Текстовая версия Сейчас: 10.05.24, 0:12
1С Предприятие 8.3, 1С Предприятие 8.2, 1С Предприятие 8.1, 1С Предприятие 8.0, 1С Предприятие 7.7, Литература 1С, Общие вопросы по администрированию 1С, Методическая поддержка 1С - всё в одном месте: на Украинском 1С форуме!