Имя: Пароль:
1C
 
Получить данные из предидущей версии объекта
🠗 (Волшебник 30.05.2025 09:28)
0 Alex7771
 
29.05.25
20:15
Не подскажите, есть база Бухгалтерия 30, в ней включено версифицирование объектов. Как например для Накладной на отгрузки товаров программно получить данные из предидущей версии ( например получить предидущую табличную часть услуги ) ?
1 Волшебник
 
29.05.25
20:25
Пишется "предыдущий"
2 Мультук
 
гуру
29.05.25
20:34
(0)


Смотрим на функцию

ВерсионированиеОбъектов.РазборВерсии(Ссылка, НомерВерсии)



Дополнительно читаем описание (в этом же модуле)
Функция РазборПредставленияОбъектаXML(ДанныеВерсии, Ссылка)


которую вызывает функция РазборВерсии(..)

Далее думаем и пишем код обработки
3 Волшебник
 
29.05.25
21:33
(2) Добавьте контекста, что это БСП
4 Alex7771
 
30.05.25
08:07
Результат=ВерсионированиеОбъектов.РазборВерсии(Док,НомерВерсии);    
ТЗ1 = Результат.ТабличныеЧасти.Получить("Услуги");

вот так у меня в ТЗ1 получилась табличная часть из прошлой версии.
Правильно я понимаю, что строчки в ней сопоставляются с текущей версией по реквизиту "Идентификатор строки" ?

т.е. теперь мне надо из этой таблицы значений если например поле "Содержание" не совпадает, перенести это в текущий документ ? ( мне всю версию заменять не нужно, нужно только содержание поправить )

Или есть какой-нибудь более простой фэншуйный бспшный способ ? :)
5 Волшебник
 
30.05.25
08:08
(4) Вам надо заменить всю версию.
6 Alex7771
 
30.05.25
08:23
(5) я бы рад, но бухи не хотят. Они похерили именно содержание, суммы они тоже правили но хотят их оставить.
7 Мультук
 
гуру
30.05.25
08:28
(4)

За 15 мин можно было бы уже написать весь код замены содержимого из 4-5 строк и начать тестить.

Но вы ждете что вдруг есть волшебный метод
ОбщийМодульМиста.СделатьДляAlex7771_Хорошо ()


Ну серьезно ?
8 Волшебник
 
30.05.25
08:44
(6) Вы должны настоять, чтобы вернуть предыдущий идентификатор версии
9 maxab72
 
30.05.25
08:47
и в скольких строках надо менять? в двух или в трех?
10 Fish
 
гуру
30.05.25
09:05
(6) Путь удалят/сторнируют неправильный документ, и заведут новый - с правильным содержимым и суммами.
Нечего их баловать, за косяки в данных должны отвечать пользователи, а не программист.
11 Eiffil123
 
30.05.25
09:27
(7) за 15 минут можно открыть прежнюю версию и вручную перебить содержание в новый документ.

Категорически против программирования по таким разовым задачам, где время на разработку сопоставимо с временем ручного труда.
12 Волшебник
 
30.05.25
09:29
(0) версифицирование... хе-хе
13 Alex7771
 
30.05.25
10:24
(11) накладных несколько тысяч
14 Alex7771
 
30.05.25
10:26
короче вот так сделал, вроде работает

пр = 0;

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