Имя: Пароль:
1C
 
Регистры сведений - Набор записей - Менеджер записей
,
0 Eugeneer
 
07.09.22
09:40
Смотрю типовую УТ 11.5 регистр сведений Распределение товаров. Теперь в нем вся фигня - все что было в 11.4 пять регистрами остатков, теперь регистр сведений - и туда пишутся свободные остаткиЮ резервы, все что касается заказов, графиков и прочее...

И вот смотрю модуль проведения Общий модуль Распределение запасов - тут все движение.

И что я вижу - 1С для того чтобы записывать в этот регистр точесные записи использует не менеджер записи, а набор записи.

НО!! прикол в том что все идет циклом - т.е построчная выборка. И в ней в набор запихивается ОДНА СТРОКА, записывается. Далее НАБОР ОЧИЩАЕТСЯ. и по новой. Еще и каждая строка стоит код с ТРАНЗАКЦИЕЙ. т.е. на одну строку записи...


Кто то может разьяснить глубокий смысл всего этого? Почему не использовали менеджер записи для построчного изменения. А использовали набор - с построчным изменением и всем что я написал.
1 mikecool
 
07.09.22
09:48
отборы, Женя, отборы
2 mikecool
 
07.09.22
09:49
менеджер хаписи - это частный случай набора записей
3 H A D G E H O G s
 
07.09.22
09:52
Чтобы не словить ожидание на блокировке.
4 Eugeneer
 
07.09.22
09:53
Ну например я использую

ТекЗапись = РегистрыСведений.РаспределениеЗапасов.СоздатьМенеджерЗаписи();      
        ТекЗапись.Состояние = Перечисления.РаспределениеЗапасовСостояния.ОстатокНаСкладе;  
        ТекЗапись.Номенклатура = ВыборкаСтрока.Номенклатура;
        ТекЗапись.Характеристика = ВыборкаСтрока.Характеристика;
        ТекЗапись.Склад   = ВиртуальныйСклад;    
        ТекЗапись.Прочитать();
                
        ТекЗапись.Состояние = Перечисления.РаспределениеЗапасовСостояния.ОстатокНаСкладе;  
        ТекЗапись.ТипЗаписиРаспределенияЗапасов = 1;
        ТекЗапись.Номенклатура = ВыборкаСтрока.Номенклатура;
        ТекЗапись.Характеристика = ВыборкаСтрока.Характеристика;
        ТекЗапись.Склад   = ВиртуальныйСклад;
        ТекЗапись.ВНаличии = ВыборкаСтрока.МегапрайсКоличество;  
        ТекЗапись.Свободно = ВыборкаСтрока.МегапрайсКоличество;
        ТекЗапись.Запас = ВыборкаСтрока.МегапрайсКоличество;
        ТекЗапись.Записать();
5 Eugeneer
 
07.09.22
09:53
А вот 1С

Набор = РегистрыСведений.РаспределениеЗапасов.СоздатьНаборЗаписей();
    Набор.Отбор.ТипЗаписиРаспределенияЗапасов.Установить(1);
    Набор.Отбор.Состояние.Установить(Перечисления.РаспределениеЗапасовСостояния.ОстатокНаСкладе);
    
    Пока Выборка.Следующий() Цикл
        
        Набор.Отбор.Номенклатура.Установить(Выборка.Номенклатура);
        Набор.Отбор.Характеристика.Установить(Выборка.Характеристика);
        Набор.Отбор.Склад.Установить(Выборка.Склад);
        Набор.Отбор.Назначение.Установить(Выборка.Назначение);
        Если Выборка.Запас <> 0
                Или Выборка.Резерв <> 0
                Или Выборка.Свободно <> 0
                Или Выборка.ВНаличии <> 0 Тогда
                
                НоваяСтрока = Набор.Добавить();
                ЗаполнитьЗначенияСвойств(НоваяСтрока, Выборка);
                
        КонецЕсли;
        Набор.Записать();
        Набор.Очистить();
        
    КонецЦикла;
6 Eugeneer
 
07.09.22
09:54
(1) так в менеджере мы тоже до конкретной записи доковыриваемся через Прочитать (если такая уже есть)
7 Eugeneer
 
07.09.22
09:55
(2) блин да я вижу что там отборы. на набор. чтобы получить 1 запись. Но запись идет постоянным созданием набора для 1 строки и запись 1 строки. Тот же менеджер записи.

Неужели это быстрее и так нужно.
8 НафНаф
 
07.09.22
10:01
(5) заметь, в отличие от тебя, они даже не читают текущие записи
9 Eugeneer
 
07.09.22
10:01
(80) т.е. хочешь сказать это в разы быстрее.
10 mikecool
 
07.09.22
10:02
(7) надо читать две толстые книжки проф разработки ))
11 НафНаф
 
07.09.22
10:02
(5) если условие не выполнится, то запишется пустой набор, с менеджером надо было бы отдельную ветку про Удалить
12 НафНаф
 
07.09.22
10:02
(9) хочу сказать, что это и быстрее и универсальнее
13 НафНаф
 
07.09.22
10:03
Вы с гением прямо один краше другого
14 rozer76
 
07.09.22
10:09
(6) выше уже сказали что Прочитать вызывает блокировку и чтобы небыло дедлока еще перед чтением упр. блокировку надо ставить
15 Eugeneer
 
07.09.22
10:26
(14) понял. буду знать. Спасибо!
16 Eugeneer
 
07.09.22
10:28
сделал у себя все через набор
17 НафНаф
 
07.09.22
10:30
(16) очень хотелось бы посмотреть
18 Eugeneer
 
07.09.22
10:35
а чо там смотреть. почти тоже самое что (5)
19 Eugeneer
 
07.09.22
10:35
тестить у меня особо не на чем я один в базе. и работает все мгновенное. у клиентов проверим. у которых тупило
20 СеменовСемен
 
07.09.22
11:09
можно просто убрать из (4) Прочитать() и будет тоже самое
Кaк может человек ожидaть, что его мольбaм о снисхождении ответит тот, кто превыше, когдa сaм он откaзывaет в милосердии тем, кто ниже его? Петр Трубецкой