как можно изменить содержимое регистра

  • Автор темы Elm
  • Дата начала
Статус
Закрыто для дальнейших ответов.
E
#1
Подскажите пожалуйста как можно изменить содержимое регистра (измерение "Исполнитель") документа не перепроводив этот документ, а создав и проведя новый документ. Я делаю так:

РегЗаявка = СоздатьОбъект("Регистр.Заявки");
РегЗаявка.УстановитьФильтр // выбираю нужную запись
РегЗаявка.ВыбратьДвижения(ДокЗаявка, ДатаДок);
Пока РегЗаявка.ПолучитьДвижение() = 1 Цикл
Регистр.Заявки.УстановитьАтрибут("Исполнитель",НовыйИсполнитель);
Регистр.Заявки.ДвижениеПриходВыполнить();
конеццикла;
Но тогда создаются новый записи регистра, а не меняются существующие.
 

vitfil

IT-интегратор
02.04.2004
2 062
0
#2
Можно исправить непосредственно в таблицах движений и итогов регистра с последующим пересчетом регистра. Ну и, естественно, необходимо исправить реквизит в самом документе (программно).
 
E
#3
Вы пишите "Можно исправить непосредственно в таблицах движений и итогов регистра " - можно подрбнее узнать как это делается. Ситуация такая - в документ добавили новый реквизит (Исполнитель), а в регистре и модуле проведения - ничего. Теперь появилась необходимость получения отчета по этому реквизиту через регисты, а перепроводить документы нельзя.
 

KiR

НЕ шибка опытный програмер)
11.09.2007
1 581
0
#4
НУ во первых нужно в любом случае добавить данный реквизит и в регистр. ну и написать обработочку которая бы заполняла этот реквизит. Кстати, модуль проведения тоже стоит дописать учитывая наличие данного реквизита чтобы все последующие доки сразу правильно проводились
 
E
#5
Реквизит в регистр добавила, модуль проведения дописала. Обработкой (нсколько мне известно) содержимое регистра не поменяешь. Поэтому создала новый документ с модулем проведения, который описан ниже. но он создает новые записи регистра, а не меняет существующие.
 

KiR

НЕ шибка опытный програмер)
11.09.2007
1 581
0
#6
Обработкой (нсколько мне известно) содержимое регистра не поменяешь
может я конечно ошибаюсь, но имхо данное высказывание ошибочно! просто внешней обработкой делается отбор конкретных доков и их записей в регисте. затем каждая запись в регистре меняется соотвественно записи в доке.
 

vitfil

IT-интегратор
02.04.2004
2 062
0
#7
Elm
База ДБФ или СКЛ?

В любом случае, технология следующая: правим таблицы, а потом запускаем пересчет регистров.

Кстати, добавлять реквизит было вовсе и не обязательно.
Когда получаете движение в запросе, можно получить ТекущийДокумент, который сделал движение, а из документа получить Исполнителя. Данных для отчета хватает.
 
E
#8
База ДБФ.
Реквизит добавлен в табличную часть самописного документа "Заявки". Это не автор документа.

Вы пишите "правим таблицы, а потом запускаем пересчет регистров" - что такое правим таблицы и как это делается?
 

vitfil

IT-интегратор
02.04.2004
2 062
0
#9
Elm
Ну вы же программист. Неужели нет возможности посмотреть структуру таблиц интересующего вас регистра, написать обработку, которая запишет в нужное поле нужное значение? Структуру таблиц можете посмотреть в файле 1cv7.dd
 
H
#13
Недавно столкнулся с подобной проблемой

В двух словах опишу:
Есть документ, он делает движения по 5 регистрам
В один из регистров добавил измерение и соответственно надо было перепровести (изменить записи в этом регистре)
Противопоказаний на перепроведение у меня не было, не считая того, что перепроведение за 4 месяца (именно столько надо было) выполнялось бы несколько дней непрерывно.

Решение:
1. Завел глобальную переменную, допустим "Флаг", при начале работы Флаг=0
2. В модуле документа сделал изменения: если Флаг=1, то перепроводить только по нужному мне регистру, иначе по всем
3. Сделал обработку, которая выбрала все доки, и перед проведением каждого устанавливала Флаг=1, а после проведения Флаг=0

В итоге за 1 секунду проводилось около 10 документов и все отработало минут за 10


Надо отметить, что у меня не был установлен флаг ''Автоматическое удаление движений'' и использовалась ОчиститьДвижения()
За счет этого п.2 выполнить было несложно
А иначе, я даже не уверен возможно ли (надо подумать)
 

vitfil

IT-интегратор
02.04.2004
2 062
0
#14
Возможно, конечно.
Я даже добавлял в конфигурацию новый регистр и записывал в него движения по документам за год. Без проведения документов. Запись осуществилась минут за 30. Потом пересчет именно этого регистра (еще минут 10). Правда, это было под СКЛ на нормальном серваке.
 
B

Buster

#15
Я может и заблуждаюсь насчет 7ки... Но думаю, там точно также как 8ке... (просто никогда в 7ке не программил). По моему все достаточно просто...
Отбираем документы, у которых надо заменить движения, делаем обход по движениям (скорее всего там есть ДокументОбъект.Движения (ну или что-то типо того)) этого документа по конкретному регистру, и изменяем свойство(а), и записываем...
По моему ничего сложного... ) Как пишется в 7ке не знаю...
 

vitfil

IT-интегратор
02.04.2004
2 062
0
#16
Я может и заблуждаюсь насчет 7ки..
"Книгу я не читал, но скажу..." (с) не мое.
Вы даже не представляете, насколько вы заблуждаетесь. Стандартно семерка не позволяет изменять движения документа по регистрам без перепроведения документа.
 
Статус
Закрыто для дальнейших ответов.