Необходимо добавить запись в регистр сведений "Статусы документов" при изменении значения реквизита "Статус" и проведении в документах "Приходная накладная" и "Расходная накладная"
В регистре есть измерение "Документ" тип составной -ссылка на документы "Приходной и расходной накладной". Ресурс "статус"
Данный код работает только на один документ, если передавать в параметры и проверять только один, на два документа не работает. Может кто знает как решить? Спасибо за помощь

```1c
    Процедура ЗаписатьСтатусДокумента(ПриходнаяНакладная,РасходнаяНакладная,СтатусыДокументов) Экспорт
    Запрос= Новый Запрос;
    Запрос.Текст=
    "ВЫБРАТЬ
    | СтатусыДокументовСрезПоследних.Статус КАК Статус,
    | СтатусыДокументовСрезПоследних.Документ КАК Документ
    |ИЗ
    | РегистрСведений.СтатусыДокументов.СрезПоследних КАК СтатусыДокументовСрезПоследних";

    Выборка=Запрос.Выполнить().Выбрать();
    ПОКА Выборка.Следующий() ЦИКЛ
    Если Не(ПриходнаяНакладная.Объект.Ссылка=Выборка.Документ И ПриходнаяНакладная.Объект.Статус=Выборка.Статус) Тогда
    Менеджер= РегистрыСведений.СтатусыДокументов.СоздатьМенеджерЗаписи();
    Менеджер.Период=ТекущаяДата();
    Менеджер.Документ=ПриходнаяНакладная.Объект.Ссылка;
    Менеджер.Статус=ПриходнаяНакладная.Объект.Статус;
    Менеджер.Записать();
    Иначе
    Если Не(РасходнаяНакладная.Объект.Ссылка=Выборка.Документ И РасходнаяНакладная.Объект.Статус=Выборка.Статус) Тогда
    Менеджер= РегистрыСведений.СтатусыДокументов.СоздатьМенеджерЗаписи();
    Менеджер.Период=ТекущаяДата();
    Менеджер.Документ=РасходнаяНакладная.Объект.Ссылка;
    Менеджер.Статус=РасходнаяНакладная.Объект.Статус;
    Менеджер.Записать();
    КонецЕсли;
    КонецЕсли;
    КонецЦикла;
    КонецПроцедуры
```

Ошибка в документе Расходная накладная- Значение не является значением объектного типа (Объект)
 Если Не(ПриходнаяНакладная.Объект.Ссылка=Выборка.Документ ...
---
Утром же функцию написали. Надо было в том же духе.
Я уже пол Лосинки объездил, а Вы все мучаетесь. Страшно смотреть
Вот Ваши функции и процедуры

```1c
    //Получаем Статус. Не важно приходная или расходная
    Функция ПолучитьСтатусДокумента(Документ) Экспорт
    Запрос = Новый Запрос;
    Запрос.УстановитьПараметр("Дата",ТекущаяДата());
    Запрос.УстановитьПараметр("Документы",Документ);
    Запрос.Текст ="ВЫБРАТЬ Статус
    |ИЗ РегистрСведений.СтатусыДокументов.СрезПоследних(&Дата, Документ = &Документ)";
    Выборка = Запрос.Выполнить().Выбрать();
    Если Выборка.Следующий() Тогда
    Возврат Выборка.Стутус;
    КонецЕсли;
    Возврат Неопределено;
    КонецФункции
    //Записываем статус документа
    Процедура ЗаписатьСтатусДокумента(Документ, Статус) Экспорт
    Менеджер = РегистрыСведений.СтатусыДокументов.СоздатьМенеджерЗаписи();
    Менеджер.Период = ТекущаяДата();
    Менеджер.Документ = Документ;
    Менеджер.Статус = Статус;
    Менеджер.Записать();
    КонецПроцедуры
```

Ну и в модуле документов Приходая и Расходная накладная, в зависимости от задачи.в ОбработкаПроведения или ПриЗаписи

```1c
    Процедура ПриЗаписи(Отказ)
    Если не Статус = ПолучитьСтатусДокумента(Ссылка) Тогда
    ЗаписатьСтатусДокумента(Ссылка);
    КонецЕсли;
    КонецПроцедуры
```

Вуаля. Можно отдыхать
---
ПриходнаяНакладная.Объект.Ссылка
Зачем Объект? У объекта ПриходнаяНакладная нет свойства Объект, есть ЭтотОбъект. Но и он не нужен, ведь проверяется Ссылка. Просто:
ПриходнаяНакладная.Ссылка и далее аналогично без Объект.
То же относится и к РасходнаяНакладная.
---
Ошибка
Значение не является значением объектного типа (Ссылка)
---
тогда смотрите, что вообще передаете. Подозреваю, что Неопределено. Тогда на него и проверяйте:

```1c
    Если ПриходнаяНакладная <> Неопределено И Не(ПриходнаяНакладная.Ссылка=Выборка.Документ И ПриходнаяНакладная.Статус=Выборка.Статус) Тогда
```

Правда сам код просит рефакторинга.
---
Есть подвижки, теперь регистр записывает, но записывает то что уже есть, то есть каждое проведение документа
---
он записывает полностью то, что указано логикой кода. Она именно такая. Потому и сказал, что рефакторинг точно нужен, да и логику менять нужно.
Сами смотрите:
1. В запросе выбираются все записи из регистра.
2. Если запись не соответствует документу или статусу, то создать запись по документу и статусу. Другими словами, для всех записей создать запись по документу и статусу. Так как эта запись одинаковая, то будет просто перезапись. И столько раз, сколько записей в регистре.
---
Утром же функцию написали. Надо было в том же духе.
Я уже пол Лосинки объездил, а Вы все мучаетесь. Страшно смотреть
Вот Ваши функции и процедуры

```1c
    //Получаем Статус. Не важно приходная или расходная
    Функция ПолучитьСтатусДокумента(Документ) Экспорт
    Запрос = Новый Запрос;
    Запрос.УстановитьПараметр("Дата",ТекущаяДата());
    Запрос.УстановитьПараметр("Документы",Документ);
    Запрос.Текст ="ВЫБРАТЬ Статус
    |ИЗ РегистрСведений.СтатусыДокументов.СрезПоследних(&Дата, Документ = &Документ)";
    Выборка = Запрос.Выполнить().Выбрать();
    Если Выборка.Следующий() Тогда
    Возврат Выборка.Стутус;
    КонецЕсли;
    Возврат Неопределено;
    КонецФункции
    //Записываем статус документа
    Процедура ЗаписатьСтатусДокумента(Документ, Статус) Экспорт
    Менеджер = РегистрыСведений.СтатусыДокументов.СоздатьМенеджерЗаписи();
    Менеджер.Период = ТекущаяДата();
    Менеджер.Документ = Документ;
    Менеджер.Статус = Статус;
    Менеджер.Записать();
    КонецПроцедуры
```

Ну и в модуле документов Приходая и Расходная накладная, в зависимости от задачи.в ОбработкаПроведения или ПриЗаписи

```1c
    Процедура ПриЗаписи(Отказ)
    Если не Статус = ПолучитьСтатусДокумента(Ссылка) Тогда
    ЗаписатьСтатусДокумента(Ссылка);
    КонецЕсли;
    КонецПроцедуры
```

Вуаля. Можно отдыхать
---
Спасибо) только регистр записывает статус, но не записывает сам документ
 Если не Объект.Статус = ОбщийМодуль1.ПолучитьСтатусДокумента1(,Объект.Ссылка) Тогда
  ОбщийМодуль1.ЗаписатьСтатусДокумента(Объект.Ссылка,Объект.Статус);
 КонецЕсли;
---
Подозреваю, что Вы записываете в модуле формы, да еще и нового документа. Естественно ссылка еще пустая. Надо в модуле объекта
---
Написала в модуле объекта, новый документ все равно не отображается только статус
---
Все спасибо, нашла ошибку)
---
Ай. Не люблю я Мененджер записи, тупой он. Прочитать надо, потом снова ключи устанавливать. Ну его в баню. Давай набором

```1c
    Процедура ЗаписатьСтатусДокумента(Документ, Статус) Экспорт
    Набор= РегистрыСведений.СтатусыДокументов.СоздатьНаборЗаписей();
    Набор.Отбор.Документ .Установить(Документ);
    Запись = Набор.Добавить();
    Запись .Период= ТекущаяДата();
    Запись .Статус = Статус;
    Набор.Записать();
    КонецПроцедуры
```
---
Спасибо, все работает)
---
Обращайтесь.
Кстати в ПолучитьСтатусДокумента1 достаточно одного параметра, работать будет и так. см (6).
Почему ЗаписатьСтатусДокумента 2 параметра, когда можно было обойтись одним и написать через точку? Лишний запрос к базе ни ч чему
---
Действительно, начала понимать как работать с параметрами