Имя: Пароль:
1C
1С v8
управляемая блокировка документов
, ,
0 Игорь_МММ
 
18.07.16
21:35
как думаете можно ли замутить блокировку документов, на время проведения другого документа? при проведении дока 1 нужно заблокировать изменение дока 2. Док1 и Док2 делают движения в РН и сумма их движений - это определенное число, то есть если по Докам2 в РН попало количество 60, то на долю Дока1 остается только 40. Они как бы связаны этим суммарным количеством (100), если по одним документам уже насписали 100, то по другим списания уже не должно быть. Как это по-человечески организовать?
1 Игорь_МММ
 
18.07.16
21:46
Эти два дока Док1 и Док2 по уму должны появляться последовательно ,сначала некоторое количество Доков1 ,потом один Док2, который добивает до 100. Беда, млин, в пользователях - не всегда к моменту создания Дока2 все Доки1 созданы. Док2 подбивает все до 100, но потом вылазят новые Доки1 ,которые переваливают за 100. Хочу поставить условие чтобы Доки1 не создавали движений если уже есть Док2, но тут есть же вариант ,что и Док2 могут изменить/удалить. Нет мыслей как это развести?
2 DrLekter
 
18.07.16
21:57
Я делал похожее. Разбиение пиходной накладной по формам учета. Строки двух документов связаны суммарным количеством, при этом можно менять любой из документов - второй изменится так, чтобы сумма осталась прежней. Нужно, чтобы Док2 содержал (в отдельной ТЧ или как-то еще) все Доки1. А Доки1 при проведении проверяли, нет ли документа Док2, содержащего ссылку на них, и отказ в случае наличия. Ну или регистр завести отдельный для этого.
3 Игорь_МММ
 
19.07.16
07:54
(2) что-то в этом роде хочу сделать, но нужно же заблокировать возможность создания и редактирования Дока1 на время пока создается Док2. Иначе возможны варианты. Как это сделать?
4 Cyberhawk
 
19.07.16
08:22
Все просто - не давать создавать доки1, если уже создан док2
5 PR
 
19.07.16
08:25
(4) Да лучше на это время вообще охраннику сказал, чтобы народ вывел из помещения, ага.
6 PR
 
19.07.16
08:25
(3) Ну и блокируй документ, а после окончания снимай блокировку.
7 DmitrO
 
19.07.16
08:26
1.Блокировки ставить на РН при проведении Док1 и Док2.
2.При проведении Док1 определять наличие Док2 и отказывать в проведении при наличии.
8 Игорь_МММ
 
19.07.16
08:53
(4) Доки1 делают движения в разные регистры поэтому нельзя не давать создавать. Я делаю проверку в обработке проведения: если создан Док2, то определенные движения не делаю. Но Док2 же не константа - при созданиии Док2 его ТЧ заполняется данными дополняющими Доки1 до 100.

(7)..хм. наверное вариант. Тогда блокировку вешать при создании Док2? И еще вопрос как снять блокировку? .Заблокировать есть , а .Разблокировать нету )) ...
9 aleks_default
 
19.07.16
09:43
(3) Как связаны Док1 и Док2? По основанию?  
Вот и делай регистр накопления  с измерением ДокОснование  и контролем остатков.
10 sergeev-ag-1977
 
19.07.16
09:52
Объявить транзакцию не предлагать ?!
11 Игорь_МММ
 
