Я делаю поступление оборудования на склад
```1c
    Процедура ОбработкаПроведения(Отказ, Режим)

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

    КонецПроцедуры
```
, потом передаю оборудование со склада сотруднику
```1c
    Процедура ОбработкаПроведения(Отказ, Режим)

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

    // 2. Формирование движений-расход регистра
    Движения.РегистрОстатка.Очистить();
    ВыборкаТаблица = РезультатЗапроса.Выбрать();
    Пока ВыборкаТаблица.Следующий() Цикл
    Движение = Движения.РегистрОстатка.ДобавитьРасход();
    Движение.Период = Дата;
    Движение.Оборудование = ВыборкаТаблица.Оборудование;
    Движение.Количество = ВыборкаТаблица.Количество;
    Движение.Склад = Склад;
    Движение.Сотрудник = Сотрудник;
    КонецЦикла;

    // 3. Запись движений в БД
    Движения.РегистрОстатка.Записывать = Истина;
    Движения.Записать();

    // 4. Запрос, получающий отрицательные остатки из регистра
    Запрос.Текст =
    "ВЫБРАТЬ
    | Остатки.Оборудование КАК Оборудование,
    | ПРЕДСТАВЛЕНИЕССЫЛКИ(Остатки.Оборудование) КАК ОборудованиеПредставление,
    | -Остатки.КоличествоОстаток КАК Дефицит
    |ИЗ
    | РегистрНакопления.РегистрОстатка.Остатки(
    | &МоментВремени,
    | Оборудование В
    | (ВЫБРАТЬ
    | Таблица.Оборудование КАК Оборудование
    | ИЗ
    | Таблица КАК Таблица)) КАК Остатки
    |ГДЕ
    | Остатки.КоличествоОстаток < 0";

    ГраницаКонтроля = Новый Граница(МоментВремени(), ВидГраницы.Включая);
    Запрос.УстановитьПараметр("МоментВремени", ГраницаКонтроля);
    РезультатЗапроса = Запрос.Выполнить();

    // 5. Вывод сообщений о недостатке товаров
    Если Не РезультатЗапроса.Пустой() Тогда
    Отказ = Истина;
    ВыборкаОшибки = РезультатЗапроса.Выбрать();
    Пока ВыборкаОшибки.Следующий() Цикл
    Сообщение = Новый СообщениеПользователю;
    Сообщение.Текст = "Оборудования "+ВыборкаОшибки.ОборудованиеПредставление+" недостаточно в количестве "+ВыборкаОшибки.Дефицит+" шт.";
    Сообщение.Сообщить();
    КонецЦикла;
    КонецЕсли;

    КонецПроцедуры
```
  , а теперь хочу реализовать возврат оборудования через приход у конкретного сотрудника (если это оборудование ему вообще выдавали) обратно, но знания не позволяют самому сделать это(в интернете ничего, что могло бы помочь не нашёл). Можете показать пример кода для данной задачи
