Имя: Пароль:
1C
1C 7.7
v7: Подскажите идею (Ограничить одним документом)
,
0 GStiv
 
02.11.13
22:41
Требуется для документа реализация ограничить пользователя, по следующей схеме.
Если у оператора существует непроведенная накладная за текущий день более 1 часа с момента ввода или существует открытая не записанная накладная то запретить пользователю вводить новые документы.
Я предполагаю в процедуре ВводНового() в реализации создавать файл в каталоге пользователя, и при вводе другого документа проверять наличие файла, а при записи документа его удалять. Не могу сообразить с проверкой в течении часа. И очень важное ограничение скорость работы программы не должна изменится.
Пользователей операторов около 50 и 10 человек которые крутят отчеты
1 IamAlexy
 
02.11.13
22:43
(0) отчет "документыНеПроведенныеБолееЧаса"

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

руководство делает этот отчет каждый вечер и нарушители штрафуются на 5000 рублей.
Пользователи делают эти отчеты по желанию..


быстродействие не меняется.
нагрузка не меняется
все счастливы.
2 GStiv
 
02.11.13
22:49
К сожалению отчет есть, но руководство хочет автоматическую блокировку
3 zak555
 
02.11.13
22:52
сменить руководство ?
4 IamAlexy
 
02.11.13
22:53
(2) пользователь переведет время и оформит.
дальше что ?
5 zak555
 
02.11.13
22:55
(4) это если у него есть права по переводу времени
6 GStiv
 
02.11.13
22:55
(4) Если время документа то там есть в документе при Вводе нового пишется доп реквизит ВремяВвода и оно никак не связанно с временем в журнале документа, на сервере в терминале они не смогут перевести
7 zak555
 
02.11.13
22:57
обработка ожидания
открытие дока -- запись в служебный справочник инфы
8 GStiv
 
02.11.13
22:59
У меня в принципе основной вопрос где прицепить обработку ожидания или может при открытии или вводе нового проверять документы по пользователю в принципе Автор Реквизит отбора документов, ОтборПоЗначению документов за текущий день где-то 1.2 сек
9 IamAlexy
 
02.11.13
23:01
сделать 50 констант.

ИвановОткрылДокумент
ПетровОткрылДокумент

И так далее

записывать их при открытии документа и стирать при закрытии проведением.

перед созданием проверять а есть ли заполненная константа или нет
10 zak555
 
02.11.13
23:02
(8)

1. обработка ожидания в глобальном модуле, которая анализирует системный справочник
2. при открытии идёт запись элемента в некий системный справочник, при закрытии удаление
11 GStiv
 
02.11.13
23:05
А создание в каталоге пользователя и удаление и не быстрее будет работать?
12 zak555
 
02.11.13
23:06
(11) отчёт ты как будешь делать ?
13 GStiv
 
02.11.13
23:08
Отчет работает по принципу при вводе документа в Доп реквизит Время создания пишется Время, при проведении время заменяется на текущее и анализируется разница между ними
14 zak555
 
02.11.13
23:09
(13) не надо ничего в документ писать
15 GStiv
 
02.11.13
23:11
Если привязаться к справочнику то при ежегодной обрезке придется еще и справочники чистить.
16 zak555
 
02.11.13
23:12
зачем делать ежегодную обрезку ?*
17 GStiv
 
02.11.13
23:14
База приблежается к концу года к критическому размеру а на SQL не хотят, тем более, что ежегодно идет проверка на сертификацию, есть свои причины
18 zak555
 
02.11.13
23:16
(17) какой файл максимального размера ?
19 slik
 
02.11.13
23:16
Зак это же 77, при большом документообороте она просто виснет, без обрезки.
Если не ошибаюсь в 77 к каждому пользователю привязан справочник физ лиц, туда и писать стоп флаги.
20 GStiv
 
02.11.13
23:17
Или в спр Пользователи и читать уже его
21 Torquader
 
02.11.13
23:17
Мне кажется, что проще сразу при создании документ записывать - тогда и отчёты будут по нему же, да и время документа будет равно времени его создания, чтобы можно было проверить сколько времени документ висит.
Если же пользователь документ закрывает "без сохранения", то документ просто "освобождается", чтобы его мог "создать" новый пользователь.
Только мне кажется, что считать надо не с момента открытия документа, а с момента ввода в него первой строки, так как документ без тела никому не нужен.
22 zak555
 
02.11.13
23:18
(19) физлица никак не связаны с пользователями
23 slik
 
02.11.13
23:19
Заставляешь искать 77
24 slik
 
02.11.13
23:22
Ну в справочник "Пользователи".
25 GStiv
 
02.11.13
23:27
Подвожу итог, насколько я понял, в Справочник пользователи доп реквизит СозданДокумент, при вводе нового флаг 1 при записи 0, далее при вводе нового читать флаг.
В глобальном модуле обработка ожидания которая проверяет время создания и предупреждает пользователя о том что время документа истекает. При вводе нового дает отказ если есть непроведенные накладные более часа
26 zak555
 
02.11.13
23:27
ты на 18 ответь
27 GStiv
 
