Имя: Пароль:
1C
1С v8
УФ. Как сравнить изменение табличной части документа?
, ,
0 БукинГена
 
01.04.14
13:40
Допкутим юзер открыл док и изменял в табл. части количество номенклатуры.
Все эти изменения должны быть записаны в регитср сведений.

Все получилось. Но застрял в одном месте.

в событии ПереЗаписьюНаСервере() все получается на ура. Но чую что это не кошерно.
Надо это записать при событии ПриЗаписиНаСервере()
1 olegves
 
01.04.14
13:42
Перед записью получаешь изменения и передаешь их через ДополнительныеСвойства в При заприси
2 VikingKosmo
 
01.04.14
13:44
(0) Если так неймется полезть в модуль объекта, я бы подумал над вопросом, а с чего бы это вдруг делать в ПриЗаписи()?
3 БукинГена
 
01.04.14
13:44
"ДополнительныеСвойства " а это чо такое?
4 vmv
 
01.04.14
13:44
все верно
5 БукинГена
 
01.04.14
14:27
ап
6 olegves
 
01.04.14
14:27
(3) научить справкой пользоваться?
7 БукинГена
 
01.04.14
14:35
(6) я уже понял что это такое.Есть приемр работы ?
8 VikingKosmo
 
01.04.14
14:39
(7) все таки, чем событие ПередЗаписью не устраивает?!
9 vmv
 
01.04.14
14:50
(8) отказом
10 VikingKosmo
 
01.04.14
14:52
(9) "С этого момента по подробнее, пожалуйста" (с)
11 БукинГена
 
01.04.14
15:02
(10) Здесь можно отказаться от записи, тогда в регистр попадают не правильные данные
12 Ненавижу 1С
 
гуру
01.04.14
15:03
надо это делать в событиях модуля объекта, а не формы
13 VikingKosmo
 
01.04.14
15:06
(11) при Отказ = Истина не делать записи в РС, что мешает?
14 БукинГена
 
01.04.14
15:10
Все! Решил проблему.
В событие ПередЗаписьюНаСервере() написал:

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



а в событии ПриЗаписиНаСервере() :


    СтарыеДанные = ТекущийОбъект.ДополнительныеСвойства.СтарыеДанные;
    Если НЕ Объект.Ссылка.Пустая() Тогда
        ТЗ = Объект.Продукция.Выгрузить();
        ТЗ.Свернуть("Номенклатура","Количество");
        
        //Тз2 = Объект.Ссылка.Продукция.Выгрузить();
        //Тз2.Свернуть("Номенклатура","Количество");
        НаборЗаписей = РегистрыСведений.ОперативныйЖурналКонтроля.СоздатьНаборЗаписей();
        
        Для Каждого СтрТЧ Из ТЗ Цикл
            Нашли = СтарыеДанные.Найти(СтрТЧ.Номенклатура,"Номенклатура");
            Если Нашли <> Неопределено Тогда
                Если Нашли.Количество <> СтрТЧ.Количество Тогда
                    Движение = НаборЗаписей.Добавить();
                    Движение.Период                     = ТекущаяДата();
                    Движение.Документ                    = Объект.Ссылка;
                    Движение.Получатель                 = Объект.СкладПриходования;
                    Движение.Продукция                    = СтрТЧ.Номенклатура;
                    Движение.Пользователь                = ПараметрыСеанса.ТекущийПользователь;
                    Движение.ДоИзменения                = Нашли.Количество;
                    Движение.ПослеИзменения                = СтрТЧ.Количество;
                КонецЕсли;
            Иначе
                Движение = НаборЗаписей.Добавить();
                Движение.Период                     = ТекущаяДата();
                Движение.Документ                    = Объект.Ссылка;
                Движение.Получатель                 = Объект.СкладПриходования;
                Движение.Продукция                    = СтрТЧ.Номенклатура;
                Движение.Пользователь                = ПараметрыСеанса.ТекущийПользователь;
                Движение.ДоИзменения                = 0;
                Движение.ПослеИзменения                = СтрТЧ.Количество;
            КонецЕсли;
        КонецЦикла;    
        // если удаляем строку
        Для Каждого СтрТЧ Из СтарыеДанные Цикл
            Нашли = ТЗ.Найти(СтрТЧ.Номенклатура,"Номенклатура");
            Если Нашли = Неопределено Тогда
                Движение = НаборЗаписей.Добавить();
                Движение.Период                     = ТекущаяДата();
                Движение.Документ                    = Объект.Ссылка;
                Движение.Получатель                 = Объект.СкладПриходования;
                Движение.Продукция                    = СтрТЧ.Номенклатура;
                Движение.Пользователь                = ПараметрыСеанса.ТекущийПользователь;
                Движение.ДоИзменения                = СтрТЧ.Количество;
                Движение.ПослеИзменения                = 0;
            КонецЕсли;
        КонецЦикла;    
        НаборЗаписей.Записать(Ложь);
    КонецЕсли;





Вроде работает.
15 Ненавижу 1С
 
гуру
01.04.14
15:12
(14) быдлокод
16 БукинГена
 
01.04.14
15:13
(15) Поделись своим, гуру
17 Ненавижу 1С
 
гуру
01.04.14
15:17
(16) читай (12)
18 БукинГена
 
01.04.14
15:20
(17) Вот как в модуле объекта получить старые данные? В каком событии?
19 Ненавижу 1С
 
гуру
01.04.14
15:22
(18) в ПередЗаписью прочитать данные из ссылки
20 1Сергей
 
01.04.14
15:22
(18) ПередЗаписью
Выдавать глобальные идеи — это удовольствие; искать сволочные маленькие ошибки — вот настоящая работа. Фредерик Брукс-младший