Имя: Пароль:
   
1C
1С v8
Подготовка к 1С специалисту и правильные блокировки по регистру бухгалтерии, как
0 NcSteel
 
19.02.14
13:12
Вот готовлюсь к сдаче экзамена на Специалиста по восьмерке.
И стал вопрос как правильно блокировать регистр бухгалтерии. Зная построение индекса можно предположить , что блокировки по субконто нам ничего не даст, но во всех примерах решения вижу постоянно:
Блокировка = Новый БлокировкаДанных;
ЭлементБлокировки = Блокировка.Добавить("РегистрБухгалтерии.Управленческий");
ЭлементБлокировки.УстановитьЗначение("Счет", ПланыСчетов.Управленческий.Товары);
ЭлементБлокировки.ИсточникДанных = СписокНоменклатуры;
ЭлементБлокировки.ИспользоватьИзИсточникаДанных(ПланыВидовХарактеристик.ВидыСубконто.Номенклатура, "Номенклатура");
Подскажите и тыкните носом)
1 sikuda
 
19.02.14
13:23
Почему не даст?
Забыл:
ЭлементБлокировки.Режим = РежимБлокировкиДанных.Исключительный;
БлокировкаДанных.Заблокировать();
2 NcSteel
 
19.02.14
13:30
(1) Ну Режим и Заблокировать не включил так как это и так понятно.

Ну я размышляю так:

Что бы найти записи которые мне следует изменить, необходимо прочитать таблицу. В таблице бухгалтерии индекс строится по Счету и набору измерений - нет субконто. Следовательно придется просмотреть (заблокировать) большой набор записей, а именно по всем видам субконто. Поэтому и вешать блокировку на вид субконто бессмысленно.
3 Max Street
 
19.02.14
13:34
(2) субконто и есть измерение на счете. блокировать его нужно
4 NcSteel
 
19.02.14
13:35
(3) Субконто это не измерение. Измерение это измерение, например Организация.
5 Господин ПЖ
 
19.02.14
13:36
на уровне субд эту блокировку видно? или она объектная
6 Дмитрий666
 
19.02.14
13:37
как написано в примерах так и будет правильно, кстати при сдаче спеца по 8 учтывается версия платформы? 8.2 или 8.3? что пишут в сертификат: спец по 8 или спец по 8.3?
7 NcSteel
 
19.02.14
13:38
(5) Вот как раз пытаюсь ЦУПом посмотреть, но пока не выходит каменный цветок.
8 NcSteel
 
19.02.14
13:39
(6) Имхо но всегда просто пишут v8.
9 Новиков
 
19.02.14
13:52
(0) обрати внимание на алгоритмы наложение блокировок в типовой БП. Если аналитика известна в алгоритмах (типо тра-та-та по договору), то блокировка всегда устанавливается. Если тра-та-та по всем договорам - то нет. Как учат нас Отцы, "если можно - всегда сужайте ландшафт блокировок" (с) откуда то из УЦ :)

Устанавливай, лишним не будет. Ибо если придерутся, можно всегда отбрехаться :)
10 NcSteel
 
19.02.14
13:54
(9) Верить и понимать согласись это разное. Вот я и не понимаю где мы выиграем )))
11 МишельЛагранж
 
19.02.14
13:55
(9)Устанавливай, лишним не будет
- с какой радости блокировка одного договора не приведет к ступору оформления документов?
Вся суть - в самой непродуманной системе блокировок в 1С.
12 neckto
 
19.02.14
13:59
(0) Забываешь про таблицы итогов.
13 Новиков
 
19.02.14
14:03
(11) в чем проблема проверить ложность своего суждения на практике?
14 Господин ПЖ
 
19.02.14
14:11
если дата такая же полностью - не запишется...
15 МишельЛагранж
 
19.02.14
14:14
(13) на практике - это в тишине лаборатории "сертификация 1С"? спасибо, у нас своя ... практика.
Типовые, так сказать, в действии...
16 NcSteel
 
19.02.14
14:22
(12) Вот как раз про таблицы итогов и вспоминаю )
17 Reaper_1c
 
19.02.14
14:29
Для тех, кто в танке - управляемая блокировка не имеет отношения к блокировкам уровня СУБД.
18 NcSteel
 
19.02.14
15:04
(17) Именно.
19 MrStomak
 
