ОБСУЖДЕНИЕ

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

17 ответов 9,2 тыс.
AI-выжимка обсуждения скоро

Краткие тезисы обсуждения со ссылками на ключевые ответы появятся здесь.

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

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

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

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

Вы пишите "правим таблицы, а потом запускаем пересчет регистров" - что такое правим таблицы и как это делается?
 
Elm
Ну вы же программист. Неужели нет возможности посмотреть структуру таблиц интересующего вас регистра, написать обработку, которая запишет в нужное поле нужное значение? Структуру таблиц можете посмотреть в файле 1cv7.dd
 
Вы имеете ввиду работу с XBase?
 
Elm
Бог с ним, пусть будет ХBase.
 
А какие еще есть варианты?
 
Недавно столкнулся с подобной проблемой

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

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

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


Надо отметить, что у меня не был установлен флаг ''Автоматическое удаление движений'' и использовалась ОчиститьДвижения()
За счет этого п.2 выполнить было несложно
А иначе, я даже не уверен возможно ли (надо подумать)
 
Возможно, конечно.
Я даже добавлял в конфигурацию новый регистр и записывал в него движения по документам за год. Без проведения документов. Запись осуществилась минут за 30. Потом пересчет именно этого регистра (еще минут 10). Правда, это было под СКЛ на нормальном серваке.
 
Я может и заблуждаюсь насчет 7ки... Но думаю, там точно также как 8ке... (просто никогда в 7ке не программил). По моему все достаточно просто...
Отбираем документы, у которых надо заменить движения, делаем обход по движениям (скорее всего там есть ДокументОбъект.Движения (ну или что-то типо того)) этого документа по конкретному регистру, и изменяем свойство(а), и записываем...
По моему ничего сложного... ) Как пишется в 7ке не знаю...
 
Я может и заблуждаюсь насчет 7ки..
"Книгу я не читал, но скажу..." (с) не мое.
Вы даже не представляете, насколько вы заблуждаетесь. Стандартно семерка не позволяет изменять движения документа по регистрам без перепроведения документа.
 
vbs
А я все вспоминал, как его его зовут!
 
Статус
Закрыто для дальнейших ответов.