---
блин, два регистра три документа.
Назову первый регистр ОборудованиеНаСкладах, второй ОборудованиеВЭксплуатации.
Так вот:
1. Приход на склад. Просто приход на регистр ОборудованиеНаСкладах.
2. Выдача сотруднику. Расход по регистру ОборудованиеНаСкладах с обязательным контролем остатка и Приход по регистру ОборудованиеВЭксплуатации.
3. Возврат от сотрудника. Расход по регистру ОборудованиеВЭксплуатации с контролем остатка и Приход по регистру ОборудованиеНаСкладах.
---
На данный момент у меня фигня получается. Происходит обычный приход
---
а нужен волшебный приход? Подробнее опишите.
---
Нужен приход от сотрудника на склад, чтоб нельзя было прибавить больше того, что я ему выдал. а получается просто приход на склад схожий с тем что делает вот это
```1c
    Процедура ОбработкаПроведения(Отказ, Режим)

    Движения.РегистрОстатка.Записывать = Истина;
    Для Каждого ТекСтрокаТаблица Из Таблица Цикл
    Движение = Движения.РегистрОстатка.Добавить();
    Движение.ВидДвижения = ВидДвиженияНакопления.Приход;
    Движение.Период = Дата;
    Движение.Оборудование = ТекСтрокаТаблица.Оборудование;
    Движение.Склад = Склад;
    Движение.Количество = ТекСтрокаТаблица.Количество;
    КонецЦикла;
```
---
Вот выдал я Ивану 2 монитора и захотел вернуть их, но получается что я могу хоть 100 мониторов на склад отправить
---
тогда очевидно нужен отдельный регистр где будет храниться выданное оборудование сотрудникам.
При передаче оборудования РегистрОстатка Расход, а на тот регистр Приход.
Рекомендую также в отдельном регистре сделать измерение, в котором будет храниться ссылка на документ передачи оборудования.
---
Ладно, пока попробую так сделать, может и получится что-то
---
в типовых так и реализовано. Вас что-то смущает в этой схеме?
Забыл сказать что измерение "Сотрудник" в РегистрОстатка будет лишним.
---
То что 1С-ом и пользуюсь только 4 неделю. Поэтому то, что для вас очевидная вещь, для меня будет мудрёным решением
---
пихать всё в один регистр путь в никуда
---
Вот по одному регистру происходит поступление оборудования и его выдача, а в другом получается будет возврат, а как сослаться в нем на сотрудника и на количество его оборудования
---
в одном регистре только приход и расход оборудования по складам.
Второй для хранения выданного оборудования по сотрудникам, приход - выдали сотруднику, расход - сотрудник вернул.
---
А разве выдаваемое со склада оборудование не должно быть расходом? Я к тому, что у меня работает так, что не сделав приход в документе "Приход" я не смогу выдать оборудование в документе "Выдача", а если есть нехватка оборудования на складе в момент выдачи то проведение не произойдёт и появится сообщение не хватает такого то кол-ва
---
блин, два регистра три документа.
Назову первый регистр ОборудованиеНаСкладах, второй ОборудованиеВЭксплуатации.
Так вот:
1. Приход на склад. Просто приход на регистр ОборудованиеНаСкладах.
2. Выдача сотруднику. Расход по регистру ОборудованиеНаСкладах с обязательным контролем остатка и Приход по регистру ОборудованиеВЭксплуатации.
3. Возврат от сотрудника. Расход по регистру ОборудованиеВЭксплуатации с контролем остатка и Приход по регистру ОборудованиеНаСкладах.
---
Вот теперь понял как примерно должно получится
---
У меня получилось, но теперь другой вопрос. Как прописать контроль сотрудника, в том смысле, что я могу возвращать оборудование, но не важно у кого до тех пор пока оборудование есть в регистреЭксплуатации
---
что значит не важно у кого? Очень даже важно. Какие измерения в вашем регистре?
---
я в том смысле, что можно возвращать оборудование даже у тех кому я его не выдавал. В консоли запросов показывает у сотрудника которому я не выдавал ничего отрицательные остатки
---
Просто я пока не знаю как написать контроль сотрудника. Вроде как ссылку на него нужна или как-то так. Как код должен выглядеть тогда?
---
ну аналогично как вы рисовали контроль перемещения со склада на сотрудника. Всё очень похоже только регистр другой.
---
я не знаю как и где это тут прописывать

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

    // 2. Формирование движений-расход регистра
    Движения.РегистрХранения.Очистить();
    ВыборкаВозвращает = РезультатЗапроса.Выбрать();
    Пока ВыборкаВозвращает.Следующий() Цикл
    Движение = Движения.РегистрХранения.ДобавитьРасход();
    Движение.Период = Дата;
    Движение.Оборудование = ВыборкаВозвращает.Оборудование;
    Движение.Количество = ВыборкаВозвращает.Количество;
    Движение.Склад = Склад;
    Движение.Сотрудник = Сотрудник;
    КонецЦикла;

    // 3. Запись движений в БД
    Движения.РегистрХранения.Записывать = Истина;
    Движения.Записать();

    // 4. Запрос, получающий отрицательные остатки из регистра
    Запрос.Текст =
    "ВЫБРАТЬ
    | Остатки.Оборудование КАК Оборудование,
    | ПРЕДСТАВЛЕНИЕССЫЛКИ(Остатки.Оборудование) КАК ОборудованиеПредставление,
    | -Остатки.КоличествоОстаток КАК Дефицит
    |ИЗ
    | РегистрНакопления.РегистрХранения.Остатки(
    | &МоментВремени,
    | Оборудование В
    | (ВЫБРАТЬ
    | Возвращает.Оборудование КАК Оборудование
    | ИЗ
    | Возвращает КАК Возвращает)) КАК Остатки
    |ГДЕ
    | Остатки.КоличествоОстаток < 0";

    ГраницаКонтроля = Новый Граница(МоментВремени(), ВидГраницы.Включая);
    Запрос.УстановитьПараметр("МоментВремени", ГраницаКонтроля);
    РезультатЗапроса = Запрос.Выполнить();

    // 5. Вывод сообщений о недостатке товаров
    Если Не РезультатЗапроса.Пустой() Тогда
    Отказ = Истина;
    ВыборкаОшибки = РезультатЗапроса.Выбрать();
    Пока ВыборкаОшибки.Следующий() Цикл
    Сообщение = Новый СообщениеПользователю;
    Сообщение.Текст = "Оборудования "+ВыборкаОшибки.ОборудованиеПредставление+" недостаточно в количестве "+ВыборкаОшибки.Дефицит+" шт.";
    Сообщение.Сообщить();
    КонецЦикла;
    КонецЕсли;

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

    //}}__КОНСТРУКТОР_ДВИЖЕНИЙ_РЕГИСТРОВ
    КонецПроцедуры
```
---
где в п.4 проверка на сотрудника?
Кроме того, при возврате можно не рисовать расход в регистр чтобы понять будет минус или нет.