19.02.14
15:26
(18) что именно? Она и к индексам отношения не имеет, зачем ты их сюда приплетаешь то?
Управляемая блокировка висит в менеджере блокировок в 1с, у блокировок есть пространства, субконто - одно из пространств. В момент наложения блокировки проверяется, существует ли уже такая блокировка на данном пересечении пространств и совместима ли она с накладываемой по типу. Если попытаешься наложить две блокировки на разные субконто - пересечения пространств не будет, если без уточнения субконто - то будет соответствующее пересечение и, как следствие, ожидание.
20 MrStomak
 
19.02.14
15:32
Ну и в целом, размышления про индексы в регистре бухгалтерии - неверные.
21 NcSteel
 
19.02.14
16:12
(19) Где можно посвятится про доступные пространства в регистрах?

Я могу только наблюдать таблицы в СУБД и там мои соображения верны.
22 NcSteel
 
19.02.14
16:17
Как определяется сервер 1С какие записи конкретно надо заблокировать. При переборе записей вешает ли сервер 1С блокировки на соседние записи?

Вообще механизм блокировок сервером 1С как то до конца не понятен
23 Господин ПЖ
 
19.02.14
16:19
на сервере приложений смотреть надо... блокировки субд "мелькнули" и ушли, а объектная осталась
24 NcSteel
 
19.02.14
16:28
Проверил....

документы с не пересекающимися данными (субконто номенклатура) не смогли провестись параллельно, вод код блокировки:

ЭлементБлокировки.УстановитьЗначение("Счет", ПланыСчетов.Основной.Товары);
    ЭлементБлокировки.ИсточникДанных = Товары;
    ЭлементБлокировки.ИспользоватьИзИсточникаДанных(ПланыВидовХарактеристик.Субконто.Номенклатура, "Номенклатура");
    ЭлементБлокировки.Режим = РежимБлокировкиДанных.Исключительный;
    Блокировка.Заблокировать();
25 NcSteel
 
19.02.14
16:28
то есть получается блокировка по субконто не сработало? Тогда зачем ее постоянно везде тыкают....
26 Господин ПЖ
 
19.02.14
16:31
ну а остальное? у них насколько одинаково?
27 Lemkus
 
19.02.14
16:36
Таблица со значениями субконто

Индекс:

Регистратор + НомерСтроки + Корреспонденция

Период + Регистратор + НомерСтроки + ВидСубконто + Корреспонденция (Кластерный)

ВидСубконто + Значение
28 NcSteel
 
19.02.14
16:40
(26) Счета учета и все.
29 MM
 
19.02.14
16:41
(23) СУБД блокировки на запись всё равно будут жить до конца транзакции, а чтения могут даже не мелькать, а прочитать данные из слепка базы (в 8.3)
(19) если в блокировке указать субконто, то ожидания не будет на этапе чтения на сервере 1С, но может возникнуть на этапе записи в СУБД, особенно на итогах  регистра бухгалтерии.
В больших транзакциях, иногда, стоит поставить управляемую блокировку на весь регистр, тогда маленькие управляемые блокировки, в оставшейся части транзакции, будут поглощены и не будут занимать ресурсы сервера 1С. Это о больших регламентных документах.
(21) кратко в СП.
(22) нет, ради этого их и придумали. Управляемые блокировки ставятся на объекты, не обязательно имеющие точный аналог в СУБД, например, субконто.
30 NcSteel
 
19.02.14
16:41
Вот блокировка:
AccRg212.DIMS Exclusive Correspond=0 Period=[T"20140101000000":+] Splitter=0 Account=196:be8903f8498421f74f0f57e4fbb71b4c ExtDimension1=7:be9650b7c3865d5111e380d0767ff038 ExtDimension2=Undefined,
AccRg212.DIMS Exclusive Correspond=1 Period=[T"20140101000000":+] Splitter=0 Account=196:a91f2c27b31cdb6c45fb46b908c6a991,
AccRg212.DIMSAUX Exclusive Correspond=0 Period=[T"20140101000000":+] Splitter=0 Account=196:be8903f8498421f74f0f57e4fbb71b4c


Интересно что такое DIMSAUX
31 MM
 
19.02.14
16:43
(25) база точно клиент-серверная?
32 NcSteel
 
19.02.14
16:43
(31) Да
33 Lemkus
 
19.02.14
16:45
(25) А режим разделения итогов включен?
34 NcSteel
 
19.02.14
16:47
(33) Это тут точно не причем. Сплитер я отключаю через явную упр блокировку.
35 NcSteel
 
19.02.14
16:50
Понаблюдал:

1. Если ставить точку останова сразу после установки упр блокировки, то второй документ параллельно спокойно проводится.
2. Если ставить точку останова после явной записи набора записей, то второй документ провестись параллельно не сможет.

