Имя: Пароль:
1C
1С v8
Запретить одновременное создание документа
, , ,
0 MxDn
 
05.06.13
10:19
Когда кто-то уже создает док, то других надо отфутболить, до того момента, пока этот кто-то не запишет док или отменит создание. Редактировать существующие можно.
Интересует решение средствами платформы, без запила своего механизма блокировок.
1С 8.2, база MsSQL.
1 mikecool
 
05.06.13
10:20
дык блокировки только на существующие объекты можно делать
2 ZanderZ
 
05.06.13
10:21
нет такого
3 PR
 
05.06.13
10:21
(0) Убил бы
4 Рэйв
 
05.06.13
10:22
как вариант


сделай константу флаг - булево.
Если открыт новый - устанваливай истина и футболь осталтьных желающих проверкой ПередОткрытием на ЭтоНовый() и константа= истина

Помле записи ставь константу ложь
5 Рэйв
 
05.06.13
10:22
но все ранво это изврат
6 PR
 
05.06.13
10:25
7 Молодой 1Снег
 
05.06.13
10:25
(4) Надо обдумать ситуацию когда при создании нового дока что-нибудь глюкнет или ребутнется комп. Т.е. док уже никто не создает, а константа указывает на обратное.
8 Рэйв
 
05.06.13
10:26
:-) Я перед ним извинюсь. Вырвалось
9 Рэйв
 
05.06.13
10:27
(7)Ну,добавить возможность ручного снятия.
10 MxDn
 
05.06.13
10:29
Чуть подробнее о задаче:
Есть скелет документа запись в регистре сведений - это скелет документа и на его основе создается документ. Пользователи видят этот список скелетов и на их основе создают доки. Так вот нужно чтобы на основе одного и того же скелета не создали 2 дока. Я добавил флаг-поле "блок" в регистр при создании нового дока и его проверяю при создании нового и после снимаю. Проблема в том, что босс неодобряэ. Говорит, что в случае зависания клиента кто снимать такие блокировки будет?
Ну я вижу вы уже сами знаете чем это грозит :)
11 PR
 
05.06.13
10:29
(9) Я бы прикрутил к механизму согласование с ответственными лицами компании, а то так любой удод будет заходить и снимать галочку.
12 Рэйв
 
05.06.13
10:30
(11)Дать права только админу и только через пиво:-)  И будет порядок
13 PR
 
05.06.13
10:31
(10) У тебя толковый босс.
Он же не виноват, что ты не понимаешь, что просто тупо перед записью документа нужно смотреть, а нет ли уже такого документа.
14 Рэйв
 
05.06.13
10:35
(10)Чего ты мучаешься? При записи проверяй есть ли уже у твоего скелета подчиненные доки.Если есть - шли лесом текущего.
Кто успел - тот присел.
15 MxDn
 
05.06.13
10:39
(1) существующий объект - таблица доков. Если можно как-то заблочить всю таблицу, то можно и так. Это идея босса и я с ней не согласен.
(13) там немного сложнее все, но скажем, что после записи дока, скелет удаляется и такого не случится, но ведь начать создание на основе одного скелета могут несколько пользователей.
16 Рэйв
 
05.06.13
10:41
(15)А что вообще за  извращение с этими скелетами? Нормальный один цельный док нельзя сделать чтоли?
17 PR
 
05.06.13
10:43
(15) Да блин. Перед записью смотришь, есть у тебя что-то на основе такого же скелета или нет.
Если невозможно по готовым документам понять, что они как-то связаны, то перестраивайте консерваторию, а не делайте дерьмо.

А потом люди плюются, что 1С тупая программа с тупыми ограничениями, ага.
18 SherifSP
 
05.06.13
10:47
(17) Возьми ТС к себе на работу, на стажировку, чтобы научился)
19 MxDn
 
