Имя: Пароль:
1C
1С v8
В какой момент меняется граница последовательности, в каком событии это выловить?
,
0 tciban
 
22.04.22
13:47
Уважаемые коллеги! Последнее время занялся плотно партионным учетом, УТ 10.3 и возник такой вопрос - есть граница последовательности, когда мы перепроводим документ задним числом - граница смещается на него. Смещается даже в том случае если движения по партионному учету не изменились. Хочется этого избежать. Запомнить движения и убедиться что изменений не было несложно, но вопрос где это делать и как оставить границу нетронутой?
По какому событию или где еще отлавливать? подписка или события в наборе записей последовательности думаю не годятся - там только отказ можно сделать, а оставить ГП нетронутой не получится...
1 Naumov
 
22.04.22
13:48
ну так откажись от записи данных регистра.
События системного, которое можно обработать именно по сдвигу последовательности не генерируется.
2 tciban
 
22.04.22
13:56
(1) В смысле "откажись"? отказ=истина делать в событии? так у нас УТ сначала затирает движения регистра при проведении документа потом снова пишет туда новые. Отказаться на этапе записи - остаться без них. ну и у пользователя выскочит ошибка... Не, это что то не то
3 Naumov
 
22.04.22
13:57
(2) Это то, только мекханику проведения нужно менять
4 tciban
 
22.04.22
13:59
И все таки - в какой момент меняется граница? После записи в регистр? после записи документа?
5 Naumov
 
22.04.22
14:01
(4) В том виде, в каком она 10.3 сделана она меняется при записи любого изменения, которое указано в настройке последовательности.
В новых типовых 1Ссама управляет регистрацией изменений в последовательности без авторегистрации.
6 tciban
 
22.04.22
14:24
Что же делать?
7 tciban
 
22.04.22
14:44
up!
8 Лирик
 
22.04.22
15:36
В типовой УТ 10.3 сдвиг последовательности партионного учета реализован конструкцией

Если РежимПроведения = РежимПроведенияДокумента.Неоперативный Тогда
    УправлениеЗапасамиПартионныйУчет.СдвигГраницыПоследовательностиПартионногоУчетаНазад(Дата, Ссылка, Организация);
КонецЕсли;

которая исполняется в процедуре проведения
9 tciban
 
25.04.22
08:56
(8) Ну вообще то не совсем так, но вы навели меня на след. И нашел кажется. Модуль УправлениеЗапасамиПартионныйУчет Функция ДвижениеПартийТоваров и там в конце вызывается

СдвигатьГраницу = ОпределитьНеобходимостьСдвигаГраницы(ДокументМоментВремени,"Упр");
            
Если СдвигатьГраницу Тогда
    Последовательности.ПартионныйУчет.УстановитьГраницу(ДокументМоментВремени);
КонецЕсли;

значит в этом ОпределитьНеобходимостьСдвигаГраницы и надо работать :)
10 Лирик
 
25.04.22
10:04
(9) Я бы сказал не "вообще то не совсем так" а "вообще то не везде так", но посыл в том, что граница двигается отдельной процедурой, а не штатной возможностью. Модуль Вы нашли, будем считать, что мой пост был полезен. :)
11 tciban
 
20.07.22
15:49
(9) Вот такой вопрос возник - Поступление товаров услуг, оно не вызывает (если не по ордеру) УправлениеЗапасамиПартионныйУчет.ДвижениеПартийТоваров В модуле проведения так же не нашел обращений к последовательности. Но при перепроведении поступления граница меняется, становиться на него, на поступление. Как? Где она перемещается?
12 lodger
 
20.07.22
17:40
(11) ну поставь точку остановки и смотри в Стек Вызовов.
13 mikecool
 
20.07.22
18:21
(11) Свойства документа - Последовательности - Заполнять автоматически? и входит в последовательности?
14 Naumov
 
21.07.22
00:04
(11) У тебя какая конфигуарция?
в БП 3.0 Есть общий модуль РАботаСПоследовательностями, в процедуре ЗарегистрироватьВПоследовательности можно поставить точку остановки и посмотреть когда она вызывается.

А вообще поиск в конфигурации по названию последовательности отменили?
15 tciban
 