В чем же разница? )
36 MM
 
19.02.14
16:54
(35) так запись ставит блокировки не только управляемые, но и СУБД. Раз разделение итогов не включено, то будет блокировка на таблице с остатками и оборотами счёта.
37 MrStomak
 
19.02.14
17:18
(21) Про доступные пространства в регистрах можно просветиться из СП.
(22) Управляемые блокировки не ставятся на "переборах данных". Они ставятся в двух случаях - когда ты явно это делаешь, указывая пространства, и при записи объекта или набора записей, пространство определяется исходя из заполненного набора записей. Никаких "соседних записей" в понятии менеджера блокировок 1С нет, если не считать таковыми числа и даты, заданные с помощью объекта "Диапазон".

Механизм упр. блокировок очень прост, все эти догадки с блокировками при обходе значений в ходе исполнения запроса и т.д. не имеют к нему никакого отношения.
38 Reaper_1c
 
19.02.14
22:29
(35) Суть в том, что блокировки уровня СУБД недоступны разработчику. Они накладываются платформой так, чтобы обеспечить целостность записываемых данных. Правильная последовательность действий:
1. Установка управляемой блокировки, блокировки есть только на уровне сервера 1С, на уровне СУБД - зеленый свет.
2. Алгоритм проведения. Насколько бы он не был сложен и длителен - документы не пересекающиеся по управляемым блокировкам будут отрабатывать параллельно.
3. Запись движений в регистры. В идеале - средствами платформы, без вызова методов "Записать()". В СУБД возникают на короткое время блокировки, но области блокирования в разных СУБД будут разными.

Ты никак не можешь повлиять на блокировки уровня СУБД. Твоя задача - организовать проведение так, чтобы все движения накатывались в СУБД одним движением, максимально быстро.

Хотя я конечно же вру. Повлиять можешь. Но это нужно будет на экзамене Эксперт по ТВКВ, а не на Специалисте.
39 Reaper_1c
 
19.02.14
22:31
(37) Ты не прав. На сервере 1С точно так же есть пороги укрупнения блокировок и сам процесс укрупнения. Но это опять таки тема Эксперта по ТВКВ.
40 Господин ПЖ
 
19.02.14
22:33
а как записать 1 500 000 записей в РН быстро?
41 Господин ПЖ
 
19.02.14
22:33
все встает колом на клиенте на 10 минут и отжирает 10 Гб памяти
42 Reaper_1c
 
19.02.14
23:00
(40) А хрен его знает.
- Доктор, у меня что-то болит!
- Купите таблетки в аптеке...
- Какие?!
- Какие-нибудь купите...
43 MrStomak
 
19.02.14
23:54
(39) Так и не увидел - в чем я же я не прав? Где писал, что нет укрупнений? Укрупнение, которое называется эскалация, есть, но там нет таблиц, нет страниц, там есть только пространства и эскалация идёт по ним. Подчеркну - менеджер блокировок 1с знать не знает, рядом или нет данные расположены на СУБД, он определяет пересечение пространств и всё.
44 MrStomak
 
19.02.14
23:57
(38) Блокировки СУБД не накладываются платформной, они накладываются СУБД в соответствии с установленным уровнем изоляции транзакций. И цель этого действия - не целостность записываемых данных, для этого есть механизм транзакций и это достигается без блокировок, а обеспечение определенной степени изолированности текущей транзакции от других транзакций.
45 Armando
 
20.02.14
01:17
(40) (41) Сильно быстрее вряд ли получится для 1,5 млн. Скорость записи еще от количества измерений зависит и сколько из них отдельно проиндексированы.
А расход памяти оправдан, если эти записи, например, сначала в таблицу значений загружаются. Хз что там у тебя происходит. Попробуй использовать порционное считывание и порционную запись в РН.
46 ILM
 
20.02.14
05:44
(41) параллельно пиши в фоновых задачах. Типа допроведения, кусочками.
47 Sammo
 
20.02.14
06:20
(40) Если 1 регистратор - то дробить по регистраторам.
Когда много регистраторов - фоновые без ожидания.
Нюанс - максимальное количество фоновых заданий надо проверять для конкретного сервера - у меня при количестве более 200 фоновых заданий которые активно пишут в РН сервер начинает несколько ... подтормаживать
48 Lemkus
 
20.02.14
13:01
(38) Как можно повлиять на блокировки уровня СУБД. Статистики, индексы, овощи, там рожь вот это все?
Независимо от того, куда вы едете — это в гору и против ветра!