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