21.07.22
07:20
(12) это первое, что я сделал. Еще прописал в наборе записей последовательности обработчик ПередЗаписью(). Ничего не нашел.
(13) Перемещение границы при проведении - не перемещать.
(14) УТ 10.3 А поиск делал... Там вообще обращений к последовательности мало. Последовательность в конфе одна и простая. Даже без измерений. Так вот - в модуле поступления (повторюсь) нет обращений к последовательности (или я не нашел :()
16 tciban
 
21.07.22
10:42
UP!
17 Naumov
 
22.07.22
11:27
(15) В УТ 10.3 последовательность сама сдвигается при изменении объектов, которые в ней указаны.
18 Vaderonk
 
22.07.22
12:59
(15) В модуле поступления ДвиженияПоРегистрам - УправлениеЗапасамиПартионныйУчет.ДвижениеПартийТоваров - СдвигатьГраницу = ОпределитьНеобходимостьСдвигаГраницы(ДокументМоментВремени,"Упр");
19 tciban
 
22.07.22
14:10
(17) И как с этм бороться?!
20 tciban
 
22.07.22
14:15
(18) К сожалению при проведении поступления товаров (и оприходования) УправлениеЗапасамиПартионныйУчет.ДвижениеПартийТоваров не вызывается (для поступления она вызывается если по ордеру поступление)
А граница сдвигается! Не пойму как и когда!
Просто бывают случаи у меня в базе, когда откроют старое поступление (ну как старое - недельной давности), поменяют там галочку какую или еще что то, что на партии не влияет и нажмут Ок. И все - граница улетела на неделю назад. Все перепроводить если подойти формально...
21 Vaderonk
 
22.07.22
15:21
(20) Ты пытаешься как то закопаться в задаче, тратя время - тебе нужно предотвратить установку неизмененного поступления(либо другого документа, как оприходование),  Последовательности.ПартионныйУчет.УстановитьГраницу(ДокументМоментВремени) - скрытая установка происходит при движения в регистрах РегистрНакопления.ПартииТоваровНаСкладах, РегистрНакопления.ПартииТоваровПереданные, ты не найдешь код, который ее устанавливает.
Костыль: 2 подписки:
1)подписка на событие перед записью наборов записей в эти регистры, запоминание документа, который сейчас последний с помощью
Последовательности.ПартионныйУчет.ПолучитьГраницу() - сохранение ее в константу(?)
2)подписка при записи - граница уже в этот момент сдвигается и установка ее обратно на константу - если документ ничего не тронул.
Я бы думал о том, что нужно ограничивать изменение данных в прошлых периодах и запускать проведения по партиям ночью - сохранение проблем по ним где либо и продолжать работу дальше.
22 tciban
 
25.07.22
08:20
(21) Спасибо! Сейчас буду пробовать. Скорее всего решение и место где это происходит тут, в в модуле набора записей регистра. Но как двигаться гп без кода? Ведь в конфигураторе, в типовой УТ 10.3 изначально в настройках Последовательности Партионный учет стоит Перемещение границы при проведении "Не перемещать" Как она, зараза, без кода двигается?!
23 NorthWind
 
25.07.22
08:44
(4) когда делается движение регстра, входящего в последовательность. Как я понимаю, единственный выход чтобы последовательность не сдвинулась - это не двигать регистр. Т.е. в модуле проведения запрашивать остаток, и если вы полагаете что движения делать не надо - через блок если...тогда их физически не делать. Только так.
24 tciban
 
25.07.22
08:53
(23) Ну почему - можно просто в событии набора записей ПриЗаписи вернуть ГП на место. Но лучше да, совсем не писать, чего их писать если ничего не менялось?
25 tciban
 
25.07.22
09:59
А вот такой, коллеги, возник вопрос - где бы мне сохранить структурку данных в подписке на событие документа, что бы потом ее вытащить в модуле набора записей регистра, в событии при записи?
Учитывая, что в регистре мы имеем ссылку на документ, а значит ДополнительныеСвойства документа нам не годятся, Учитываем так же, что в УТ 10.3 удаление движений регистра идет программно, потому у нас подписки модуля набора записей вызываются 2-жды. ДополнительныеСвойства регистра тоже не годятся :(

ПараметрыСеанса тоже не стоит использовать - их надо аккуратно инициализировать в соответствующем месте, а хочется все проще сделать.

Куда засунуть данные? Что то вроде глобальной переменной, но что бы доступна была и на сервере и на клиенте. Какое нибудь хранилище или что еще что живет в пределах сеанса в памяти?