Вход | Регистрация


1С:Предприятие :: 1С:Предприятие 8 общая

1С 8 3 УТП сохранение истории изменения в табличной части

1С 8 3 УТП сохранение истории изменения в табличной части
Я
   Nysha1210
 
07.12.18 - 16:29
Добрый день.
Есть задача - сохранять историю изменений табличной части документа Заказ покупателя.
Как было реализовано - создан регистр накопления, в который записывается содержимое табличной части документа при проведении.

    //выгрузка табличной части

    Запрос1 = Новый Запрос;
    Запрос1.УстановитьПараметр("ТекущийДокумент", ЭтотОбъект.Ссылка);
    Запрос1.Текст = "ВЫБРАТЬ
                   |    ЗаказПокупателяТовары.НомерСтроки,
                   |    ЗаказПокупателяТовары.Количество,
                   |    ЗаказПокупателяТовары.Номенклатура КАК Товар,
                   |    ЗаказПокупателяТовары.Цена,
                   |    ЗаказПокупателяТовары.Сумма,
                   |    ЗаказПокупателяТовары.СерНомер
                   |ИЗ
                   |    Документ.ЗаказПокупателя.Товары КАК ЗаказПокупателяТовары
                   |ГДЕ
                   |    ЗаказПокупателяТовары.Ссылка = &ТекущийДокумент";

    ЗапросТовары = Запрос1.Выполнить().Выгрузить();
    
    //запись данных в регистр

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

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

    
    //услуги

    Запрос2 = Новый Запрос;
    Запрос2.УстановитьПараметр("ТекущийДокумент", ЭтотОбъект.Ссылка);
    Запрос2.Текст = "
    |ВЫБРАТЬ
    |    ЗаказПокупателяУслуги.НомерСтроки,
    |    ЗаказПокупателяУслуги.Количество,
    |    ЗаказПокупателяУслуги.Цена,
    |    ЗаказПокупателяУслуги.Сумма,
    |    ЗаказПокупателяУслуги.Номенклатура как Товар
    |ИЗ
    |    Документ.ЗаказПокупателя.Услуги КАК ЗаказПокупателяУслуги
    |ГДЕ
    |    ЗаказПокупателяУслуги.Ссылка = &ТекущийДокумент
    |";

    ЗапросУслуги = Запрос2.Выполнить().Выгрузить();
    //Записи = РегистрыНакопления.ЗаказПокТЧ.СоздатьНаборЗаписей();

    //Записи.Отбор.Регистратор.Установить(Ссылка);

    //Записи.Прочитать();

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

ПРОБЛЕМА: Как добавить новые запси в регистр накопления, если, например, у товара изменили цену? Сейчас при таком коде при записи в регистр накопелния старые записи стираются и записываются новые строки с таблицы значений?
 
 
   shuhard
 
1 - 07.12.18 - 16:46
(0)  при наличии в УПП версионирования большего бреда не придумать
   runoff_runoff
 
2 - 07.12.18 - 16:47
надо было регистр расчета создавать ;-)
   Nysha1210
 
3 - 07.12.18 - 16:55
Версинирование гл. буху не подходит - там есть возможность сравнить только 2 даты. А ей хочется видеть сразу все изменения в виде таблицы - кто что менял по дням и т.д. причём сразу просто и по любому документу.
   Nysha1210
 
4 - 07.12.18 - 16:57
По описанию регистр накопления служит для добавления движений, а не для их замещения?
   la luna llena
 
5 - 07.12.18 - 17:00
(4) почему регистр накопления?
   la luna llena
 
6 - 07.12.18 - 17:01
(3) по регистру Версии Объектов нельзя свой отчет написать, который 3 даты сравнивает?
   Nysha1210
 
