Имя: Пароль:
1C
1С v8
Планы обмена. Регистрировать только при изменении, а не проведении документов
0 Ахмадинежад
 
08.07.14
16:18
Документ становится зарегистрированным как изменённый, даже если он не менялся, а просто перепровелся.

Как сделать так, чтобы только при изменении регистрация в планах обмена происходила?
___
в лоб что-ли...  подписку на событие - перед записью и после записи на ДокументОбъект (все документы) и глобальную перменную - в которую запихивать ЗаписьХМЛ, сделанную из источника в "ПередЗаписью".
И затем в приЗаписи снова источник в ЗаписьХМЛ и сравнивать с глоабльной переменной как строки - если отличаются - регим изменения...
1 Fragster
 
гуру
08.07.14
16:19
а кто тебе сказал, что там ничего не изменилось от того что он "перепровелся"?
2 Fragster
 
гуру
08.07.14
16:20
сделай как в УТ - если док проведен, то открывать его только на чтение
3 Ахмадинежад
 
08.07.14
16:22
(1) эээ.. надо проверить.. но думаю, вряд ли ж..
(2) очень смешно
4 Ахмадинежад
 
08.07.14
16:22
УПП да..
5 Ахмадинежад
 
08.07.14
16:23
т.е. при проведении без открытия формы он становится зареген, как изменённый
6 Maxus43
 
08.07.14
16:24
это нормально.
Вот будешь восстанавливать последовательность расчетов например, там только перепроведение, но движения то другие.
Не надо с этим эксперементировать. Для актуальности информации - пусть всё бегает как заложено природой
7 Fragster
 
гуру
08.07.14
16:24
(3).2 на самом деле юзеры, которые закрывают документ кнопкой ОК задолбали.

в УТ сделано так - открывается только на чтение, потом при необходимости нажимается кнопка "изменить"
8 Ахмадинежад
 
08.07.14
16:32
движения пусть различаются в базах, а вот документы, которые не изменялись - не должны снова экспортироваться.

Можно было бы сравнивать при импорте в приёмник, но в приёмнике документы правятся, т.е. отличаются от документов источника, и, получается, по-любому будет разница.

А нужно экспортировать только изменённые.
9 Alex S D
 
08.07.14
16:34
ладно, сделай
10 Alex S D
 
08.07.14
16:34
посмотри как в ут11
11 Ахмадинежад
 
08.07.14
16:45
(10) а там только изменённые уходят?
12 Fragster
 
гуру
08.07.14
16:46
(11) нет
13 hhhh
 
08.07.14
16:56
(11) вообще-то это очень полезная штука, нажимаешь ОК и документ регистрируется. Если нужно в обмен направить неизмененные документы, самое то. Подумай от чего ты отказываешься.
14 Alex S D
 
08.07.14
16:57
(11) да
15 hhhh
 
08.07.14
16:57
(13)+ кстати у меня при проведении не регистрируются почему-то.
16 Necessitudo
 
08.07.14
16:59
Отключить авторегистрацию и регистрировать программно.
17 Ахмадинежад
 
08.07.14
16:59
(11)менять могут обработкой.
(14)как план обмен называется, или он там один? нету щас под рукой УТ11
(15)ну вот.. )) блин. план обмена с нуля создавал..
18 Alex S D
 
08.07.14
17:01
из ут:

    Если    ЗарегистрироватьОбъектКВыгрузке
        ИЛИ Источник.ЭтоНовый()
        ИЛИ Источник.ОбменДанными.Загрузка Тогда
        
        // для наборов записей регистров,
        // при физическом удалении объектов,
        // для новых объектов,
        // для объектов записанных по обмену данными
        // регистрируем изменения всегда
        Возврат Истина;
        
    ИначеЕсли  РежимЗаписи <> Неопределено
        И ИзмененоПроведениеДокумента(Источник, РежимЗаписи) Тогда
        
        // если изменен признак документа "Проведен", то считаем документ измененным
        Возврат Истина;
    КонецЕсли;
    
    ИмяОбъекта = ОбъектМетаданных.ПолноеИмя();
    
    ТаблицаРеквизитовРегистрации = ОбменДаннымиПовтИсп.ПолучитьТаблицуРеквизитовРегистрации(ИмяОбъекта, ИмяПланаОбмена);
    
    Если ТаблицаРеквизитовРегистрации.Количество() = 0 Тогда
        
        // если правила ВРО не заданы, то считаем, что фильтра ВРО нет.
        // объект модифицирован всегда
        Возврат Истина;
        
    КонецЕсли;
    
    Для Каждого СтрокаТаблицыРеквизитовРегистрации ИЗ ТаблицаРеквизитовРегистрации Цикл
        
        ЕстьИзмененияВерсийОбъектов = ОпределитьИзмененияВерсийОбъекта(Источник, СтрокаТаблицыРеквизитовРегистрации);
        
        Если ЕстьИзмененияВерсийОбъектов Тогда
            
            Возврат Истина;
            
        КонецЕсли;
        
    КонецЦикла;
    
    // если дошли до конца, то объект не изменился по реквизитам регистрации;
    // регистрация на узлах не нужна
    Возврат Ложь;
19 Alex S D
 
08.07.14
17:03
(17) причем тут план обмена?
20 Alex S D
 
08.07.14
17:04
регистрация в подписке перед записью идет
21 Alex S D
 
08.07.14
17:06
+ в планеобмена должен стоять запрет авторегистрации
22 Ахмадинежад
 
08.07.14
17:07
(18) а как метод "ОпределитьИзмененияВерсийОбъекта" определяет что было изменение?
23 Alex S D
 
08.07.14
17:10
(22) легко.. объект же еще не записан в базу
24 Ахмадинежад
 
08.07.14
17:11
спасибо всем откликнувшимся, ухожу в офф
25 Alex S D
 
08.07.14
17:11
объект до изменения:
    ТекстЗапроса = "
    |ВЫБРАТЬ " + СтрокаТаблицыРеквизитовРегистрации.РеквизитыРегистрации
      + " ИЗ " + СтрокаТаблицыРеквизитовРегистрации.ИмяОбъекта + " КАК ТекущийОбъект
    |ГДЕ
    |   ТекущийОбъект.Ссылка = &Ссылка
    |";
    
    Запрос = Новый Запрос;
    Запрос.Текст = ТекстЗапроса;
    Запрос.УстановитьПараметр("Ссылка", Объект.Ссылка);
    
    Возврат Запрос.Выполнить().Выгрузить();
26 Alex S D
 
08.07.14
17:11
ну а после это источник события
27 Ахмадинежад
 
08.07.14
17:11
(23)т.е. только новые регит, а перезаписанные (с изменёнными данными) нет ?
28 Alex S D
 
08.07.14
17:12
(27) регит только измененные
29 Ахмадинежад
 
08.07.14
17:12
ааа, точно, туплю. не записан в базу с изменёнными данными в событии "передЗаписью", точно !!
30 Ахмадинежад
 
08.07.14
17:13
сравниваю свйоства Источника с резултатом запроса
31 Alex S D
 
08.07.14
17:14
именно
Компьютеры — прекрасное средство для решения проблем, которых до их появления не было.