Имя: Пароль:
1C
 
Записать проведенный документ без перепроведения
0 Mashinist
 
22.08.09
17:02
В 7-ке все было просто. Проведен не проведен документ написал
Док.Записать() и все

А как быть в 8-ке. Нужно проведенному документу пару реквизитов поменять. Реквизиты типа Комментария
1 Михаил Козлов
 
22.08.09
17:04
докОбъект.Записать(РежимЗаписиДокумента.Запись);
2 Prikum
 
22.08.09
17:04
Документ.Записать(РежеимЗаписиДокумента.Запись);
3 Mashinist
 
22.08.09
17:07
Ну там вообще-то два параметра
Записать(<Режим записи>, <Режим проведения>)
<Режим проведения> (необязательный)
Тип: РежимПроведенияДокумента. Позволяет выбрать один из возможных режимов проведения.
Значение по умолчанию: Неоперативный

Т.е. как я понимаю если его не указать, то просто будет проведение неоперативное и все
4 Prikum
 
22.08.09
17:08
(3) Ты смотри на первый параметр!
5 Mashinist
 
22.08.09
17:13
Смотрел
Режим записи> (необязательный)
Тип: РежимЗаписиДокумента. Позволяет выбрать один из возможных режимов записи.
Значение по умолчанию: Запись

Ну т.е. все как в 7-ке остается...
Нужно проверить
6 Mashinist
 
22.08.09
20:26
Ну в общем в любом случае документ проводится.
Плохо. Теряется время за зря.
7 Prikum
 
22.08.09
21:24
(6) посмотри обработку "Групповая обработка справочников и документов", она изменяет реквизиты документов без проведения!
8 Dmitrii
 
гуру
22.08.09
22:04
(6) Нет, не проводится. Проводится только при указании режима записи документа "Проведение").
9 php5
 
22.08.09
22:05
(7) Там запись происходит 'Объект.Записать()'...
Я сначала тоже так записывал, потом начали косяки всплывать, что если записывать таким способом, то документ имеет Проведен = Истина (в журналах везде птичка стоит), а движений нету...
10 Mashinist
 
23.08.09
12:24
(7)
Самый простой код

   Объект = ЗаказНаряд.ПолучитьОбъект();
   Объект.Работы.Удалить(Объект.Работы[0]);
   Объект.Записать();

Удаляю одну строчку в ТЧ и записываю документ.
В 7-ке было бы расхождение между документом и регистром.
В 8-ке нету. Перепроводится

В "Групповая обработка справочников и документов"

                       Если ЭтоДействиеПроведение Тогда
                           
                           Если ПолеВводаДействия Тогда
                               Объект.Записать(РежимЗаписиДокумента.Проведение, РежимПроведенияДокумента.Неоперативный);
                           Иначе
                               Объект.Записать(РежимЗаписиДокумента.ОтменаПроведения);
                           КонецЕсли;
                           
                       ИначеЕсли ЭтоДействиеПометкаНаУдаление Тогда
                           Объект.УстановитьПометкуУдаления(ПолеВводаДействия);
                           
                       Иначе
                           
                           Объект.Записать();
                           
                       КонецЕсли;

Что по сути означает, что Объект.Записать() не проведенных не проводит, а для проведенных перепроводит неоперативно.
11 AlexSSSS
 
23.08.09
12:27
(10) совсем тупой или прикидываешься?

Объект.Записать(РежимЗаписиДокумента.Запись);
12 Mashinist
 
23.08.09
12:49
Может и тупой, но пока не понимаю

   Объект = ЗаказНаряд.ПолучитьОбъект();
   Объект.ПричинаОбращения = ст;
   Объект.Работы.Удалить(Объект.Работы[0]);
   Объект.Записать(РежимЗаписиДокумента.Запись);

Эффект тот же

Вообще Записать(<Режим записи>, <Режим проведения>)
Имеет два параметра
и у первого значение по умолчанию: Запись , а у второго Значение по умолчанию: Неоперативный
Поэтому
Объект.Записать();
эквивалентно
Объект.Записать(РежимЗаписиДокумента.Запись,РежимПроведенияДокумента.Неоперативный);

Не получается у меня программно изменить реквизиты документа и не изменить регистры.
(10)Если знаешь как расскажи
13 golden-pack
 
23.08.09
12:54
(12) А ты с 7кой голимой не сранивай ...

Ты наверно записываешь проведенный документ ... то есть проводки то остались, а реквизиты ты поменял
14 golden-pack
 
23.08.09
12:54
(12) Весь код в студию
15 Mashinist
 
23.08.09
13:30
(13) Тема топика: Записать проведенный документ без перепроведения