19.07.16
10:04
(9) к этому и пришел - надо отдельный регистр, чтобы не блокировать весь исходный регистр - на нем и бухгалтерия и склад и производство сидит.
А как сделать так чтобы после создания записи в новом РН они как-то переносились в старый РН? ибо смотреть где используется изначальный РН будет тяжким трудом(
(10) это не то
12 Cyberhawk
 
19.07.16
10:04
(8) "при созданиии Док2 его ТЧ заполняется данными дополняющими Доки1 до 100" // Так у тебя есть еще одно событие, по котором происходит изменение Док2 - это создание любого Док1. Это какая-то дичь
13 Игорь_МММ
 
19.07.16
10:07
(12) мне важны движения Док1 в РН. В самом доке пусть записывает чего хочет. главное чтобы в РН при создании Док2 попало суммарное количество 100 и более не менялось.
14 Cyberhawk
 
19.07.16
10:09
(13) Зачем тогда "при проведении дока 1 нужно заблокировать изменение дока 2" в (0)?
15 Игорь_МММ
 
19.07.16
10:13
(14) правильно наоборот - при создании док2 нужно блокировать создание док1. НО как правильно написал (7) блокировку надо ставить на РН, не на док. К тому же нужен новый регистр, так как старый не содержит нужного измерения и потому как в (11) . Теперь вопрос как перенести будет записи из нового РН в старый?
16 Игорь_МММ
 
19.07.16
10:16
в модуле Набора записей РН есть события ПриЗаписи и ПередЗаписью - как думаете это подойдет?
17 Cyberhawk
 
19.07.16
10:48
(15) "при создании док2 нужно блокировать создание док1" // Ну допустим ты добился того, что за время создания и проведения док2 никто не сделал движений по РН через док1. Что дальше? Док1 новые создавать все равно смогут?
18 Игорь_МММ
 
19.07.16
10:53
(17) при проведении Док1 будет проверка на наличие Док2 - если есть, то запрет движения в регистр, а создавать Док1 - пожалуйста.
19 Игорь_МММ
 
19.07.16
10:57
В событии ПриЗаписи в Модуле набора записей РН как выцепить текущие записываемые данные?
20 Игорь_МММ
 
19.07.16
11:09
ау, млин, уперся .. не нахожу как понять что записывается в РН в текущий момент ?
21 aleks_default
 
19.07.16
11:11
(20) Да ЭтотОбъект, блин.
Ты бы лучше описал что делать решил, а то мне вот нихера не понятно.
22 DomovoiVShoke
 
19.07.16
11:16
Думается есть косяк в архитектуре, как-то слишком сложно все.
23 Игорь_МММ
 
19.07.16
11:59
(21) ЭтотОбъект нашел, а что дальше? надо что конкретно сейчас записывается. ЭтотОбъект - это же весь РН, а далее через точку нужно что-то не вижу, типа ТекущиеДанные .

по сути - нужно списывать материалы израсходованные при производстве изделия. Списать в итоге нужно установленное количество (есть док на это). Фактически списывается двумя доками - ЗакрытиеСменногоЗадания и ОтчетПроизводстваЗаСмену. По хорошему ЗакрытиеСЗ списывает все что используется непосредственно при производстве, а Отчет должен списывать то что просто комплектуется к изделию. Но запросто получается что еще сменное задание не закрыто - нет дока, а кладовщик уже изделие на склад положил(есть Отчет производства за смену). И закрытия оставшегося смен.задания может и не быть вовсе. Короче мрак ..
24 aleks_default
 
19.07.16
12:07
(23)
ЭтотОбъект это не весь регистр,  текущий, заполненный набор записей регистра с установленным отбором.

С такими познаниями, я бы сказал, что тебе еще рано заниматься архитектурой, извини.
25 aleks_default
 
19.07.16
12:09
Для начала научись формулировать задачу.
26 Игорь_МММ
 
19.07.16
13:56
(24) да,понял
познание вещь наживная.
________________
ЭтотОбъект - уже набор записей с отбором по регистратору, это понял. Ну а как имея набор записей записать его в другой регистр? Если бы были отдельные записи я бы сделал, а тут набор - не найду как выцепить отдельные записи. Или можно записать все скопом ?
27 Игорь_МММ
 
19.07.16
14:37
все, разобрался ,всем спасибо
28 Игорь_МММ
 
19.07.16
17:14
помогите плз еще с блокировкой - в сети информации ноль. Сделал блокировку на РН:

Блокировка = Новый БлокировкаДанных;

    Для Каждого Строка Из ЭтаФорма.Объект.Продукция Цикл
        НоваяСтрока = ТЗ.Добавить();
        НоваяСтрока.Товар = Строка.Номенклатура;
        НоваяСтрока.Количество = Строка.Количество;
        Спецификация = Справочники.Спецификации.НайтиПоРеквизиту("Товар", Строка.Номенклатура);
        Если Не Спецификация.Пустая() Тогда
            ЭлементБлокировки = Блокировка.Добавить();
            ЭлементБлокировки.Область = "РегистрНакопления.НаличиеТМЦзеркало";
            ЭлементБлокировки.Режим = РежимБлокировкиДанных.Исключительный;
            ЭлементБлокировки.УстановитьЗначение("Спецификация",Спецификация);
        КонецЕсли;
    КонецЦикла;
    
    Попытка
        Блокировка.Заблокировать();
    Исключение
        Предупреждение("По выбранной продукции вносятся данные", 2);
        Отказ = Истина;
    КонецПопытки;

Блокировка стоит в событии ПередЗаписью на форме. Мне нужно после проведения блокировку отключить - как это сделать?
29 HardBall
 
19.07.16
17:26
(28) Блокировка только в транзакции существует.
30 Игорь_МММ
 
19.07.16
17:48
(29)

НачатьТранзакцию()
......
Блокировка = Новый БлокировкаДанных;
....
ЗафиксироватьТранзакцию();

Так?
31 HardBall
 
19.07.16
18:02
(30)Запись и так в транзакции выполняется.
Закончится транзакция - закончится блокировка.