7 - 07.12.18 - 17:03
У меня нет такого регистра ((
   Nysha1210
 
8 - 07.12.18 - 17:06
Нашла, но она хочет видеть такие изменения по каждому документу Заказ покупателя .... делать каждый раз запрос?
   runoff_runoff
 
9 - 07.12.18 - 17:07
(7) а как вы значение табличной части храните в регистре?..
   Nysha1210
 
10 - 07.12.18 - 17:12
Наименование,СерНомер,Автор ... ну и Ресурсы - Цена, Количество, Сумма
 
 Рекламное место пустует
   Nysha1210
 
11 - 07.12.18 - 17:23
Первоначально данные записываются нормально, все реквизиты видны. Как добиться добавления новой информации в регистр накопления?
   runoff_runoff
 
12 - 07.12.18 - 17:26
(11) попробуйте ВерсииОбъектов.. там уже всё есть..
вам только версию табличной части надо вытащить из хранилища значений..
   unregistered
 
13 - 07.12.18 - 17:36
(3) > там есть возможность сравнить только 2 даты

Бред несусветный. Сравниваются любые версии объекта, хоть все (сколько бы их там не было).
   Nysha1210
 
14 - 07.12.18 - 17:40
В стандартной обработке "История изменений объектов" можно сравнить только 2 версии (((
   Nysha1210
 
15 - 07.12.18 - 17:41
История изменений объектов
Отчет по истории изменений позволяет:

сравнивать две версии объекта друг с другом 
просматривать версию объекта

Отчет доступен пользователю с ролью "Полные права".

Описание в 1С.
   unregistered
 
16 - 07.12.18 - 17:43
(0) Идея - *авно. Реализация - ещё хуже.
При каждом перепроведении документа будут дописываться новые записи в этот ваш чудо-регистр. А как часто при проведении документа меняется содержимое? - как правило довольно редко (а в большинстве случаев - никогда).
   unregistered
 
17 - 07.12.18 - 17:46
(15) (14) Ну так возьмите этот отчет из более свежего релиза БСП, где сравниваются любые указанные версии.
   Nysha1210
 
18 - 07.12.18 - 17:51
1) это рабочая версия, в перспективе будут добавленны условия и записываться будет только информация, которая изменится.

2) гл. бух не хочет никуда заходить, что то менять и что то выбирать - она хочет нажать 1 кнопку и видеть все изменения сразу, причём быстро и в виде таблицы.

За критику отдельное спасибо.
   Byasha
 
19 - 07.12.18 - 20:01
Посмотрите типовую процедуру обработки проведения документа. В УПП регистры накопления, во время проведения, сначала очищаются, потом записываются новым набором записей. Процедура очистки - универсальная. Т.е. выбираются все регистры, у которых регистратором может быть проводимый документ, и у них удаляются все записи. Ваш регистр тоже попадает в эту выборку.
Вообще изначально неверная модель хранения данных. Вам не нужен регистр накопления. Вам нужен периодический регистр сведений с периодичностью до секунды. Без подчинения регистратору.
   Nysha1210
 
20 - 07.12.18 - 20:12
Спасибо за разьяснения. Буду пробовать )))
   Nysha1210
 
21 - 07.12.18 - 20:14
Регистр сведений пробовала, не получилось. Перезаписывал товар в одну строчку, как ни старалась переписать программу, но обойти не удалось. Попробовала через регистры накопления. За советы спасибо. Получится - отпишусь )))
   Byasha
 
22 - 07.12.18 - 20:54
(21) Потому что неправильно спроектировали измерения и ресурсы регистра.
У Вас измерениями должны быть "ЗаказПокупателя, ИмяТЧДокумента, НомерСтрокиДокумента, Номенклатура, ХарактеристикаНоменклатуры, СерияНоменклатуры, ЕдиницаИзмерения, СтавкаНДС" и те реквизиты табличной части, для которых Вам важно отслеживать изменения.
   Byasha
 
23 - 07.12.18 - 20:55
ресурсы - "Количество,Сумма,СуммаНДС"
   Byasha
 
24 - 07.12.18 - 20:59
При записи регистра ставите отбор по заказу покупателя и периоду - ТекущаяДата(). Тогда у Вас будут добавлены записи. Потом отчетом можете выловить все изменения. А вообще тут ранее Вам уже правильный совет дали. Раскрутите отчет по сравнению версий и добавьте туда возможность сравнения нескольких. тогда не нужно будет извращаться с регистром. Потому что в такой реализации он будет постоянно записываться при любом проведении заказа. Не Важно перепроведен он после изменения или регламентом.
   Nysha1210
 
25 - 07.12.18 - 21:12
Спасибо. Попробую все варианты - отпишусь что получилось)))
   d4rkmesa
 
26 - 07.12.18 - 21:58
(19) Здесь дельный совет.
(0) Если хотите - могу скинуть решение для УПП, через регистр сведений. Правда, там все реквизиты сохраняются, если захотите только значимые обрабатывать - нужно будет немного переделать. Ну и некоторые изменения потребуется в конфу внести (служебный реквизит в нужную табличную часть, для идентификации строк).
   Nysha1210
 
27 - 07.12.18 - 22:21
Буду рада, если скинете. Спасибо.


Список тем форума
Рекламное место пустует  Рекламное место пустует
Закон Брукера: Даже маленькая практика стоит большой теории.
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Рекламное место пустует