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