|
1С 8 3 УТП сохранение истории изменения в табличной части | ☑ | ||
---|---|---|---|---|
0
Nysha1210
07.12.18
✎
16:29
|
Добрый день.
Есть задача - сохранять историю изменений табличной части документа Заказ покупателя. Как было реализовано - создан регистр накопления, в который записывается содержимое табличной части документа при проведении. //выгрузка табличной части Запрос1 = Новый Запрос; Запрос1.УстановитьПараметр("ТекущийДокумент", ЭтотОбъект.Ссылка); Запрос1.Текст = "ВЫБРАТЬ | ЗаказПокупателяТовары.НомерСтроки, | ЗаказПокупателяТовары.Количество, | ЗаказПокупателяТовары.Номенклатура КАК Товар, | ЗаказПокупателяТовары.Цена, | ЗаказПокупателяТовары.Сумма, | ЗаказПокупателяТовары.СерНомер |ИЗ | Документ.ЗаказПокупателя.Товары КАК ЗаказПокупателяТовары |ГДЕ | ЗаказПокупателяТовары.Ссылка = &ТекущийДокумент"; ЗапросТовары = Запрос1.Выполнить().Выгрузить(); //запись данных в регистр ДатаТек=ТекущаяДата(); Записи = РегистрыНакопления.ЗаказПокТЧ.СоздатьНаборЗаписей(); Записи.Отбор.Регистратор.Установить(Ссылка); //Записи.Прочитать(); Для каждого ВыборкаСтрокТовары из ЗапросТовары Цикл Запись = Записи.Добавить(); Запись.ВидДвижения=ВидДвиженияНакопления.Приход; Запись.Период = ДатаТек; Запись.Наименование=ВыборкаСтрокТовары.Товар; Запись.Количество=ВыборкаСтрокТовары.Количество; Запись.Цена=ВыборкаСтрокТовары.Цена; Запись.Сумма=ВыборкаСтрокТовары.Сумма; Запись.СерНомер=ВыборкаСтрокТовары.СерНомер; Запись.Автор = Ответственный; КонецЦикла; //Записи.Записать(Ложь); //услуги Запрос2 = Новый Запрос; Запрос2.УстановитьПараметр("ТекущийДокумент", ЭтотОбъект.Ссылка); Запрос2.Текст = " |ВЫБРАТЬ | ЗаказПокупателяУслуги.НомерСтроки, | ЗаказПокупателяУслуги.Количество, | ЗаказПокупателяУслуги.Цена, | ЗаказПокупателяУслуги.Сумма, | ЗаказПокупателяУслуги.Номенклатура как Товар |ИЗ | Документ.ЗаказПокупателя.Услуги КАК ЗаказПокупателяУслуги |ГДЕ | ЗаказПокупателяУслуги.Ссылка = &ТекущийДокумент |"; ЗапросУслуги = Запрос2.Выполнить().Выгрузить(); //Записи = РегистрыНакопления.ЗаказПокТЧ.СоздатьНаборЗаписей(); //Записи.Отбор.Регистратор.Установить(Ссылка); //Записи.Прочитать(); Для каждого ВыборкаСтрокУслуги из ЗапросУслуги Цикл Запись = Записи.Добавить(); Запись.ВидДвижения=ВидДвиженияНакопления.Приход; Запись.Период = ДатаТек; Запись.Наименование=ВыборкаСтрокУслуги.Товар; Запись.Количество=ВыборкаСтрокУслуги.Количество; Запись.Цена=ВыборкаСтрокУслуги.Цена; Запись.Сумма=ВыборкаСтрокУслуги.Сумма; Запись.Автор = Ответственный; КонецЦикла; Записи.Записать(ложь); ПРОБЛЕМА: Как добавить новые запси в регистр накопления, если, например, у товара изменили цену? Сейчас при таком коде при записи в регистр накопелния старые записи стираются и записываются новые строки с таблицы значений? |
|||
1
shuhard
07.12.18
✎
16:46
|
(0) при наличии в УПП версионирования большего бреда не придумать
|
|||
2
runoff_runoff
07.12.18
✎
16:47
|
надо было регистр расчета создавать ;-)
|
|||
3
Nysha1210
07.12.18
✎
16:55
|
Версинирование гл. буху не подходит - там есть возможность сравнить только 2 даты. А ей хочется видеть сразу все изменения в виде таблицы - кто что менял по дням и т.д. причём сразу просто и по любому документу.
|
|||
4
Nysha1210
07.12.18
✎
16:57
|
По описанию регистр накопления служит для добавления движений, а не для их замещения?
|
|||
5
la luna llena
07.12.18
✎
17:00
|
(4) почему регистр накопления?
|
|||
6
la luna llena
07.12.18
✎
17:01
|
(3) по регистру Версии Объектов нельзя свой отчет написать, который 3 даты сравнивает?
|
|||
7
Nysha1210
07.12.18
✎
17:03
|
У меня нет такого регистра ((
|
|||
8
Nysha1210
07.12.18
✎
17:06
|
Нашла, но она хочет видеть такие изменения по каждому документу Заказ покупателя .... делать каждый раз запрос?
|
|||
9
runoff_runoff
07.12.18
✎
17:07
|
(7) а как вы значение табличной части храните в регистре?..
|
|||
10
Nysha1210
07.12.18
✎
17:12
|
Наименование,СерНомер,Автор ... ну и Ресурсы - Цена, Количество, Сумма
|
|||
11
Nysha1210
07.12.18
✎
17:23
|
Первоначально данные записываются нормально, все реквизиты видны. Как добиться добавления новой информации в регистр накопления?
|
|||
12
runoff_runoff
07.12.18
✎
17:26
|
(11) попробуйте ВерсииОбъектов.. там уже всё есть..
вам только версию табличной части надо вытащить из хранилища значений.. |
|||
13
unregistered
07.12.18
✎
17:36
|
(3) > там есть возможность сравнить только 2 даты
Бред несусветный. Сравниваются любые версии объекта, хоть все (сколько бы их там не было). |
|||
14
Nysha1210
07.12.18
✎
17:40
|
В стандартной обработке "История изменений объектов" можно сравнить только 2 версии (((
|
|||
15
Nysha1210
07.12.18
✎
17:41
|
История изменений объектов
Отчет по истории изменений позволяет: сравнивать две версии объекта друг с другом просматривать версию объекта Отчет доступен пользователю с ролью "Полные права". Описание в 1С. |
|||
16
unregistered
07.12.18
✎
17:43
|
(0) Идея - *авно. Реализация - ещё хуже.
При каждом перепроведении документа будут дописываться новые записи в этот ваш чудо-регистр. А как часто при проведении документа меняется содержимое? - как правило довольно редко (а в большинстве случаев - никогда). |
|||
17
unregistered
07.12.18
✎
17:46
|
(15) (14) Ну так возьмите этот отчет из более свежего релиза БСП, где сравниваются любые указанные версии.
|
|||
18
Nysha1210
07.12.18
✎
17:51
|
1) это рабочая версия, в перспективе будут добавленны условия и записываться будет только информация, которая изменится.
2) гл. бух не хочет никуда заходить, что то менять и что то выбирать - она хочет нажать 1 кнопку и видеть все изменения сразу, причём быстро и в виде таблицы. За критику отдельное спасибо. |
|||
19
Byasha
07.12.18
✎
20:01
|
Посмотрите типовую процедуру обработки проведения документа. В УПП регистры накопления, во время проведения, сначала очищаются, потом записываются новым набором записей. Процедура очистки - универсальная. Т.е. выбираются все регистры, у которых регистратором может быть проводимый документ, и у них удаляются все записи. Ваш регистр тоже попадает в эту выборку.
Вообще изначально неверная модель хранения данных. Вам не нужен регистр накопления. Вам нужен периодический регистр сведений с периодичностью до секунды. Без подчинения регистратору. |
|||
20
Nysha1210
07.12.18
✎
20:12
|
Спасибо за разьяснения. Буду пробовать )))
|
|||
21
Nysha1210
07.12.18
✎
20:14
|
Регистр сведений пробовала, не получилось. Перезаписывал товар в одну строчку, как ни старалась переписать программу, но обойти не удалось. Попробовала через регистры накопления. За советы спасибо. Получится - отпишусь )))
|
|||
22
Byasha
07.12.18
✎
20:54
|
(21) Потому что неправильно спроектировали измерения и ресурсы регистра.
У Вас измерениями должны быть "ЗаказПокупателя, ИмяТЧДокумента, НомерСтрокиДокумента, Номенклатура, ХарактеристикаНоменклатуры, СерияНоменклатуры, ЕдиницаИзмерения, СтавкаНДС" и те реквизиты табличной части, для которых Вам важно отслеживать изменения. |
|||
23
Byasha
07.12.18
✎
20:55
|
ресурсы - "Количество,Сумма,СуммаНДС"
|
|||
24
Byasha
07.12.18
✎
20:59
|
При записи регистра ставите отбор по заказу покупателя и периоду - ТекущаяДата(). Тогда у Вас будут добавлены записи. Потом отчетом можете выловить все изменения. А вообще тут ранее Вам уже правильный совет дали. Раскрутите отчет по сравнению версий и добавьте туда возможность сравнения нескольких. тогда не нужно будет извращаться с регистром. Потому что в такой реализации он будет постоянно записываться при любом проведении заказа. Не Важно перепроведен он после изменения или регламентом.
|
|||
25
Nysha1210
07.12.18
✎
21:12
|
Спасибо. Попробую все варианты - отпишусь что получилось)))
|
|||
26
d4rkmesa
07.12.18
✎
21:58
|
(19) Здесь дельный совет.
(0) Если хотите - могу скинуть решение для УПП, через регистр сведений. Правда, там все реквизиты сохраняются, если захотите только значимые обрабатывать - нужно будет немного переделать. Ну и некоторые изменения потребуется в конфу внести (служебный реквизит в нужную табличную часть, для идентификации строк). |
|||
27
Nysha1210
07.12.18
✎
22:21
|
Буду рада, если скинете. Спасибо.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |