Имя: Пароль:
1C
1С v8
УТ. Изменить движения в регистре, не перепроводя документы. Как правильно?
0 Vladal
 
22.08.12
12:56
В зависимости от параметров документа он может двигать несколько разных регистров.

В документах изменили способ проведения по одному из регистров. Для новых документов движения уже проводятся по-новому. А как обработкой двинуть регистр, ссылаясь на существующие документы, не перепроводя их? Конечно, проще перепровести все документы, но при этом сбились последовательности. Мне нужно исправить движения только по одному регистру, который не участвует в последовательности.

Помню, в УПП была обработка восстановления последовательностей, которая в документах двигала только те движения, которые касались выбранной последовательности. Сейчас работаю с УТ и здесь нет этой обработки.

Каким методом это сделать? Вот я выбрал все документы:


ВЫБРАТЬ
   НАЧАЛОПЕРИОДА(НДСПриобретений.Регистратор.Дата, МЕСЯЦ) КАК Поле1,
   НДСПриобретений.Период,
   НДСПриобретений.Регистратор,
   НДСПриобретений.НомерСтроки,
   НДСПриобретений.Активность,
   НДСПриобретений.ВидДвижения,
   НДСПриобретений.Организация,
   НДСПриобретений.ДоговорКонтрагента,
   НДСПриобретений.СобытиеНДС,
   НДСПриобретений.СтавкаНДС,
   НДСПриобретений.ВозвратнаяТара,
   НДСПриобретений.СуммаВзаиморасчетовРегл,
   НДСПриобретений.НДСВходящий
ИЗ
   РегистрНакопления.НДСПриобретений КАК НДСПриобретений
ГДЕ
   НДСПриобретений.Регистратор.Дата >= &Дата
   //и
   //НДСПриобретений.Регистратор ССЫЛКА Документ.ПоступлениеТоваровУслуг


В цикле получаю регистратор и ... что потом? Никогда такого не делал.
1 Капитан О
 
22.08.12
12:57
(0) остаточный регистр? НачалоПериода в параметры виртуальной таблицы запихай
2 Kashemir
 
22.08.12
12:59
Прочитай набор записей, измени что нужно и запиши взад.
3 Vladal
 
22.08.12
12:59
(1) да, остаткиОбороты. Это просто черновик, накидал, чтобы получить списко документов
4 Vladal
 
22.08.12
12:59
(2) Вот-вот. Это я  и искал.
5 ale-sarin
 
22.08.12
12:59
Я делаю так.

   Запрос.Текст =
   "ВЫБРАТЬ РАЗЛИЧНЫЕ
   |    ПлановыеНачисленияРаботниковОрганизаций.Регистратор
   |ИЗ
   |    РегистрСведений.ПлановыеНачисленияРаботниковОрганизаций КАК ПлановыеНачисленияРаботниковОрганизаций
   |ГДЕ
   |    ПлановыеНачисленияРаботниковОрганизаций.ВидРасчетаИзмерение = &ВидРасчета
   |    И ПлановыеНачисленияРаботниковОрганизаций.Организация = &Организация";
   
   Запрос.УстановитьПараметр("Организация", Организация);
   Запрос.УстановитьПараметр("ВидРасчета", ВРСтарый);
   
   Выборка = Запрос.Выполнить().Выбрать();
   Пока Выборка.Следующий() Цикл
       
       НаборЗаписей = РегистрыСведений.ПлановыеНачисленияРаботниковОрганизаций.СоздатьНаборЗаписей();
       НаборЗаписей.Отбор.Регистратор.Установить(Выборка.Регистратор);
       НаборЗаписей.Прочитать();
       ТЗ = НаборЗаписей.Выгрузить();
       СтрокиТЗ = ТЗ.НайтиСтроки(Новый Структура("ВидРасчетаИзмерение", ВРСтарый));
       
       Для Каждого Запись Из СТрокиТЗ Цикл
           Запись.ВидРасчетаИзмерение = ВРНовый;
       КонецЦикла;    
       
       НаборЗаписей.Загрузить(ТЗ);
       НаборЗаписей.Записать();
   КонецЦикла;
