0. ids79 1863 10.11.18 11:07 Сейчас в теме

Автоматические и управляемые блокировки применительно к типовым конфигурациям 1С

Основные принципы работы с режимами автоматических и управляемых блокировок в 1С Предприятие 8. Теория и применение в типовых конфигурациях: БП, УТ, ЕРП

Перейти к публикации

Комментарии
Избранное Подписка Сортировка: Древо
1. ZLENKO 381 10.11.18 17:09 Сейчас в теме
Какие полезные на практике выводы можно сделать на основе этой информации?
В статье нет рецептов применения этих знаний, а сами по себе они интересны но ценности не представляют.
IVC_goal; Vedishchev; YLioY; HystriX; +4 1 Ответить
2. ids79 1863 10.11.18 22:24 Сейчас в теме
Владимир, Вы правы, примеров практичскго применения в статье нет.
Но я и не ставил такую задачу, я планировал кратко и тезисно изложить тот обширный материал, который присутствует в сети по данному вопросу, чтобы при прочтении сформировалось четкое понимание в целом.
Насколько это получилось, судить Вам :))
VVi3ard; Vedishchev; +2 Ответить
3. spectre1978 49 11.11.18 12:57 Сейчас в теме
Действительно, довольно неплохо собрано в кучку. А вот ИС сегодня глючит. Захотел поставить звездочку - не ставится. Тыкал-тыкал, и тут оно раз - и поставило сразу 8 звезд :)) Я было решил, что вам повезло, но после обновления страницы из восьми все же осталась только одна.
Vedishchev; +1 Ответить
4. triviumfan 10 11.11.18 13:03 Сейчас в теме
может возникнуть deadlovk
описка
6. ids79 1863 11.11.18 19:31 Сейчас в теме
5. bulpi 148 11.11.18 16:21 Сейчас в теме
Непонятно, в чем преимущества новой схемы контроля остатков перед старой. В обоих случаях нужен запрос на чтение и запись в регистр, меняется только порядок этих действий.

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


А какая разница, пустой результат. или не пустой ? Все равно выполнить то его надо.

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


Ну так потом придется заблокировать. А если не блокировать, то риск точно такой же, как и в старой схеме. Например, в тот же момент может быть проведен приход, и остатки уже не отрицательные.
7. ids79 1863 11.11.18 19:40 Сейчас в теме
(5)Добрый вечер.

"Непонятно, в чем преимущества новой схемы контроля остатков перед старой. В обоих случаях нужен запрос на чтение и запись в регистр, меняется только порядок этих действий."
Запрос, не возвращающий записей всегда будет выполняться быстрее.

"Ну так потом придется заблокировать. А если не блокировать, то риск точно такой же, как и в старой схеме"
Блокировать специально как раз не нужно, это делает сама СУБД при изменении данных в таблице итогов регистра накопления в момент записи движений. Нужно только отключить разделение итогов, если разделение включено для регистра, для этого и флаг: ЗаблокироватьДляИзменения.
VVi3ard; acanta; +2 Ответить
8. bulpi 148 11.11.18 23:30 Сейчас в теме
(7)
Запрос, не возвращающий записей всегда будет выполняться быстрее.


???? Да ну ? А Вы проверяли ? ИМХО, скорость выполнения запроса зависит от целой кучи факторов, среди которых кол-во возвращаемых записей на последнем месте.

Блокировать специально как раз не нужно, это делает сама СУБД


Какая разница, я или СУБД ? Я не понимаю, почему от перестановки слагаемых должна измениться сумма.
9. bulpi 148 12.11.18 00:57 Сейчас в теме
(7)
ИМХО,
преимущества новой схемы не в этом. А в том, что раньше нужно было удалять движения уже проведенного документа перед повторным проведением, получать в запросе данные (контроль остатков, например), а затем записывать новые наборы записей. Это 3 действия, 2 из которых - запись, т.е. очень затратные.
В новой схеме движения не удаляются перед проведением, а сразу записываются новые. Потом проверяются в запросе результаты. Если все плохо, транзакция откатывается. Если все хорошо ( в большинстве случаев), то , получается 2 действия вместо 3, причем убрано 1 действие записи, т.е. очень затратное.
wowik; Terve!R; ids79; +3 Ответить
10. CSiER 25 12.11.18 03:05 Сейчас в теме
(9) про преимущества хорошо написано здесь (блок "Преимущества контроля остатков по новой методике").
14. bulpi 148 12.11.18 13:33 Сейчас в теме
(10)
Хорошо то хорошо, но есть нюансы :)
Написано так :
Запрос, получающий данные по отрицательным остаткам, обращается только к одной таблице – нет необходимости делать левое соединение с данными документа и применять функцию «ЕСТЬNULL()»


