Работа с управлявани ключалки в примери
Ще разгледаме принципите на работа на контролираните ключалки на някои тестови конфигурации. Счетоводството се извършва в контекста на номенклатурата и свойствата на номенклатурата. Приходната фактура (ПН) не блокира нищо, но записва данни в натрупващ регистър "Остатъчни стоки". Използвайки примера на документа за фактура (PO), ще проучим как работят управляваните брави и след това ще разгледаме новата схема за осчетоводяване на документи. В PN и RN има таблични части (PT) със същата структура, Списък на номенклатурата, които съдържат списък на номенклатурата, свойствата, количеството, сумата, цената:
Натрупващият регистър има съответните измерения: Номенклатура, Имот и два ресурса - Сума и Количество.
Първо, за да работим с управлявани ключалки, нека зададем режима на управлявано заключване за конфигурацията като цяло и режима на управлявано заключване отделно за фактурата, разходната фактура и за всички регистри, през които тези документи правят движения. В нашите примери това е един регистър на натрупване на оставащи стоки.
Моля, обърнете внимание, че във файловата версия можете да зададете заключвания само на цели таблици (вижте таблицата по-долу), ред по ред (в контекста на избрани движения от регистъра за натрупване, например) заключванията не работят във файлов режим. Примерите са тествани на 1C 8.2 + MS SQL 2008 R2 Express.
Повече подробности за поддържаните режими на заключване тук: http://v8.1c.ru/overview/Term_000000642.htm
Примери се разглеждат при следните LV и PN:
Пон - 01
Пон - 02
RN - 01
Пример 1. конкретно известна номенклатурна позиция.
Код на процедурата Осчетоводяване Обработка (Анулиране, Режим) на модула на документ обект Фактура:
Движения. Останки от номенклатура. log = вярно;
Lock = Нови LockData; LockItem = Заключване. Добавяне (); ItemLock. Обхват = "RegisterAccumulation.Nomenclature Remains" ; ItemLock. Режим = DataLockMode. Изключителен; ItemLock. SetValue( "Номенклатура" , Директории . Номенклатура . FindBy Име ("Ботуши" )); //търсене по име за примерни цели Заключване. блокиране (); //задайте заключване на елемента с име "Ботуши"
//Следва запълването на движенията
Как работи:
Ако по време на процеса на провеждане на RN - 01 се направи опит за провеждане на PN - 01, тогава той ще изчака завършването на блокирането на регистъра за натрупване за измерението "Номенклатура" с име "Ботуши", а PN - 02 ще изчака завършването на блокирането на регистъра за натрупване за измерението "Номенклатура" с името "Ботуши".
Пример 2. Блокиране по конкретно известна двойка номенклатурна позиция - свойство.
Код на процедурата Осчетоводяване Обработка (Анулиране, Режим) на модула на документ обект Фактура:
Движения. Останки от номенклатура. log = вярно;
Lock = Нови LockData; LockItem = Заключване. Добавяне (); ItemLock. Обхват = "RegisterAccumulation.Nomenclature Remains" ; ItemLock. Режим = DataLockMode. Изключителен; ItemLock. SetValue( "Номенклатура" , Директории . Номенклатура . FindBy Име ("Ботуши" )); //търсене по име вЗа целите на примера, LockItem. SetValue("Property" , References . Properties . FindByName("black size 42" )); //търсене по име за примерни цели Заключване. блокиране ();
//Следва запълването на движенията
Как работи:
Ако по време на процеса на изпълнение на RN - 01 се направи опит за извършване на PN - 01, тогава той ще изчака блокирането на регистъра за натрупване за двойката измервания "Номенклатура" (с името "Ботуши") - "Имот" (с името "черни 42 размера"), а PN - 02 ще се извърши без изчакване, тъй като в неговия PM списък на номенклатурата няма двойка "Номен clature“ – „Имот“, който ще формира съответното текущо движение.
Пример 3. Заключете цялата таблица на регистрите за натрупване.
Код на процедурата Осчетоводяване Обработка (Анулиране, Режим) на модула на документ обект Фактура:
Lock = Нови LockData; LockItem = Заключване. Добавяне (); ItemLock. Обхват = "RegisterAccumulation.Nomenclature Remains" ; ItemLock. Режим = DataLockMode. Изключителен; Заключване. блокиране ();
//Следва запълването на движенията
Как работи:
Ако в процеса на провеждане на RN - 01 се направи опит за провеждане на PN - 01, тогава той ще изчака завършването на блокирането на таблицата на регистъра на натрупването и PN - 02 ще изчака завършването на блокирането на таблицата на регистъра на натрупването.
Пример 4. Блокиране по едно поле от източника на данни за блокиране (това е например списък с движения или списък с номенклатура, за която ще има движения).
Код на процедурата Осчетоводяване Обработка (Анулиране, Режим) на модула на документ обект Фактура:
Блокиране = НовоLockData ; LockItem = Заключване. Добавяне (); ItemLock. Обхват = "RegisterAccumulation.Nomenclature Remains" ; ItemLock. Режим = DataLockMode. Изключителен; ItemLock. DataSource = ListNomenclature; ItemLock. UseFromDataSource( "Номенклатура" , "Номенклатура" ); Заключване. блокиране ();
//Следва запълването на движенията
Как работи:
Ако в процеса на провеждане на RN - 01 се направи опит за извършване на PN - 01, тогава той ще изчака блокирането на регистъра за натрупване от измерението "Номенклатура" и стойността "Ботуши" от изходния списък с артикули и PN - 02 ще изчака блокирането на регистъра за натрупване от измерението "Номенклатура" и стойността "Ботуши" от изходния списък с артикули (тъй като това е стойността на атрибут "Номенклатура" в прехвърления като източник на PM).
Пример 5. Блокиране чрез комбинация от полета от източника на данни за блокиране (например списък с движения или списък с елементи със свойства, за които ще има движения).
Код на процедурата Осчетоводяване Обработка (Анулиране, Режим) на модула на документ обект Фактура:
Lock = Нови LockData;
LockElement = Заключване. Добавяне (); ItemLock. Обхват = "RegisterAccumulation.Nomenclature Remains" ; ItemLock. Режим = DataLockMode. Изключителен; ItemLock. DataSource = ListNomenclature; ItemLock. UseFromDataSource( "Номенклатура" , "Номенклатура" ); ItemLock. UseFromDataSource( "Свойство" , "Свойство" ); Заключване. блокиране ();
//Следвазапълващи движения
Как работи:
Ако по време на процеса на провеждане на RN - 01 се направи опит за провеждане на PN - 01, тогава той ще изчака блокирането на регистъра за натрупване за двойката измервания "Номенклатура" стойност "Ботуши" от предавания източник - "Свойство" стойност "черен размер 42" от предавания източник, а PN - 02 ще се извърши без изчакване, тъй като в неговия PM списък на номенклатурата няма двойка "Nomenc lature" - "Свойство", което ще формира съответните стойности на изходните полета за блокиране на движението.
Пример 6. Заключване на две полета от източника на данни за заключване.
Код на процедурата Осчетоводяване Обработка (Анулиране, Режим) на модула на документ обект Фактура:
//условие "И" - записите за артикула от PM списъка с артикули също ще бъдат блокирани
// с всякакви свойства и записи за всеки елемент със свойства от PM ItemList Lock = New DataLock ; LockItem = Заключване. Добавяне (); ItemLock. Обхват = "RegisterAccumulation.Nomenclature Remains" ; ItemLock. Режим = DataLockMode. Изключителен; ItemLock. DataSource = ListNomenclature; ItemLock. UseFromDataSource( "Номенклатура" , "Номенклатура" ); LockItem = Заключване. Добавяне (); ItemLock. Обхват = "RegisterAccumulation.Nomenclature Remains" ; ItemLock. Режим = DataLockMode. Изключителен; ItemLock. DataSource = ListNomenclature; ItemLock. UseFromDataSource( "Свойство" , "Свойство" ); Заключване. блокиране ();
//Следва запълването на движенията
Как работи:
Ако по време на процеса на провеждане на RN - 01 се прави опит за провеждане на PN - 01, тогава той ще изчака блокирането на регистъра на натрупването на измерението "номенклатура" стойността "обувки" с всякакви свойства и отделно върху "свойството" със стойността "черни размери 42" за всеки елемент, в PN - 01, има и двата елемента "Boots", а предмета с имотите "Black 42 има и двата елемента" Boots ", а предмета с имотите" Black 42 има и двата елемента "Boots", а елементът с имотите "Black 42 има и двете елементи, има и двата елемента", а елементите с имота "Black 42 -размер има и двете елементи" Boots ", така и с елемента с имоти" Black 42 -размер ". По същия начин Mon - 02 ще изчака блокирането да завърши, тъй като в Mon - 02 има елемент "Ботуши".
Пример 7. Нова схема за публикуване (каква е разликата между LockToChange = True и заключванията, използващи обекта DataLock).
Код на процедурата Осчетоводяване Обработка (Анулиране, Режим) на модула на документ обект Фактура:
//Нова схема (без механизъм за контрол на остатъци)
// Разбор на LockForChange = True Движение. Останки от номенклатура. BlockForChange = вярно; Движение. Останки от номенклатура. Напиши(); //Наборът е празен, няма стойности на полето за заключване. нищо за блокиране. //много опростен пример за създаване на движения на разходи За всеки редN от цикъла на списъка с елементи Движение = Движения . Останки от номенклатура. Добавяне на разходи(); Движение. Период = Дата; Движение. Номенклатура = StringN. номенклатура; Движение. Количество = НизN. Количество ; Движение. Сума = НизN. Сума ;
Движение . Свойство = StringN. Имот ; Краен цикъл;
//1 Движения. Останки от номенклатура. BlockForChange = вярно; Движение. Останки от номенклатура. Напиши(); //Наборът не е празен, ще се извърши заключване, източникът е PM ItemList
//След това трябва да има механизъм за контролиране на остатъците
Как работи:
Ако вВ процеса на провеждане на RN - 01, направете опит за провеждане на PN - 01, след което ще изчака блокирането на регистъра за натрупване за двойката измервания "Номенклатура" стойност "Ботуши" от предавания източник - "Свойство" стойност "черен размер 42" от предавания източник и PN - 02 ще се извърши без изчакване, тъй като в неговия PM списък на номенклатурата няма двойка "Номенклатура " - „Свойство", което ще формира съответните стойности на изходните полета за блокиране на движението.
Когато използвате командатаLockForChange = True, ще бъде зададено изключително заключване на регистъра за натрупване за стойностите на измерванията на движението. За това не е необходимо да пишете никакви конструкции, използвайки обекта DataLock.
//Работи по същия начин като 1 Движения. Останки от номенклатура. Напиши(); Заключване = Ново заключване на данни; LockItem = Заключване. Добавяне (); ItemLock. Обхват = "RegisterAccumulation.Nomenclature Remains" ; ItemLock. Режим = DataLockMode. Изключителен; ItemLock. DataSource = Движения. Останки от номенклатура. разтоварване(); За всяко измерение от метаданни. РегистриНатрупване. Останки от номенклатура. Измервателен цикъл LockItem. UseFromDataSource( Измерение. Име, Измерение. Име); Краен цикъл; Заключване. блокиране ();
//След това трябва да има механизъм за контролиране на остатъците