Имя: Пароль:
1C
 
Конфликты блокировок.
0 xipypg2012
 
30.05.16
18:12
Подскажите добавили в программу регистр с условиями по которыем разрешается провести реализацию или нет. Так же в модуль документа добавили проверку которая высчитывает дебиторку и сверяет с условиями из регистра сведений. После этого стали возникать конфликты блокировки, в конторе работает несколько операторов которые проводят реализации. Такое ощущение что программа не дает одновременно обращаться к данному регистру запросом. Подскажите в этом ли причина и как можно это побороть?
1 Heckfy
 
30.05.16
18:13
Тут вам архитектор нужен по ходу...
2 xipypg2012
 
30.05.16
18:16
(1) кто это и что это такое?
3 Fragster
 
гуру
30.05.16
18:18
нужен код проверки и текущий установленный режим блокировок
4 Necessitudo
 
30.05.16
18:18
(0) 8.3? Управляемые режим?
5 Heckfy
 
30.05.16
18:20
(2) Это человек, который знает, как правильно спроектировать регистр, как включить управляемый режим блокировки, как описать эту самую управляемую блокировку для этого регистра и все такое...
6 xipypg2012
 
30.05.16
18:20
режив автоматичкий , какие управляемые) конфа ут 10.3
7 Necessitudo
 
30.05.16
18:22
(6) Вот и все. Запросы в транзакции ж. Переходите на управляемый режим.
8 xipypg2012
 
30.05.16
18:24
а для чтения тоже используется блокировки? ) просто я никогда не сталкивался с управляемыми блокировками
9 Fragster
 
гуру
30.05.16
18:24
(8) если запросом, то не должно быть блокировок. а вот если объектной моделью - то там да, блокировки будут.
10 Fragster
 
гуру
30.05.16
18:25
по этому в (3) я написал про код
11 xipypg2012
 
30.05.16
18:25
идет запросом, потом результат запроса просто сравнивается с дебеторкой
12 Necessitudo
 
30.05.16
18:26
(9) В любом случае если данные не меняются, то там лишь S блокировка. ТС явно что-то не договаривает.
13 xipypg2012
 
30.05.16
18:26
все выглядит примерно так

Если не (РольДоступна("ПроведениеБезПроверкиТП") или  РольДоступна("ПолныеПрава")) Тогда
                        Если РежимЗаписи = РежимЗаписиДокумента.Проведение и не отказ Тогда
                            НеОплаченныеДокументыТП = ПолучитьНеоплаченныеДокументыВРазрезеТП(Источник);
                            ТЗпоТорговым = ПолучитьДопустимоеКолДокНеоплаченныхТП(Источник.Проект,Источник.Дата);
                            //ДопустимаяСуммаПДЗ = ПолучитьСуммуПДЗ(Источник.Проект,Источник.Дата);
                            Для каждого стр Из ТЗпоТорговым Цикл
                                Если НеОплаченныеДокументыТП.Количество()>0 тогда
                                    
                                    Если Стр.ДатаОтсрочки < Источник.Дата Тогда
                                        Если НеОплаченныеДокументыТП[0].ПроцентПросрочкиНал > стр.ПроцентНал  Тогда
                                            Отказ = Истина;
                                            Сообщить("Процент наличной просрочки от общей дебиторской задолжности свыше - " + Стр.ПроцентНал + "%.");
                                        ИначеЕсли НеОплаченныеДокументыТП[0].ПроцентПросрочкиБезНал > стр.ПроцентБезНал Тогда    
                                            Отказ = Истина;
                                            Сообщить("Процент безналичной просрочки от общей дебиторской задолжности свыше - " + Стр.ПроцентБезНал + "%.");    
                                        КонецЕсли;
                                    КонецЕсли;
                                КонецЕсли;
                            КонецЦикла;
                            Если Источник.ДоговорКонтрагента.КонтролироватьГлубинуНакладных и  НеоплаченныеДокументыТП[0].КоличествоДокументов >Источник.ДоговорКонтрагента.ГлубинаНакладных Тогда
                                Отказ = Истина;
                                Сообщить("Количество неоплаченных документов: " + НеоплаченныеДокументыТП[0].КоличествоДокументов + ", допустимое Количество неоплаченных документов: " + Источник.ДоговорКонтрагента.ГлубинаНакладных);
                            ИначеЕсли Источник.ДоговорКонтрагента.КонтролироватьГлубинуНакладныхПросроченных и  НеоплаченныеДокументыТП[0].КоличествоПросроченных >Источник.ДоговорКонтрагента.ГлубинаПросроченныхНакладных Тогда      
                                Отказ = Истина;
                                Сообщить("Количество неоплаченных документов: " + НеоплаченныеДокументыТП[0].КоличествоДокументов + ", допустимое Количество неоплаченных документов: " + Источник.ДоговорКонтрагента.ГлубинаПросроченныхНакладных);
                            КонецЕсли;
                        КонецЕсли;
                    КонецЕсли;
                    Если Источник.СуммаДокумента > 60000 тогда
                    НеоплаченныеДокументы = ПолучитьНеоплаченныеДокументы(Источник);
                    Согласован = СогласованостьДокумента(Источник);
                    
                    Если НеоплаченныеДокументы.Количество()>0 и не Согласован  Тогда
                        
                        Отказ = Истина;
                        Сообщить("Сумма документа свыше 60000 рублей и по контрагенту есть ПДЗ. Проведение запрещено.");
                    ИначеЕсли НеоплаченныеДокументы.Количество()= 0 и не Согласован  Тогда
                        Отказ = Истина;
                        Сообщить("Сумма документа свыше 60000 рублей, необходимо согласование у коммерческого директора");
                        //Сообщение = "Сумма документа свыше 60000 рублей, до";
                    КонецЕсли;
                    КонецЕсли;
