#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда
#Область ПрограммныйИнтерфейс
#Область ЗаполнениеУсловийЗакупок
Процедура ЗаполнитьУсловияЗакупок(Знач УсловияЗакупок) Экспорт
Если УсловияЗакупок = Неопределено Тогда
Возврат;
КонецЕсли;
Если ЗначениеЗаполнено(УсловияЗакупок.Организация) И Организация.Пустая() Тогда
Организация = УсловияЗакупок.Организация;
КонецЕсли;
Если ЗначениеЗаполнено(УсловияЗакупок.Склад) И Склад.Пустая() Тогда
Склад = УсловияЗакупок.Склад;
СтруктураОтветственного = ЗакупкиСервер.ПолучитьОтветственногоПоСкладу(Склад, Менеджер);
Если СтруктураОтветственного <> Неопределено Тогда
Принял = СтруктураОтветственного.Ответственный;
ПринялДолжность = СтруктураОтветственного.ОтветственныйДолжность;
КонецЕсли;
КонецЕсли;
Если ЗначениеЗаполнено(УсловияЗакупок.Контрагент) И УсловияЗакупок.Контрагент <> Контрагент Тогда
Контрагент = УсловияЗакупок.Контрагент;
БанковскийСчетКонтрагента = ЗначениеНастроекПовтИсп.ПолучитьБанковскийСчетКонтрагентаПоУмолчанию(Контрагент);
КонецЕсли;
ПартнерыИКонтрагенты.ЗаполнитьКонтрагентаПартнераПоУмолчанию(Партнер, Контрагент);
Если УсловияЗакупок.ИспользуютсяДоговорыКонтрагентов <> Неопределено И УсловияЗакупок.ИспользуютсяДоговорыКонтрагентов Тогда
ХозяйственнаяОперацияДоговора = Перечисления.ХозяйственныеОперации.ПроизводствоУПереработчика;
Параметрыобъекта = ПараметрыОбъектаССоглашением();
Договор = ЗакупкиСервер.ПолучитьДоговорПоУмолчанию(Параметрыобъекта, ХозяйственнаяОперацияДоговора);
ЗакупкиВызовСервера.ЗаполнитьБанковскиеСчетаПоДоговору(
Договор,
БанковскийСчетОрганизации,
БанковскийСчетКонтрагента);
КонецЕсли;
КонецПроцедуры
Процедура ЗаполнитьУсловияЗакупокПоУмолчанию() Экспорт
Если ЗначениеЗаполнено(Партнер) Тогда
ПараметрыОтбора = Новый Структура;
ПараметрыОтбора.Вставить("УчитыватьГруппыСкладов", Истина);
ПараметрыОтбора.Вставить("ИсключитьГруппыСкладовДоступныеВЗаказах", Истина);
УсловияЗакупокПоУмолчанию = ЗакупкиСервер.ПолучитьУсловияЗакупокПоУмолчанию(Партнер, ПараметрыОтбора);
Если УсловияЗакупокПоУмолчанию <> Неопределено Тогда
ЗаполнитьУсловияЗакупок(УсловияЗакупокПоУмолчанию);
Иначе
ПартнерыИКонтрагенты.ЗаполнитьКонтрагентаПартнераПоУмолчанию(Партнер, Контрагент);
КонецЕсли;
БанковскийСчетКонтрагента = ЗначениеНастроекПовтИсп.ПолучитьБанковскийСчетКонтрагентаПоУмолчанию(
Контрагент,
,
БанковскийСчетКонтрагента);
КонецЕсли;
КонецПроцедуры
#КонецОбласти
#КонецОбласти
#Область ОбработчикиСобытий
Процедура ОбработкаПроверкиЗаполнения(Отказ, ПроверяемыеРеквизиты)
МассивНепроверяемыхРеквизитов = Новый Массив;
Если ПоступлениеПоЗаказам Тогда
МассивНепроверяемыхРеквизитов.Добавить("Товары");
Если Товары.Количество() = 0 И ВозвратныеОтходы.Количество() = 0 Тогда
ТекстСообщения = НСтр("ru = 'Необходимо заполнить продукцию или возвратные отходы'");
ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстСообщения, ЭтотОбъект,,, Отказ);
КонецЕсли;
КонецЕсли;
НоменклатураСервер.ПроверитьЗаполнениеХарактеристик(
ЭтотОбъект,
МассивНепроверяемыхРеквизитов,
Отказ);
ПараметрыПроверки = НоменклатураСервер.ПараметрыПроверкиЗаполненияХарактеристик();
ПараметрыПроверки.ИмяТЧ = "ВозвратныеОтходы";
НоменклатураСервер.ПроверитьЗаполнениеХарактеристик(
ЭтотОбъект,
МассивНепроверяемыхРеквизитов,
Отказ,
ПараметрыПроверки);
#Область Количество
ПараметрыПроверкиКоличества = Документы.ПоступлениеОтПереработчика.ПараметрыТЧДляОкругления();
НоменклатураСервер.ПроверитьЗаполнениеКоличества(
ЭтотОбъект, ПроверяемыеРеквизиты, Отказ, ПараметрыПроверкиКоличества["Товары"]);
НоменклатураСервер.ПроверитьЗаполнениеКоличества(
ЭтотОбъект, ПроверяемыеРеквизиты, Отказ, ПараметрыПроверкиКоличества["ВозвратныеОтходы"]);
#КонецОбласти
ПараметрыУказанияСерий = НоменклатураСервер.ПараметрыУказанияСерий(ЭтотОбъект, Документы.ПоступлениеОтПереработчика);
МассивПараметров = Новый Массив;
МассивПараметров.Добавить(ПараметрыУказанияСерий.Товары);
МассивПараметров.Добавить(ПараметрыУказанияСерий.ВозвратныеОтходы);
НоменклатураСервер.ПроверитьЗаполнениеСерий(ЭтотОбъект,
МассивПараметров,
Отказ,
МассивНепроверяемыхРеквизитов);
ПараметрыФормированияТаблицы = РегистрыНакопления.РаспоряженияНаОтгрузкуИВозврат.НовыйПараметрыФормированияРазвернутойТаблицы();
ПараметрыФормированияТаблицы.ТекстУсловия =
"(Распоряжение, Номенклатура, Характеристика) В
| (ВЫБРАТЬ РАЗЛИЧНЫЕ
| Т.ЗаказПереработчику,
| Т.Номенклатура,
| Т.Характеристика
| ИЗ ВтДанные КАК Т)";
ПараметрыФормированияТаблицы.Группировка = "Распоряжение, Номенклатура, Характеристика";
ПараметрыФормированияТаблицы.Показатели = "Заказано";
ПараметрыФормированияТаблицы.Ресурсы = "Количество";
ПараметрыФормированияТаблицы.ИмяВременнойТаблицы = "ВТ_РаспоряженияНаОтгрузкуОборотыРазвернутая";
ПараметрыФормированияТаблицы.Индексы = ПараметрыФормированияТаблицы.Группировка;
ВТ_РаспоряженияНаОтгрузкуОборотыРазвернутая =
РегистрыНакопления.РаспоряженияНаОтгрузкуИВозврат.ТекстЗапросаРазвернутаяТаблица(
ПараметрыФормированияТаблицы);
#Область ЗапросПроверки
Запрос = Новый Запрос(
"ВЫБРАТЬ
| ""Товары"" КАК ИмяТЧ,
| &СинонимТовары КАК СинонимТЧ,
| Т.НомерСтроки,
| Т.Номенклатура,
| Т.Характеристика,
| Т.ЗаказПереработчику
|ПОМЕСТИТЬ Товары
|ИЗ
| &Товары КАК Т
|;
|
|
|ВЫБРАТЬ
| ""ВозвратныеОтходы"" ИмяТЧ,
| &СинонимВО КАК СинонимТЧ,
| Т.НомерСтроки,
| Т.Номенклатура,
| Т.Характеристика,
| Т.ЗаказПереработчику,
| Т.Цена,
| Т.Сумма
|ПОМЕСТИТЬ ВозвратныеОтходы
|ИЗ
| &ВозвратныеОтходы КАК Т
|;
|
|
|ВЫБРАТЬ
| Т.ИмяТЧ,
| Т.СинонимТЧ,
| Т.НомерСтроки,
| Т.Номенклатура,
| Т.Характеристика,
| ЕСТЬNULL(Заказ.Ссылка, &ЗаказПереработчику) КАК ЗаказПереработчику,
| Т.Цена,
| Т.Сумма
|ПОМЕСТИТЬ ВтДанные
|ИЗ
| ВозвратныеОтходы КАК Т
| ЛЕВОЕ СОЕДИНЕНИЕ Документ.ЗаказПереработчику КАК Заказ
| ПО Т.ЗаказПереработчику = Заказ.Ссылка
|
|ОБЪЕДИНИТЬ ВСЕ
|
|ВЫБРАТЬ
| Т.ИмяТЧ,
| Т.СинонимТЧ,
| Т.НомерСтроки,
| Т.Номенклатура,
| Т.Характеристика,
| ЕСТЬNULL(Заказ.Ссылка, &ЗаказПереработчику),
| NULL КАК Цена,
| NULL КАК Сумма
|ИЗ
| Товары КАК Т
| ЛЕВОЕ СОЕДИНЕНИЕ Документ.ЗаказПереработчику КАК Заказ
| ПО Т.ЗаказПереработчику = Заказ.Ссылка
|;
|
|" + ВТ_РаспоряженияНаОтгрузкуОборотыРазвернутая +
ОбщегоНазначения.РазделительПакетаЗапросов() + "
|ВЫБРАТЬ
| Т.ИмяТЧ,
| Т.СинонимТЧ,
| Т.НомерСтроки КАК НомерСтроки,
| ВЫБОР КОГДА &ПроверятьЗаказ И Т.ЗаказПереработчику = ЗНАЧЕНИЕ(Документ.ЗаказПереработчику.ПустаяСсылка) ТОГДА
| ИСТИНА
| ИНАЧЕ
| ЛОЖЬ
| КОНЕЦ КАК ОшибкаЗаказ,
| ВЫБОР КОГДА Т.Цена = 0 ТОГДА
| ИСТИНА
| ИНАЧЕ
| ЛОЖЬ
| КОНЕЦ КАК ОшибкаЦена,
| ВЫБОР КОГДА Т.Сумма = 0 ТОГДА
| ИСТИНА
| ИНАЧЕ
| ЛОЖЬ
| КОНЕЦ КАК ОшибкаСумма,
| ВЫБОР КОГДА Товар.Ссылка ЕСТЬ NULL ТОГДА
| ИСТИНА
| ИНАЧЕ
| ЛОЖЬ
| КОНЕЦ КАК ОшибкаТип,
| ВЫБОР КОГДА ЕСТЬNULL(Обороты.ЗаказаноКоличествоОборот, 0) > 0 ТОГДА
| ИСТИНА
| ИНАЧЕ
| ЛОЖЬ
| КОНЕЦ КАК ОшибкаСостав
|ИЗ
| ВтДанные КАК Т
|
| ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Номенклатура КАК Товар
| ПО Т.Номенклатура = Товар.Ссылка
| И Товар.ТипНоменклатуры В (ЗНАЧЕНИЕ(Перечисление.ТипыНоменклатуры.Товар),
| ЗНАЧЕНИЕ(Перечисление.ТипыНоменклатуры.Работа),
| ЗНАЧЕНИЕ(Перечисление.ТипыНоменклатуры.МногооборотнаяТара))
|
| ЛЕВОЕ СОЕДИНЕНИЕ ВТ_РаспоряженияНаОтгрузкуОборотыРазвернутая КАК Обороты
| ПО Т.Номенклатура = Обороты.Номенклатура
| И Т.Характеристика = Обороты.Характеристика
| И Т.ЗаказПереработчику = Обороты.Распоряжение
|ГДЕ
| (&ПроверятьЗаказ И Т.ЗаказПереработчику = ЗНАЧЕНИЕ(Документ.ЗаказПереработчику.ПустаяСсылка))
| ИЛИ (Товар.Ссылка ЕСТЬ NULL)
| ИЛИ (Т.Цена = 0)
| ИЛИ (Т.Сумма = 0)
| ИЛИ (ЕСТЬNULL(Обороты.ЗаказаноКоличествоОборот, 0) > 0)
|
|УПОРЯДОЧИТЬ ПО
| ИмяТЧ,
| НомерСтроки
|");
#КонецОбласти
Запрос.УстановитьПараметр("ЗаказПереработчику", ЗаказПереработчику);
Запрос.УстановитьПараметр("СинонимТовары", НСтр("ru = 'Продукция'"));
Запрос.УстановитьПараметр("СинонимВО", НСтр("ru = 'Возвратные отходы'"));
Запрос.УстановитьПараметр("Товары", Товары.Выгрузить(, "НомерСтроки, Номенклатура, Характеристика, ЗаказПереработчику"));
Запрос.УстановитьПараметр("ВозвратныеОтходы", ВозвратныеОтходы.Выгрузить(, "НомерСтроки, Номенклатура, Характеристика, ЗаказПереработчику, Цена, Сумма"));
Запрос.УстановитьПараметр("ПроверятьЗаказ", (ПоступлениеПоЗаказам И Не ЗначениеЗаполнено(ЗаказПереработчику)));
Выборка = Запрос.Выполнить().Выбрать();
МассивНепроверяемыхРеквизитов.Добавить("ВозвратныеОтходы.Цена");
МассивНепроверяемыхРеквизитов.Добавить("ВозвратныеОтходы.Сумма");
#Область СообщенияОбОшибках
Пока Выборка.Следующий() Цикл
Если Выборка.ОшибкаЗаказ Тогда
ТекстОшибки = НСтр("ru='Не заполнено поле ""Заказ переработчику"" в строке %1 списка ""%2""'");
ТекстОшибки = СтрШаблон(ТекстОшибки, Выборка.НомерСтроки, Выборка.СинонимТЧ);
ПутьКТЧ = ОбщегоНазначенияКлиентСервер.ПутьКТабличнойЧасти(
Выборка.ИмяТЧ,
Выборка.НомерСтроки,
"ЗаказПереработчику");
ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстОшибки, ЭтотОбъект, ПутьКТЧ, , Отказ);
КонецЕсли;
Если Выборка.ОшибкаТип Тогда
ТекстОшибки = НСтр("ru='Необходимо выбрать номенклатуру с типом ""Товар"" или ""Тара"" в строке %1 списка ""%2""'");
ТекстОшибки = СтрШаблон(ТекстОшибки, Выборка.НомерСтроки, Выборка.СинонимТЧ);
ПутьКТЧ = ОбщегоНазначенияКлиентСервер.ПутьКТабличнойЧасти(
Выборка.ИмяТЧ,
Выборка.НомерСтроки,
"Номенклатура");
ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстОшибки, ЭтотОбъект, ПутьКТЧ, , Отказ);
КонецЕсли;
Если Выборка.ОшибкаЦена Тогда
ТекстОшибки = НСтр("ru='Необходимо указать цену, по которой будет оприходованы возвратные отходы в строке %1 списка ""%2""'");
ТекстОшибки = СтрШаблон(ТекстОшибки, Выборка.НомерСтроки, Выборка.СинонимТЧ);
ПутьКТЧ = ОбщегоНазначенияКлиентСервер.ПутьКТабличнойЧасти(
Выборка.ИмяТЧ,
Выборка.НомерСтроки,
"Цена");
ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстОшибки, ЭтотОбъект, ПутьКТЧ, , Отказ);
КонецЕсли;
Если Выборка.ОшибкаСумма Тогда
ТекстОшибки = НСтр("ru='Необходимо указать сумму, по которой будет оприходованы возвратные отходы в строке %1 списка ""%2""'");
ТекстОшибки = СтрШаблон(ТекстОшибки, Выборка.НомерСтроки, Выборка.СинонимТЧ);
ПутьКТЧ = ОбщегоНазначенияКлиентСервер.ПутьКТабличнойЧасти(
Выборка.ИмяТЧ,
Выборка.НомерСтроки,
"Сумма");
ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстОшибки, ЭтотОбъект, ПутьКТЧ, , Отказ);
КонецЕсли;
КонецЦикла;
#КонецОбласти
МассивНепроверяемыхРеквизитов.Добавить("Подразделение");
Если Не ЗначениеЗаполнено(Подразделение) Тогда
ТекстОшибки = НСтр("ru='Необходимо указать подразделение'");
ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстОшибки, ЭтотОбъект, "Подразделение", , Отказ);
КонецЕсли;
ОбщегоНазначения.УдалитьНепроверяемыеРеквизитыИзМассива(ПроверяемыеРеквизиты, МассивНепроверяемыхРеквизитов);
Если Не Отказ И ОбщегоНазначенияУТ.ПроверитьЗаполнениеРеквизитовОбъекта(ЭтотОбъект, ПроверяемыеРеквизиты) Тогда
Отказ = Истина;
КонецЕсли;
ЗакупкиСервер.ПроверитьКорректностьЗаполненияДокументаЗакупки(ЭтотОбъект,Отказ);
ПоступлениеОтПереработчикаЛокализация.ОбработкаПроверкиЗаполнения(ЭтотОбъект, Отказ, ПроверяемыеРеквизиты);
КонецПроцедуры
Процедура ОбработкаЗаполнения(ДанныеЗаполнения, СтандартнаяОбработка)
Если ТипЗнч(ДанныеЗаполнения) = Тип("Структура") Тогда
Если ДанныеЗаполнения.Свойство("МассивЗаказов") Тогда
ЗаполнитьДокументПоПараметрам(ДанныеЗаполнения);
Иначе
ЗаполнитьДокументПоОтбору(ДанныеЗаполнения);
КонецЕсли;
ИначеЕсли ТипЗнч(ДанныеЗаполнения) = Тип("ДокументСсылка.ОтчетПереработчика") Тогда
ЗаполнитьНаОснованииОтчетаПереработчика(ДанныеЗаполнения);
ИначеЕсли ТипЗнч(ДанныеЗаполнения) = Тип("ДокументСсылка.ЗаказПереработчику") Тогда
МассивЗаказов = Новый Массив;
МассивЗаказов.Добавить(ДанныеЗаполнения);
ЗаполнитьНаОснованииЗаказаПереработчику(МассивЗаказов);
КонецЕсли;
ПоступлениеОтПереработчикаЛокализация.ОбработкаЗаполнения(ЭтотОбъект, ДанныеЗаполнения, СтандартнаяОбработка);
ИнициализироватьДокумент(ДанныеЗаполнения);
ДополнительныеСвойства.Вставить("НеобходимостьЗаполненияСчетаПриФОИспользоватьНесколькоСчетовЛожь", Ложь);
КонецПроцедуры
Процедура ПередЗаписью(Отказ, РежимЗаписи, РежимПроведения)
Если ОбменДанными.Загрузка Тогда
Возврат;
КонецЕсли;
ОбновлениеИнформационнойБазы.ПроверитьОбъектОбработан(ЭтотОбъект);
ПроведениеДокументов.ПередЗаписьюДокумента(ЭтотОбъект, РежимЗаписи, РежимПроведения);
#Область Округление
ПараметрыОкругления = Документы.ПоступлениеОтПереработчика.ПараметрыТЧДляОкругления();
НоменклатураСервер.ОкруглитьКоличествоШтучныхТоваров(
ЭтотОбъект, РежимЗаписи, ПараметрыОкругления["Товары"]);
НоменклатураСервер.ОкруглитьКоличествоШтучныхТоваров(
ЭтотОбъект, РежимЗаписи, ПараметрыОкругления["ВозвратныеОтходы"]);
#КонецОбласти
Если ПоступлениеПоЗаказам И ЗначениеЗаполнено(ЗаказПереработчику) Тогда
Для Каждого ТекСтрока Из Товары Цикл
Если Не ЗначениеЗаполнено(ТекСтрока.ЗаказПереработчику) Тогда
ТекСтрока.ЗаказПереработчику = ЗаказПереработчику;
ТекСтрока.Распоряжение = Распоряжение;
КонецЕсли;
КонецЦикла;
Для Каждого ТекСтрока Из ВозвратныеОтходы Цикл
Если Не ЗначениеЗаполнено(ТекСтрока.ЗаказПереработчику) Тогда
ТекСтрока.ЗаказПереработчику = ЗаказПереработчику;
ТекСтрока.Распоряжение = Распоряжение;
КонецЕсли;
КонецЦикла;
КонецЕсли;
Если НЕ ПоступлениеПоЗаказам
И Не РасчетСебестоимостиПовтИсп.ПартионныйУчетВерсии22(Дата) Тогда
ЗаказыСервер.УстановитьКлючВСтрокахТабличнойЧасти(ЭтотОбъект, "Товары", "МаксимальныйКодСтроки");
ЗаказыСервер.УстановитьКлючВСтрокахТабличнойЧасти(ЭтотОбъект, "ВозвратныеОтходы", "МаксимальныйКодСтроки");
КонецЕсли;
ПараметрыУказанияСерий = НоменклатураСервер.ПараметрыУказанияСерий(ЭтотОбъект, Документы.ПоступлениеОтПереработчика);
НоменклатураСервер.ОчиститьНеиспользуемыеСерии(ЭтотОбъект, ПараметрыУказанияСерий.Товары);
НоменклатураСервер.ОчиститьНеиспользуемыеСерии(ЭтотОбъект, ПараметрыУказанияСерий.ВозвратныеОтходы);
ОбщегоНазначенияУТ.ИзменитьПризнакСогласованностиДокумента(ЭтотОбъект, РежимЗаписи);
Если РежимЗаписи = РежимЗаписиДокумента.Проведение Тогда
МестаУчета = РегистрыСведений.АналитикаУчетаНоменклатуры.МестаУчета(
Перечисления.ХозяйственныеОперации.ПоступлениеОтПереработчика,
Склад,
Подразделение,
Партнер);
ИменаПолей = РегистрыСведений.АналитикаУчетаНоменклатуры.ИменаПолейКоллекцииПоУмолчанию();
РеквизитыСклада = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(Склад, "ЭтоГруппа, ВыборГруппы");
Если РеквизитыСклада.ЭтоГруппа
И РеквизитыСклада.ВыборГруппы = Перечисления.ВыборГруппыСкладов.РазрешитьВЗаказахИНакладных Тогда
ИменаПолей.Вставить("Произвольный", "Склад");
КонецЕсли;
РегистрыСведений.АналитикаУчетаНоменклатуры.ЗаполнитьВКоллекции(
Товары,
МестаУчета,
ИменаПолей);
РегистрыСведений.АналитикаУчетаНоменклатуры.ЗаполнитьВКоллекции(
ВозвратныеОтходы,
МестаУчета,
ИменаПолей);
ЗаполнитьВидыЗапасовДокумента();
КонецЕсли;
ОбщегоНазначенияУТ.ЗаполнитьИдентификаторыДокумента(ЭтотОбъект, "Товары,ВозвратныеОтходы");
ПараметрыУчетнойПолитики = НастройкиНалоговУчетныхПолитик.ДействующиеПараметрыНалоговУчетныхПолитикНаДату("УчетнаяПолитикаФинансовогоУчета",
Организация,
Дата);
УчетГотовойПродукцииПоПлановойСтоимости = ?(ПараметрыУчетнойПолитики <> Неопределено,
ПараметрыУчетнойПолитики["УчетГотовойПродукцииПоПлановойСтоимости"],
Ложь);
Если НЕ УчетГотовойПродукцииПоПлановойСтоимости Тогда
ВидЦены = Справочники.ВидыЦен.ПустаяСсылка();
Для Каждого Стр Из Товары Цикл
Стр.Цена = 0;
Стр.Сумма = 0;
КонецЦикла;
КонецЕсли;
ПоступлениеОтПереработчикаЛокализация.ПередЗаписью(ЭтотОбъект, Отказ, РежимЗаписи, РежимПроведения);
КонецПроцедуры
Процедура ПриЗаписи(Отказ)
Если ОбменДанными.Загрузка Тогда
Возврат;
КонецЕсли;
ПроведениеДокументов.ПриЗаписиДокумента(ЭтотОбъект, Отказ);
ПоступлениеОтПереработчикаЛокализация.ПриЗаписи(ЭтотОбъект, Отказ);
КонецПроцедуры
Процедура ОбработкаПроведения(Отказ, РежимПроведения)
ДополнительныеСвойства.Вставить("ПараметрыЗаполненияВидовЗапасов", ЗапасыСервер.ПараметрыЗаполненияВидовЗапасов());
ПроведениеДокументов.ОбработкаПроведенияДокумента(ЭтотОбъект, Отказ);
ПоступлениеОтПереработчикаЛокализация.ОбработкаПроведения(ЭтотОбъект, Отказ, РежимПроведения);
КонецПроцедуры
Процедура ОбработкаУдаленияПроведения(Отказ)
ДополнительныеСвойства.Вставить("ПараметрыЗаполненияВидовЗапасов", ЗапасыСервер.ПараметрыЗаполненияВидовЗапасов());
ПроведениеДокументов.ОбработкаУдаленияПроведенияДокумента(ЭтотОбъект, Отказ);
ПоступлениеОтПереработчикаЛокализация.ОбработкаУдаленияПроведения(ЭтотОбъект, Отказ);
КонецПроцедуры
Процедура ПриКопировании(ОбъектКопирования)
Согласован = Ложь;
ПоступлениеПоЗаказам = Ложь;
ЗаказПереработчику = Документы.ЗаказПереработчику.ПустаяСсылка();
ДатаВходящегоДокумента = Дата(1,1,1);
НомерВходящегоДокумента = "";
Для Каждого ТекСтрока Из Товары Цикл
ТекСтрока.ЗаказПереработчику = Документы.ЗаказПереработчику.ПустаяСсылка();
ТекСтрока.Распоряжение = Неопределено;
ТекСтрока.КодСтроки = 0;
КонецЦикла;
Для Каждого ТекСтрока Из ВозвратныеОтходы Цикл
ТекСтрока.ЗаказПереработчику = Документы.ЗаказПереработчику.ПустаяСсылка();
ТекСтрока.Распоряжение = Неопределено;
ТекСтрока.КодСтроки = 0;
КонецЦикла;
ТоварыСерии.Очистить();
ВозвратныеОтходыСерии.Очистить();
ИнициализироватьДокумент();
ОбщегоНазначенияУТ.ОчиститьИдентификаторыДокумента(ЭтотОбъект, "Товары,ВозвратныеОтходы");
ПоступлениеОтПереработчикаЛокализация.ПриКопировании(ЭтотОбъект, ОбъектКопирования);
КонецПроцедуры
#КонецОбласти
#Область СлужебныеПроцедурыИФункции
#Область ИнициализацияИЗаполнение
Процедура ЗаполнитьДокументПоПараметрам(СтруктураЗаполнения)
МассивЗаказов = СтруктураЗаполнения.МассивЗаказов;
ПараметрыЗаполнения = Документы.ПоступлениеОтПереработчика.ПараметрыЗаполненияДокумента();
ЗаполнитьЗначенияСвойств(ПараметрыЗаполнения, СтруктураЗаполнения);
Документы.ПоступлениеОтПереработчика.ИнициализироватьПараметрыЗаполнения(ПараметрыЗаполнения,
СтруктураЗаполнения.РеквизитыШапки, МассивЗаказов);
Если НЕ Документы.ПоступлениеОтПереработчика.ПродукцияИОтходыВОднойТЧ(ЭтотОбъект) Тогда
ПараметрыЗаполнения.Ресурсы = Новый Массив(1);
ПараметрыЗаполнения.Ресурсы[0] = "ВозвратныеОтходы";
ТаблицаНакладная = Документы.ПоступлениеОтПереработчика.ДанныеТаблицыТоварыДокумента(ЭтотОбъект.Ссылка, "ВозвратныеОтходы");
Документы.ПоступлениеОтПереработчика.ЗаполнитьПоЗаказамОрдерам(ТаблицаНакладная, Ссылка, ПараметрыЗаполнения);
Если ПараметрыЗаполнения.ЗаполнятьПоОрдеру Тогда
КолонкаТаблицы = ТаблицаНакладная.Колонки.Количество;
КолонкаТаблицы.Имя = "КоличествоДоИзменения";
КолонкаТаблицы = ТаблицаНакладная.Колонки.КоличествоВОрдере;
КолонкаТаблицы.Имя = "Количество";
Иначе
КолонкаТаблицы = ТаблицаНакладная.Колонки.Количество;
КолонкаТаблицы.Имя = "КоличествоДоИзменения";
КолонкаТаблицы = ТаблицаНакладная.Колонки.КоличествоВЗаказе;
КолонкаТаблицы.Имя = "Количество";
КонецЕсли;
ТаблицаНакладная.Колонки.Удалить("КоличествоДоИзменения");
НакладныеСервер.УдалитьПустыеСтроки(ТаблицаНакладная, "Количество");
ВозвратныеОтходы.Загрузить(ТаблицаНакладная);
Документы.ПоступлениеОтПереработчика.ОбновитьЗависимыеРеквизитыТабличнойЧасти(ВозвратныеОтходы, ПараметрыЗаполнения);
ПараметрыЗаполнения.Ресурсы[0] = "Продукция";
ОбщегоНазначенияКлиентСервер.ДополнитьТаблицу(Документы.ПоступлениеОтПереработчика.ДанныеТаблицыТоварыДокумента(ЭтотОбъект.Ссылка),
ТаблицаНакладная);
Иначе
ТаблицаНакладная = Документы.ПоступлениеОтПереработчика.ДанныеТаблицыТоварыДокумента(ЭтотОбъект.Ссылка);
КонецЕсли;
Документы.ПоступлениеОтПереработчика.ЗаполнитьПоЗаказамОрдерам(ТаблицаНакладная, Ссылка, ПараметрыЗаполнения);
Если ПараметрыЗаполнения.ЗаполнятьПоОрдеру Тогда
КолонкаТаблицы = ТаблицаНакладная.Колонки.Количество;
КолонкаТаблицы.Имя = "КоличествоДоИзменения";
КолонкаТаблицы = ТаблицаНакладная.Колонки.КоличествоВОрдере;
КолонкаТаблицы.Имя = "Количество";
Иначе
КолонкаТаблицы = ТаблицаНакладная.Колонки.Количество;
КолонкаТаблицы.Имя = "КоличествоДоИзменения";
КолонкаТаблицы = ТаблицаНакладная.Колонки.КоличествоВЗаказе;
КолонкаТаблицы.Имя = "Количество";
КонецЕсли;
НакладныеСервер.УдалитьПустыеСтроки(ТаблицаНакладная, "Количество");
Товары.Загрузить(ТаблицаНакладная);
Документы.ПоступлениеОтПереработчика.ОбновитьЗависимыеРеквизитыТабличнойЧасти(Товары, ПараметрыЗаполнения);
Документы.ПоступлениеОтПереработчика.ЗаполнитьШапкуДокументаПоЗаказу(ЭтотОбъект, ПараметрыЗаполнения, МассивЗаказов);
ПараметрыУказанияСерий = НоменклатураСервер.ПараметрыУказанияСерий(ЭтотОбъект, Документы.ПоступлениеОтПереработчика);
НоменклатураСервер.ЗаполнитьСтатусыУказанияСерий(ЭтотОбъект, ПараметрыУказанияСерий.Товары);
НоменклатураСервер.ЗаполнитьСтатусыУказанияСерий(ЭтотОбъект, ПараметрыУказанияСерий.ВозвратныеОтходы);
КонецПроцедуры
Процедура ЗаполнитьНаОснованииОтчетаПереработчика(Знач ДокументОснование)
Запрос = Новый Запрос;
Запрос.УстановитьПараметр("ДокументОснование", ДокументОснование);
Запрос.Текст =
"ВЫБРАТЬ
| ОтчетПереработчика.Сделка КАК Сделка,
| ОтчетПереработчика.ЗаказПереработчику КАК ЗаказПереработчику,
| ОтчетПереработчика.Партнер КАК Партнер,
| ОтчетПереработчика.Контрагент КАК Контрагент,
| ОтчетПереработчика.Договор КАК Договор,
| ОтчетПереработчика.Организация КАК Организация,
| ОтчетПереработчика.Валюта КАК Валюта,
| ОтчетПереработчика.ПоЗаказам КАК ПоступлениеПоЗаказам,
| Заказ.Статус КАК СтатусДокумента,
| ОтчетПереработчика.Подразделение КАК Подразделение,
| НЕ Заказ.Проведен КАК ЕстьОшибкиПроведен,
|
| ВЫБОР КОГДА Заказ.Статус = ЗНАЧЕНИЕ(Перечисление.СтатусыЗаказовПереработчикам.КИсполнению)
| ИЛИ Заказ.Статус = ЗНАЧЕНИЕ(Перечисление.СтатусыЗаказовПереработчикам.Закрыт) ТОГДА
| ЛОЖЬ
| ИНАЧЕ
| ИСТИНА
| КОНЕЦ КАК ЕстьОшибкиСтатус,
|
| Заказ.БанковскийСчет КАК БанковскийСчетОрганизации,
| Заказ.НаправлениеДеятельности КАК НаправлениеДеятельности,
| ЕСТЬNULL(Заказ.УчетСырьяПоНазначениям, ЛОЖЬ) КАК УчетСырьяПоНазначениям
|ПОМЕСТИТЬ ВтКОформлению
|ИЗ
| Документ.ОтчетПереработчика КАК ОтчетПереработчика
|
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ
| Документ.ЗаказПереработчику КАК Заказ
| ПО
| ОтчетПереработчика.ЗаказПереработчику = Заказ.Ссылка
|
|ГДЕ
| ОтчетПереработчика.Ссылка = &ДокументОснование
|;
|
|
|ВЫБРАТЬ
| *
|ИЗ
| ВтКОформлению КАК ВтКОформлению
|;
|
|
|ВЫБРАТЬ ПЕРВЫЕ 1
| ЗаказыОстатки.Склад КАК Склад
|ИЗ
| РегистрНакопления.ЗаказыПоставщикам.Остатки(, (ЗаказПоставщику, КодСтроки) В(
| ВЫБРАТЬ РАЗЛИЧНЫЕ
| ТаблицаПродукция.ЗаказПереработчику КАК Распоряжение,
| ТаблицаПродукция.КодСтроки КАК КодСтроки
| ИЗ
| Документ.ОтчетПереработчика.Продукция КАК ТаблицаПродукция
| ГДЕ
| ТаблицаПродукция.Ссылка = &ДокументОснование
| И НЕ ТаблицаПродукция.Номенклатура.ТипНоменклатуры = ЗНАЧЕНИЕ(Перечисление.ТипыНоменклатуры.Работа)
|
| ОБЪЕДИНИТЬ ВСЕ
|
| ВЫБРАТЬ РАЗЛИЧНЫЕ
| ТаблицаВозвратныеОтходы.ЗаказПереработчику КАК Распоряжение,
| ТаблицаВозвратныеОтходы.КодСтроки КАК КодСтроки
| ИЗ
| Документ.ОтчетПереработчика.ВозвратныеОтходы КАК ТаблицаВозвратныеОтходы
| ГДЕ
| ТаблицаВозвратныеОтходы.Ссылка = &ДокументОснование
| И НЕ ТаблицаВозвратныеОтходы.Номенклатура.ТипНоменклатуры = ЗНАЧЕНИЕ(Перечисление.ТипыНоменклатуры.Работа))) КАК ЗаказыОстатки
|;
|
|
|ВЫБРАТЬ РАЗЛИЧНЫЕ
| ТаблицаПродукция.ЗаказПереработчику КАК Распоряжение,
| ТаблицаПродукция.КодСтроки КАК КодСтроки
|ИЗ
| Документ.ОтчетПереработчика.Продукция КАК ТаблицаПродукция
|ГДЕ
| ТаблицаПродукция.Ссылка = &ДокументОснование
| И НЕ ТаблицаПродукция.Номенклатура.ТипНоменклатуры = ЗНАЧЕНИЕ(Перечисление.ТипыНоменклатуры.Работа)
|
|ОБЪЕДИНИТЬ ВСЕ
|
|ВЫБРАТЬ РАЗЛИЧНЫЕ
| ТаблицаВозвратныеОтходы.ЗаказПереработчику,
| ТаблицаВозвратныеОтходы.КодСтроки
|ИЗ
| Документ.ОтчетПереработчика.ВозвратныеОтходы КАК ТаблицаВозвратныеОтходы
|ГДЕ
| ТаблицаВозвратныеОтходы.Ссылка = &ДокументОснование
| И НЕ ТаблицаВозвратныеОтходы.Номенклатура.ТипНоменклатуры = ЗНАЧЕНИЕ(Перечисление.ТипыНоменклатуры.Работа)";
РезультатЗапроса = Запрос.ВыполнитьПакет();
РеквизитыЗаказа = РезультатЗапроса[1].Выбрать();
Если НЕ РеквизитыЗаказа.Следующий() Тогда
ТекстОшибки = НСтр("ru = 'Отчет переработчика оформлен не по заказу.
|Поступление от переработчика необходимо создавать до оформления отчета переработчика.'");
ВызватьИсключение ТекстОшибки;
КонецЕсли;
МассивДопустимыхСтатусов = Новый Массив();
МассивДопустимыхСтатусов.Добавить(Перечисления.СтатусыЗаказовПереработчикам.КИсполнению);
МассивДопустимыхСтатусов.Добавить(Перечисления.СтатусыЗаказовПереработчикам.Закрыт);
ОбщегоНазначенияУТ.ПроверитьВозможностьВводаНаОсновании(
РеквизитыЗаказа.ЗаказПереработчику,
РеквизитыЗаказа.СтатусДокумента,
РеквизитыЗаказа.ЕстьОшибкиПроведен,
РеквизитыЗаказа.ЕстьОшибкиСтатус,
МассивДопустимыхСтатусов);
ЗаполнитьЗначенияСвойств(ЭтотОбъект, РеквизитыЗаказа);
СписокПродукции = РезультатЗапроса[3].Выгрузить();
МассивЗаказов = СписокПродукции.ВыгрузитьКолонку("Распоряжение");
МассивСкладов = РезультатЗапроса[2].Выгрузить().ВыгрузитьКолонку("Склад");
Если МассивСкладов.Количество() = 1 Тогда
СкладПоступления = МассивСкладов[0];
Склад = СкладПоступления;
КонецЕсли;
Документы.ПоступлениеОтПереработчика.ЗаполнитьПоЗаказам(ЭтотОбъект, МассивЗаказов, СписокПродукции);
СтруктураДействий = Новый Структура;
СтруктураДействий.Вставить("ПересчитатьКоличествоЕдиниц", ПроизводствоКлиентСервер.ПараметрыПересчетаКоличестваЕдиниц());
КэшируемыеЗначения = ПакетнаяОбработкаТабличнойЧастиКлиентСервер.ПолучитьСтруктуруКэшируемыеЗначения();
ПакетнаяОбработкаТабличнойЧастиСервер.ОбработатьТЧ(Товары, СтруктураДействий, КэшируемыеЗначения);
ПакетнаяОбработкаТабличнойЧастиСервер.ОбработатьТЧ(ВозвратныеОтходы, СтруктураДействий, КэшируемыеЗначения);
СоответствиеРеквизитов = Новый Соответствие;
СоответствиеРеквизитов.Вставить("ЗаказПереработчику","ЗаказПереработчику");
СоответствиеРеквизитов.Вставить("Распоряжение","Распоряжение");
ЗаказыСервер.ЗаполнитьРеквизитыШапкиПоТабличнымЧастям(СоответствиеРеквизитов, "Товары,ВозвратныеОтходы", ЭтотОбъект);
Если ПолучитьФункциональнуюОпцию("ИспользоватьПоступлениеПоНесколькимЗаказам") Тогда
Сделка = Справочники.СделкиСКлиентами.ПустаяСсылка();
КонецЕсли;
КонецПроцедуры
Процедура ЗаполнитьНаОснованииЗаказаПереработчику(МассивЗаказов, РеквизитыШапки = Неопределено)
Если РеквизитыШапки = Неопределено Тогда
ТекстЗапроса =
"ВЫБРАТЬ
| ЗаказПереработчику.Сделка КАК Сделка,
| ЗаказПереработчику.Ссылка КАК ЗаказПереработчику,
| ЗаказПереработчику.Партнер КАК Партнер,
| ЗаказПереработчику.Контрагент КАК Контрагент,
| ЗаказПереработчику.Договор КАК Договор,
| ЗаказПереработчику.Организация КАК Организация,
| ЗаказПереработчику.Валюта КАК Валюта,
|
| ЗаказПереработчику.Статус КАК СтатусДокумента,
| ЗаказПереработчику.Подразделение КАК Подразделение,
| НЕ ЗаказПереработчику.Проведен КАК ЕстьОшибкиПроведен,
|
| ВЫБОР КОГДА ЗаказПереработчику.Статус = ЗНАЧЕНИЕ(Перечисление.СтатусыЗаказовПереработчикам.КИсполнению)
| ИЛИ ЗаказПереработчику.Статус = ЗНАЧЕНИЕ(Перечисление.СтатусыЗаказовПереработчикам.Закрыт) ТОГДА
| ЛОЖЬ
| ИНАЧЕ
| ИСТИНА
| КОНЕЦ КАК ЕстьОшибкиСтатус,
|
| ЗаказПереработчику.ЗакупкаПодДеятельность КАК ЗакупкаПодДеятельность,
| ЗаказПереработчику.БанковскийСчет КАК БанковскийСчетОрганизации,
| ЗаказПереработчику.НаправлениеДеятельности КАК НаправлениеДеятельности,
| ЗаказПереработчику.УчетСырьяПоНазначениям КАК УчетСырьяПоНазначениям
|ИЗ
| Документ.ЗаказПереработчику КАК ЗаказПереработчику
|ГДЕ
| ЗаказПереработчику.Ссылка = &ДокументОснование
|;
|
|
|ВЫБРАТЬ
| ЗаказыПоставщикам.Склад.Родитель КАК ГруппаСкладов,
| ЕСТЬNULL(ЗаказыПоставщикам.Склад.Родитель.ВыборГруппы, НЕОПРЕДЕЛЕНО) КАК ВыборГруппы,
| МАКСИМУМ(ЗаказыПоставщикам.Склад) КАК Склад,
| КОЛИЧЕСТВО(РАЗЛИЧНЫЕ ЗаказыПоставщикам.Склад) КАК КоличествоСкладов
|ИЗ
| РегистрНакопления.ЗаказыПоставщикам.Остатки(, ЗаказПоставщику = &ДокументОснование) КАК ЗаказыПоставщикам
|
|СГРУППИРОВАТЬ ПО
| ЗаказыПоставщикам.Склад.Родитель";
Запрос = Новый Запрос(ТекстЗапроса);
Запрос.УстановитьПараметр("ДокументОснование", МассивЗаказов[0]);
РезультатЗапроса = Запрос.ВыполнитьПакет();
РеквизитыШапки = РезультатЗапроса[0].Выбрать();
РеквизитыШапки.Следующий();
ЗаполнитьЗначенияСвойств(ЭтотОбъект, РеквизитыШапки);
ВыборкаСклад = РезультатЗапроса[1].Выбрать();
Если ВыборкаСклад.Следующий() Тогда
ИспользоватьСкладыВТЧ = ПолучитьФункциональнуюОпцию("ИспользоватьСкладыВТабличнойЧастиДокументовЗакупки");
РазрешенВыборГруппы = ИспользоватьСкладыВТЧ
И ВыборкаСклад.ВыборГруппы = Перечисления.ВыборГруппыСкладов.РазрешитьВЗаказахИНакладных;
ЭтотОбъект.Склад = ?(ЗначениеЗаполнено(ВыборкаСклад.ГруппаСкладов) И РазрешенВыборГруппы И ВыборкаСклад.КоличествоСкладов > 1,
ВыборкаСклад.ГруппаСкладов,
ВыборкаСклад.Склад);
КонецЕсли;
МассивДопустимыхСтатусов = Новый Массив();
МассивДопустимыхСтатусов.Добавить(Перечисления.СтатусыЗаказовПереработчикам.КИсполнению);
МассивДопустимыхСтатусов.Добавить(Перечисления.СтатусыЗаказовПереработчикам.Закрыт);
ОбщегоНазначенияУТ.ПроверитьВозможностьВводаНаОсновании(
РеквизитыШапки.ЗаказПереработчику,
РеквизитыШапки.СтатусДокумента,
РеквизитыШапки.ЕстьОшибкиПроведен,
РеквизитыШапки.ЕстьОшибкиСтатус,
МассивДопустимыхСтатусов);
Иначе
ЗаполнитьЗначенияСвойств(ЭтотОбъект, РеквизитыШапки);
КонецЕсли;
Документы.ПоступлениеОтПереработчика.ЗаполнитьПоЗаказам(ЭтотОбъект, МассивЗаказов);
СтруктураДействий = Новый Структура;
СтруктураДействий.Вставить("ПересчитатьКоличествоЕдиниц", ПроизводствоКлиентСервер.ПараметрыПересчетаКоличестваЕдиниц());
КэшируемыеЗначения = ПакетнаяОбработкаТабличнойЧастиКлиентСервер.ПолучитьСтруктуруКэшируемыеЗначения();
ПакетнаяОбработкаТабличнойЧастиСервер.ОбработатьТЧ(Товары, СтруктураДействий, КэшируемыеЗначения);
ПакетнаяОбработкаТабличнойЧастиСервер.ОбработатьТЧ(ВозвратныеОтходы, СтруктураДействий, КэшируемыеЗначения);
СоответствиеРеквизитов = Новый Соответствие;
СоответствиеРеквизитов.Вставить("ЗаказПереработчику","ЗаказПереработчику");
СоответствиеРеквизитов.Вставить("Распоряжение","Распоряжение");
ЗаказыСервер.ЗаполнитьРеквизитыШапкиПоТабличнымЧастям(СоответствиеРеквизитов, "Товары,ВозвратныеОтходы", ЭтотОбъект);
ПоступлениеПоЗаказам = Истина;
Если ПолучитьФункциональнуюОпцию("ИспользоватьПоступлениеПоНесколькимЗаказам") Тогда
Сделка = Справочники.СделкиСКлиентами.ПустаяСсылка();
КонецЕсли;
КонецПроцедуры
Процедура ЗаполнитьДокументПоОтбору(Знач ДанныеЗаполнения)
Если ДанныеЗаполнения.Свойство("Партнер") Тогда
Партнер = ДанныеЗаполнения.Партнер;
ЗаполнитьУсловияЗакупокПоУмолчанию();
КонецЕсли;
КонецПроцедуры
Процедура ИнициализироватьДокумент(ДанныеЗаполнения = Неопределено)
Автор = Пользователи.ТекущийПользователь();
Организация = ЗначениеНастроекПовтИсп.ПолучитьОрганизациюПоУмолчанию(Организация);
ВидЦены = Справочники.ВидыЦен.ВидЦеныПлановойСтоимостиТМЦ(ВидЦены);
Если Не ЗначениеЗаполнено(Валюта) Тогда
Валюта = ДоходыИРасходыСервер.ПолучитьВалютуУправленческогоУчета(Справочники.ВидыЦен.ПолучитьРеквизитыВидаЦены(ВидЦены).ВалютаЦены);
КонецЕсли;
СтруктураПараметров = ДенежныеСредстваСервер.ПараметрыЗаполненияБанковскогоСчетаОрганизацииПоУмолчанию();
СтруктураПараметров.Организация = Организация;
СтруктураПараметров.БанковскийСчет = БанковскийСчетОрганизации;
БанковскийСчетОрганизации = ЗначениеНастроекПовтИсп.ПолучитьБанковскийСчетОрганизацииПоУмолчанию(СтруктураПараметров);
БанковскийСчетКонтрагента = ЗначениеНастроекПовтИсп.ПолучитьБанковскийСчетКонтрагентаПоУмолчанию(Контрагент, , БанковскийСчетКонтрагента);
Склад = ЗначениеНастроекПовтИсп.ПолучитьСкладПоУмолчанию(Склад, ПолучитьФункциональнуюОпцию("ИспользоватьСкладыВТабличнойЧастиДокументовЗакупки"), Истина);
ПараметрыЗаполнения = Документы.ПоступлениеОтПереработчика.ПараметрыЗаполненияВидаДеятельностиНДС(ЭтотОбъект);
УчетНДСУП.ЗаполнитьВидДеятельностиНДС(ЗакупкаПодДеятельность, ПараметрыЗаполнения);
ОтветственныеЛицаСервер.ЗаполнитьМенеджера(ЭтотОбъект, Ложь);
ЗаполнениеОбъектовПоСтатистике.ЗаполнитьРеквизитыОбъекта(ЭтотОбъект, ДанныеЗаполнения);
Если Не ЗначениеЗаполнено(Менеджер) Тогда
Менеджер = Пользователи.ТекущийПользователь();
КонецЕсли;
СтруктураОтветственного = ЗакупкиСервер.ПолучитьОтветственногоПоСкладу(Склад, Менеджер);
Если СтруктураОтветственного <> Неопределено Тогда
Принял = СтруктураОтветственного.Ответственный;
ПринялДолжность = СтруктураОтветственного.ОтветственныйДолжность;
КонецЕсли;
Распоряжение = ДокументОснованиеПриЗаполнении(ДанныеЗаполнения);
Если Не ЗначениеЗаполнено(Распоряжение) Тогда
УчетСырьяПоНазначениям = Истина;
КонецЕсли;
ВариантПриемкиТоваров = ЗакупкиСервер.ПолучитьВариантПриемкиТоваров(Распоряжение);
КонецПроцедуры
Функция ДокументОснованиеПриЗаполнении(ДанныеЗаполнения)
Если ТипЗнч(ДанныеЗаполнения) = Тип("Структура")
И ДанныеЗаполнения.Свойство("МассивЗаказов") Тогда
Возврат ДанныеЗаполнения.МассивЗаказов[0];
ИначеЕсли ТипЗнч(ДанныеЗаполнения) = Тип("ДокументСсылка.ОтчетПереработчика") Тогда
Возврат ДанныеЗаполнения;
ИначеЕсли ТипЗнч(ДанныеЗаполнения) = Тип("ДокументСсылка.ЗаказПереработчику") Тогда
Возврат ДанныеЗаполнения;
КонецЕсли;
Возврат Неопределено;
КонецФункции
#КонецОбласти
#Область ВидыЗапасов
Процедура ЗаполнитьВидыЗапасовДокумента()
Запрос = Новый Запрос(
"ВЫБРАТЬ
| ТаблицаТоваров.НомерСтроки КАК НомерСтроки,
| ТаблицаТоваров.ЗаказПереработчику КАК ЗаказПереработчику,
| ТаблицаТоваров.КодСтроки КАК КодСтроки,
| ТаблицаТоваров.Номенклатура КАК Номенклатура,
| ТаблицаТоваров.Сделка КАК Сделка,
| ТаблицаТоваров.Назначение КАК Назначение,
| ТаблицаТоваров.ВидЗапасов КАК ВидЗапасов
|
|ПОМЕСТИТЬ ТаблицаТоваровДокумента
|ИЗ
| &ТаблицаТоваров КАК ТаблицаТоваров
|;
|
|ВЫБРАТЬ
| ТаблицаТоваров.НомерСтроки КАК НомерСтроки,
| ТаблицаТоваров.Номенклатура КАК Номенклатура,
| ВЫБОР
| КОГДА &Проведен
| ТОГДА ТаблицаТоваров.ВидЗапасов
| ИНАЧЕ ЗНАЧЕНИЕ(Справочник.ВидыЗапасов.ПустаяСсылка)
| КОНЕЦ КАК ТекущийВидЗапасов,
| ЛОЖЬ КАК ЭтоВозвратнаяТара,
| &Организация КАК Организация,
| &ХозяйственнаяОперация КАК ХозяйственнаяОперация,
| ЗНАЧЕНИЕ(Справочник.СоглашенияСПоставщиками.ПустаяСсылка) КАК Соглашение,
| &Валюта КАК Валюта,
| &НалогообложениеНДС КАК НалогообложениеНДС,
| &НалогообложениеОрганизации КАК НалогообложениеОрганизации,
|
|
| ЗНАЧЕНИЕ(Справочник.Партнеры.ПустаяСсылка) КАК ВладелецТовара,
| ЗНАЧЕНИЕ(Справочник.Контрагенты.ПустаяСсылка) КАК Контрагент,
| ЗНАЧЕНИЕ(Справочник.ДоговорыКонтрагентов.ПустаяСсылка) КАК Договор,
| ЗНАЧЕНИЕ(Перечисление.ТипыЗапасов.Товар) КАК ТипЗапасов,
| НЕОПРЕДЕЛЕНО КАК ВидЦены
|ПОМЕСТИТЬ ИсходнаяТаблицаТоваров
|ИЗ
| ТаблицаТоваровДокумента КАК ТаблицаТоваров
|
| ЛЕВОЕ СОЕДИНЕНИЕ
| Справочник.ВидыЗапасов КАК ВидыЗапасов
| ПО
| ТаблицаТоваров.ВидЗапасов = ВидыЗапасов.Ссылка
|
| ЛЕВОЕ СОЕДИНЕНИЕ
| Документ.ЗаказПереработчику КАК ЗаказНаПереработку
| ПО
| ТаблицаТоваров.ЗаказПереработчику = ЗаказНаПереработку.Ссылка
|
| ЛЕВОЕ СОЕДИНЕНИЕ
| Документ.ЗаказПереработчику.Услуги КАК ЗаказНаПереработкуУслуги
| ПО
| ТаблицаТоваров.ЗаказПереработчику = ЗаказНаПереработкуУслуги.Ссылка
| И ТаблицаТоваров.КодСтроки = ЗаказНаПереработкуУслуги.Ссылка
|
|
|ГДЕ
| ТаблицаТоваров.ВидЗапасов = ЗНАЧЕНИЕ(Справочник.ВидыЗапасов.ПустаяСсылка)
| ИЛИ &ПерезаполнитьВидыЗапасов
| ИЛИ ВидыЗапасов.ТипЗапасов <> ЗНАЧЕНИЕ(Перечисление.ТипыЗапасов.Товар)
| ИЛИ ВидыЗапасов.Организация <> &Организация
|");
КолонкиТаблицыТоваров = "НомерСтроки, Номенклатура, ЗаказПереработчику, Сделка, Назначение, ВидЗапасов, КодСтроки";
ПараметрыУчетаПоОрганизации = УчетНДСУП.ПараметрыУчетаПоОрганизации(Организация, Дата);
Запрос.УстановитьПараметр("НалогообложениеОрганизации", ПараметрыУчетаПоОрганизации.ОсновноеНалогообложениеНДСПродажи);
Запрос.УстановитьПараметр("ТаблицаТоваров", Товары.Выгрузить(, КолонкиТаблицыТоваров));
Запрос.УстановитьПараметр("Организация", Организация);
Запрос.УстановитьПараметр("Валюта", Справочники.Валюты.ПустаяСсылка());
Запрос.УстановитьПараметр("НалогообложениеНДС", Перечисления.ТипыНалогообложенияНДС.ПустаяСсылка());
Запрос.УстановитьПараметр("ХозяйственнаяОперация", ХозяйственнаяОперация);
Запрос.УстановитьПараметр("ИспользоватьРаздельныйУчетПоНалогообложению",
НастройкиНалоговУчетныхПолитикПовтИсп.РаздельныйУчетТоваровПоНалогообложениюНДС(Организация, Дата));
Запрос.УстановитьПараметр("Проведен", Проведен);
ЗапасыСервер.ДополнитьВременныеТаблицыОбязательнымиКолонками(Запрос);
ЗапасыСервер.ПроверитьНеобходимостьПерезаполненияВидовЗапасовДокумента(ЭтотОбъект, Запрос);
Запрос.МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц;
Запрос.Выполнить();
ЗапасыСервер.ЗаполнитьВидыЗапасовПоУмолчанию(Запрос.МенеджерВременныхТаблиц, Товары);
Запрос.УстановитьПараметр("ТаблицаТоваров", ВозвратныеОтходы.Выгрузить(, КолонкиТаблицыТоваров));
Запрос.МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц;
Запрос.Выполнить();
ЗапасыСервер.ЗаполнитьВидыЗапасовПоУмолчанию(Запрос.МенеджерВременныхТаблиц, ВозвратныеОтходы);
КонецПроцедуры
#КонецОбласти
#Область Прочее
Функция ПараметрыОбъектаССоглашением(ИменаРеквизитов = "")
Если ПустаяСтрока(ИменаРеквизитов) Тогда
ИменаРеквизитов = "Партнер, Договор, Контрагент, Организация";
КонецЕсли;
ПараметрыОбъекта = Новый Структура(ИменаРеквизитов);
ЗаполнитьЗначенияСвойств(ПараметрыОбъекта, ЭтотОбъект);
ПараметрыОбъекта.Вставить("Соглашение", Справочники.СоглашенияСПоставщиками.ПустаяСсылка());
Возврат ПараметрыОбъекта;
КонецФункции
#КонецОбласти
#КонецОбласти
#КонецЕсли