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

```1c
    Процедура ПередЗаписью(Отказ, РежимЗаписи, РежимПроведения)
    Если Ссылка.НужныйРеквизит <> НужныйРеквизит Тогда
    Набор = РегистрыНакопления.Регистр.СоздатьНаборЗаписей();
    Нов.Регистратор = Ссылка;//вот тут ссылки нет
```

В процедуре ПриЗаписи нет старого значения реквизита.

```1c
    Процедура ПриЗаписи(Отказ)
    Если Ссылка.НужныйРеквизит <> НужныйРеквизит Тогда // здесь все одинаково в любом случае, потому документ уже записан
    Набор = РегистрыНакопления.Регистр.СоздатьНаборЗаписей();
    Нов.Регистратор = Ссылка;
```

Уже несколько раз писала в чем сложность то.
---
Похожий механизм есть для контактной информации в карточке контрагента. Можно также обойтись размещением набора записей нужного регистра на форме. Лучше попробовать не связывать запись двух объектов, но если это необходимое условие - лучше продумать все варианты условий записи.
---
мне нужно чтобы записывались записи в регистр при определенных условиях. При смене одного единственного реквизита.
---
если же вам надо проверять условие, в котором надо сравнивать и предыдущее и текущее значение этого реквизита А - тогда вам нужна сперва процедура "Перед записью" модуля объекта, там предыдущее значение сравниваете с текущим
---
Данные которого только на форме? Если нет, тогда к форме привязываться не нужно. Если да, тогда в процедуре ПередЗаписью нужно проверять, изменен ли реквизит. Затем либо записать изменения в регистр, а про отказе записи вернуть предыдущий набор записей регистра. Либо передать в процедуру ПослеЗаписи переменную со значением, по которому можно узнать, изменен ли реквизит и затем сделать нужную запись в регистр.
---
Перед записью не подходит, потому что если документ новый, то ссылки еще нет, а в регистр нужна и ссылка. Наверное да, нужно в процедуру после записи какую то переменную передавать. А как это можно сделать? Параметр какой то?
---
Ссылку можно установить, есть метод УстановитьСсылкуНового(). Переменную можно передавать, которая НаКлиенте будет хранить значение, пока форма открыта
---
А можно как в процедуру при записи передавать параметр с определенным значением? Например да или нет. И в зависимости от него уже делать запись в регистр или нет.
---
ПриЗаписи нет для формы, есть только для объекта
---
да, верно, тогда ПриЗаписи
---
В итоге сделала так - в процедуре передзаписью получаю старое значение реквизита, записываю его значение в ДополнительныеСвойства объекта. В процедуре "ПриЗаписи" получаю обратно.
Что то другое, более простое не нашла как сделать.
---
вполне хороший способ, главное, что Вы его нашли :)