0. ids79 1786 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 1786 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 1786 11.11.18 19:31 Сейчас в теме
5. bulpi 147 11.11.18 16:21 Сейчас в теме
Непонятно, в чем преимущества новой схемы контроля остатков перед старой. В обоих случаях нужен запрос на чтение и запись в регистр, меняется только порядок этих действий.

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


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

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


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

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

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


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

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


Какая разница, я или СУБД ? Я не понимаю, почему от перестановки слагаемых должна измениться сумма.
9. bulpi 147 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 147 12.11.18 13:33 Сейчас в теме
(10)
Хорошо то хорошо, но есть нюансы :)
Написано так :
Запрос, получающий данные по отрицательным остаткам, обращается только к одной таблице – нет необходимости делать левое соединение с данными документа и применять функцию «ЕСТЬNULL()»


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

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

Не могу не согласиться. Внесу исправление в статью
21. CSiER 25 13.11.18 14:16 Сейчас в теме
(14) думаю, что один запрос лучше как в плане быстродействия, так и в плане простоты кода.
11. ids79 1786 12.11.18 10:37 Сейчас в теме
(9) Добрый день
Да Вы правы, упоустил этот момент. Наверно он действительно является самым значимым.
Но, в любом случае, запрос, который не возвращает ни одной записи причем без необходимости соединения с таблицей документа - будет выполняться скорее всего быстрее, чем запрос на получения остатков по старой методике контроля.
13. bulpi 147 12.11.18 13:20 Сейчас в теме
(11)
Попробуйте такую простую вещь. Создайте таблицу с миллионом записей из чисел от 1 до 1000000. Запустите 2 запроса, один из который выбирает по условию значение=0 (пустой результат), а второй по условию значение=1 (непустой результат).
И "без необходимости соединения" - это о чем ? Запросы в первой схеме и во второй одинаковые.
15. ids79 1786 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 1786 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 1786 13.11.18 11:04 Сейчас в теме
(16)Добрый день.
Конечно не только.
Здесь я все упрощаю, чтобы описать в рамках одной статьи
22. Vovan1975 14 14.11.18 11:34 Сейчас в теме
интересно почему нельзя получить остатки на момент времени ДО документа, и посчитать их с новыми движениями документа и таким образом сразу узнать, будет ли отрицательное значение?
23. ids79 1786 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 1786 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 1786 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 1786 16.01.19 19:46 Сейчас в теме
(38)Или отключить, или использовать НаборЗаписей.БлокироватьДляИзменения = Истина;
По сути, это тоже отключение разделения данных, но для конкретного документа.
40. EMelihoff 13.02.19 08:44 Сейчас в теме
Лучше чем тут ИТС нигде, про блокировки не читал.
Оставьте свое сообщение
Новые вопросы с вознаграждением
Автор темы объявил вознаграждение за найденный ответ, его получит тот, кто первый поможет автору.

Вакансии

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

Работа от Инфостарт
Санкт-Петербург
Временный (на проект)

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

Руководитель отдела внедрения 1С
Новосибирск
зарплата от 60 000 руб. до 160 000 руб.
Полный день

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