Время есть, можно пообсуждать

Пользовательские блокировки - это замечательно, но они не панацея и ни чем не лучше родных блокировок в нашем случае.
Ты предлагаешь в процедуре ПриЗаписи делать проверки остатков - хорошо, но только с первого взгляда.
Твоя пользовательская блокировка условно накладывает блокировку на работу со складом, документа который сейчас записывается. Но в подавляющем большинстве случаев фирмы используют для основной отгрузки один склад. Получается, что в один момент времени можно записывать все так же один документ.
Конечно, если в компании у каждого сотрудника, выписывающего накладные, свои склад, то это будет хорошим подспорьем

Теперь дальше, ты предлагаешь считать записанный документ правильным и всем записанным документам должно хватать товара (если я правильно понял). Но как определять свободный остаток при работе задним числом или в случаях, когда единовременно имеется несколько записанных правильных документов, но они еще не проведены? Брать остатки из регистра и суммировать с итогами по табличным частям документов? Или в твоей концепции не должно быть в базе вообще никогда записанных и непроведенных документов?
В динамике:
0. Нажали кнопку Провести (#Записать #Провести);
1. Запись документа;
1.1. Попали в ПриЗаписи();
1.2. Проверили свободный остаток (при помощи пользовательской блокировки) - хватает;
1.3. Вышли из ПриЗаписи();
1.4. Открывается неявная транзакция;
1.5. Записывается документ;
1.6. Фиксируется неявная транзакция;
2. Проведение документа;
2.1. Открывается неявная транзакция;
2.2. Попали в ОбработкаПроведения();
2.3. Выполнили движения регистров на основании данных табличной части документа;
2.4. Вышли из ОбработкаПроведения();
2.5. Фиксируется неявная транзакция;
Для твоей концепции узким местом будет
огромный промежуток времени между 1.6 и 2.1:
- документ записался, транзакция зафиксировалась, все блокировки сняты (здесь закончился п. 1.6);
- здесь попадаем в промежуток времени, когда другие пользователи (при интенсивной работе) могут вклиниться (т.е. между 1.6 и 2.1) со своими проверками в ПриЗаписи();
- начался п. 2.1 ...
- ...
- ...
Про "дорогие транзакции": в нашей работе (1с) они редко, когда являются дорогими. Объемы изменяемых данных при записи/проведении документов незначительные. В случае отката транзакции все не очень страшно. А вот когда нужно откатить транзакцию с таблицы в 40 с лишним лямов строк, то вот это "дорогая транзакция"