Я записываю проведенный документ. Мне нужно изменить реквизиты проведенного документа.

Код я уже приводил. Это просто тест. Проверял, что регистры двигаются.
16 golden-pack
 
23.08.09
14:22
(15) милиард раз менял реквизиты в проведенном документе и записывал без перепроведения.

Объект.Записать(РежимЗаписиДокумента.Запись);
17 golden-pack
 
23.08.09
14:24
ПриЗаписи() можно глянуть
18 PR
 
23.08.09
14:26
Мда.
Бывает порой вот кто-нить типа автора задаст простой вопрос, ему дадут простой ответ, а он нет, грит, не работает.
И все, немая пауза, типа кто durak-то? :))

Автору: просто сделай то, что написано в этой ветке. Работает. СТО процентов.
19 Михаил Козлов
 
23.08.09
17:41
Не проще было в отладчике встать в процедуру проведения и посмотреть, попадает ли туда?
20 Mashinist
 
23.08.09
21:57
(19) Вот только что и проверил - попадает в обработку проведения
21 golden-pack
 
24.08.09
10:05
(20) И .... нашел откуда попадает ? ПриЗаписи(), ПередЗаписью() проверь .. !!!!
22 Михаил Козлов
 
24.08.09
12:16
(20) А если написать Записать(РежимЗаписиДокумента.Запись())? Может автоматом делается проведение, если Модифицированность = ИСТИНА?
23 Mitriy
 
24.08.09
12:24
просто Записать() достаточно, зачем все пишут режим записи?
24 Mitriy
 
24.08.09
12:26
и вообще, надо было голосовалку устраивать... я за Записать()
25 Prikum
 
24.08.09
12:39
(23) Так читать удобней! ИМХО!
26 Serg_1960
 
24.08.09
12:50
Даешь голосовалку на тему: Как работает Записать() и нафига они сделали РежимЗаписиДокумента.Запись и РежимЗаписиДокумента.Проведение :))
27 Михаил Козлов
 
25.08.09
19:54
Как раз сегодня после изменения конфы понадобилось в старых документах прописать реквизит.
Универсальным подбором и обработкой объектов отобрал документы, написал произвольный алгоритм изменения реквизитов, после изменения написал Объект.Записать(РежимЗаписиДокумента.Запись), поставил точку останова в процедуре проведения - не попадаю. Документы записываются шустро (чисто визуально - без проведения).
28 Mashinist
 
26.08.09
00:47
(27) очень странно это
Взял обработку с диска ИТС Поиск и замена
Решил заменить одного контрагента другим
Поставил точки останова в модуле документа ПередЗаписью, ПриЗаписи, ОбработкаПроведения

Во все три процедуры попадает. В обработку проведения попадает с режимом Неоперативный

(26) По поводу Нафига...

В 7-ке есть реально два метода Записать и Провести
В 8-ке метод один
Потому как если давать РежимЗаписиДокумента.Проведение то явно подразумевается, что запись выполнится раньше.
Т.е. если давать РежимЗаписиДокумента.Запись для не проведенного документа, то это будет только запись. А если для проведенного, то у меня по крайней мере попадает в модуль проведения в отличии от (27)
Может это где настраивается... Но я пока не нашел
В 7-ке можно было написать ПриЗаписиПерепроводить(1) Но это касалось только интерактивной записи и поэтому программно легко можно было сделать содержимое документа одним, а регистры другими
В 8-ке мне пока это не удалось сделать.

Конфигурация Альфа-Авто
29 kumena
 
26.08.09
06:07
В 7-ке можно было написать ПриЗаписиПерепроводить(1)
В 8-ке мне пока это не удалось сделать.

Может это где настраивается... Но я пока не нашел

этот флажок ставится (или не ставится) в свойствах формы
30 ЛНТ
 
26.08.09
06:40
(0) учись пользоваться отладчиком. Поставь точку останова в модуле проведения. Если попадешь на эту точку, то посмотри стек вызовов - поймешь откуда проведение запускается.
в некоторых конфах встречал в процедуре ПриЗаписи() повторный вызов Записать(), но с режимом проведения, сделано для исключения расхождения данных документа и регистров, может это твой случай.
31 Mashinist
 
26.08.09
11:02
(30) учусь

   Документ.ЗаказНаряд.ОбработкаПроведения(Отказ = ложь, Режим = Неоперативный)    5 393    Клиент:Администратор (2), MIC-R58:1562
   Форма.Форма.вВыполнитьЗаменуЭлементов(Заменяемые = Соответствие, ТаблицаСсылок = ТаблицаЗначений, ВыполнятьВТранзакции = истина, ОтключатьКонтрольЗаписи = ложь)    164    Клиент:Администратор (2), MIC-R58:1562
   Форма.Форма.КнопкаВыполнитьНажатие(Элемент = КнопкаКоманднойПанели)    529    Клиент:Администратор (2), MIC-R58:1562

