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

Тема в разделе "1C и всё что с ней связано", создана пользователем Elm, 12 ноя 2009.

Статус темы:
Закрыта.
  1. Elm

    Elm Гость

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

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

    vitfil IT-интегратор

    Регистрация:
    2 апр 2004
    Сообщения:
    2.070
    Симпатии:
    0
    Можно исправить непосредственно в таблицах движений и итогов регистра с последующим пересчетом регистра. Ну и, естественно, необходимо исправить реквизит в самом документе (программно).
     
  3. Elm

    Elm Гость

    Вы пишите "Можно исправить непосредственно в таблицах движений и итогов регистра " - можно подрбнее узнать как это делается. Ситуация такая - в документ добавили новый реквизит (Исполнитель), а в регистре и модуле проведения - ничего. Теперь появилась необходимость получения отчета по этому реквизиту через регисты, а перепроводить документы нельзя.
     
  4. KiR

    KiR НЕ шибка опытный програмер)
    1C Team

    Регистрация:
    11 сен 2007
    Сообщения:
    1.581
    Симпатии:
    0
    НУ во первых нужно в любом случае добавить данный реквизит и в регистр. ну и написать обработочку которая бы заполняла этот реквизит. Кстати, модуль проведения тоже стоит дописать учитывая наличие данного реквизита чтобы все последующие доки сразу правильно проводились
     
  5. Elm

    Elm Гость

    Реквизит в регистр добавила, модуль проведения дописала. Обработкой (нсколько мне известно) содержимое регистра не поменяешь. Поэтому создала новый документ с модулем проведения, который описан ниже. но он создает новые записи регистра, а не меняет существующие.
     
  6. KiR

    KiR НЕ шибка опытный програмер)
    1C Team

    Регистрация:
    11 сен 2007
    Сообщения:
    1.581
    Симпатии:
    0
    может я конечно ошибаюсь, но имхо данное высказывание ошибочно! просто внешней обработкой делается отбор конкретных доков и их записей в регисте. затем каждая запись в регистре меняется соотвественно записи в доке.
     
  7. vitfil

    vitfil IT-интегратор

    Регистрация:
    2 апр 2004
    Сообщения:
    2.070
    Симпатии:
    0
    Elm
    База ДБФ или СКЛ?

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

    Кстати, добавлять реквизит было вовсе и не обязательно.
    Когда получаете движение в запросе, можно получить ТекущийДокумент, который сделал движение, а из документа получить Исполнителя. Данных для отчета хватает.
     
  8. Elm

    Elm Гость

    База ДБФ.
    Реквизит добавлен в табличную часть самописного документа "Заявки". Это не автор документа.

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

    vitfil IT-интегратор

    Регистрация:
    2 апр 2004
    Сообщения:
    2.070
    Симпатии:
    0
    Elm
    Ну вы же программист. Неужели нет возможности посмотреть структуру таблиц интересующего вас регистра, написать обработку, которая запишет в нужное поле нужное значение? Структуру таблиц можете посмотреть в файле 1cv7.dd
     
  10. Elm

    Elm Гость

    Вы имеете ввиду работу с XBase?
     
  11. vitfil

    vitfil IT-интегратор

    Регистрация:
    2 апр 2004
    Сообщения:
    2.070
    Симпатии:
    0
    Elm
    Бог с ним, пусть будет ХBase.
     
  12. Elm

    Elm Гость

    А какие еще есть варианты?
     
  13. Hryv

    Hryv Гость

    Недавно столкнулся с подобной проблемой

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

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

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


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

    vitfil IT-интегратор

    Регистрация:
    2 апр 2004
    Сообщения:
    2.070
    Симпатии:
    0
    Возможно, конечно.
    Я даже добавлял в конфигурацию новый регистр и записывал в него движения по документам за год. Без проведения документов. Запись осуществилась минут за 30. Потом пересчет именно этого регистра (еще минут 10). Правда, это было под СКЛ на нормальном серваке.
     
  15. Buster

    Buster Гость

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

    vitfil IT-интегратор

    Регистрация:
    2 апр 2004
    Сообщения:
    2.070
    Симпатии:
    0
    "Книгу я не читал, но скажу..." (с) не мое.
    Вы даже не представляете, насколько вы заблуждаетесь. Стандартно семерка не позволяет изменять движения документа по регистрам без перепроведения документа.
     
  17. vbs

    vbs Well-Known Member

    Регистрация:
    18 фев 2007
    Сообщения:
    1.708
    Симпатии:
    3
    Опередил - я тоже сразу про Пастернака вспомнил :newconfus:
     
  18. vitfil

    vitfil IT-интегратор

    Регистрация:
    2 апр 2004
    Сообщения:
    2.070
    Симпатии:
    0
    vbs
    А я все вспоминал, как его его зовут!
     
Загрузка...
Статус темы:
Закрыта.

Поделиться этой страницей