6 Капитан О
 
22.08.12
13:00
(3) не путай остатки и обороты. остаточный у тебя. НаборЗаписей посмотри в СП, я не помню тонкости
7 Vladal
 
22.08.12
13:01
(6) да, спасибо, я уже нашел )))

просто забыл метод.

// Очистим записи документа, если он был ранее проведен
Если Проведен Тогда
   Рег = РегистрыНакопления.ЗаказыПоставщикам;
   НаборЗаказыПоставщикам = Рег.СоздатьНаборЗаписей();
   НаборЗаказыПоставщикам.Отбор.Регистратор.Установить(Ссылка);
   НаборЗаказыПоставщикам.Прочитать();
   НаборЗаказыПоставщикам.Очистить();
   НаборЗаказыПоставщикам.Записать();
КонецЕсли;
8 sanja26
 
22.08.12
13:02
(0)у меня подписка. Обработкой запускаю процедуру из общего модуля подписки
Все нужные документы перепроводятся только по моему регистру, последовательность не сбивается вроде
9 Kashemir
 
22.08.12
13:02
(7) Если тебе нужно очистить - не нужно читать
10 Капитан О
 
22.08.12
13:02
НаборЗаказыПоставщикам.Прочитать();
тут лишнее, не?
11 Капитан О
 
22.08.12
13:03
(10 ну и НаборЗаказыПоставщикам.Очистить(); тоже
12 Kashemir
 
22.08.12
13:03
+(9) Этого хватит
  Рег = РегистрыНакопления.ЗаказыПоставщикам;
   НаборЗаказыПоставщикам = Рег.СоздатьНаборЗаписей();
   НаборЗаказыПоставщикам.Отбор.Регистратор.Установить(Ссылка);
   НаборЗаказыПоставщикам.Записать(Истина);
13 Vladal
 
22.08.12
13:06
(8) это хороший метод, но мне надо одноразово, слепить обработку для перепроведения документов за определенный период, когда надо применить новые правила, а новые документы и так бвигаю всё, как надо.\
14 Vladal
 
22.08.12
13:06
*а новые докуенты и так двигают всё, как надо
15 Vladal
 
22.08.12
13:06
(10) Ну из СП скопипастил )))
16 Песец
 
22.08.12
13:14
(0) "Изменить движения в регистре, не перепроводя документы"
(13) "мне надо одноразово, слепить обработку для перепроведения документов"
Так что же тебе надо-то?
Перепроведи все документы подряд и не парься. Последовательности запомни потом верни как было.
17 Vladal
 
22.08.12
13:23
(16) Вот я сначала "в лоб" перепроводил все документы универсальной обработкой, но - нихт! полезли ошибки. Мне только с краешку, один только регистр двинуть ....
18 Песец
 
23.08.12
10:03
(17) Если типов документов немного, тупо закоментить проведение по регистрам кроме нужного (и удаление движений по этим регистрам), перепровести, вернуть процедуру проведения взад. А лучше бы разобраться что за ошибки полезли и все же перепровести все документы.
19 DrShad
 
23.08.12
10:08
(18) а ник таки оправдывает, если ты закоментишь формирование движений это не спасет от очистки движений при перепроведении
20 ILM
 
гуру
23.08.12
10:44
(17) Может ошибки поправить?
21 Песец
 
24.08.12
08:44
(19) Читаем (18) по буквам: "закоментить проведение ... и удаление движений по этим регистрам"
22 Vladal
 
27.08.12
14:30
(18), (21) нет. Там при некоторых условиях есть движения. А вот движения старых документов - да, надо отремонтировать. Сделал так:

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

А после этого уже выполняю блок проверок и движений каждого вида документа для этого регистра.
23 Vladal
 
27.08.12
14:31
+(22) Просто если "закомментить движение и перепровести" двинутся другие регистры.
Вопрос решен. Решение в (22)
Независимо от того, куда вы едете — это в гору и против ветра!