05.06.13
10:47
(16) скелеты тоже особым образом создаются, здесь все упрощено, так что просто принимайте это как условие задачи.
(17) на его основе еще ничего нет, у всех пользователей начавших создание дока на основе одного скелета открыто окно документ с текстом "Новый*" в заголовке, чего быть не должно. И ,о гуру, не гневайтеся, пожалуйста ;)
20 PR
 
05.06.13
10:51
(19) Ну нету и хорошо, значит можно записывать.
Уже что-то есть, значит нельзя.
Все просто.
21 welwel
 
05.06.13
10:51
(19) записывать сразу новый документ и проверять, как в (14), а потому уже продолжать наполнять данными
22 PR
 
05.06.13
10:54
Если честно, непонятно, почему "скелетом" изначально не является новый документ?
Или наоборот, почему "скелет" изначально не является новым документом?
Нафига эти прелюдии и лишние сущности?
23 Serg_1960
 
05.06.13
10:55
Вообще-то такой механизм "контроля" уже создан и используется в типовых. Когда вы заполняете "на основании" документа, то используется, зачастую, не сам документ, а его остатки.
24 FoxFox
 
05.06.13
10:58
(9) Ага, и опрашивать у 100500 коллег, никто случайно не создает в данный момент документ?
25 AlexITGround
 
05.06.13
11:00
(10) нахуа, сделай зависимыми и проверяй на подчиненность. Флаги какие-то делать начинают, херня какая-то
26 AlexITGround
 
05.06.13
11:01
(14) блин, сорри, недочитал ( опередил меня Пр
27 MxDn
 
05.06.13
11:02
(22) я в (19) ответил
(21) это вариант, спасибо. Правда, есть свои тонкости, но тем не менее.
(26) а теперь до (19) дочитайте :)
28 mikecool
 
05.06.13
11:04
две проверки - перед началом создания и перед записью
29 AlexITGround
 
05.06.13
11:04
(27) ну я же извинился уже))
30 AlexITGround
 
05.06.13
11:04
(28) ого, а зачем две?
31 PR
 
05.06.13
11:08
(27) Просто постановка "Когда кто-то уже создает док, то других надо отфутболить, до того момента, пока этот кто-то не запишет док или отменит создание" изначально ущербная.
Но если так, то делай константой, сказали же в (4).
Какая задача, такое и решение.
Но вообще хрень полная.
Какое чье дело, что кто-то открыл форму нового документа?
Если кто-то переживает, что он не будет первым, то для него давно придумали кнопочку "Записать".
32 Serg_1960
 
05.06.13
11:08
(Off) Задача, которую озвучил автор, мне напомнила проблему менеджеров сбыта, которые заполняют в диалоге различные заказы различных покупателей, заказывающие один и тот-же товар с общего склада...
33 MxDn
 
05.06.13
11:18
(31) я разделяю ваше мнение, но задачу поставил не я. И я также не согласен с некоторыми существующим механизмами, но я работаю с тем, что есть. Попробую решить задачу через запись дока сразу после открытия.
34 mikecool
 
05.06.13
11:20
(30) перед созданием - а вдруг уже кто создал
перед записью - вдруг кто быстрее оказался
35 AlexITGround
 
05.06.13
11:33
(34) достаточно только второго
36 mikecool
 
05.06.13
11:35
(35) думаю юзвери будут очень рады потратить какое то время, а потом получить "пшелнах"
37 mikecool
 
05.06.13
11:35
+36 вместо того, чтобы сразу получить "пшелнах" без затраты времени
38 MxDn
 
05.06.13
11:37
(34) не создал, а создает.
39 AlexITGround
 
05.06.13
11:38
(37) хм...аргумент, согласен.
40 программистище
 
05.06.13
11:46
а почему бы не пихать ссылку на записанный пустой документ в скелет (т.е. резервировать документ)
а юзеру при создании подсовывать уже записанный вместо нового, его и блокировать для изменения другим пользователям
41 kosts
 