Ну да . Сначала так написали модуль, а потом сами же его критикуют. Никто не мешает написать в старой схеме абсолютно те же 2 запроса, что и в новой (это вместо одного! А может, все таки 1 запрос лучше?)

Так что в чистом остатке остается 1 несомненное преимущество, о котором я написал.
17. ids79 1863 13.11.18 10:33 Сейчас в теме
(14)
Так что в чистом остатке остается 1 несомненное преимущество, о котором я написал.

Не могу не согласиться. Внесу исправление в статью
21. CSiER 25 13.11.18 14:16 Сейчас в теме
(14) думаю, что один запрос лучше как в плане быстродействия, так и в плане простоты кода.
11. ids79 1863 12.11.18 10:37 Сейчас в теме
(9) Добрый день
Да Вы правы, упоустил этот момент. Наверно он действительно является самым значимым.
Но, в любом случае, запрос, который не возвращает ни одной записи причем без необходимости соединения с таблицей документа - будет выполняться скорее всего быстрее, чем запрос на получения остатков по старой методике контроля.
13. bulpi 148 12.11.18 13:20 Сейчас в теме
(11)
Попробуйте такую простую вещь. Создайте таблицу с миллионом записей из чисел от 1 до 1000000. Запустите 2 запроса, один из который выбирает по условию значение=0 (пустой результат), а второй по условию значение=1 (непустой результат).
И "без необходимости соединения" - это о чем ? Запросы в первой схеме и во второй одинаковые.
15. ids79 1863 12.11.18 13:37 Сейчас в теме
(13)
Запросы в первой схеме и во второй одинаковые.

В новой схеме не нужно соединять запрос к регистру с запросом к ТЧ документа. В старой нужно.
35. CSiER 25 18.11.18 10:41 Сейчас в теме
(9) ещё один момент: с новой методикой уменьшается время блокировки таблиц в транзакции => меньше ожидание на блокировках => ускорение проведения.
andron77777; +1 Ответить
12. T_Guest 12.11.18 12:52 Сейчас в теме
А можете пояснить про режим разделения итогов и новой схемой контроля остатков.
Я правильно понял: разделение итогов будет нормально работать только если система 1С 8.3 + MSSQL?
Ведь если стоит Postgre, то разделение итогов бессмысленно поскольку в новом механизме контроля придется писать "НаборЗаписей. БлокироватьДляИзменения = Истина;" а это отключит режим разделения на момент записи.
18. kolya_tlt 11 13.11.18 10:42 Сейчас в теме
(12) СУБД тут ни при чем, как в случае с разделением итогов, так и схеме контроля остатков
19. ids79 1863 13.11.18 10:52 Сейчас в теме
(12)
Добрый день.
Я не совсем Вас понял.
В версии 1С 8.3 работа с MSSQL поддерживает версионирование, аналогично PostgreSQL.
Так что для 8.3 разницы не будет.

(12)
разделение итогов бессмысленно поскольку в новом механизме контроля придется писать "НаборЗаписей. БлокироватьДляИзменения = Истина;

Вы правы в какой-то степени, но не совсем. Существуют еще движения по приходу или расходу, в которых по логике программы не требуется контролировать остатки. Соответственно в таких движениях разделение итогов отключено не будет.
Также в конфигурации есть возможность отключения контроля остатков, в этом случае разделение итогов также будет ускорять работу. Вот здесь подробно описано про разделение итогов, почитайте.
16. kolya_tlt 11 13.11.18 10:28 Сейчас в теме
Дмитрий Гончаров бы вас поправил и сказал, что новая методика - это не только запись и контроль отрицательного результата.
EMelihoff; +1 Ответить
20. ids79 1863 13.11.18 11:04 Сейчас в теме
(16)Добрый день.
Конечно не только.
Здесь я все упрощаю, чтобы описать в рамках одной статьи
22. Vovan1975 14 14.11.18 11:34 Сейчас в теме
интересно почему нельзя получить остатки на момент времени ДО документа, и посчитать их с новыми движениями документа и таким образом сразу узнать, будет ли отрицательное значение?
23. ids79 1863 14.11.18 12:04 Сейчас в теме
Добрый день, Владимир.
Если я правильно Вас понял, Вы, по сути, предлагаете старый вариант контроля...
Но в этом случае придеться удалять существующие записи до получения остатков, чтобы они не попали в выборку, например при изменении времени проведения документа.
Получаем основной минус старого режима контроля.
24. Vovan1975 14 14.11.18 12:08 Сейчас в теме
(23) неправильно.

Алгоритм такой
1)Получаете остатки на момент времени до (новых) движений документа.
2)Получаете старые движения документа
3) Если старые движение "входят" в остатки (ну например пользователь изменил дату документа) - исключаете их из остатков
4) Добавляете к остаткам новые движения
5)Проверяете результат.