02.11.13
23:30
T=RA328   |Регистр (Дв.) ПартииНаличие
28 GStiv
 
02.11.13
23:33
RA328 700 Мб
RG328 76 Мб
29 NS
 
02.11.13
23:36
какие константы? какие справочники? на открытый документ - просто глобальная переменная.
30 GStiv
 
02.11.13
23:38
Все понял спасибо, что-то протормозил.
31 Torquader
 
03.11.13
01:33
(29) И как эту глобальную переменную в другом сеансе в отчёте увидят ?
32 NS
 
03.11.13
02:08
(31) И зачем эту переменную видеть в другом сеансе в отчете, если цель запретить вводить новый документ при открытом незаписанном?
Просто глобальная переменная, ввел накладную - поставил в переменную запрет ввода новых, закрыл или записал документ - разрешил.
33 КонецЦикла
 
03.11.13
05:06
Обходить глобальные переменные и временные таблицы будут просто закрывая и открывая 1С :)
Так что предлагаю завести глобальную таблицу с полями тек. юзер и последняя дата... ну или в справочнике пользователей завести реквизит
Время лучше брать с сервера, которое GetDate(), так как твои ограничения обойдут как 2 пальца, передвинув время (если имеют такие права)
Потом еще надо подумать о том, что новую форму можно заранее и полчаса он будет висеть не записанным. Тут уж надо решать - делать ли повторную проверку при записи не давая записать документ или нет :)
Может быть предупреждать об этом, а то обидно будет
Придется городить что-то типа обработки ожидания наверное
34 Мимохожий Однако
 
03.11.13
07:26
Проверь возможность открытия формы нового документа в модальном режиме. При открытии формы проверять наличие непроведенной реализации этого пользователя. Если есть, то отказ открытия или метод Закрыть().
35 Обработка
 
03.11.13
07:36
Добвылю.
Чтобы не решать проблему с открытыми накладными надо просто не давать разрешение печатать без записи а если нужно и без проведения. Тогда достаточно хранить в доке или в справочнике время последнего не проведенного дока.
36 NS
 
03.11.13
12:58
(33) Ты умеешь закрыть 1С, не закрывая открытый документ? :)
37 KRV
 
03.11.13
13:01
"Снять задачу"
38 Cthulhu
 
04.11.13
11:47
Запингуй его. И пусть попробует вводить новые пока ты его задалбывать будешь.
Процедура ПроверкаНаВшивость()
  Перем тДата,тЧас,тМин,тСек, НачПозДок, КонПозДок, ВыбДок;
  тДата=ТекущаяДата(); ТекущееВремя(тЧас,тМин,тСек);
  КонПозДок=СформироватьПозициюДокумента(тДата,тЧас,тМин,тСек,1);
  тМин=тМин-60; Если тМин<0
  Тогда тЧас=тЧас-1; тМин=тМин+60; Если тЧас<0
  Тогда тДата=тДата-1; тЧас=тЧас+24; КонецЕсли; КонецЕсли;
  НачПозДок=СформироватьПозициюДокумента(тДата,тЧас,тМин,тСек,1);
  ВыбДок=СоздатьОбъект("Документ.Т_РасходнаяНакладная");
  ВыбДок.ВыбратьДокументы(НачПозДок,КонПозДок);
  Пока ВыбДок.ПолучитьДокумент()<>0
  Цикл Если ВыбДок.Автор=глПользователь
  Тогда Если ВыбДок.Проведен()+ВыбДок.ПометкаУдаления()<>0
  Тогда Прервать КонецЕсли КонецЕсли КонецЦикла;
  Если ВыбДок.Выбран()<>0 Тогда ОткрытьФорму(ВыбДок.ТекущийДокумент() КонецЕсли;
КонецПроцедкры //ПроверкаНаВшивость
Процедура ПриНачалеРаботыСистемы() //предопределенная
  ОбработкаОжидания("ПроверкаНаВшивость",1);
КонецПроцедкры //ПриНачалеРаботыСистемы
39 Ork
 
04.11.13
11:52
(0) Идея с файл-флагами в 1С - полный и безоговорочный бред.
Для вашего случая все решается просто. Ни один документ вашего не создается интерактивно. Все - в обработку. Форму обработки не открывать два раза. Документ создается только программно по кнопке из обработки.
Классическое РМК.
40 zladenuw
 
04.11.13
12:50
(0) а может РС. где два измерения пользователь и документ, ресурс время создание. и делаем подписку при записи. если есть там документ то не даем пользователю записать новый.
41 Torquader
 
04.11.13
12:51
(39) Ну, тогда можно вообще не создавать документ, а всю работу вести в обработке. Им же надо, чтобы всегда был только один документ - вот и будет окно обработки, где что-то будет вводиться. А в момент записи это будет передаваться в документ.
Только не очень понятно, может ли пользователь смотреть журнал уже созданных документов - если нет, то всё просто, а если может смотреть, то придётся много чего переписывать, чтобы не было возможности ввести новый документ.

Чем хороша обработка - не расходуется номер документа - то есть, когда один пользователь откроет обработку, ему не будет выделяться номер, и все записываемые документы будут идти по порядку, а не по порядку их создания пользователями.