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