Имя: Пароль:
1C
 
как передать данные между разными наборами записи регистра в рамках транзакции?
0 vde69
 
20.11.14
16:50
модуль регистра сведений, в нем "ПередЗаписью" возникает несколько раз, в том числе при записи документа сначала программно удаляются записи, потом заного пишутся, наборы - разные, через ДополнительныеСвойства набора не передаются!!!
1 lefthander
 
20.11.14
16:52
А код посмотреть можно?
2 vde69
 
20.11.14
16:53
Перем НовыеСтатусы;

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

Процедура ПриЗаписи(Отказ, Замещение)
    Для Каждого эл из НовыеСтатусы Цикл
        а = 1;
        
        
    КонецЦикла;
КонецПроцедуры

НовыеСтатусы = ЭтотОбъект.ВыгрузитьКолонки();
3 vde69
 
20.11.14
16:55
код конечно тестовый, но думаю общий смыл понятен
Чтобы обнаруживать ошибки, программист должен иметь ум, которому доставляет удовольствие находить изъяны там, где, казалось, царят красота и совершенство. Фредерик Брукс-младший