Имя: Пароль:
LIFE
1С v8
OFF: Мелочи и нюансы
0 Мультук
 
гуру
28.07.23
14:54
1. Это всё фигня, а вот ... 100% (2)
2. Таких тупых джунов не бывает 0% (0)
3. Автор сам такой - инфа 100% 0% (0)
4. Я тоже так делал в молодости 0% (0)
Всего мнений: 2

Есть некий проведенный документ. Пусть это будет ссылкаРТУ
Программиста попросила перепровести программно этот документ.

Найдите ошибки в коде.

Naive-джун написал (а) код:

Вариант1

об = ссылкаРТУ.ПолучитьОбъект();
об.ОбменДанными.Загрузка = Истина;       //Чтобы быстрее было
об.Записать(РежимЗаписиДокумента.Проведение);

Затем он переписал код на Вариант2

"Так как при нажатии на дискетку в форме проведенный документ всё-равно перепроводится,
то можно и так сдлеать "

Вариант2:

об = ссылкаРТУ.ПолучитьОбъект();
об.ОбменДанными.Загрузка = Истина;       //Чтобы быстрее было
об.Записать(РежимЗаписиДокумента.Запись);

P.S.
Просьба отцов не спойлерить и дать возможность Naive тоже немного подумать.
Сегодня какая-то скучная пятница...
1 Волшебник
 
28.07.23
14:56
Во-первых, надо убрать строку:
об.ОбменДанными.Загрузка = Истина;


Во-вторых, программно перепроводить конкретный документ не нужно.
2 RomanYS
 
28.07.23
14:59
(0) джуны не придут, пятница останется скучной...
Погода ещё такая, проснуться невозможно
3 Aleksey
 
28.07.23
15:06
А чего не так? В некой самописной  конфе оба кода могу быть рабочие
4 YFedor
 
28.07.23
15:10
Задача странная, как уже сказали в (1) программно перепроводить один конкретный документ не нужно

Это всё фигня, а вот ...
5 RomanYS
 
28.07.23
15:12
(3) первый вариант нерабочий, второй не решает задачу
6 Aleksey
 
28.07.23
15:12
(5) с чего то он вдруг не рабочий?
7 Мультук
 
гуру
28.07.23
15:13
(5)

Ну, вот -- а ты говорил "всё зря" :-)
8 Bigbro
 
28.07.23
15:14
режимпроведения.Неоперативный еще добавить?
9 RomanYS
 
28.07.23
15:14
(6) проведение в режиме загрузки невозможно на уровне платформы. И это логично
10 Aleksey
 
28.07.23
15:15
(8) зачем? и так 1с рабереьтся
11 Aleksey
 
28.07.23
15:15
(9) с чего это вдруг?
12 RomanYS
 
28.07.23
15:16
(7) ну ладно. Однако ценность таких знаний невысока, а ошибка очевидна после её первого выявления.
13 RomanYS
 
28.07.23
15:18
(11) поробуй.
Почему логично? Загрузка - это условно запись с отключением лишних обработчиков, а проведение это как такой обработчик.
14 Aleksey
 
28.07.23
15:19
(13) режим записи - это всего лишь свойство, платформа его не использует. Ну или мне такое поведение платформы не попадалось
15 Aleksey
 
28.07.23
15:19
(13) это разруливаеться на уровне кода, а не на уровне платформы
16 asady
 
28.07.23
15:20
(0) если у вас типовые - то как правило у них перед запись стоит что-то типа Если ОбменДанными.загрузка Тогда Возврат;
https://its.1c.ru/db/v8std/content/773/hdoc

а если собственная конфа - то хз что там есть и код джуниора может таки сработать.
17 RomanYS
 
28.07.23
15:22
(14) не понял. Это свойсто, которое приводит к вызову обработчика
(15)(16) вот с проведением не так, платформа просто выдаст ошибку
18 Aleksey
 
28.07.23
15:23
(17) ?? Какого обработчика?
19 RomanYS
 
28.07.23
15:24
(18) ОбаботкаПроведения
20 Aleksey
 
28.07.23
15:26
(19) нет не приводит (ну или я не могу понять нить повествования)

А возвращаясь к сабжу, для конфы на БСп такая конструкция вполне работает

об.ОбменДанными.Загрузка = Истина;
об.ДополнительныеСвойства.Вставить("ОтключитьМеханизмРегистрацииОбъектов");
об.Записать(РежимПроведенияДокумента.Проведение);
21 Галахад
 
гуру
28.07.23
15:34
Мне этот джун, даже импонирует. Прекрасное желание улучшить код. Похвально.
22 RomanYS
 
28.07.23
15:36
(20) Значит где-то перед записью другой код (возможно БСП) отключает режим загрузки.
Провести в режиме загрузки в любом случае не получится.

На чистой базе получишь ошибку:

{Обработка.Обработка5.Форма.Форма.Форма(27)}:Док.Записать(РежимЗаписиДокумента.Проведение);

[ОшибкаВоВремяВыполненияВстроенногоЯзыка]
по причине:
Действие не может выполняться в режиме загрузки данных
[ОшибкаХранимыхДанных]
23 Быдло замкадное
 
28.07.23
15:39
Вариант 2 не проводит документ. А только записывает. То что он до этого был проведен только интерактивно при дискетке работает
24 H A D G E H O G s
 
28.07.23
15:42
об.Записать(РежимЗаписиДокумента.ОтменаПроведения);
об.Записать(РежимЗаписиДокумента.Проведение);
25 RomanYS
 
28.07.23
15:53
(24) Это в противовес джуну сделать помедленнее)))?
26 H A D G E H O G s
 
28.07.23
16:25
(25) Это, чтобы выполнилось ОбработкаУдаленияПроведения()
27 ass1c
 
28.07.23
17:07
Как говорит нам БСП - нужно было ему написать код как в ОбщегоНазначения.ПровестиДокументы(Документы) Экспорт
Крутой был бы тогда Джун...
28 RomanYS
 
28.07.23
17:10
(26) этого в задании не было)
29 1CBaseV8
 
28.07.23
21:41
(0) 1. Все что связано с привязанными С/Ф, т.е. РТУ — нужно делать в транзакции с перепроведением его СФ.
2. Если это УТ11/ERP/КА нужно сначала отменить проведение и снова провести, чтобы встали различные ключи аналитики ТМЦ, Взаиморасчетов.

объДок - Документ
объСФ - его С/Ф

Примерно так.

бБылиОшибки = Ложь;
НачатьТранзакцию();
Если не бБылиОшибки Тогда
Попытка
объСФ.Записать(РежимЗаписиДокумента.ОтменаПРоведения);
Исключение
бБылиОшибки = Истина;
КонецПопытки;
КонецЕсли;

Если не бБылиОшибки Тогда
Попытка
объДок.Записать(РежимЗаписиДокумента.ОтменаПРоведения);
Исключение
бБылиОшибки = Истина;
КонецПопытки;
КонецЕсли;

Если не бБылиОшибки Тогда
Попытка
объДок.Записать(РежимЗаписиДокумента.ПРоведения);
Исключение
бБылиОшибки = Истина;
КонецПопытки;
КонецЕсли;

Если не бБылиОшибки Тогда
Попытка
объСФ.Записать(РежимЗаписиДокумента.ПРоведения);
Исключение
бБылиОшибки = Истина;
КонецПопытки;
КонецЕсли;

Если бБылиОшибки  ТОгда
ОтменитьТранзакцию()
Иначе
ЗафиксироватьТранзакцию()
КонецЕсли;

Это всё фигня, а вот ...