Добавление новой записи в регистр сведений после изменения статуса

1. Sp1ke666 12.05.21 14:53 Сейчас в теме
Привет! Подскажите, пожалуйста, как сделать так, чтобы когда я в заказе менял реквизит Статус и проводил документ, то регистр сведений ИсторияСтатуса не менял уже существую запись с изменением в ней статуса. А добавлял бы новую. Чтобы действительно можно было проследить весь путь Статуса.
Например, при смене статуса документа (реквизит "статус") с "поступил в производство" на "произведен" должна добавиться запись в регистр сведений со статусом "произведен" и датой. Старая запись не должна удалиться при перепроведении.

В итоге должны быть 2 записи в регистре. Например,
Дата: 12.10.2020 | Статус: Поступил в производство
Дата: 15.10.2020 | Статус: Произведен
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. SlavaKron 12.05.21 15:00 Сейчас в теме
Регистр сведений ИсторияСтатуса подчинен регистратору?
3. Sp1ke666 12.05.21 15:03 Сейчас в теме
(2) Да мне бы главное, чтобы работало. Сейчас стоит независимый вроде, но я уже и так и так пробовал( Вот такой код

Процедура ОбработкаПроведения(Отказ, Режим)
//{{__КОНСТРУКТОР_ДВИЖЕНИЙ_РЕГИСТРОВ
// Данный фрагмент построен конструктором.
// При повторном использовании конструктора, внесенные вручную изменения будут утеряны!!!

//Для начала создадим набор записей
//Для начала создадим набор записей
ВашРег = РегистрыСведений.ИсторияЗаказов.СоздатьНаборЗаписей();
//Поищем совпадения, но из за "текущей даты" у вас их скорее всего не будет
ВашРег.Отбор.ДатаЗаписи.Установить(ТекущаяДата());
ВашРег.Отбор.Дата.Установить(Метаданные.Документы.Заказ.СтандартныеРеквизиты.Дата);
ВашРег.Отбор.Статус.Установить(Метаданные.Документы.Заказ.Реквизиты.Статус);
ВашРег.Прочитать();
//Добавляем новую запись
НоваяЗапись = ВашРег.Добавить();
НоваяЗапись.ДатаЗаписи=ТекущаяДата();
НоваяЗапись.Дата=Метаданные.Документы.Заказ.СтандартныеРеквизиты.Дата;
НоваяЗапись.Статус=Метаданные.Документы.Заказ.Реквизиты.Статус;
Попытка
ВашРег.Записать(ЛОЖЬ);
Исключение
Сообщить(ОписаниеОшибки());
КонецПопытки;

//}}__КОНСТРУКТОР_ДВИЖЕНИЙ_РЕГИСТРОВ
КонецПроцедуры
Показать
4. SlavaKron 12.05.21 15:04 Сейчас в теме
(3) Вы делаете отбор в наборе записей по Статусу. Статус у вас измерение? Если так, надо переделать в ресурс.
5. Sp1ke666 12.05.21 15:05 Сейчас в теме
(4) А что в измерения записать?
6. SlavaKron 12.05.21 15:09 Сейчас в теме
(5) Я бы сделал независимый периодический РС. Измерение – Заказ (ведущее), ресурс – Статус. При проведении проверяем каков последний статус, и если поменялся, создаем новую запись текущей датой.
7. Sp1ke666 12.05.21 15:10 Сейчас в теме
(6) Так, сейчас все это сделаю. А код не подскажешь? Или тот, что выше подходит?
8. SlavaKron 12.05.21 15:18 Сейчас в теме
(7) Примерно так:
Процедура ОбработкаПроведения(Отказ, РежимПроведения)
	
	Запрос = Новый Запрос(
	"ВЫБРАТЬ
	|	ИсторияЗаказовСрезПоследних.Статус КАК Статус
	|ИЗ
	|	РегистрСведений.ИсторияЗаказов.СрезПоследних(, Заказ = &Заказ) КАК ИсторияЗаказовСрезПоследних");
	Запрос.УстановитьПараметр("Заказ", Ссылка);
	
	РезультатЗапроса = Запрос.Выполнить();
	
	Если РезультатЗапроса.Пустой() Тогда
		ЗаписатьСтатусЗаказа()
	Иначе
		Выборка = РезультатЗапроса.Выбрать();
		Выборка.Следующий();
		Если Выборка.Статус <> Статус Тогда
			ЗаписатьСтатусЗаказа();
		КонецЕсли;
	КонецЕсли;
	
КонецПроцедуры

Процедура ЗаписатьСтатусЗаказа();
	Запись = РегистрыСведений.ИсторияЗаказов.СоздатьМенеджерЗаписи();
	Запись.Период = ТекущаяДатаСеанса();
	Запись.Заказ = Ссылка;
	Запись.Статус = Статус;
	Запись.Записать();
КонецПроцедуры
Показать
9. Sp1ke666 12.05.21 15:29 Сейчас в теме
Вставил, но выдает ошибку. Вот скрин - https://ibb.co/1sHnNfh
11. FatPanzer 12.05.21 15:30 Сейчас в теме
(6) Уже несколько раз это объяснили, но чел решил создать дубль темы. https://forum.infostart.ru/forum9/topic261885/
12. Sp1ke666 12.05.21 15:30 Сейчас в теме
(11) Ну у меня так и не заработало...
13. FatPanzer 12.05.21 15:31 Сейчас в теме
(12) Думаешь, что чем больше тем создашь - тем быстрее заработает? Попробуй сначала курсы пройти, чтобы на одном языке общаться.
14. Sp1ke666 12.05.21 15:32 Сейчас в теме
(13) Будь у меня куча времени - с удовольствием) Но есть жесткий дедлайн и к нему заявленная проблема должна быть устранена
15. FatPanzer 12.05.21 15:33 Сейчас в теме
18. SlavaKron 12.05.21 16:22 Сейчас в теме
(11) Да, не заметил эту тему.
(10) Ругается на строчку кода в которой есть "КонецЦикла". В моём коде нет циклов, так что это не ко мне =) Двойной клик по ошибке спозиционирует курсор на проблемную строчку кода.
19. Sp1ke666 12.05.21 16:25 Сейчас в теме
(18)
Запрос = Новый Запрос(
	"ВЫБРАТЬ
	|	ИсторияЗаказовСрезПоследних.Статус КАК Статус
	|ИЗ
	|	РегистрСведений.ИсторияЗаказов.СрезПоследних КАК ИсторияЗаказовСрезПоследних
	|ГДЕ
	|	ИсторияЗаказовСрезПоследних.Заказ = &Заказ");
	Запрос.УстановитьПараметр("Заказ", Ссылка);
	
	РезультатЗапроса = Запрос.Выполнить();
	
	Если РезультатЗапроса.Пустой() Тогда
		ЗаписатьСтатусЗаказа()
	Иначе
		Выборка = РезультатЗапроса.Выбрать();
		Выборка.Следующий();
		Если Выборка.Статус <> Статус Тогда
			ЗаписатьСтатусЗаказа();
		КонецЕсли;
	КонецЕсли;
	
КонецПроцедуры

Процедура ЗаписатьСтатусЗаказа();
	Запись = РегистрыСведений.ИсторияЗаказов.СоздатьМенеджерЗаписи();
	Запись.Период = ТекущаяДатаСеанса();
	Запись.Заказ = Ссылка;
	Запись.Статус = Статус;
	Запись.Записать();
КонецПроцедуры
Показать
20. Sp1ke666 12.05.21 16:28 Сейчас в теме
(18) Разобрался, как запустить, но в регистре не отображает статус, но запись появляется новая!
Прикрепленные файлы:
10. Sp1ke666 12.05.21 15:30 Сейчас в теме
Вставил, но выдает ошибку(
Прикрепленные файлы:
16. Artem_G 12.05.21 15:50 Сейчас в теме
(10) если берешь заказы за деньги, то точку с запятой то должен уметь сам поставить где надо хотя бы
17. Sp1ke666 12.05.21 16:01 Сейчас в теме
(16) О чем ты вообще?) Какие заказы за деньги...
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот