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

```1c
    Если ЗначениеЗаполнено(Строка.Размещение) Тогда
    ЗаполнРазмещение.Добавить("Заполнено");
    КонецЕсли;
```

Где ЗаполнРазмещение - СписокЗначений, после чего

```1c
    Если ЗаполнРазмещение.Количество()=0 Тогда
    ЭтотОбъект.Дата = ТекущаяДата();
    ДействияФормыДействиеЗаполнитьИПровести(Неопределено);
    КонецЕсли;
```

(54) у нас заявка может формироваться сегодня.а резерв бывает через день
Вот о чём и речь, удобнее если для резерва нужно ввести документ РезервированиеТовара, который можно хоть 25 раз перепровести и всё что угодно делать со строками в нём, а при проведении его можно и получить() объект заказ на основании которого он создан, и его отредактировать нужные реквизиты.
---
Пожалуйста, читайте, то, что написано, требуется в запросах поставить фильтр по добавленному признаку, НО

если решить Вашим способом, то вставка в одном месте, где устанавливается параметр запросов "МассивНоменклатуры", а именно результат

 // - Было

```1c
    //ЗапросСвободныйОстаток.УстановитьПараметр("МассивНоменклатуры", МассивНоменклатуры);
```

 // - Стало

```1c
    МассивНоменклатурыДляРезерва = Новый Массив;
    Для каждого ЭлементМассива Из МассивНоменклатуры Цикл
    Если ЗначениеЗаполнено(ЭлементМассива) И ЭлементМассива._НеРезирвировать Тогда
    // пропустим
    Продолжить;
    КонецЕсли;
    МассивНоменклатурыДляРезерва.Добавить(ЭлементМассива);
    КонецЦикла;
    ЗапросСвободныйОстаток.УстановитьПараметр("МассивНоменклатуры", МассивНоменклатурыДляРезерва);
```

Важно!!! то, что описано, это пример - и может работать только для документов, которые обращаются к данной процедуре, т.е. надо проверить (протестировать) - для всех документов, которые включены в механизм "резервирования и размещения" и если нет то реализуем по подобию
---
Самый простой способ: скорректировать обработку проведения, там поставить фильтр по реквизиту "Не резервировать". Тогда движения по резерву не создадутся.
Но, однако, может быть "непонятка" у менеджеров - как так, товар поставили резервировать, заполнили склад в ТЧ товары, а товар не зарезервировался?

Правильно нужно дорабатывать форму документов и резервирования.
1) товары, которые не нужно резервировать и у них стоит флажок отмечать отдельно
2) в резервировании товара не давать заполнять колонку "Размещение", если стоит флажок не резервировать.
---
ну да,надо будет учитывать это,чтобы не заполнялось
---
я не могу понять просто,где изменять конфигурацию в документе каком?!
---
в документе каком?!
В обработке проведения документа (в модуле документа) и в форме документа.
---
Менеджеры уже будут заранее предупреждены то эти позиции товаров ни под кого резервироваться не будут, так как они в производстве ещё и вечером для всех будет накомплектовано.
Подскажите пожалуйста,куда код вставить? и как правильно оформить,ниже прикрепил код
---
не вариант.
Пришел новый менеджер и объясняй все по-новому.
Должно быть выделение таких вот "нерезервируемых" позиций. А для этого надо какие-нибудь отметки ставить в таблице товаров, наподобие значка "Сверх заказа" в реализации товаров и услуг в УТ11.
---
хорошо,как вариант подсвечивать буду их жирным. спасибо
---
Если не изменять конфигурацию, то не заполнять соответствующие колонки в таб. частях документов, которые отвечают за резервирование и размещение

Например: Резервирование товаров под заказ на складе и размещение в заказах

При оформлении заказа покупателя товары можно зарезервировать под этот заказ из текущего свободного остатка на любом из складов (оптовом или розничном) или разместить в других заказах - заказах поставщикам, внутренних заказах. Склад для резервирования или заказ для размещения указывается в табличной части в колонке «Размещение», таким образом, по одному заказу покупателя товар может быть зарезервирован на нескольких складах и размещен в нескольких заказах.
-----------
Есди изменять конфигурацию - кнопка "Заполнить и провести" - автоматическое "резервирование" и "размещение", то например

в запросах процедуры "Заказ_ЗаполнитьТабличныеЧастиВозможнымРазмещением" сделать (прописать код) фильтр по галочке "не резервировать" карточки номенклатуры (как товар, так и тара) ,

т.е. не будет выполняться заполнение соответсвующей колонки, которая отвечает за резервирование и размещение
---
я вас понял. но не нашёл такую процедуру: "Заказ_ЗаполнитьТабличныеЧастиВозможнымРазмещением"
 в форме: ФормаВыбораПараметровАвторезервирования.
---
нашёл через в общем модуле управление заказами, сейчас попробую там нахимичить)))
---
В помощь - пройдитесь по отладчику - из формы "ФормаВыбораПараметровАвторезервирования", когда форма закрывается
---
повторюсь
---
я понял, но мне нужна кнопка ОК из документа ЗаказаПокупателя.
---
Если кнопка "ОК" самого документа "Заказ покупателя", то это стандартная кнопка, у которой нет заданного программистом обработчика, а есть стандартные (платформенные) обработчики событий, такие как "ПередЗаписью", "ОбработкаПроведения" (если документ имеет свойство "Проведения"), "ПриЗаписи" в модуле объекта (документа) и похожие обработчики в модуле формы документа - которые необходимо определить, либо в модуле документа, либо в модуле формы документа.
---
ок,спасибо большое,я понял. буду пробовать)
---
Возможно у меня релиз УТ 10.3 - старый
---
рад был помочь
---
спасибо огромное,очень помогли,но пока ещё не сделал я там ничего)))
(10.3.19.4) у меня
---
```1c
    Процедура Заказ_ЗаполнитьТабличныеЧастиВозможнымРазмещением(Параметры, Товары, ВозвратнаяТара) Экспорт
    Авторезервирование = Параметры.Авторезервирование;
    Авторазмещение = Параметры.Авторазмещение;

    Если НЕ Авторезервирование И НЕ Авторазмещение Тогда
    Возврат;
    КонецЕсли;

    Заказ = Параметры.Заказ;
    ЗаказСсылка = Заказ.Ссылка;
    ЕстьСкладЗаказчик = Ложь;
    ЕстьПредпочтительноеРазмещение = Ложь;
    ЕстьМассивСтатусовПартий = Ложь;
    МассивСтатусовПартий = Новый Массив;
    ЗаполнятьСуммы = ложь;
    СкладПоУмолчанию = УправлениеПользователями.ПолучитьЗначениеПоУмолчанию(глЗначениеПеременной("глТекущийПользователь"), "ОсновнойСклад");
    СтратегияАвторезервирования = Параметры.СтратегияАвторезервированияПоЗаказам;
    ОбособленныйУчет = Параметры.Свойство("ОбособленныйУчет") И Параметры.ОбособленныйУчет;

    Если НЕ ЗначениеЗаполнено(СтратегияАвторезервирования) Тогда
    СтратегияАвторезервирования = Перечисления.СтратегииАвторезервированияНоменклатуры.СначалаВЗаказахПоставщикамПотомНаСкладах;
    КонецЕсли;

    ЗапросСвободныйОстаток = Новый Запрос;

    Если ТипЗнч(ЗаказСсылка)=Тип("ДокументСсылка.ЗаказПокупателя") Тогда
    СкладГруппа = Заказ.СкладГруппа;
    ЗапросСвободныйОстаток.УстановитьПараметр("ПредпочтительноеРазмещение", ?(ТипЗнч(СкладГруппа) = Тип("СправочникСсылка.Склады"), СкладГруппа, СкладПоУмолчанию));
    ЕстьПредпочтительноеРазмещение = Истина;
    ЗапросСвободныйОстаток.УстановитьПараметр("СкладЗаказчик", Неопределено);
    Если ЗначениеЗаполнено(СкладГруппа)
    И ТипЗнч(СкладГруппа) = Тип("СправочникСсылка.ГруппыДоступностиСкладов") Тогда
    ГруппаДоступностиСкладов = СкладГруппа;
    Иначе
    ГруппаДоступностиСкладов = УправлениеПользователями.ПолучитьЗначениеПоУмолчанию(глЗначениеПеременной("глТекущийПользователь"), "ГруппаДоступностиСкладов");
    КонецЕсли;
    ЗаполнятьСуммы = истина;
    ДатаОтгрузки = Заказ.ДатаОтгрузки;
    ИначеЕсли ТипЗнч(ЗаказСсылка)=Тип("ДокументСсылка.ВнутреннийЗаказ") Тогда
    Если Заказ.ВидЗаказа = Перечисления.ВидыВнутреннегоЗаказа.НаСклад Тогда
    ЗапросСвободныйОстаток.УстановитьПараметр("СкладЗаказчик", Заказ.Заказчик);
    ЗапросСвободныйОстаток.УстановитьПараметр("ПредпочтительноеРазмещение", Неопределено);
    ЕстьСкладЗаказчик = Истина;
    Иначе
    ЗапросСвободныйОстаток.УстановитьПараметр("СкладЗаказчик", Неопределено);
    ЗапросСвободныйОстаток.УстановитьПараметр("ПредпочтительноеРазмещение", Неопределено);
    КонецЕсли;
    ГруппаДоступностиСкладов = УправлениеПользователями.ПолучитьЗначениеПоУмолчанию(глЗначениеПеременной("глТекущийПользователь"), "ГруппаДоступностиСкладов");
    МассивСтатусовПартий.Добавить( Перечисления.СтатусыПартийТоваров.Купленный);
    МассивСтатусовПартий.Добавить( Перечисления.СтатусыПартийТоваров.ВозвратнаяТара);
    ЕстьМассивСтатусовПартий = истина;
    ДатаОтгрузки = Заказ.ДатаОтгрузки;
    Иначе
    Возврат;
    КонецЕсли;
    ЗапросСвободныйОстаток.УстановитьПараметр("ДатаОтгрузки", ?(НЕ ЗначениеЗаполнено(ДатаОтгрузки), Заказ.Дата, ДатаОтгрузки));
    ЗапросСвободныйОстаток.УстановитьПараметр("ДокументСсылка", Заказ);
    ЗапросСвободныйОстаток.УстановитьПараметр("Организация", Заказ.Организация);
    ЗапросСвободныйОстаток.УстановитьПараметр( "СтатусПартии", МассивСтатусовПартий);
    флРезервированиеТоваров = ложь;
    Если Параметры.Свойство("РезервированиеТоваров") Тогда
    ЗаполнятьСуммы = ложь;
    флРезервированиеТоваров = истина;

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

    Иначе
    ИмяРеквизитаРазмещение = "Размещение";
    КопияТовары = Товары.Выгрузить();
    КопияТовары.Свернуть("Номенклатура",);
    КопияВозвратнаяТара = ВозвратнаяТара.Выгрузить();
    КопияВозвратнаяТара.Свернуть("Номенклатура",);

    // Сформируем массив номенклатуры по товарам и таре для фильтров запросов.
    МассивНоменклатуры = КопияТовары.ВыгрузитьКолонку("Номенклатура");
    МассивНоменклатурыТара = КопияВозвратнаяТара.ВыгрузитьКолонку("Номенклатура");
    Для Каждого ЭлементТара Из МассивНоменклатурыТара Цикл
    МассивНоменклатуры.Добавить(ЭлементТара);
    КонецЦикла;
    КонецЕсли;

    ТекстФильтраПоСкладам = "
    |(
    | ВЫБРАТЬ
    | ГруппыДоступности.Склад
    | ИЗ
    | РегистрСведений.СоставГруппДоступностиСкладов КАК ГруппыДоступности
    | ГДЕ ГруппыДоступности.ГруппаДоступности = &ГруппаДоступностиСкладов)";

    ЗапросСвободныйОстаток.УстановитьПараметр("МассивНоменклатуры", МассивНоменклатуры);
    ЗапросСвободныйОстаток.УстановитьПараметр("ГруппаДоступностиСкладов", ГруппаДоступностиСкладов);
    ЗапросСвободныйОстаток.УстановитьПараметр( "Новый", Справочники.Качество.Новый);

    Если Авторезервирование Тогда
    УсловиеСклад = ";
    Если ЗначениеЗаполнено(ГруппаДоступностиСкладов) Тогда
    УсловиеСклад = " Склад В" + ТекстФильтраПоСкладам;
    Если ЕстьПредпочтительноеРазмещение Тогда
    УсловиеСклад = УсловиеСклад+" ИЛИ Склад = &ПредпочтительноеРазмещение";
    КонецЕсли;
    КонецЕсли;
    Если ЕстьСкладЗаказчик Тогда
    Если УсловиеСклад = " Тогда
    УсловиеСклад = "Склад <> &СкладЗаказчик";
    Иначе
    УсловиеСклад = "("+УсловиеСклад+") И Склад <> &СкладЗаказчик"
    КонецЕсли;
    КонецЕсли;

    ЗапросСвободныйОстаток.Текст =
    "ВЫБРАТЬ РАЗРЕШЕННЫЕ
    | ТоварыНаСкладахОстатки.Номенклатура,
    | ТоварыНаСкладахОстатки.ХарактеристикаНоменклатуры,
    | ТоварыНаСкладахОстатки.Склад КАК Размещение,
    | NULL КАК ТоварТара,
    | NULL КАК ДоговорКонтрагента,
    | NULL КАК СтатусПартии,
    | ТоварыНаСкладахОстатки.КоличествоОстаток КАК Количество,
    | ТоварыОрганизацийОстатки.КоличествоОстаток КАК ОстатокПоОрганизации,
    | ТоварыВРезервеНаСкладахОстатки.КоличествоОстаток КАК КоличествоРазмещенное,
    | ТоварыКПередачеСоСкладовОстатки.КоличествоОстаток КАК КоличествоКПередаче,
    | 1 КАК СортировкаРазмещение,"
    +?(ЕстьПредпочтительноеРазмещение, "
    | ВЫБОР
    | КОГДА ТоварыНаСкладахОстатки.Склад = &ПредпочтительноеРазмещение ТОГДА
    | 0
    | ИНАЧЕ
    | 1
    | КОНЕЦ"
    ,"0")+" КАК СортировкаСклад,
    | NULL КАК ДатаПоступления
    |ИЗ
    | РегистрНакопления.ТоварыНаСкладах.Остатки(,
    | Номенклатура В (&МассивНоменклатуры) И Качество = &Новый
    |" + ?(УсловиеСклад<>"," И ("+УсловиеСклад+")",") + ") КАК ТоварыНаСкладахОстатки

    |ЛЕВОЕ СОЕДИНЕНИЕ
    | РегистрНакопления.ТоварыВРезервеНаСкладах.Остатки(, Номенклатура В (&МассивНоменклатуры)) КАК ТоварыВРезервеНаСкладахОстатки
    |ПО ТоварыНаСкладахОстатки.Номенклатура = ТоварыВРезервеНаСкладахОстатки.Номенклатура
    | И ТоварыНаСкладахОстатки.ХарактеристикаНоменклатуры = ТоварыВРезервеНаСкладахОстатки.ХарактеристикаНоменклатуры
    | И ТоварыНаСкладахОстатки.Склад = ТоварыВРезервеНаСкладахОстатки.Склад
    |ЛЕВОЕ СОЕДИНЕНИЕ
    | РегистрНакопления.ТоварыКПередачеСоСкладов.Остатки(, Номенклатура В (&МассивНоменклатуры) И Качество = &Новый ) КАК ТоварыКПередачеСоСкладовОстатки
    |ПО ТоварыНаСкладахОстатки.Номенклатура = ТоварыКПередачеСоСкладовОстатки.Номенклатура
    | И ТоварыНаСкладахОстатки.ХарактеристикаНоменклатуры = ТоварыКПередачеСоСкладовОстатки.ХарактеристикаНоменклатуры
    | И ТоварыНаСкладахОстатки.Склад = ТоварыКПередачеСоСкладовОстатки.Склад
    |ЛЕВОЕ СОЕДИНЕНИЕ
    | РегистрНакопления.ТоварыОрганизаций.Остатки(, Организация = &Организация И Комиссионер = ЗНАЧЕНИЕ(Справочник.Контрагенты.ПустаяСсылка) И Номенклатура В (&МассивНоменклатуры) И Качество = &Новый) КАК ТоварыОрганизацийОстатки
    |ПО ТоварыНаСкладахОстатки.Номенклатура = ТоварыОрганизацийОстатки.Номенклатура
    | И ТоварыНаСкладахОстатки.ХарактеристикаНоменклатуры = ТоварыОрганизацийОстатки.ХарактеристикаНоменклатуры
    |";

    КонецЕсли;
    Если Авторезервирование И Авторазмещение Тогда
    ЗапросСвободныйОстаток.Текст = ЗапросСвободныйОстаток.Текст +
    "
    |ОБЪЕДИНИТЬ ВСЕ
    |";
    КонецЕсли;
    Если Авторазмещение Тогда
    УсловиеСклад = ";
    Если ЗначениеЗаполнено(ГруппаДоступностиСкладов) Тогда
    УсловиеСклад = " ЗаказПоставщику.Склад В" + ТекстФильтраПоСкладам;
    Если ЕстьПредпочтительноеРазмещение Тогда
    УсловиеСклад = УсловиеСклад+" ИЛИ ЗаказПоставщику.Склад = &ПредпочтительноеРазмещение";
    КонецЕсли;
    КонецЕсли;
    Если ЕстьСкладЗаказчик Тогда
    Если УсловиеСклад = " Тогда
    УсловиеСклад = "ЗаказПоставщику.Склад <> &СкладЗаказчик";
    Иначе
    УсловиеСклад = "("+УсловиеСклад+") И ЗаказПоставщику.Склад <> &СкладЗаказчик"
    КонецЕсли;
    КонецЕсли;

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

    Таблица = ЗапросСвободныйОстаток.Выполнить().Выгрузить();

    // Получим права пользователя на превышение остатков по организации.
    ПраваНаПревышениеОстатковПоОрганизации = УправлениеДопПравамиПользователей.РазрешеноПревышениеОстаткаТоваровОрганизации(Заказ.Организация);

    // Вычислим по каждой строке количества, которые можно разместить
    Для Каждого Строка Из Таблица Цикл

    Количество = ?(Строка.Количество = NULL, 0, Строка.Количество);
    КоличествоРазмещенное = ?(Строка.КоличествоРазмещенное = NULL, 0, Макс(Строка.КоличествоРазмещенное,0));
    КоличествоКПередаче = ?(Строка.КоличествоКПередаче = NULL, 0, Макс(Строка.КоличествоКПередаче,0));
    ОстатокПоОрганизации = ?(Строка.ОстатокПоОрганизации = NULL, 0, Макс(Строка.ОстатокПоОрганизации,0));

    //для тары остатков в регистре ТоварыОрганизаций быть не может
    ЭтоТара = ВозвратнаяТара.Найти(Строка.Номенклатура,"Номенклатура")<>неопределено;

    Если ПраваНаПревышениеОстатковПоОрганизации или ЭтоТара Тогда
    Строка.Количество = Количество - КоличествоРазмещенное - КоличествоКПередаче;
    Иначе
    Строка.Количество = Мин(Количество - КоличествоРазмещенное - КоличествоКПередаче, ОстатокПоОрганизации);
    КонецЕсли;

    КонецЦикла;

    Сч = 0;
    Пока Сч < Таблица.Количество() Цикл
    СтрокаТаблицы = Таблица.Получить(Сч);
    Если СтрокаТаблицы.Количество <= 0 Тогда
    Таблица.Удалить(СтрокаТаблицы);
    Иначе
    Сч = Сч + 1;
    КонецЕсли;
    КонецЦикла;

    ПустаяХарактеристикаНоменклатуры = Справочники.ХарактеристикиНоменклатуры.ПустаяСсылка();

    // Вычтем из найденных остатков количество, размещение по которому явно указано
    // в табличных частях документа. Для этого последовательно обойдем табличные части
    // Товары и Возвратная тара.
    Для Сч = 0 По 1 Цикл

    Если Сч = 0 Тогда
    ТабличнаяЧасть = Товары;
    ЭтоТовары = Истина;
    Иначе
    ТабличнаяЧасть = ВозвратнаяТара;
    ЭтоТовары = Ложь;
    КонецЕсли;

    Для Каждого СтрокаТЧ Из ТабличнаяЧасть Цикл
    // Если количество меньше и равно нулю, пропускаем строку.
    Если СтрокаТЧ.Количество <= 0 Тогда
    Продолжить;
    КонецЕсли;

    // Сначала обходим все строки с размещением и если размещение не указано, пропускаем строку.
    Если НЕ ЗначениеЗаполнено(СтрокаТЧ[ИмяРеквизитаРазмещение]) Тогда
    Продолжить;
    КонецЕсли;

    // Если не указано авторазмещение в заказах, то пропускаем все строки, в которых указан заказ.
    Если НЕ Авторазмещение И ТипЗнч(СтрокаТЧ[ИмяРеквизитаРазмещение]) <> Тип("СправочникСсылка.Склады") Тогда
    Продолжить;
    КонецЕсли;

    // Если не указано авторезервирование на складах, то пропускаем все строки, в которых указан склад.
    Если НЕ Авторезервирование И ТипЗнч(СтрокаТЧ[ИмяРеквизитаРазмещение]) = Тип("СправочникСсылка.Склады") Тогда
    Продолжить;
    КонецЕсли;

    СтруктураПоиска = Новый Структура;
    СтруктураПоиска.Вставить("Номенклатура", СтрокаТЧ.Номенклатура);
    СтруктураПоиска.Вставить("Размещение", СтрокаТЧ[ИмяРеквизитаРазмещение]);

    Если ЭтоТовары Тогда
    СтруктураПоиска.Вставить("ХарактеристикаНоменклатуры", СтрокаТЧ.ХарактеристикаНоменклатуры);
    Иначе
    СтруктураПоиска.Вставить("ХарактеристикаНоменклатуры", ПустаяХарактеристикаНоменклатуры);
    КонецЕсли;

    НайденныеСтроки = Таблица.НайтиСтроки(СтруктураПоиска);

    // Погашаем количество в таблице. Пересчитаем количество в ТЧ в единицы хранения.
    Если ЭтоТовары Тогда
    // Пересчитаем количество в ТЧ в единицы хранения.
    КоличествоОсталосьПогасить = СтрокаТЧ.Количество * СтрокаТЧ.Коэффициент
    / СтрокаТЧ.Номенклатура.ЕдиницаХраненияОстатков.Коэффициент;
    Иначе
    КоличествоОсталосьПогасить = СтрокаТЧ.Количество;
    КонецЕсли;

    Для Каждого Строка Из НайденныеСтроки Цикл

    Если КоличествоОсталосьПогасить <= 0 Тогда
    Прервать;
    КонецЕсли;

    Если Строка.Количество <= 0 Тогда
    Продолжить;
    КонецЕсли;

    // Если это остаток из заказа, то дополнительно проверяем на тару/товар
    Если ТипЗнч(Строка.Размещение)=Тип("ДокументСсылка.ЗаказПоставщику") Тогда
    Если ЭтоТовары И Строка.ТоварТара <> Перечисления.ТоварТара.Товар Тогда
    Продолжить;
    ИначеЕсли НЕ ЭтоТовары И Строка.ТоварТара <> Перечисления.ТоварТара.Тара Тогда
    Продолжить;
    КонецЕсли;
    КонецЕсли;

    Если Строка.Количество >= КоличествоОсталосьПогасить Тогда
    КоэффСписания = КоличествоОсталосьПогасить/Строка.Количество;
    Иначе
    // Это ошибка: списываемое количество не должно быть больше остатка.
    // Такой документ не проведется оперативно.
    КоэффСписания = 1;
    КонецЕсли;

    СписанноеКоличество = Окр(Строка.Количество * КоэффСписания, 3, РежимОкругления.Окр15как20);

    КоличествоОсталосьПогасить = КоличествоОсталосьПогасить - СписанноеКоличество;

    Строка.Количество = Строка.Количество - СписанноеКоличество;

    КонецЦикла;

    Если КоличествоОсталосьПогасить > 0 Тогда
    // Значит в документе неверно задано размещение. Заполнять не будем
    Возврат;
    КонецЕсли;

    КонецЦикла;

    КонецЦикла;

    // Заполним массив, хранящий две таблицы значений, соответствующих авторазмещению товаров и тары
    МассивТаблицСтрок = Новый Массив(2);

    Для Сч = 0 По 1 Цикл

    Если Сч = 0 Тогда
    ТабличнаяЧасть = Товары;
    ЭтоТовары = Истина;
    Иначе
    ТабличнаяЧасть = ВозвратнаяТара;
    ЭтоТовары = Ложь;
    КонецЕсли;

    ТаблицаТЧ = ТабличнаяЧасть.Выгрузить();
    ТаблицаТЧ.Колонки.Добавить("КоличествоЕдиницХранения");

    МассивТаблицСтрок[Сч] = ТабличнаяЧасть.Выгрузить();
    МассивТаблицСтрок[Сч].Очистить();
    МассивТаблицСтрок[Сч].Колонки.Добавить("ИндексИсходнойСтроки");

    Для Каждого СтрокаТЧ Из ТаблицаТЧ Цикл
    Если СтрокаТЧ.Количество <= 0 Тогда
    Продолжить;
    КонецЕсли;

    Если ЗначениеЗаполнено(СтрокаТЧ[ИмяРеквизитаРазмещение]) Тогда
    Продолжить;
    КонецЕсли;
    Если флРезервированиеТоваров Тогда
    Если ЗначениеЗаполнено(СтрокаТЧ.ИсходноеРазмещение) Тогда
    //нет смысла указывать одинаковыми исходное и новое размещение
    Если СтрокаТЧ.ИсходноеРазмещение = СтрокаТЧ.НовоеРазмещение Тогда
    Продолжить;
    КонецЕсли;
    КонецЕсли;
    КонецЕсли;

    СтруктураПоиска = Новый Структура;
    СтруктураПоиска.Вставить("Номенклатура", СтрокаТЧ.Номенклатура);

    Если ЭтоТовары Тогда
    // Пересчитаем в единицы хранения
    СтрокаТЧ.КоличествоЕдиницХранения = СтрокаТЧ.Количество * СтрокаТЧ.Коэффициент
    / СтрокаТЧ.Номенклатура.ЕдиницаХраненияОстатков.Коэффициент;
    СтруктураПоиска.Вставить("ХарактеристикаНоменклатуры", СтрокаТЧ.ХарактеристикаНоменклатуры);
    Иначе
    СтруктураПоиска.Вставить("ХарактеристикаНоменклатуры", ПустаяХарактеристикаНоменклатуры);
    СтрокаТЧ.КоличествоЕдиницХранения = СтрокаТЧ.Количество;
    КонецЕсли;

    НайденныеСтроки = Таблица.НайтиСтроки(СтруктураПоиска);

    // Погашаем количество в таблице
    КоличествоОсталосьПогасить = СтрокаТЧ.КоличествоЕдиницХранения;
    Если ЗаполнятьСуммы Тогда
    СуммаОсталосьПогасить = СтрокаТЧ.Сумма;
    КонецЕсли;
    // Погашаем количество в таблице, записывая размещение
    Для Каждого Строка Из НайденныеСтроки Цикл

    Если КоличествоОсталосьПогасить <= 0 Тогда
    Прервать;
    КонецЕсли;

    Если Строка.Количество <= 0 Тогда
    Продолжить;
    КонецЕсли;

    // Если это остаток по заказу поставщику, отберем товар и тару
    Если ТипЗнч(Строка.Размещение)=Тип("ДокументСсылка.ЗаказПоставщику") Тогда
    Если ЭтоТовары И Строка.ТоварТара = Перечисления.ТоварТара.Тара Тогда
    Продолжить;
    ИначеЕсли ЭтоТовары И Строка.СтатусПартии = Перечисления.СтатусыПартийТоваров.ВозвратнаяТара Тогда
    Продолжить;
    ИначеЕсли НЕ ЭтоТовары И Строка.ТоварТара = Перечисления.ТоварТара.Товар Тогда
    Продолжить;
    ИначеЕсли НЕ ЭтоТовары И Строка.СтатусПартии = Перечисления.СтатусыПартийТоваров.Купленный Тогда
    Продолжить;
    КонецЕсли;
    ИначеЕсли не ЭтоТовары и ОбособленныйУчет И ТипЗнч(Строка.Размещение)=Тип("СправочникСсылка.Склады") Тогда
    //авторезервирование тары под заказ с обособленным учетом не выполняется
    Продолжить;
    КонецЕсли;
    Если Строка.Количество >= КоличествоОсталосьПогасить Тогда
    КоэффСписания = КоличествоОсталосьПогасить / Строка.Количество;
    Иначе
    КоэффСписания = 1;
    КонецЕсли;

    СписанноеКоличество = Окр(Строка.Количество * КоэффСписания, 3, РежимОкругления.Окр15как20);
    Если ЭтоТовары Тогда
    СписанноеКоличествоВДок = Окр( (Строка.Количество * СтрокаТЧ.Номенклатура.ЕдиницаХраненияОстатков.Коэффициент / СтрокаТЧ.ЕдиницаИзмерения.Коэффициент)
    * КоэффСписания, 3, РежимОкругления.Окр15как20);
    Иначе
    СписанноеКоличествоВДок = Окр( Строка.Количество * КоэффСписания, 3, РежимОкругления.Окр15как20);
    КонецЕсли;

    // Добавляем строку с данными о размещенном количестве
    НоваяСтрока = МассивТаблицСтрок[Сч].Добавить();
    НоваяСтрока.ИндексИсходнойСтроки = ТаблицаТЧ.Индекс(СтрокаТЧ);

    ЗаполнитьЗначенияСвойств(НоваяСтрока, СтрокаТЧ);

    НоваяСтрока[ИмяРеквизитаРазмещение] = Строка.Размещение;
    НоваяСтрока.Количество = СписанноеКоличествоВДок;

    КоэффПогашения = СписанноеКоличество / КоличествоОсталосьПогасить;

    КоличествоОсталосьПогасить = КоличествоОсталосьПогасить - СписанноеКоличество;
    Если ЗаполнятьСуммы Тогда
    НоваяСтрока.Сумма = Окр(СуммаОсталосьПогасить * КоэффПогашения, 2 ,1);
    СуммаОсталосьПогасить = СуммаОсталосьПогасить - НоваяСтрока.Сумма;
    КонецЕсли;
    // Уменьшаем количество в исходной строке
    СтрокаТЧ.Количество = СтрокаТЧ.Количество - СписанноеКоличествоВДок;

    // Уменьшаем количество в строке остатков
    Строка.Количество = Строка.Количество - СписанноеКоличество;

    КонецЦикла;
    Если КоличествоОсталосьПогасить > 0 Тогда
    // Добавляем строку с данными о размещенном количестве
    НоваяСтрока = МассивТаблицСтрок[Сч].Добавить();
    НоваяСтрока.ИндексИсходнойСтроки = ТаблицаТЧ.Индекс(СтрокаТЧ);

    ЗаполнитьЗначенияСвойств(НоваяСтрока, СтрокаТЧ);

    Если ЭтоТовары Тогда
    НоваяСтрока.Количество = Окр( (КоличествоОсталосьПогасить * СтрокаТЧ.Номенклатура.ЕдиницаХраненияОстатков.Коэффициент / СтрокаТЧ.ЕдиницаИзмерения.Коэффициент), 3, РежимОкругления.Окр15как20);
    Иначе
    НоваяСтрока.Количество = КоличествоОсталосьПогасить;
    КонецЕсли;
    Если ЗаполнятьСуммы Тогда
    НоваяСтрока.Сумма = Окр(СуммаОсталосьПогасить, 2, 1);
    КонецЕсли;
    КонецЕсли;

    КонецЦикла;
    КонецЦикла;

    // Изменяем табличную часть
    Для Сч = 0 По 1 Цикл
    Если Сч = 0 Тогда
    ТабличнаяЧасть = Товары;
    ЭтоТовары = Истина;
    Иначе
    ТабличнаяЧасть = ВозвратнаяТара;
    ЭтоТовары = Ложь;
    КонецЕсли;

    ТекИндексИсходнойСтроки = Неопределено;
    Для Каждого Строка Из МассивТаблицСтрок[Сч] Цикл

    Если Строка.Количество <= 0 Тогда
    Продолжить;
    КонецЕсли;

    // Если строка с таким индексом уже обрабатывалась, то добавляем новую
    Если ТекИндексИсходнойСтроки = Строка.ИндексИсходнойСтроки Тогда
    Стр = ТабличнаяЧасть[Строка.ИндексИсходнойСтроки];
    РедактируемаяСтрока = ТабличнаяЧасть.Добавить();
    РедактируемаяСтрока.Номенклатура = Стр.Номенклатура;
    Если флРезервированиеТоваров Тогда
    РедактируемаяСтрока.ИсходноеРазмещение = Стр.ИсходноеРазмещение;
    КонецЕсли;

    Если ЭтоТовары Тогда
    РедактируемаяСтрока.ХарактеристикаНоменклатуры = Стр.ХарактеристикаНоменклатуры;
    Если ЗаполнятьСуммы Тогда
    РедактируемаяСтрока.СтавкаНДС = Стр.СтавкаНДС;
    КонецЕсли;
    КонецЕсли;
    Иначе
    РедактируемаяСтрока = ТабличнаяЧасть[Строка.ИндексИсходнойСтроки];
    КонецЕсли;

    РедактируемаяСтрока[ИмяРеквизитаРазмещение] = Строка[ИмяРеквизитаРазмещение];

    Если РедактируемаяСтрока.Количество = Строка.Количество Тогда
    Продолжить;
    КонецЕсли;

    ЗаполнитьЗначенияСвойств(РедактируемаяСтрока, Строка);
    Если ЭтоТовары Тогда
    ОбработкаТабличныхЧастей.РассчитатьКоличествоМестТабЧасти(РедактируемаяСтрока, Заказ);
    КонецЕсли;

    Если ЗаполнятьСуммы Тогда
    Если ЭтоТовары Тогда
    ОбработкаТабличныхЧастей.РассчитатьСуммуНДСТабЧасти(РедактируемаяСтрока, Заказ);
    Иначе
    РедактируемаяСтрока.Цена = ?(РедактируемаяСтрока.Количество <> 0, РедактируемаяСтрока.Сумма/РедактируемаяСтрока.Количество, 0);
    КонецЕсли;
    КонецЕсли;

    ТекИндексИсходнойСтроки = Строка.ИндексИсходнойСтроки;

    КонецЦикла;
    КонецЦикла;

    Если Параметры.РезервироватьПоСериям Тогда
    ЗаполнитьПоСериям(Заказ, Товары,ИмяРеквизитаРазмещение,Параметры.Свойство("РезервированиеТоваров"));
    КонецЕсли;
    КонецПроцедуры
```
---
Если Номенклатура.НеРезервировать = Истина Тогда
.....не резервировать
КонецЕсли;
такую конструкцию не подскажите куда вставить?
---
я так понимаю это нужно вставлять после:

 // Вычислим по каждой строке количества, которые можно разместить
 Для Каждого Строка Из Таблица Цикл
?
Если ставить туда,то условие моё какое-то не правильно))) надо чтобы товар не резервировался,а он у меня всё равно в резерв падает)))
чёт надо придумать)
---
Если Стр.Номенклатура.НеРезервировать = Истина Тогда
флРезервированиеТоваров = ложь;
КонецЕсли;
Так?
---
Пожалуйста, читайте, то, что написано, требуется в запросах поставить фильтр по добавленному признаку, НО

если решить Вашим способом, то вставка в одном месте, где устанавливается параметр запросов "МассивНоменклатуры", а именно результат

 // - Было

```1c
    //ЗапросСвободныйОстаток.УстановитьПараметр("МассивНоменклатуры", МассивНоменклатуры);
```

 // - Стало

```1c
    МассивНоменклатурыДляРезерва = Новый Массив;
    Для каждого ЭлементМассива Из МассивНоменклатуры Цикл
    Если ЗначениеЗаполнено(ЭлементМассива) И ЭлементМассива._НеРезирвировать Тогда
    // пропустим
    Продолжить;
    КонецЕсли;
    МассивНоменклатурыДляРезерва.Добавить(ЭлементМассива);
    КонецЦикла;
    ЗапросСвободныйОстаток.УстановитьПараметр("МассивНоменклатуры", МассивНоменклатурыДляРезерва);
```

Важно!!! то, что описано, это пример - и может работать только для документов, которые обращаются к данной процедуре, т.е. надо проверить (протестировать) - для всех документов, которые включены в механизм "резервирования и размещения" и если нет то реализуем по подобию
---
сильно не ругайтесь,я в 1с совсем недавно.)
ошибка
{ОбщийМодуль.УправлениеЗаказами.Модуль(1884)}: Поле объекта не обнаружено (_НеРезирвировать)
  Если ЗначениеЗаполнено(ЭлементМассива) И ЭлементМассива._НеРезирвировать Тогда
---
Понятно - реквизит "_НеРезирвировать", а в вашем случае "НеРезервировать", т.е. результат
Если ЗначениеЗаполнено(ЭлементМассива) И ЭлементМассива.НеРезервировать Тогда
---
ссори(
---
всё равно все товары кинулись в резерв(
---
А в каком документе Вы оперируете?
---
в Заказе покупателя
---
в цикл заходит этот,если отслеживать отладчиком
---
Может проще в модуле регистра где формируется резервирование ПриЗаписи()
---
Странно, у меня все норм - не заполняется колонка "Размещение", соответственно и движения по регистру резерва не формируются по той номенклатуре, у которой стоит признак "Не резервировать"

(25) такой похожий вариант (не делать движений) описал (2), НО делать это в обработчике "ПриЗаписи()" модуля регистра ?!?!?! не буду отвечать
---
погоди,как не заполняется,если к примеру изначально сам заполняешь в Заказе покупателя эту колонку: Размещения. Потом нажимаю кнопку Заполнить и провести(выскакивает форма: Параметра авторезервирования), ставлю там галочки,и в итоге потом смотрю анализ, в анализ они попадают что зарезервированы.
Правильно я описал процесс.или другой должен был быть?
---
я вас понял,просто нужно галочку активировать(очищать размещение перед заполнением) тогда работает)
Спасибо огромное)))
---
можно и не ставить,оно и так работает) Спасибо огромное ещё раз)))
---
вы гений!))
---
В отчете "Анализ", в данном случае заказа покупателя в колонку "Резерв" попадают данные по формуле:
КоличествоОстаток по "Документу резерва (сам заказ)" регистра "ТоварыВРезервеНаСкладах"
 + КоличествоОстаток по "Документу резерва (сам заказ)" регистра "ТоварыКПередачеСоСкладов"
 - КоличествоОстаток по "Документу резерва (сам заказ)" регистра "ТоварыКПолучениюНаСклады"

т.е. посмотри движения по описанным регистрам по колонке "Документ резерва", скорее всего уже до этого были движения.
---
Пытайтесь максимально сами разобраться - придет с опытом - удачи
---
Спасибо огромное,сижу вникаю,пытаюсь разобраться)влезть в это по максимуму)))
Сейчас хочу переделать по по кнопке ОК чтобы работало в Статусе На согласовании чтобы только работало.
---
Поможете ещё немного?))не могу найти куда код вставлять по кнопке ОК,где он вообще хранится?
---
В модуле документ "Резервирование товаров" есть процедура ПередЗаписью

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

    мУдалятьДвижения = НЕ ЭтоНовый();

    Если ОбменДанными.Загрузка Тогда
    Возврат;
    КонецЕсли;

    // Проверка заполнения единицы измерения мест и количества мест
    ОбработкаТабличныхЧастей.ПриЗаписиПроверитьЕдиницуИзмеренияМест(Товары);

    КонецПроцедуры // ПередЗаписью
```

В конец процедуры можно вставить

```1c
    N = ЭтотОбъект.Товары.Количество()-1;
    Пока N > -1 Цикл
    Стр = ЭтотОбъект.Товары.Получить(N);
    Если Стр.Номенклатура.ЗапретРезервирования Тогда
    ЭтотОбъект.Товары.Удалить(Стр);
    КонецЕсли;
    N = N-1;
    КонецЦикла;
```

Таким образом после того как появился запрет у номенклатуры, можно просто перепровести Резервы, это если резервы делаются из документы РезервированиеТоваров, в остальные модули документов нужно вставить тоже самое.
Если удалять строку нельзя, то можно очистить размещение

```1c
    N = ЭтотОбъект.Товары.Количество()-1;
    Пока N > -1 Цикл
    Стр = ЭтотОбъект.Товары.Получить(N);
    Если Стр.Номенклатура.ЗапретРезервирования Тогда
    ЭтотОбъект.Товары.Размещение = Неопределено; // Как то так, не проверял.
    КонецЕсли;
    N = N-1;
    КонецЦикла;
```
---
очень хорошо и доступно расписано,спасибо,возьму на заметку,а как в случае если в документе Заказа покупателя сделать перед записью,такая конструкция не прокатит же?!
Надо как-то сделать чтобы при нажатии кнопки ОК в документе Заказ покупателя(я так понимаю ПередЗаписью) проставлялось в ТЧТовары в колонку Размещение основной склад,а где галочка в карточке номенклатуры стоит что не Резервировать,там не проставлять.?!
---
при нажатии кнопки ОК в документе Заказ покупателя
При нажатии кнопки ОК (Документ запишется и проведётся), при нажатии кнопки Записать (Документ запишется)
Важно что

```1c
    Процедура ПередЗаписью
```

это процедура из модуля документа, и она отработает в любом случае перед записью документа (проведение это тоже запись).
Она должна отработать при нажатии на кнопку "ЗаполнитьИПровести", документ заполняется через общую форму

```1c
    // Заполнение документа
    Форма = ПолучитьОбщуюФорму("ФормаВыбораПараметровАвторезервирования", ЭтаФорма, );
```

после чего если не обмен данными

```1c
    Если ОбменДанными.Загрузка Тогда
    Возврат;
    КонецЕсли;
```

очистится размещения у строк где

```1c
    Стр.Номенклатура.ЗапретРезервирования
```

ЗапретРезервирования - это реквизит номенклатуры с типом булево.
Попробуйте в модуле документа ЗаказПокупателя в процедуре ПередЗаписью()
перед КонецПроцедуры вставить код

```1c
    N = ЭтотОбъект.Товары.Количество()-1;
    Пока N > -1 Цикл
    Стр = ЭтотОбъект.Товары.Получить(N);
    Если Стр.Номенклатура.ЗапретРезервирования Тогда
    //Ошибся//ЭтотОбъект.Товары.Размещение = Неопределено; // Как то так, не проверял.
    Стр.Размещение = Неопределено;// Так правильней, но нужно проверять.
    КонецЕсли;
    N = N-1;
    КонецЦикла;
```
---
проставлялось в ТЧТовары в колонку Размещение основной склад,а где галочка в карточке номенклатуры стоит что не Резервировать,там не проставлять.?!
Резервирование нужно делать кнопкой ЗаполнитьИПровести, важно что при этом Дата документа должна быть
```1c
    ТекущаяДата()
```

Откройте справочник "Группы доступности складов", добавьте группу, обзавите её как-нибудь. В этой группе добавьте склады которые будут учавствовать в резервировании у конкретных пользователей. В правах пользователей "Основная группа доступности складов" назначить вновь созданную группу.
В Форме документа, в процедуре при открытии добавить то что выделенно 88

```1c
    Если ЭтоНовый() Тогда

    ИнициализироватьНовыйДокумент(ПараметрОбъектКопирования, ПараметрОснование);

    //88(
    ЭтотОбъект.СкладГруппа = УправлениеПользователями.ПолучитьЗначениеПоУмолчанию(ПараметрыСеанса.ТекущийПользователь, "ГруппаДоступностиСкладов");
    //88)
    Иначе

    НастройкаПравДоступа.ОпределитьДоступностьВозможностьИзмененияДокументаПоДатеЗапр­ета(ДокументОбъект, ЭтаФорма);

    КонецЕсли;
```
---
Нужно заставить пользователей заполнять документ нажатием на кнопку "Заполнить и провести", или проверять и менять дату с

```1c
    ТекущаяДата();
```

при проведении документа, пойдут ли на это?
Проще всё это использовать в документе РезервированиеТоваров, чтобы при открытии если это новый документ, документ заполнялся, очищался и проводился.
---
Если не нравится форма при нажатии заполнить и провести, то приведете процедуру формы к такому виду

```1c
    Процедура ДействияФормыДействиеЗаполнитьИПровести(Кнопка)

    // Заполнять с проведением можно документы с текущей датой
    Если НачалоДня(Дата) = НачалоДня(ТекущаяДата()) Тогда
    Если НЕ ЭтоНовый() Тогда

    // Если документ ранее был записан, то он будет переноситься в конец дня из-за оперативного проведения, о чем следует предупредить.
    Ответ = Вопрос("В режиме заполнения с проведением документ будет проводиться оперативно. " + Символы.ПС + "Продолжить?", РежимДиалогаВопрос.ДаНет);
    Если НЕ Ответ = КодВозвратаДиалога.Да Тогда
    Возврат;
    КонецЕсли;
    КонецЕсли;
    Иначе
    Предупреждение("Дата документа отличается от текущей. Оперативное проведение невозможно.
    |Документ заполнен не будет!");
    Возврат;
    КонецЕсли;

    // Заполнение документа
    Форма = ПолучитьОбщуюФорму("ФормаВыбораПараметровАвторезервирования", ЭтаФорма, );

    //Установим реквизиты и переменные формы.
    Форма.ФормаДокумента = ЭтаФорма;
    //Провести = Форма.ОткрытьМодально();//881
    //88(
    Провести = Истина;
    Авторезервирование = Истина;
    Авторазмещение = Ложь;
    СтратегияАвторезервированияПоЗаказам = Перечисления.СтратегииАвторезервированияНоменклатуры.СначалаНаСкладахПотомВЗаказахПоставщикам;
    ОчищатьРазмещениеПередЗаполнением = Ложь;
    //88)
    //если форму закрыли просто крестом,
    Если Провести=неопределено Тогда
    Возврат;
    КонецЕсли;

    Если ОчищатьРазмещениеПередЗаполнением Тогда
    ОчиститьРазмещениеВТабличнойЧасти(Товары);
    Если мИспользоватьТару Тогда
    ОчиститьРазмещениеВТабличнойЧасти(ВозвратнаяТара);
    КонецЕсли;
    КонецЕсли;

    ВидимостьСерии = ЭлементыФормы.Товары.Колонки.СерияНоменклатуры.Видимость;

    СтруктураПараметров = Новый Структура;
    СтруктураПараметров.Вставить("ВидимостьСерии", ВидимостьСерии);
    СтруктураПараметров.Вставить("Авторезервирование", Авторезервирование);
    СтруктураПараметров.Вставить("Авторазмещение", Авторазмещение);
    СтруктураПараметров.Вставить("СтратегияАвторезервированияПоЗаказам", СтратегияАвторезервированияПоЗаказам);

    // Очистим записи документа по размещению, если он был ранее проведен
    Если Проведен Тогда
    НачатьТранзакцию();

    НаборОстаткиТоваров = РегистрыНакопления.ТоварыВРезервеНаСкладах.СоздатьНаборЗаписей();
    НаборОстаткиТоваров.Отбор.Регистратор.Установить(Ссылка);
    НаборОстаткиТоваров.Записать();
    НаборЗаказыПоставщикам = РегистрыНакопления.РазмещениеЗаказовПокупателей.СоздатьНаборЗаписей();
    НаборЗаказыПоставщикам.Отбор.Регистратор.Установить(Ссылка);
    НаборЗаказыПоставщикам.Записать();
    КонецЕсли;

    ЗаполнитьТабличныеЧастиПередПроведениемУпр(СтруктураПараметров);

    Если Проведен Тогда
    ОтменитьТранзакцию();
    КонецЕсли;

    РаботаСДиалогами.ПровестиДокументВФормеОперативно(ЭтаФорма);

    КонецПроцедуры
```

Где закоментированное 881, то как было

```1c
    //Провести = Форма.ОткрытьМодально();//881
```

а 88 как стало

```1c
    //88(
    Провести = Истина;
    Авторезервирование = Истина;
    Авторазмещение = Ложь;
    СтратегияАвторезервированияПоЗаказам = Перечисления.СтратегииАвторезервированияНоменклатуры.СначалаНаСкладахПотомВЗаказахПоставщикам;
    ОчищатьРазмещениеПередЗаполнением = Ложь;
    //88)
```

После чего в нужной процедуре формы используя код

```1c
    Если ЭтоНовый() Тогда
    ДействияФормыДействиеЗаполнитьИПровести(Неопределено);
    КонецЕсли;
```

можно нажать на кнопку "Заполнить и провести" программно, где ваш "Основной склад" и заполнится, а код в процедуре модуля ПередЗаписью()

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

очистит у ненужных товаров размещение, желательно еще после очищения Свернуть() товары, если будут мешать разделившиеся позиции, но это после если будет интересно...
---
Всё очень очень круто расписываете и очень всё внятно,огромный респект,сделал как вы и написали,тоже хотел чтобы форма была не видна авторезервирования, посмотрел как я не правильно делал и понял свои ошибки.
Вы писали:
После чего в нужной процедуре формы используя код
    Если ЭтоНовый() Тогда
        ДействияФормыДействиеЗаполнитьИПровести(Неопределено);
    КонецЕсли;

можно нажать на кнопку "Заполнить и провести" программно, где ваш "Основной склад" и заполнится
Я подвесил на отдельную кнопку этот код, ничего не происходит,оно не вызывает действие этой кнопки заполнить и провести программно. Может нужно написать не Неопределено,а что нибудь другое?
И могу ли я это подвесить на процедуру ПередЗаписью всё таки в начало?
---
Я подвесил на отдельную кнопку этот код
Код ЭтоНовый() срабатывает если объекта ещё нет в базе

```1c
    Если ЭтоНовый() Тогда
```

Этот код

```1c
    ДействияФормыДействиеЗаполнитьИПровести(Неопределено);
```

и есть нажатие на кнопку "Заполнить и провести", эта кнопка доступна только в день создания документа.
Код

```1c
    Процедура ДействияФормыДействиеЗаполнитьИПровести(Кнопка)

    // Заполнять с проведением можно документы с текущей датой
    Если НачалоДня(Дата) = НачалоДня(ТекущаяДата()) Тогда
    Если НЕ ЭтоНовый() Тогда

    // Если документ ранее был записан, то он будет переноситься в конец дня из-за оперативного проведения, о чем следует предупредить.
    Ответ = Вопрос("В режиме заполнения с проведением документ будет проводиться оперативно. " + Символы.ПС + "Продолжить?", РежимДиалогаВопрос.ДаНет);
    Если НЕ Ответ = КодВозвратаДиалога.Да Тогда
    Возврат;
    КонецЕсли;
    КонецЕсли;
    Иначе
    Предупреждение("Дата документа отличается от текущей. Оперативное проведение невозможно.
    |Документ заполнен не будет!");
    Возврат;
    КонецЕсли;
```
---
а можно всё таки подвесить эти все махинации на событие ПередЗаписью?
---
а можно всё таки подвесить эти все махинации на событие ПередЗаписью?
Не проще объяснить людям что Кнопка "Заполнить и провести" активна в день создания документа?
---
у нас заявка может формироваться сегодня.а резерв бывает через день,через два,а то и через 3 ставиться и только в статусе: На согласовании и в статусе: Готов к отбору.
---
Можно в вашу кнопку прописать

```1c
    ЭтотОбъект.Дата = ТекущаяДата();
    ДействияФормыДействиеЗаполнитьИПровести(Неопределено);
```

Попробуйте...
---
Можно запретить делать резервы через ЗаказПокупателя (При открытии формы документа 2 строчки в конец процедуры)

```1c
    ЭлементыФормы.ДействияФормы.Кнопки.ПодменюЗаполнитьИПровести.Доступность = Ложь;
    ЭлементыФормы.Товары.Колонки.Размещение.Доступность = Ложь;
```

и вводить РезервированиеТоваров? где и заполнять проще. Пришел товар, ввели документ, товар зарезервировался. нет?
---
сейчас по кнопке, выше вашего текста,набросал:
  Если Статус = Перечисления.СтатусЗаказа.Сформирован Тогда
   Сообщить("Резерв в статусте "+ Статус + " установить нельзя");
  ИначеЕсли Статус = Перечисления.СтатусЗаказа.ВОтборе Тогда
   Сообщить("Установить резервы можно только в статусе 'На согласовании' и 'Готов к отбору'");
  ИначеЕсли Статус= Перечисления.СтатусЗаказа.Собран Тогда
   Сообщить("Установить резервы можно только в статусе 'На согласовании' и 'Готов к отбору'");
  ИначеЕсли Статус = Перечисления.СтатусЗаказа.Выполнен Тогда
   Сообщить("Установить резервы можно только в статусе 'На согласовании' и 'Готов к отбору'");
  иначе
  // Заполнять с проведением можно документы с текущей датой
    Если НачалоДня(Дата) = НачалоДня(ТекущаяДата()) Тогда
        Если НЕ ЭтоНовый() Тогда

Если не красивый код,извиняйте,подправлю. Поэтому даже и не знаю как правильно сделать,через кнопку Заполнить и провести или через ОК,короч хз, директор хочет чтобы через ОК, а мне проще через кнопку((
---
ОК,короч хз, директор хочет чтобы через ОК, а мне проще через кн
Вы же в курсе что кнопка ОК - Это сначало Записать потом Провести.
Если нужно по кнопке ОК - то попробуйте ПерезЗаписью() формы документа в конце пробежаться по товарам и

```1c
    Если ЗначениеЗаполнено(Строка.Размещение) Тогда
    ЗаполнРазмещение.Добавить("Заполнено");
    КонецЕсли;
```

Где ЗаполнРазмещение - СписокЗначений, после чего

```1c
    Если ЗаполнРазмещение.Количество()=0 Тогда
    ЭтотОбъект.Дата = ТекущаяДата();
    ДействияФормыДействиеЗаполнитьИПровести(Неопределено);
    КонецЕсли;
```

(54) у нас заявка может формироваться сегодня.а резерв бывает через день
Вот о чём и речь, удобнее если для резерва нужно ввести документ РезервированиеТовара, который можно хоть 25 раз перепровести и всё что угодно делать со строками в нём, а при проведении его можно и получить() объект заказ на основании которого он создан, и его отредактировать нужные реквизиты.
---
Спасибо огромное,вы мне очень помогли во всём разобраться. В крут!)))
---
Спасибо всем. Тема Закрыта.