В итоге 2 запроса на чтение к бд.
25. acanta 48 14.11.18 12:10 Сейчас в теме
(24) в 8ке нет момента времени до новых движений документа!!
26. Vovan1975 14 14.11.18 12:25 Сейчас в теме
(25) движения формируются исходя из даты документа или другого реквизита документа. Ничего не мешает определить эту дату для новых движений.
27. HomeInc 15.11.18 07:31 Сейчас в теме
(24) Операция чтения остатков используя границу (до проведения документа) намного затратнее, чем получение самых последних остатков
28. Vovan1975 14 15.11.18 11:46 Сейчас в теме
(27) а при чем тут получение самых последних остатков? В так называемой новой методике один фиг получение остатков через границу документа(уже после записи движений), то есть получается и там и там одно и тоже.
29. ids79 1863 15.11.18 12:02 Сейчас в теме
(28)
В так называемой новой методике один фиг получение остатков через границу документа

Нет, в новой методике получение остатков происходит на дату дату актуальности.
30. Vovan1975 14 15.11.18 12:37 Сейчас в теме
(29) неа, неверно.

https://xn----1-bedvffifm4g.xn--p1ai/articles/2017-02-12-two-methods-for-inventory-check/

Обратите внимание, как передается момент времени – используется тип данных «Граница». Остатки нужно получить на момент времени сразу ПОСЛЕ текущего документа. Можно ли было получить остатки без границы, например, прибавив к дате документа 1 секунду? Нет! Ведь в одной секунде может быть большое число документов. Поэтому единственный правильный вариант – использовать вид границы «Включая».
31. Vovan1975 14 15.11.18 12:58 Сейчас в теме
(30) кстати насчет большого числа документов - в данном случае момент времении вообще выглядит ненужной сущьностью, по той простой причине, что им нельзя управлять. То есть нельзя всунуть документ между двумя другими документами.
32. ids79 1863 15.11.18 13:28 Сейчас в теме
(30) У указанном Вами примере, действительно так сделано.
Я же говорю про типовые конфигурации, там на дату актуальности.
По организациям также еще и на конец кажрого месяца следующего за проводимым документм, но это отдельная песня.
33. Vovan1975 14 15.11.18 13:41 Сейчас в теме
(32) это странно слышать, поскольку отсутсвие отрицательных итогов в актуальных еще не гарантирует их отстутсвие по времени между проводимым документом и таблицей актуальных итогов
34. Vovan1975 14 15.11.18 13:44 Сейчас в теме
+ (33) при такой схеме можно также вычитать старые движения из остатков, полученных из таблицы актуальных остатков. Хотя лично мне такая метода представляется фигней.
36. acanta 48 18.11.18 11:00 Сейчас в теме
1с Ники с этой 8кой уперлись в блокировки при росте объема и интенсивности еще 7ки Не придумали ничего лучше чем убрать полный журнал. Мелкие разработчики дробили файлы на какие то периоды в рамках системы. Период хранения предполагал разные таблицы для каждого периода, неважно, год,это или день. Отсюда, именно из архитектуры хранения вытекает невозможность редактировать задним числом и необходимость сторно. Ужасная конечно, но если необходимость осознанная, то это уже свобода.
37. acanta 48 18.11.18 11:08 Сейчас в теме
Как вариант вместо обрезания в конфигураторе переименовывать объемные регистры и создавать новые аналогичные. А отчеты , которые требуют старых данных дописать обьедиением таблиц. Этого
в дбф не стали делать. Тот же период хранения итогов подразумевает разделение на уровне таблиц, а не индекса или обрезанной базы данных.
38. mrf 16.01.19 18:23 Сейчас в теме
Т.е. если по регистру нужен контроль остатка, нужно отключить использования разделения итогов как вредное?
39. ids79 1863 16.01.19 19:46 Сейчас в теме
(38)Или отключить, или использовать НаборЗаписей.БлокироватьДляИзменения = Истина;
По сути, это тоже отключение разделения данных, но для конкретного документа.
40. EMelihoff 13.02.19 08:44 Сейчас в теме
Лучше чем тут ИТС нигде, про блокировки не читал.
Оставьте свое сообщение
Новые вопросы с вознаграждением
Автор темы объявил вознаграждение за найденный ответ, его получит тот, кто первый поможет автору.

Вакансии

Программист 1С
Санкт-Петербург
зарплата от 115 000 руб. до 160 000 руб.
Полный день

Руководитель проектов 1С
Санкт-Петербург
зарплата от 150 000 руб.
Полный день

Программист 1С
Санкт-Петербург
зарплата от 120 000 руб. до 150 000 руб.
Полный день

Программист 1С
Новосибирск
зарплата от 80 000 руб.
Полный день

Автор новостных обзоров на тему 1С и бухучета
Санкт-Петербург
По совместительству