helpf.pro
Регистрация

v8.3: Запись в независимый периодический регистр сведений

dez07
05.02.2015 20:15Прочитано: 2492

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

Проблема в следующем: на форме списка документа есть функция, которая меняет статус выбранным документам, по выборке идет цикл, меняет статус, перепроводит документ. Но т.к. все это происходит за 1 секунду, то записывается изменения статуса только для последнего документа из выборки. Сделал в цикле вызов паузы, в 1 секунду, все работает, все записывается, но как то эта пауза напрягает, 10 документов - 10 секунд, 60 документов - минута...Пробовал регистр подчиненный регистратору - получается одна запись, которая переписывается при изменении. Непериодический - тогда дату изменения надо отдельно записывать, как то тоже не совсем то. 

Подскажите, может как то можно это по другому решить. Спасибо. 

З.Ы. по истории изменений сделан так же отчет, что б можно было ее посмотреть, и в самом документе есть динамический список с отбором по документу, что б было видно когда менялся статус. 

Yandex
Возможно, вас также заинтересует
Реклама на портале
E_Migachev
05.02.2015 20:36Ответ № 1

Какая структура у регистра? что в Измерениях, и  что в Ресурсах.

у меня аналогично работает оповещение для документов, все что надо это Регистр сведений с такими настройками

и такой структурой, где получатель это несколько типов документов

Пишется через функции

Код 1C v 8.2 УП
 Процедура СоздатьОповещение(Получатель,ТекстОповещения, ТипСсылки=Неопределено, Ссылка=Неопределено) Экспорт 
Если ЗначениеЗаполнено(Получатель) Тогда
НаборЗаписей = РегистрыСведений.МЕ_Оповещения.СоздатьНаборЗаписей();

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


Процедура СоздатьОповещениеНаДату(ДатаСтарт, Получатель,ТекстОповещения, ТипСсылки=Неопределено, Ссылка=Неопределено) Экспорт 
Если ЗначениеЗаполнено(Получатель) Тогда
НаборЗаписей = РегистрыСведений.МЕ_Оповещения.СоздатьНаборЗаписей();

НовЗапись = НаборЗаписей.Добавить();
НовЗапись.Период  = ДатаСтарт;    
НовЗапись.Получатель = Получатель;        
НовЗапись.ТекстОповещения = ТекстОповещения;
Если НЕ ТипСсылки=Неопределено Тогда
НовЗапись.ТипСсылки = ТипСсылки;
КонецЕсли;
Если НЕ Ссылка=Неопределено Тогда
НовЗапись.Ссылка = Ссылка;
КонецЕсли;

//у нас может быть куча доставок на одно и то же время для одного и того же снабженца!!!
Попытка
НаборЗаписей.Записать(Ложь); 
Исключение
КонецПопытки;

КонецЕсли;
КонецПроцедуры
dez07
05.02.2015 20:57Ответ № 2

Регистр так выглядит:

запись в регистр следующая:

Код 1C v 8.3
 Процедура ОбработкаПроведения(Отказ, Режим)
//История изменения заказа
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ
              | ИзмененияЗаказаСрезПоследних.Документ,
              | ИзмененияЗаказаСрезПоследних.ТекСтатус
              |ИЗ
              | РегистрСведений.ИзмененияЗаказа.СрезПоследних КАК ИзмененияЗаказаСрезПоследних
              |ГДЕ
              | ИзмененияЗаказаСрезПоследних.Документ =Документ
              | И ИзмененияЗаказаСрезПоследних.ТекСтатус =ТекСтатус"
;
Запрос.УстановитьПараметр("Документ",ЭтотОбъект.Ссылка);
Запрос.УстановитьПараметр("ТекСтатус",ЭтотОбъект.Статус);
Результат = Запрос.Выполнить().Выбрать();
Если Не Результат.Следующий() Тогда
НаборЗаписей = РегистрыСведений.ИзмененияЗаказа.СоздатьНаборЗаписей(); 
НаборЗаписей.Отбор.Период.Установить(ТекущаяДата()); 
НовЗапись = НаборЗаписей.Добавить();
НовЗапись.Ответственный = Серверный.УстановитьАвтора();
НовЗапись.Период = ТекущаяДата();
НовЗапись.ТекСтатус = Статус;
НовЗапись.Описание = "Установлен статус заказа "+Символ(34)+Статус+Символ(34);
НовЗапись.Документ = ЭтотОбъект.Ссылка;
НаборЗаписей.Записать(Истина);
КонецЕсли;
КонецПроцедуры

dez07
05.02.2015 21:30Ответ № 3

Поменял

Код 1C v 8.3
 НаборЗаписей.Записать(Истина);    

на

Код 1C v 8.3
 НаборЗаписей.Записать(Ложь);   

все стало как надо, спасибо за пример. 

dez07
05.02.2015 21:31Ответ № 4
Вопрос закрыт!
Подсказка: Для выделения Кода используйте (в редакторе).
Вы не можете отправить комментарий анонимно, пожалуйста войдите или зарегистрируйтесь.