05.06.13
11:49
Создай служебный справочник с одним элементом и блокируй этот элемент на нужное время, если клиент вылетет по какой либо ошибке, то блокировка с элемента должна вроде сама сняться через некоторое время.
42 Фрэнки
 
05.06.13
11:50
(33) А как происходит заполнение реквизиов нового документа по данным из скелетной записи? Процедуры/события какие? Обычное приложение?

Может быть в форме ПередОткрытием считывать значение дополнительного реквизита в скелете? А при закрытии формы, если записи документа не произошло - очищать этот реквизит?

Лично мне не нравится вариант записи нового документа раньше, чем юзер примет решение его сохранить сознательно.
43 AlexITGround
 
05.06.13
12:05
(41) да вы , батенька, извращенец)) плодить таблицы ради такого дела, юзайте существующий функционал
44 kosts
 
05.06.13
12:11
(43) Криво использовать существующий функционал, не по мне. Я лучше создам все что мне нужно для получения нормального решения в т.ч. новые таблицы, если понадобится.
45 MxDn
 
05.06.13
12:17
(40) я сейчас иду в этом направлении, спасибо.
(41) интересная мысль.
(42) запись/очистка реквизита - это примерно тоже, что и (10) с такой же проблемой. Всем скелетам суждено стать документами, за редким исключением, поэтому запись после создания вполне приемлема. Не спрашивайте, почему тогда не создаются сразу документы :)
46 Фрэнки
 
05.06.13
12:27
(45) Тогда при попытке создания пользователем нового документа - искать существующую ссылку и открывать. Просто получается, что одной только ссылки будет недостаточно, чтоб сделать вывод открыта форма документа-скелета или нет. Перед открытием формы смотреть кроме поля "ссылка на документ" на поле "форма уже открыта".
В противном случае пользователи будут упорно трудиться параллельно на уже открытыми формами у соседей и ПередЗапись вслух комментироовать на устном русском системное сообщение о нарушении синхронизации с объектом
47 MxDn
 
05.06.13
12:46
(46) Если документ создан (существует в базе), то открывается для редактирования существующий документ. Скелет после создания документа удаляется.
48 AlexITGround
 
05.06.13
12:47
(44) криво использовать? не нужно утрировать, ничего кривого выше не написано
49 AlexITGround
 
05.06.13
12:48
+ 48 обычные обработчики событий, что может быть проще?
50 Фрэнки
 
05.06.13
12:50
(47) Тогда зачем ждать пока юзеры проснутся? Разве только в целях садо-мазо

Если садо-мазо исключить, то в начале какого-либо сеанса сгенерить все доки-скелеты... Впрочем, причин заготовки скелета можно придумать множество, а некрофильство - это только одна из них ;)
51 PR
 
05.06.13
12:52
(33) А почему бы не возложить обязанность записать док на пользователя?
52 welwel
 
05.06.13
14:10
(51) получается, делаем удобнее программисту, а не пользователю
почти как в http://www.flibusta.net/b/106825
53 PR
 
05.06.13
14:12
(52) С фига ли? Делаем так, как правильно с учетом всех факторов, а не отдельно выборочно взятых моментов.
54 Турист
 
05.06.13
14:17
(51) есть такие постановщики, которые прогибаются под любые хотелки пользователей ))
55 PR
 
05.06.13
16:46
(54) Прогнуться-то можно, только нужно четко понимать и донести пользователю, что получается идиотское решение. Ты открываешь новый документ, а он, раз, и какого-то лешего уже записан.
56 Фрэнки
 
05.06.13
20:56
(55) согласен. тем более, что по инфе от ТС, документ записан в состоянии не пригодном для дальнейшей работы с ним, т.е. нужно еще что-то совершать с данными документа и только после этого его проводить... технически можно много извратов прикручивать, только приводит это к автоматизации хаоса
AdBlock убивает бесплатный контент. 1Сергей