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