видим, что гипотеза о вызове Записать() в ПриЗаписи() не подтвердилась

(29)"этот флажок ставится (или не ставится) в свойствах формы"

Как называется флажок в терминах 8-ки?
Хотя в данном случае формы нет.
32 kumena
 
26.08.09
14:17
я не знаю, может рарусу и лень делать форму документа, но это совсем маловерятно.

http://slil.ru/27929077
33 ptiz
 
26.08.09
14:30
Тяжелый случай.
34 Mashinist
 
26.08.09
14:40
(32) да. увидел. спасибо. Стоит ПриЗаписиПререпроводить
Но я так думаю, что это касается конкретной формы.
Я же не через форму работаю, а через объект

(33) Да... случай действительно тяжелый
У меня юзеры не могут по правам неоперативно проводить документы, но с другой стороны нужно обработкой дописать в общем не существенные реквизиты (комментарий например), а получается, что нельзя без проведения

(31) показывает, что в обработку проведения я вываливаюсь прямо из формы обработки

В общем не получается у меня записать ПРОВЕДЕННЫЙ документ без перепроведения
35 ptiz
 
26.08.09
15:20
(34) Подытожу:
При вызове метода Записать() вызываются обработчики ПередЗаписью() и ПриЗаписи(). Как в модуле объекта, так и в его подписках на событие. Вот там собака и зарыта. Найти её проще всего способом из (30). Если не находишь, то смотри отладчиком пошагово.
36 ptiz
 
26.08.09
15:25
Еще один выход (если писатели этой конфы не полные чудаки):
Документ.ОбменДанными.Загрузка = Истина;
Документ.Записать();
37 Mashinist
 
26.08.09
15:56
(35) Метод (30) я раскрыл в (31)
Там показан стек вызовов при работе обработки с ИТС Поиск и замена значений
Ну и моя обработка так же попадает в проведение хотя я пишу Объект.Записать();

(36) Не понял идею с
Документ.ОбменДанными.Загрузка = Истина;
Документ.Записать();

Можно тему раскрыть?
38 ptiz
 
26.08.09
16:35
(37) Код из (0)

Док.Записать();

меняешь на

Док.ОбменДанными.Загрузка = Истина;
Док.Записать();

Это было неочевидно после (36) ?
39 Mashinist
 
26.08.09
23:43
(38) Круто
Так действительно в модуль проведения не попадает!
40 Mashinist
 
26.08.09
23:54
(38) Осталось понять - при такой записи если будет база распределенная изменения уйдут по назначению в нужные узлы?
41 Zaval
 
26.08.09
23:55
(28) Действительно очень странно. Нет там перепроведения. Я тамошний метод использовал в качестве ПроизвольногоАлгоритма в УниверсальномПодборе..., все на ура проходило.
42 Serg_1960
 
27.08.09
00:36
Это преамбула :)
Автор верно заметил - снеговик отличается от клюшек. Но ещё не осознал всю глубину отличий. Незная как работает платформа - сложно "отделить" реакцию платформы от поведения конфы.

Теперь по теме:
Если автору не удается записать документ без перепроведения не иначе, как только используя "ОбменДанными.Загрузка = Истина" - то можно смело предположить, что "проблема" кроется в используемой конфигурации.

Пояснение:
Грубо говоря, "ОбменДанными.Загрузка = Истина;" предназначено, прежде всего, для конфигурации. Типовая конфа, как правило, анализирует это значение перед контролем интерактивных действий пользователя и не выполняет их во время обмена данными - считается, что данные уже были проверены в том узле, откуда они поступают.
43 Mashinist
 
27.08.09
10:52
(42)

Про ОбменДанными.Загрузка = Истина; и смысл этого я уже почитал немного

И в конфе (я писал это Альфа-Авто) все учтено
ПриЗаписи() стоит Если ОбменДанными.Загрузка = Истина Тогда Возврат
что конечно правильно
Но еще при такой записи и в модуль проведения вообще не попадает

Т.е. для меня на текущий момент это реальное решение поблемы

Всем спасибо за обсуждение! Особенно (36) ptiz!
Я не хочу быть самым богатым человеком на кладбище. Засыпать с чувством, что за день я сделал какую-нибудь потрясающую вещь — вот что меня интересует. Стив Джобс