Имя: Пароль:
1C
1С v8
Записать документ без перепроведения
,
0 nevskaya
 
20.03.12
20:11
Добрый вечер. Прошу подсказки. Есть документ, который делает движения по регистру накопления. Например, пользователь заходит в уже проведенный документ, меняет значение одного реквизита и нажимает кнопку Записать. В связи с этим требуется модифицировать записи регистра накопления в том случае, если документ уже проведен, но при этом не перепроводя сам документ. Фактически, по нажатию меняется значение реквизита и записи регистра.

Документ, если он уже проведен, при нажатии на Записать перепроводится. Это вроде как нормально. Можно ли как-то это обойти? Пробую писать обработку записи в форме документа. Запись в регистрах изменить удается, реквизит в документе соответственно не меняется. Посоветуйте.
 
Процедура ЗаписатьДокумент(Кнопка)      
   Если Проведен И РазрешеноИзменение Тогда                
       НачатьТранзакцию();
       Попытка
           НаборЗаписей = Движения.ТоварыПереданные;
           НаборЗаписей.Прочитать();
           Если НаборЗаписей.Количество()<>0 Тогда
               Для каждого Движение Из НаборЗаписей Цикл
                   Движение.ДоговорКонтрагента = ДоговорКонтрагента;
               КонецЦикла;        
               НаборЗаписей.Записать();
           КонецЕсли;
           
           ЭтаФорма.Модифицированность = Ложь;
       Исключение
           ОтменитьТранзакцию();
       КонецПопытки          
   Иначе
       Записать();
   КонецЕсли;    
КонецПроцедуры
1 PR
 
20.03.12
20:12
ДокОбъект.ОбменДанными.Загрузка = Истина
2 nevskaya
 
22.03.12
10:09
(1) Спасибо, то, что надо.

Теперь возникла следующая проблема - не перезаписываются строки в регистре накопления. Записи меняю в закрытом периоде. Причем в таблице записей в конце данные заменяются. Но в 1с, в регистре - данные остаются старые. С чем это может быть связано? Может ли быть из-за того, что период закрыт?

Если мСобытиеПоКнопке Тогда
       ЭтотОбъект.ОбменДанными.Загрузка = Истина;
       Записать(РежимЗаписиДокумента.Запись);
       
       НачатьТранзакцию();
       Попытка            
           НаборЗаписей=РегистрыНакопления.ТоварыПереданные.СоздатьНаборЗаписей();
           НаборЗаписей.ОбменДанными.Загрузка = Истина;
           НаборЗаписей.Отбор.Регистратор.Значение=ЭтотОбъект.Ссылка;
           НаборЗаписей.Прочитать();
           Для каждого Строка из НаборЗаписей Цикл
               Строка.ДоговорКонтрагента = ДоговорКонтрагента;                
           КонецЦикла;
           НаборЗаписей.Записать();
       Исключение
           ОтменитьТранзакцию();
       КонецПопытки
   Иначе
       ПриИзмененииДоговора();
   КонецЕсли;
   ТаблицаЗаписей = НаборЗаписей.Выгрузить();
3 Шапокляк
 
22.03.12
10:11
(2)  То есть документ надо записать без проведения, но после этого проблема, что проведения нет?
4 nevskaya
 
22.03.12
10:15
(3) Почти. После перезаписи нужно сделать только те движения, которые нужно. Другими словами, оставить все как было, лишь изменить одно поле в записи одного регистра.
5 Живой Ископаемый
 
22.03.12
10:16
2(4) так нужно делать всегда или только один раз?
6 nevskaya
 
22.03.12
10:17
(2) Всегда. В закрытом периоде. Но только одному человеку :)
7 lxs
 
22.03.12
10:18
(4) меняйте логику, ибо это брел
8 lxs
 
22.03.12
10:18
*бред
9 Мыш
 
22.03.12
10:18
(4) НаборЗаписей = РегистрыНакопления.МойРегистр.СоздатьНабор();
НаборЗаписей.Отбор.Регистратор.Установить(МойДокумент);
НаборЗаписей.Прочитать();
// редактировать записи
НаборЗаписей.Записать();
10 nevskaya
 
22.03.12
10:20
(9) А у меня разве не так?
11 Мыш
 
22.03.12
10:21
(10) Да всё так. Если не срабатывает - лезь в отладчик и смотри. Может где "Отказ=Истина" срабатывает.
12 y22-k
 
22.03.12
10:22
(10) нет
13 Мыш
 
22.03.12
10:23
(10) Во, увидел. Нет "ЗавершитьТранзакцию();" Или "Зафиксировать"
14 Адинэснег
 
22.03.12
10:25
(0) кури документ "Корректировка записей регистров"
Старые сторнируй, новые добавляй
15 Aprobator
 
22.03.12
10:26
(14) ага - пользователь это осилит.
16 nevskaya
 
22.03.12
10:28
(13) блин, забыла) спасибо!