14 Господин ПЖ
 
30.05.16
18:27
>а для чтения тоже используется блокировки?

смотря в каком режиме, какая 1с и какая субд.
15 xipypg2012
 
30.05.16
18:28
Запрос.УстановитьПараметр("ТипЦенРозница",Справочники.ТипыЦенНоменклатуры.НайтиПоКоду("000000008")); - из-за этого может быть?
16 Маратыч
 
30.05.16
18:28
(12) А если база файловая? Там вообще всегда serializable же.
17 xipypg2012
 
30.05.16
18:28
субд постгресс , режим обычные формы тонкий клиент . работают все на терминальном сервере не на 1с сервере
18 Маратыч
 
30.05.16
18:29
(17) А, ну все, serializable, если постгри. Переходите на управляемые.
19 Господин ПЖ
 
30.05.16
18:32
новый постгри вроде умеет таблицы не целиком лочить
20 Господин ПЖ
 
30.05.16
18:32
>Там вообще всегда serializable же.

не надо путать теплое с мягким
21 xipypg2012
 
30.05.16
18:50
так при чтение таблицы чтоли тоже лочатся ??
22 Fragster
 
гуру
30.05.16
18:52
в случае постгре и автоматического режима при чтении данных запросом блокировка устанавливается на всю таблицу в режиме read committed, т.е. чтение друг другу не мешает.
я так понимаю, что проблемный регистр читается в функции ПолучитьДопустимоеКолДокНеоплаченныхТП, но непонятно как.
23 Fragster
 
гуру
30.05.16
18:55
вообще можно настроить техножурнал на сбор инфы о блокировках, на какой строке кода на каких таблицах блокируется
24 Fragster
 
гуру
30.05.16
18:56
вообще код надо чистить, например один раз получить запросом или функцией общегоназначения.получитьзначенияреквизитов все необходимые данные из Источник.ДоговорКонтрагента
25 MrStomak
 
30.05.16
19:00
(6) в УТ 10.3 блокировки управляемые.
26 xipypg2012
 
30.05.16
19:37
нету но можно в принципе дописать, записывать в структуру и работать со структурой ......но сомневаюсь что решит проблему блокировок, просто каждый оператор работает ток со своими документами, поэтому и возник вопрос что блокировка гдето на этапе чтения регистров или получения данных
27 Fragster
 
гуру
31.05.16
09:36
(26) гугли натройку техножурнала, чтобы увидеть, на чем конкретно блокировки
Основная теорема систематики: Новые системы плодят новые проблемы.