#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда
#Область ПрограммныйИнтерфейс
Процедура ЗаполнитьУсловияЗакупок(Знач УсловияЗакупок) Экспорт
Если УсловияЗакупок = Неопределено Тогда
Возврат;
КонецЕсли;
Валюта = УсловияЗакупок.Валюта;
Если ЗначениеЗаполнено(УсловияЗакупок.Организация)
И УсловияЗакупок.Организация <> Организация Тогда
Организация = УсловияЗакупок.Организация;
КонецЕсли;
Если ЗначениеЗаполнено(УсловияЗакупок.Склад) Тогда
Склад = УсловияЗакупок.Склад;
КонецЕсли;
НаправлениеДеятельности = УсловияЗакупок.НаправлениеДеятельности;
Если ЗначениеЗаполнено(УсловияЗакупок.Контрагент)
И УсловияЗакупок.Контрагент <> Контрагент Тогда
Контрагент = УсловияЗакупок.Контрагент;
КонецЕсли;
ПартнерыИКонтрагенты.ЗаполнитьКонтрагентаПартнераПоУмолчанию(Партнер, Контрагент);
Если ЗначениеЗаполнено(УсловияЗакупок.ХозяйственнаяОперация) Тогда
ОперацияПоСоглашению = ХозяйственнаяОперация;
ОперацииРаздельнойЗакупки = ЗакупкиСервер.ХозяйственныеОперацииПоОсновной(
УсловияЗакупок.ХозяйственнаяОперация);
Если ОперацииРаздельнойЗакупки.Найти(ХозяйственнаяОперация) = Неопределено Тогда
Если УсловияЗакупок.ХозяйственнаяОперация = Перечисления.ХозяйственныеОперации.ЗакупкаУПоставщика Тогда
Если ОперацииРаздельнойЗакупки.Найти(Перечисления.ХозяйственныеОперации.ЗакупкаУПоставщикаНеотфактурованнаяПоставка) <> Неопределено Тогда
ОперацияПоСоглашению = Перечисления.ХозяйственныеОперации.ЗакупкаУПоставщикаНеотфактурованнаяПоставка;
ИначеЕсли ОперацииРаздельнойЗакупки.Найти(Перечисления.ХозяйственныеОперации.ЗакупкаУПоставщикаПоступлениеИзТоваровВПути) <> Неопределено Тогда
ОперацияПоСоглашению = Перечисления.ХозяйственныеОперации.ЗакупкаУПоставщикаПоступлениеИзТоваровВПути;
КонецЕсли;
ИначеЕсли УсловияЗакупок.ХозяйственнаяОперация = Перечисления.ХозяйственныеОперации.ЗакупкаВСтранахЕАЭС Тогда
Если ОперацииРаздельнойЗакупки.Найти(Перечисления.ХозяйственныеОперации.ЗакупкаВСтранахЕАЭСНеотфактурованнаяПоставка) <> Неопределено Тогда
ОперацияПоСоглашению = Перечисления.ХозяйственныеОперации.ЗакупкаВСтранахЕАЭСНеотфактурованнаяПоставка;
ИначеЕсли ОперацииРаздельнойЗакупки.Найти(Перечисления.ХозяйственныеОперации.ЗакупкаВСтранахЕАЭСПоступлениеИзТоваровВПути) <> Неопределено Тогда
ОперацияПоСоглашению = Перечисления.ХозяйственныеОперации.ЗакупкаВСтранахЕАЭСПоступлениеИзТоваровВПути;
КонецЕсли;
ИначеЕсли УсловияЗакупок.ХозяйственнаяОперация = Перечисления.ХозяйственныеОперации.ЗакупкаПоИмпорту Тогда
Если ОперацииРаздельнойЗакупки.Найти(Перечисления.ХозяйственныеОперации.ЗакупкаПоИмпортуПоступлениеИзТоваровВПути) <> Неопределено Тогда
ОперацияПоСоглашению = Перечисления.ХозяйственныеОперации.ЗакупкаПоИмпортуПоступлениеИзТоваровВПути;
КонецЕсли;
КонецЕсли;
КонецЕсли;
ХозяйственнаяОперация = ОперацияПоСоглашению;
КонецЕсли;
Если УсловияЗакупок.ИспользуютсяДоговорыКонтрагентов <> Неопределено
И УсловияЗакупок.ИспользуютсяДоговорыКонтрагентов Тогда
ПарыОперацийРаздельнойЗакупки = ЗакупкиСервер.ПарыОперацийРаздельнойЗакупки();
ХозяйственнаяОперацияДоговора = ПарыОперацийРаздельнойЗакупки.Получить(ХозяйственнаяОперация);
ДопПараметры = ЗакупкиСервер.ДополнительныеПараметрыОтбораДоговоров();
ДопПараметры.ВалютаВзаиморасчетов = Валюта;
Договор = ЗакупкиСервер.ПолучитьДоговорПоУмолчанию(ЭтотОбъект, ХозяйственнаяОперацияДоговора, ДопПараметры);
Если ПолучитьФункциональнуюОпцию("ИспользоватьУчетЗатратПоНаправлениямДеятельности") Тогда
НаправленияДеятельностиСервер.ЗаполнитьНаправлениеПоУмолчанию(НаправлениеДеятельности, Соглашение, Договор);
КонецЕсли;
ЗаполнитьНалогообложениеНДС();
КонецЕсли;
ЦенаВключаетНДС = УсловияЗакупок.ЦенаВключаетНДС;
ВидЦеныПоставщика = УсловияЗакупок.ВидЦеныПоставщика;
ЗаполнитьВидДеятельностиНДС();
КонецПроцедуры
Процедура ЗаполнитьУсловияЗакупокПоУмолчанию(ПересчитатьЦены = Истина) Экспорт
Если ЗначениеЗаполнено(Партнер) Тогда
ХозяйственныеОперации = Новый Массив;
Хозяйственныеоперации.Добавить(Перечисления.ХозяйственныеОперации.ЗакупкаУПоставщика);
Если ПолучитьФункциональнуюОпцию("ИспользоватьИмпортныеЗакупки") Тогда
ХозяйственныеОперации.Добавить(Перечисления.ХозяйственныеОперации.ЗакупкаПоИмпорту);
ХозяйственныеОперации.Добавить(Перечисления.ХозяйственныеОперации.ЗакупкаВСтранахЕАЭС);
КонецЕсли;
ПараметрыОтбораСоглашения = Новый Структура;
ПараметрыОтбораСоглашения.Вставить("ВыбранноеСоглашение", Соглашение);
ПараметрыОтбораСоглашения.Вставить("ХозяйственныеОперации", ХозяйственныеОперации);
ПараметрыОтбораСоглашения.Вставить("УчитыватьГруппыСкладов", Ложь);
ПараметрыОтбораСоглашения.Вставить("ИсключитьГруппыСкладовДоступныеВЗаказах", Истина);
ПараметрыОтбораСоглашения.Вставить("ИспользуютсяДоговорыКонтрагентов", Истина);
УсловияЗакупокПоУмолчанию = ЗакупкиСервер.ПолучитьУсловияЗакупокПоУмолчанию(Партнер, ПараметрыОтбораСоглашения);
ЦеныЗаполнены = Ложь;
Если УсловияЗакупокПоУмолчанию <> Неопределено Тогда
Если Соглашение <> УсловияЗакупокПоУмолчанию.Соглашение
И ЗначениеЗаполнено(УсловияЗакупокПоУмолчанию.Соглашение) Тогда
Соглашение = УсловияЗакупокПоУмолчанию.Соглашение;
ЗаполнитьУсловияЗакупок(УсловияЗакупокПоУмолчанию);
Если ПересчитатьЦены И ЗначениеЗаполнено(Соглашение) Тогда
СтруктураПересчетаСуммы = ПакетнаяОбработкаТабличнойЧастиКлиентСервер.ПараметрыПересчетаСуммыНДСВСтрокеТЧ(ЭтотОбъект);
ПараметрыЗаполнения = ЦеныПартнеровЗаполнениеСервер.НовыйПараметрыЗаполненияЗаполнитьЦены();
ПараметрыЗаполнения.Вставить("ПоляЗаполнения", "Цена, СтавкаНДС");
ПараметрыЗаполнения.Вставить("Дата", Дата);
ПараметрыЗаполнения.Вставить("Валюта", Валюта);
ПараметрыЗаполнения.Вставить("Соглашение", Соглашение);
ПараметрыЗаполнения.Вставить("ВидЦеныПоставщика", ВидЦеныПоставщика);
ПараметрыЗаполнения.Вставить("НалогообложениеНДС", НалогообложениеНДС);
ДействияСоСтроками = Новый Структура;
ДействияСоСтроками.Вставить("ПересчитатьСумму", "КоличествоУпаковок");
ДействияСоСтроками.Вставить("ПересчитатьСуммуНДС", СтруктураПересчетаСуммы);
ДействияСоСтроками.Вставить("ПересчитатьСуммуСНДС", СтруктураПересчетаСуммы);
ЦеныЗаполнены = ЦеныПартнеровЗаполнениеСервер.ЗаполнитьЦены(Товары, Неопределено, ПараметрыЗаполнения, ДействияСоСтроками);
КонецЕсли;
Иначе
ПартнерыИКонтрагенты.ЗаполнитьКонтрагентаПартнераПоУмолчанию(Партнер, Контрагент);
Соглашение = УсловияЗакупокПоУмолчанию.Соглашение;
КонецЕсли;
Иначе
ПартнерыИКонтрагенты.ЗаполнитьКонтрагентаПартнераПоУмолчанию(Партнер, Контрагент);
Соглашение = Неопределено;
ПарыОперацийРаздельнойЗакупки = ЗакупкиСервер.ПарыОперацийРаздельнойЗакупки();
ХозяйственнаяОперацияДоговора = ПарыОперацийРаздельнойЗакупки.Получить(ХозяйственнаяОперация);
ТекущаяХозяйственнаяОперация = ХозяйственнаяОперация;
ДопПараметры = ЗакупкиСервер.ДополнительныеПараметрыОтбораДоговоров();
ДопПараметры.ВалютаВзаиморасчетов = Валюта;
Договор = ЗакупкиСервер.ПолучитьДоговорПоУмолчанию(ЭтотОбъект, ХозяйственнаяОперацияДоговора, ДопПараметры);
ХозяйственныеОперации = ЗакупкиСервер.ХозяйственныеОперацииРаздельнойЗакупки("Документ.ПоступлениеТоваровНаСклад",
Соглашение,
Договор);
Если ХозяйственныеОперации.Количество() > 0 Тогда
ХозяйственнаяОперация = ХозяйственныеОперации[0];
Если Не ЗначениеЗаполнено(Договор)
И ЗначениеЗаполнено(ТекущаяХозяйственнаяОперация)
И ХозяйственнаяОперация <> ТекущаяХозяйственнаяОперация Тогда
ХозяйственнаяОперация = ТекущаяХозяйственнаяОперация;
КонецЕсли;
ЗаполнитьНалогообложениеНДС();
ЗаполнитьВидДеятельностиНДС();
КонецЕсли;
КонецЕсли;
КонецЕсли;
КонецПроцедуры
Процедура ИнициализироватьПараметрыЗаполненияВидовЗапасовДляПроведения(ДокументОбъект, РежимЗаписи = Неопределено) Экспорт
ПараметрыЗаполненияВидовЗапасов = ЗапасыСервер.ПараметрыЗаполненияВидовЗапасов();
ПараметрыЗаполненияВидовЗапасов.ИспользоватьРаздельноеОформлениеЗакупок = Истина;
ДокументОбъект.ДополнительныеСвойства.Вставить("ПараметрыЗаполненияВидовЗапасов", ПараметрыЗаполненияВидовЗапасов);
КонецПроцедуры
Процедура ЗаполнитьВидыЗапасовПриОбмене(Отказ, ТаблицыДокумента) Экспорт
ЗаполнитьАналитикиУчетаНоменклатурыВТабличныхЧастяхТоваров();
Если ТаблицыДокумента <> Неопределено Тогда
ЗаполнитьАналитикиУчетаНоменклатурыВТабличныхЧастяхТоваров(ТаблицыДокумента);
ДополнительныеСвойства.Вставить("ТаблицыЗаполненияВидовЗапасовПриОбмене", ТаблицыДокумента);
Иначе
ИмяПараметра = "ТаблицыДокумента";
ТекстИсключения = НСтр("ru = 'Для заполнения видов запасов не передан параметр ""%1"".'");
ТекстИсключения = СтрШаблон(ТекстИсключения, ИмяПараметра);
ВызватьИсключение ТекстИсключения;
КонецЕсли;
ЗаполнитьВидыЗапасов(Отказ);
ДополнительныеСвойства.Удалить("ТаблицыЗаполненияВидовЗапасовПриОбмене");
КонецПроцедуры
#КонецОбласти
#Область ОбработчикиСобытий
Процедура ОбработкаПроверкиЗаполнения(Отказ, ПроверяемыеРеквизиты)
МассивНепроверяемыхРеквизитов = Новый Массив;
ЗатратыСервер.ПроверитьИспользованиеПартионногоУчета22(ЭтотОбъект, Дата, Отказ);
НоменклатураСервер.ПроверитьЗаполнениеКоличества(ЭтотОбъект, ПроверяемыеРеквизиты, Отказ);
НоменклатураСервер.ПроверитьЗаполнениеХарактеристик(ЭтотОбъект,МассивНепроверяемыхРеквизитов,Отказ);
НоменклатураСервер.ПроверитьЗаполнениеСерий(ЭтотОбъект,
НоменклатураСервер.ПараметрыУказанияСерий(ЭтотОбъект, Документы.ПоступлениеТоваровНаСклад),
Отказ,
МассивНепроверяемыхРеквизитов);
Если ХозяйственнаяОперация = Перечисления.ХозяйственныеОперации.ЗакупкаВСтранахЕАЭСПоступлениеИзТоваровВПути
Или ХозяйственнаяОперация = Перечисления.ХозяйственныеОперации.ЗакупкаПоИмпортуПоступлениеИзТоваровВПути
Или ХозяйственнаяОперация = Перечисления.ХозяйственныеОперации.ЗакупкаУПоставщикаПоступлениеИзТоваровВПути
Или НалогообложениеНДС = Перечисления.ТипыНалогообложенияНДС.ПродажаНеОблагаетсяНДС Тогда
МассивНепроверяемыхРеквизитов.Добавить("Валюта");
МассивНепроверяемыхРеквизитов.Добавить("ВидЦеныПоставщика");
МассивНепроверяемыхРеквизитов.Добавить("Товары.СтавкаНДС");
КонецЕсли;
ЭтоТоварыВПути = Документы.ПоступлениеТоваровНаСклад.ЭтоПоступлениеИзТоваровВПути(ХозяйственнаяОперация);
Если ЭтоТоварыВПути Тогда
МассивНепроверяемыхРеквизитов.Добавить("ВидДеятельностиНДС");
КонецЕсли;
ИсправлениеДокументов.ОбработкаПроверкиЗаполнения(ЭтотОбъект, Отказ, ПроверяемыеРеквизиты);
ОбщегоНазначения.УдалитьНепроверяемыеРеквизитыИзМассива(ПроверяемыеРеквизиты, МассивНепроверяемыхРеквизитов);
Если Не Отказ И ОбщегоНазначенияУТ.ПроверитьЗаполнениеРеквизитовОбъекта(ЭтотОбъект, ПроверяемыеРеквизиты) Тогда
Отказ = Истина;
КонецЕсли;
ЗакупкиСервер.ПроверитьКорректностьЗаполненияДокументаЗакупки(ЭтотОбъект, Отказ);
ПоступлениеТоваровНаСкладЛокализация.ОбработкаПроверкиЗаполнения(ЭтотОбъект, Отказ, ПроверяемыеРеквизиты);
КонецПроцедуры
Процедура ОбработкаЗаполнения(ДанныеЗаполнения, СтандартнаяОбработка)
Перем СкладПоступления;
Перем ХозяйственнаяОперацияПриемки;
Перем ЗаполнятьПоНакладной;
Перем ЗаполнятьПоОрдеру;
Автор = Пользователи.ТекущийПользователь();
ТипДанныхЗаполнения = ТипЗнч(ДанныеЗаполнения);
Если ТипДанныхЗаполнения = Тип("Структура") Тогда
Если ДанныеЗаполнения.Свойство("ДокументОснование") Тогда
ДанныеЗаполнения.Свойство("СкладПоступления", СкладПоступления);
ДанныеЗаполнения.Свойство("ХозяйственнаяОперацияПриемки", ХозяйственнаяОперацияПриемки);
ДанныеЗаполнения.Свойство("ЗаполнятьПоНакладной", ЗаполнятьПоНакладной);
ДанныеЗаполнения.Свойство("ЗаполнятьПоОрдеру", ЗаполнятьПоОрдеру);
Если ТипЗнч(ДанныеЗаполнения.ДокументОснование) = Тип("ДокументСсылка.ЗаказПоставщику") Тогда
ЗаполнитьДокументНаОснованииЗаказаПоставщику(ДанныеЗаполнения.ДокументОснование,
СкладПоступления,
ХозяйственнаяОперацияПриемки,
ЗаполнятьПоНакладной,
ЗаполнятьПоОрдеру);
КонецЕсли;
Если ТипЗнч(ДанныеЗаполнения.ДокументОснование) = Тип("СправочникСсылка.СоглашенияСПоставщиками") Тогда
ЗаполнитьДокументНаОснованииСоглашенияСПоставщиком(ДанныеЗаполнения.ДокументОснование,
СкладПоступления,
ХозяйственнаяОперацияПриемки,
ЗаполнятьПоНакладной);
КонецЕсли;
Если ТипЗнч(ДанныеЗаполнения.ДокументОснование) = Тип("СправочникСсылка.ДоговорыКонтрагентов") Тогда
ЗаполнитьДокументНаОснованииДоговора(ДанныеЗаполнения.ДокументОснование,
СкладПоступления,
ХозяйственнаяОперацияПриемки,
ЗаполнятьПоНакладной,
ЗаполнятьПоОрдеру);
КонецЕсли;
Если ТипЗнч(ДанныеЗаполнения.ДокументОснование) = Тип("ДокументСсылка.ПриобретениеТоваровУслуг") Тогда
ЗаполнитьДокументНаОснованииПриобретенияТоваров(ДанныеЗаполнения.ДокументОснование,
СкладПоступления,
ХозяйственнаяОперацияПриемки,
ЗаполнятьПоНакладной);
КонецЕсли;
КонецЕсли;
Если ДанныеЗаполнения.Свойство("АктОРасхождениях")
И ДанныеЗаполнения.Свойство("ОснованиеАкта") Тогда
ЗаполнитьДокументНаОснованииАктаПриемкиПослеПоступления(ДанныеЗаполнения);
ИначеЕсли ДанныеЗаполнения.Свойство("АктОРасхождениях")
И ДанныеЗаполнения.Свойство("ИсправляемыйДокумент") Тогда
ИсправлениеДокументов.ЗаполнитьИсправление(ЭтотОбъект, ДанныеЗаполнения.ИсправляемыйДокумент);
ЗаполнитьИсправлениеНаОснованииАктаПриемкиПослеПоступления(ДанныеЗаполнения);
КонецЕсли;
СвернутьСтрокиТоваров();
ИначеЕсли ТипЗнч(ДанныеЗаполнения) = Тип("ДокументСсылка.ПоступлениеТоваровНаСклад") Тогда
ИсправлениеДокументов.ЗаполнитьИсправление(ЭтотОбъект, ДанныеЗаполнения);
КонецЕсли;
ОтветственныеЛицаСервер.УстановитьМенеджера(ЭтотОбъект, Распоряжение);
ЗаполнениеОбъектовПоСтатистике.ЗаполнитьРеквизитыОбъекта(ЭтотОбъект, ДанныеЗаполнения);
ИнициализироватьДокумент(ДанныеЗаполнения);
ПоступлениеТоваровНаСкладЛокализация.ОбработкаЗаполнения(ЭтотОбъект, ДанныеЗаполнения, СтандартнаяОбработка);
КонецПроцедуры
Процедура ПередЗаписью(Отказ, РежимЗаписи, РежимПроведения)
Если ОбменДанными.Загрузка Тогда
Возврат;
КонецЕсли;
ОбновлениеИнформационнойБазы.ПроверитьОбъектОбработан(ЭтотОбъект);
ИсправлениеДокументов.ПередЗаписью(ЭтотОбъект, Отказ, РежимЗаписи, РежимПроведения);
ПроведениеДокументов.ПередЗаписьюДокумента(ЭтотОбъект, РежимЗаписи, РежимПроведения);
ХозяйственныеОперацииИмпорта = ЗакупкиСервер.ХозяйственныеОперацииПоОсновной(
Перечисления.ХозяйственныеОперации.ЗакупкаПоИмпорту);
ХозяйственныеОперацииВвозаИзЕАЭС = ЗакупкиСервер.ХозяйственныеОперацииПоОсновной(
Перечисления.ХозяйственныеОперации.ЗакупкаВСтранахЕАЭС);
ОперацияНеОблагаетсяНДС = ХозяйственныеОперацииИмпорта.Найти(ХозяйственнаяОперация) <> Неопределено
Или ХозяйственныеОперацииВвозаИзЕАЭС.Найти(ХозяйственнаяОперация) <> Неопределено;
Если ОперацияНеОблагаетсяНДС Тогда
НалогообложениеНДС = Перечисления.ТипыНалогообложенияНДС.ПродажаНеОблагаетсяНДС;
КонецЕсли;
Если ХозяйственнаяОперация = Перечисления.ХозяйственныеОперации.ЗакупкаВСтранахЕАЭСПоступлениеИзТоваровВПути
Или ХозяйственнаяОперация = Перечисления.ХозяйственныеОперации.ЗакупкаПоИмпортуПоступлениеИзТоваровВПути
Или ХозяйственнаяОперация = Перечисления.ХозяйственныеОперации.ЗакупкаУПоставщикаПоступлениеИзТоваровВПути Тогда
Для Каждого Строка Из Товары Цикл
Строка.Цена = 0;
Строка.Сумма = 0;
Строка.СуммаНДС = 0;
Строка.СуммаСНДС = 0;
КонецЦикла;
ВидЦеныПоставщика = Справочники.ВидыЦенПоставщиков.ПустаяСсылка();
Валюта = Справочники.Валюты.ПустаяСсылка();
КонецЕсли;
ПараметрыУказанияСерий = НоменклатураСервер.ПараметрыУказанияСерий(ЭтотОбъект,
Документы.ПоступлениеТоваровНаСклад);
НоменклатураСервер.ОкруглитьКоличествоШтучныхТоваров(ЭтотОбъект, РежимЗаписи);
СуммаДокумента = Товары.Итог("СуммаСНДС");
НоменклатураСервер.ОчиститьНеиспользуемыеСерии(ЭтотОбъект, ПараметрыУказанияСерий);
Если РежимЗаписи = РежимЗаписиДокумента.Проведение Тогда
ЗаполнитьАналитикиУчетаНоменклатурыВТабличныхЧастяхТоваров();
ЗаполнитьВидыЗапасов(Отказ);
НоменклатураПартнеровСервер.ЗаполнитьПустоеСопоставлениеВНоменклатуреПартнераПоНоменклатуреИБ(Товары, Отказ);
ИначеЕсли РежимЗаписи = РежимЗаписиДокумента.ОтменаПроведения Тогда
ВидыЗапасов.Очистить();
КонецЕсли;
ОбщегоНазначенияУТ.ЗаполнитьИдентификаторыДокумента(ЭтотОбъект, "ВидыЗапасов");
ПоступлениеТоваровНаСкладЛокализация.ПередЗаписью(ЭтотОбъект, Отказ, РежимЗаписи, РежимПроведения);
КонецПроцедуры
Процедура ОбработкаПроведения(Отказ, РежимПроведения)
ИнициализироватьПараметрыЗаполненияВидовЗапасовДляПроведения(ЭтотОбъект);
ПроведениеДокументов.ОбработкаПроведенияДокумента(ЭтотОбъект, Отказ);
ПоступлениеТоваровНаСкладЛокализация.ОбработкаПроведения(ЭтотОбъект, Отказ, РежимПроведения);
КонецПроцедуры
Процедура ОбработкаУдаленияПроведения(Отказ)
ИнициализироватьПараметрыЗаполненияВидовЗапасовДляПроведения(ЭтотОбъект);
ПроведениеДокументов.ОбработкаУдаленияПроведенияДокумента(ЭтотОбъект, Отказ);
ПоступлениеТоваровНаСкладЛокализация.ОбработкаУдаленияПроведения(ЭтотОбъект, Отказ);
КонецПроцедуры
Процедура ПриКопировании(ОбъектКопирования)
ИсправлениеДокументов.ПриКопировании(ЭтотОбъект, ОбъектКопирования);
ДатаВходящегоДокумента = Дата(1,1,1);
НомерВходящегоДокумента = "";
Для Каждого ТекСтрока Из Товары Цикл
ТекСтрока.АналитикаУчетаПартий = Справочники.КлючиАналитикиУчетаПартий.ПустаяСсылка();
КонецЦикла;
ЗаполнитьНалогообложениеНДС();
СтруктураПересчетаСуммы = ПакетнаяОбработкаТабличнойЧастиКлиентСервер.ПараметрыПересчетаСуммыНДСВТЧ(ЭтотОбъект);
СтруктураДействий = Новый Структура;
КэшированныеЗначения = ПакетнаяОбработкаТабличнойЧастиКлиентСервер.ПолучитьСтруктуруКэшируемыеЗначения();
СтруктураДействий.Вставить("СкорректироватьСтавкуНДС", ПакетнаяОбработкаТабличнойЧастиКлиентСервер.ПараметрыЗаполненияСтавкиНДС(ЭтотОбъект));
ПакетнаяОбработкаТабличнойЧастиСервер.ОбработатьТЧ(Товары, СтруктураДействий, КэшированныеЗначения);
СтруктураДействий = Новый Структура;
СтруктураДействий.Вставить("ПересчитатьСуммуНДС", СтруктураПересчетаСуммы);
СтруктураДействий.Вставить("ПересчитатьСуммуСНДС", СтруктураПересчетаСуммы);
ПакетнаяОбработкаТабличнойЧастиСервер.ОбработатьСтрокиТЧ(
КэшированныеЗначения.ОбработанныеСтроки,
СтруктураДействий,
Товары,
КэшированныеЗначения);
Серии.Очистить();
ВидыЗапасов.Очистить();
ИнициализироватьДокумент();
ОбщегоНазначенияУТ.ОчиститьИдентификаторыДокумента(ЭтотОбъект, "ВидыЗапасов");
ПоступлениеТоваровНаСкладЛокализация.ПриКопировании(ЭтотОбъект, ОбъектКопирования);
Автор = Пользователи.ТекущийПользователь();
КонецПроцедуры
Процедура ПриЗаписи(Отказ)
Если ОбменДанными.Загрузка Тогда
Возврат;
КонецЕсли;
ПроведениеДокументов.ПриЗаписиДокумента(ЭтотОбъект, Отказ);
ПоступлениеТоваровНаСкладЛокализация.ПриЗаписи(ЭтотОбъект, Отказ);
КонецПроцедуры
#КонецОбласти
#Область СлужебныеПроцедурыИФункции
#Область ИнициализацияИЗаполнение
Процедура ИнициализироватьДокумент(ДанныеЗаполнения = Неопределено)
Организация = ЗначениеНастроекПовтИсп.ПолучитьОрганизациюПоУмолчанию(Организация);
Склад = ЗначениеНастроекПовтИсп.ПолучитьСкладПоУмолчанию(Склад);
Если Не ЗначениеЗаполнено(Валюта) Тогда
Валюта = ЗначениеНастроекПовтИсп.ВалютаРегламентированногоУчетаОрганизации(Организация);
КонецЕсли;
Если Не ЗначениеЗаполнено(Менеджер) Тогда
Менеджер = Пользователи.ТекущийПользователь();
КонецЕсли;
Если Не ЗначениеЗаполнено(Распоряжение) Тогда
Распоряжение = ДокументОснованиеПриЗаполнении(ДанныеЗаполнения);
КонецЕсли;
ВариантПриемкиТоваров = ЗакупкиСервер.ПолучитьВариантПриемкиТоваров(Распоряжение, Договор);
Если Не ЗначениеЗаполнено(НалогообложениеНДС) Тогда
ЗаполнитьНалогообложениеНДС();
КонецЕсли;
ЗаполнитьВидДеятельностиНДС();
КонецПроцедуры
Функция ТекстЗапросаЗаполненияНаОсновании(ПоДаннымАктаОРасхождениях = Ложь)
ТекстЗапросаТовары = "";
Если ПоДаннымАктаОРасхождениях Тогда
ТекстЗапросаТовары = "
|//////////////////////////////////////////////////////////////////////////////// 1
|ВЫБРАТЬ
| ЕСТЬNULL(ДанныеШапки.Распоряжение, НЕОПРЕДЕЛЕНО) КАК ДокументПоступления,
| ТоварыКПоступлению.Склад КАК Склад,
| ТоварыКПоступлению.Номенклатура КАК Номенклатура,
| ТоварыКПоступлению.Характеристика КАК Характеристика,
| ТоварыКПоступлению.Назначение КАК Назначение,
| ТоварыКПоступлению.Серия КАК Серия,
| ТоварыКПоступлению.КоличествоПоДокументу - ТоварыКПоступлению.Количество КАК Количество,
| ТоварыКПоступлению.КоличествоУпаковокПоДокументу - ТоварыКПоступлению.КоличествоУпаковок КАК КоличествоУпаковок
|ПОМЕСТИТЬ ВТТовары
|ИЗ
| Документ.АктОРасхожденияхПослеПриемки.Товары КАК ТоварыКПоступлению
| ЛЕВОЕ СОЕДИНЕНИЕ ВТРаспоряжение КАК ДанныеШапки
| ПО ИСТИНА
|ГДЕ
| ТоварыКПоступлению.Ссылка = &АктОРасхождениях
| И ТоварыКПоступлению.Склад = &Склад
| И ТоварыКПоступлению.Действие В
| (ЗНАЧЕНИЕ(Перечисление.ВариантыДействийПоРасхождениямВАктеПослеПриемки.ОформитьНедостачуИОжидатьДопоставку),
| ЗНАЧЕНИЕ(Перечисление.ВариантыДействийПоРасхождениямВАктеПослеПриемки.ОжидатьДопоставкуБезОформления))
|
|ОБЪЕДИНИТЬ ВСЕ
|
| ВЫБРАТЬ
| ЕСТЬNULL(ДанныеШапки.Распоряжение, НЕОПРЕДЕЛЕНО) КАК ДокументПоступления,
| ТоварыКПоступлению.Склад КАК Склад,
| ТоварыКПоступлению.Номенклатура КАК Номенклатура,
| ТоварыКПоступлению.Характеристика КАК Характеристика,
| ТоварыКПоступлению.Назначение КАК Назначение,
| ТоварыКПоступлению.Серия КАК Серия,
| (ТоварыКПоступлению.КоличествоПоДокументу - ТоварыКПоступлению.Количество) КАК Количество,
| (ТоварыКПоступлению.КоличествоУпаковокПоДокументу - ТоварыКПоступлению.КоличествоУпаковок) КАК КоличествоУпаковок
|ИЗ
| Документ.АктОРасхожденияхПослеПриемки.Товары КАК ТоварыКПоступлению
| ЛЕВОЕ СОЕДИНЕНИЕ ВТРаспоряжение КАК ДанныеШапки
| ПО ИСТИНА
|ГДЕ
| ТоварыКПоступлению.Ссылка = &АктОРасхождениях
| И ТоварыКПоступлению.Действие В
| (ЗНАЧЕНИЕ(Перечисление.ВариантыДействийПоРасхождениямВАктеПослеПриемки.ВернутьПерепоставленноеБезОформления))
| И (ТоварыКПоступлению.КоличествоПоДокументу - ТоварыКПоступлению.Количество) > 0
|
|ИНДЕКСИРОВАТЬ ПО
| ДокументПоступления,
| Номенклатура,
| Характеристика,
| Назначение,
| Серия,
| Склад
|;
|";
Иначе
ТекстЗапросаТовары = "
|//////////////////////////////////////////////////////////////////////////////// 1
|ВЫБРАТЬ
| ТоварыКПоступлению.ДокументПоступления КАК ДокументПоступления,
| ТоварыКПоступлению.Склад КАК Склад,
| ТоварыКПоступлению.Номенклатура КАК Номенклатура,
| ТоварыКПоступлению.Характеристика КАК Характеристика,
| ТоварыКПоступлению.Назначение КАК Назначение,
| ТоварыКПоступлению.Серия КАК Серия,
| ТоварыКПоступлению.КОформлениюПоступленийПоРаспоряжениюОстаток КАК Количество,
| ТоварыКПоступлению.КОформлениюПоступленийПоРаспоряжениюОстаток КАК КоличествоУпаковок
|ПОМЕСТИТЬ ВТТовары
|ИЗ
| РегистрНакопления.ТоварыКПоступлению.Остатки(
| ,
| ДокументПоступления = &ДокументОснование
| И ВЫБОР
| КОГДА &СкладУказан
| ТОГДА Склад = &СкладПоступления
| ИНАЧЕ ИСТИНА
| КОНЕЦ
| ) КАК ТоварыКПоступлению
|ГДЕ
| НЕ &ЗаполнятьПоНакладной
| И ТоварыКПоступлению.КОформлениюПоступленийПоРаспоряжениюОстаток > 0
|
|ОБЪЕДИНИТЬ ВСЕ
|
|ВЫБРАТЬ
| ТоварыКПоступлению.ДокументПоступления КАК ДокументПоступления,
| ТоварыКПоступлению.Склад КАК Склад,
| ТоварыКПоступлению.Номенклатура КАК Номенклатура,
| ТоварыКПоступлению.Характеристика КАК Характеристика,
| ТоварыКПоступлению.Назначение КАК Назначение,
| ТоварыКПоступлению.Серия КАК Серия,
| ТоварыКПоступлению.КОформлениюПоступленийПоНакладнымОстаток КАК Количество,
| ТоварыКПоступлению.КОформлениюПоступленийПоНакладнымОстаток КАК КоличествоУпаковок
|ИЗ
| РегистрНакопления.ТоварыКПоступлению.Остатки(
| ,
| ДокументПоступления = &ДокументОснование
| И ВЫБОР
| КОГДА &СкладУказан
| ТОГДА Склад = &СкладПоступления
| ИНАЧЕ ИСТИНА
| КОНЕЦ
| ) КАК ТоварыКПоступлению
|ГДЕ
| &ЗаполнятьПоНакладной
| И ТоварыКПоступлению.КОформлениюПоступленийПоНакладнымОстаток > 0
|
|ИНДЕКСИРОВАТЬ ПО
| ДокументПоступления,
| Номенклатура,
| Характеристика,
| Назначение,
| Серия,
| Склад
|;
|";
КонецЕсли;
ТекстЗапроса =
"ВЫБРАТЬ
| ПриобретениеТоваров.Ссылка КАК Ссылка,
| ПриобретениеТоваров.Соглашение КАК Соглашение,
| ПриобретениеТоваров.Партнер КАК Партнер,
| ПриобретениеТоваров.Контрагент КАК Контрагент,
| ПриобретениеТоваров.Организация КАК Организация,
| ПриобретениеТоваров.Договор КАК Договор,
| ВЫБОР
| КОГДА ПриобретениеТоваров.ВариантПриемкиТоваров В (ЗНАЧЕНИЕ(Перечисление.ВариантыПриемкиТоваров.ПоДоговорамБезЗаказовИНакладных),
| ЗНАЧЕНИЕ(Перечисление.ВариантыПриемкиТоваров.ПоДоговорамПослеЗаказовИлиНакладных),
| ЗНАЧЕНИЕ(Перечисление.ВариантыПриемкиТоваров.ПоДоговорамПослеНакладных))
| ТОГДА
| ПриобретениеТоваров.Договор
| КОГДА ПриобретениеТоваров.ВариантПриемкиТоваров В (ЗНАЧЕНИЕ(Перечисление.ВариантыПриемкиТоваров.МожетПроисходитьБезЗаказовИНакладных),
| ЗНАЧЕНИЕ(Перечисление.ВариантыПриемкиТоваров.НеРазделенаПоЗаказамИНакладным),
| ЗНАЧЕНИЕ(Перечисление.ВариантыПриемкиТоваров.НеРазделенаПоНакладным))
| ТОГДА
| ПриобретениеТоваров.Соглашение
| КОГДА НЕ ПриобретениеТоваров.ПоступлениеПоЗаказам
| И ПриобретениеТоваров.ВариантПриемкиТоваров = ЗНАЧЕНИЕ(Перечисление.ВариантыПриемкиТоваров.РазделенаПоЗаказамИНакладным)
| ТОГДА
| ПриобретениеТоваров.Ссылка
|
| КОГДА ПриобретениеТоваров.ВариантПриемкиТоваров = ЗНАЧЕНИЕ(Перечисление.ВариантыПриемкиТоваров.РазделенаТолькоПоНакладным)
| ТОГДА
| ПриобретениеТоваров.Ссылка
| ИНАЧЕ
| ПриобретениеТоваров.ЗаказПоставщику
| КОНЕЦ КАК Распоряжение,
| ПриобретениеТоваров.Сделка КАК Сделка,
| ПриобретениеТоваров.Валюта КАК Валюта,
| ЕСТЬNULL(Соглашения.ВидЦеныПоставщика, ЗНАЧЕНИЕ(Справочник.ВидыЦенПоставщиков.ПустаяСсылка)) КАК ВидЦеныПоставщика,
| ПриобретениеТоваров.ЦенаВключаетНДС КАК ЦенаВключаетНДС,
| ПриобретениеТоваров.НалогообложениеНДС КАК НалогообложениеНДС,
| ПриобретениеТоваров.ЗакупкаПодДеятельность КАК ВидДеятельностиНДС,
| ПриобретениеТоваров.НаправлениеДеятельности КАК НаправлениеДеятельности,
| НЕ ПриобретениеТоваров.Проведен КАК ЕстьОшибкиПроведен,
| ЛОЖЬ КАК ЕстьОшибкиСтатус
|ПОМЕСТИТЬ ВТРаспоряжение
|ИЗ
| Документ.ПриобретениеТоваровУслуг КАК ПриобретениеТоваров
| ЛЕВОЕ СОЕДИНЕНИЕ Справочник.СоглашенияСПоставщиками КАК Соглашения
| ПО ПриобретениеТоваров.Соглашение = Соглашения.Ссылка
|ГДЕ
| ПриобретениеТоваров.Ссылка = &ДокументОснование
|
|ИНДЕКСИРОВАТЬ ПО
| Ссылка,
| Договор
|;
|"
+ ТекстЗапросаТовары
+ "
|//////////////////////////////////////////////////////////////////////////////// 2
|ВЫБРАТЬ
| УпаковкиТоваров.ДокументПоступления КАК ДокументПоступления,
| УпаковкиТоваров.Склад КАК Склад,
| УпаковкиТоваров.Номенклатура КАК Номенклатура,
| УпаковкиТоваров.Характеристика КАК Характеристика,
| УпаковкиТоваров.Назначение КАК Назначение,
| УпаковкиТоваров.Серия КАК Серия,
| УпаковкиТоваров.Упаковка КАК Упаковка,
| &ТекстЗапросаКоэффициентУпаковки КАК КоэффициентУпаковки,
| СУММА(УпаковкиТоваров.Количество) КАК Количество,
| СУММА(УпаковкиТоваров.КоличествоУпаковок) КАК КоличествоУпаковок
|ПОМЕСТИТЬ ВТУпаковкиТоваров
|ИЗ
| (ВЫБРАТЬ
| ТоварыКПоступлению.ДокументПоступления КАК ДокументПоступления,
| ТоварыКПоступлению.Склад КАК Склад,
| ТоварыКПоступлению.Номенклатура КАК Номенклатура,
| ТоварыКПоступлению.Характеристика КАК Характеристика,
| ТоварыКПоступлению.Назначение КАК Назначение,
| ТоварыКПоступлению.Серия КАК Серия,
| ТоварыПриобретения.Упаковка КАК Упаковка,
| СУММА(ТоварыПриобретения.Количество) КАК Количество,
| СУММА(ТоварыПриобретения.КоличествоУпаковок) КАК КоличествоУпаковок
| ИЗ
| ВТТовары КАК ТоварыКПоступлению
| ЛЕВОЕ СОЕДИНЕНИЕ Документ.ПриобретениеТоваровУслуг.Товары КАК ТоварыПриобретения
| ПО ТоварыПриобретения.Ссылка = &ДокументОснование
| И ТоварыКПоступлению.Склад = ТоварыПриобретения.Склад
| И ТоварыКПоступлению.Номенклатура = ТоварыПриобретения.Номенклатура
| И ТоварыКПоступлению.Характеристика = ТоварыПриобретения.Характеристика
| И ТоварыКПоступлению.Назначение = ТоварыПриобретения.Назначение
| И ВЫБОР
| КОГДА ТоварыПриобретения.СтатусУказанияСерий В(14, 18)
| ТОГДА ТоварыКПоступлению.Серия = ТоварыПриобретения.Серия
| ИНАЧЕ ИСТИНА
| КОНЕЦ
|
| СГРУППИРОВАТЬ ПО
| ТоварыКПоступлению.ДокументПоступления,
| ТоварыКПоступлению.Склад,
| ТоварыКПоступлению.Номенклатура,
| ТоварыКПоступлению.Характеристика,
| ТоварыКПоступлению.Назначение,
| ТоварыКПоступлению.Серия,
| ТоварыПриобретения.Упаковка
|
| ОБЪЕДИНИТЬ ВСЕ
|
| ВЫБРАТЬ
| ТоварыКПоступлению.ДокументПоступления КАК ДокументПоступления,
| ТоварыКПоступлению.Склад КАК Склад,
| ТоварыКПоступлению.Номенклатура КАК Номенклатура,
| ТоварыКПоступлению.Характеристика КАК Характеристика,
| ТоварыКПоступлению.Назначение КАК Назначение,
| ТоварыКПоступлению.Серия КАК Серия,
| ТоварыПоступления.Упаковка КАК Упаковка,
| -СУММА(ТоварыПоступления.Количество) КАК Количество,
| -СУММА(ТоварыПоступления.КоличествоУпаковок) КАК КоличествоУпаковок
| ИЗ
| ВТТовары КАК ТоварыКПоступлению
| ЛЕВОЕ СОЕДИНЕНИЕ Документ.ПоступлениеТоваровНаСклад КАК ПоступлениеНаСклад
| ПО ТоварыКПоступлению.ДокументПоступления = ПоступлениеНаСклад.Распоряжение
| И ТоварыКПоступлению.Склад = ПоступлениеНаСклад.Склад
|
| ЛЕВОЕ СОЕДИНЕНИЕ Документ.ПоступлениеТоваровНаСклад.Товары КАК ТоварыПоступления
| ПО ПоступлениеНаСклад.Ссылка = ТоварыПоступления.Ссылка
| И ТоварыКПоступлению.Номенклатура = ТоварыПоступления.Номенклатура
| И ТоварыКПоступлению.Характеристика = ТоварыПоступления.Характеристика
| И ТоварыКПоступлению.Назначение = ТоварыПоступления.Назначение
| И ВЫБОР
| КОГДА ТоварыПоступления.СтатусУказанияСерий В(14, 18)
| ТОГДА ТоварыКПоступлению.Серия = ТоварыПоступления.Серия
| ИНАЧЕ ИСТИНА
| КОНЕЦ
| ГДЕ
| ЕСТЬNULL(ПоступлениеНаСклад.Проведен, ЛОЖЬ)
|
| СГРУППИРОВАТЬ ПО
| ТоварыКПоступлению.ДокументПоступления,
| ТоварыКПоступлению.Склад,
| ТоварыКПоступлению.Номенклатура,
| ТоварыКПоступлению.Характеристика,
| ТоварыКПоступлению.Назначение,
| ТоварыКПоступлению.Серия,
| ТоварыПоступления.Упаковка
| ) КАК УпаковкиТоваров
|
|СГРУППИРОВАТЬ ПО
| УпаковкиТоваров.ДокументПоступления,
| УпаковкиТоваров.Склад,
| УпаковкиТоваров.Номенклатура,
| УпаковкиТоваров.Характеристика,
| УпаковкиТоваров.Назначение,
| УпаковкиТоваров.Серия,
| УпаковкиТоваров.Упаковка
|
|ИМЕЮЩИЕ
| СУММА(УпаковкиТоваров.Количество) > 0
|
|ИНДЕКСИРОВАТЬ ПО
| ДокументПоступления,
| Склад,
| Номенклатура,
| Характеристика,
| Назначение,
| Серия,
| Упаковка
|;
|
|//////////////////////////////////////////////////////////////////////////////// 3
|ВЫБРАТЬ РАЗЛИЧНЫЕ
| ТоварыКПоступлению.ДокументПоступления КАК ДокументПоступления,
| ТоварыКПоступлению.Склад КАК Склад,
| ТоварыКПоступлению.Номенклатура КАК Номенклатура,
| ТоварыКПоступлению.Характеристика КАК Характеристика,
| ТоварыКПоступлению.Назначение КАК Назначение,
| ТоварыКПоступлению.Серия КАК Серия,
| ТоварыКПоступлению.Упаковка КАК Упаковка,
| ТоварыКПоступлению.КоэффициентУпаковки КАК КоэффициентУпаковки,
| ТоварыКПоступлению.Количество КАК Количество,
| ТоварыКПоступлению.КоличествоУпаковок КАК КоличествоУпаковок,
| ТоварыПриобретения.Цена КАК Цена,
| ТоварыПриобретения.СтавкаНДС КАК СтавкаНДС
|ПОМЕСТИТЬ ВТЦеныТоваров
|ИЗ
| ВТУпаковкиТоваров КАК ТоварыКПоступлению
| ЛЕВОЕ СОЕДИНЕНИЕ Документ.ПриобретениеТоваровУслуг.Товары КАК ТоварыПриобретения
| ПО ТоварыПриобретения.Ссылка = &ДокументОснование
| И ТоварыКПоступлению.Склад = ТоварыПриобретения.Склад
| И ТоварыКПоступлению.Номенклатура = ТоварыПриобретения.Номенклатура
| И ТоварыКПоступлению.Характеристика = ТоварыПриобретения.Характеристика
| И ТоварыКПоступлению.Назначение = ТоварыПриобретения.Назначение
| И ВЫБОР
| КОГДА ТоварыПриобретения.СтатусУказанияСерий В(14, 18)
| ТОГДА ТоварыКПоступлению.Серия = ТоварыПриобретения.Серия
| ИНАЧЕ ИСТИНА
| КОНЕЦ
| И ТоварыКПоступлению.Упаковка = ТоварыПриобретения.Упаковка
|
|ИНДЕКСИРОВАТЬ ПО
| ДокументПоступления,
| Склад,
| Номенклатура,
| Характеристика,
| Назначение,
| Серия,
| Упаковка
|;
|
|//////////////////////////////////////////////////////////////////////////////// 4
|ВЫБРАТЬ
| ТоварыКПоступлению.ДокументПоступления КАК ДокументПоступления,
| ТоварыКПоступлению.Склад КАК Склад,
| ТоварыКПоступлению.Номенклатура КАК Номенклатура,
| ТоварыКПоступлению.Характеристика КАК Характеристика,
| ТоварыКПоступлению.Назначение КАК Назначение,
| ТоварыКПоступлению.Серия КАК Серия,
| ТоварыКПоступлению.Упаковка КАК Упаковка,
| КОЛИЧЕСТВО(РАЗЛИЧНЫЕ ТоварыКПоступлению.Цена) КАК КоличествоЦен,
| КОЛИЧЕСТВО(РАЗЛИЧНЫЕ ТоварыКПоступлению.СтавкаНДС) КАК КоличествоСтавокНДС
|ПОМЕСТИТЬ ВТЦеныТоваровГруппировка
|ИЗ
| ВТЦеныТоваров КАК ТоварыКПоступлению
|
|СГРУППИРОВАТЬ ПО
| ТоварыКПоступлению.ДокументПоступления,
| ТоварыКПоступлению.Склад,
| ТоварыКПоступлению.Номенклатура,
| ТоварыКПоступлению.Характеристика,
| ТоварыКПоступлению.Назначение,
| ТоварыКПоступлению.Серия,
| ТоварыКПоступлению.Упаковка
|
|ИНДЕКСИРОВАТЬ ПО
| ДокументПоступления,
| Склад,
| Номенклатура,
| Характеристика,
| Назначение,
| Серия,
| Упаковка
|;
|
|//////////////////////////////////////////////////////////////////////////////// 5
|ВЫБРАТЬ
| ТаблицаРаспоряжение.Ссылка КАК Ссылка,
| ТаблицаРаспоряжение.Соглашение КАК Соглашение,
| ТаблицаРаспоряжение.Партнер КАК Партнер,
| ТаблицаРаспоряжение.Контрагент КАК Контрагент,
| ТаблицаРаспоряжение.Организация КАК Организация,
| ТаблицаРаспоряжение.Договор КАК Договор,
| ТаблицаРаспоряжение.Распоряжение КАК Распоряжение,
| ТаблицаРаспоряжение.Сделка КАК Сделка,
| ТаблицаРаспоряжение.Валюта КАК Валюта,
| ТаблицаРаспоряжение.ВидЦеныПоставщика КАК ВидЦеныПоставщика,
| ТаблицаРаспоряжение.ЦенаВключаетНДС КАК ЦенаВключаетНДС,
| ТаблицаРаспоряжение.НалогообложениеНДС КАК НалогообложениеНДС,
| ТаблицаРаспоряжение.ВидДеятельностиНДС КАК ВидДеятельностиНДС,
| ТаблицаРаспоряжение.НаправлениеДеятельности КАК НаправлениеДеятельности,
| ТаблицаРаспоряжение.ЕстьОшибкиПроведен КАК ЕстьОшибкиПроведен,
| ТаблицаРаспоряжение.ЕстьОшибкиСтатус КАК ЕстьОшибкиСтатус
|ИЗ
| ВТРаспоряжение КАК ТаблицаРаспоряжение
|;
|
|//////////////////////////////////////////////////////////////////////////////// 6
|ВЫБРАТЬ
| ТаблицаТовары.ДокументПоступления КАК ДокументПоступления,
| ТаблицаТовары.Номенклатура КАК Номенклатура,
| ТаблицаТовары.Характеристика КАК Характеристика,
| ТаблицаТовары.Назначение КАК Назначение,
| ТаблицаТовары.Серия КАК Серия,
| СУММА(ТаблицаТовары.Количество) КАК Количество,
| СУММА(ТаблицаТовары.КоличествоУпаковок) КАК КоличествоУпаковок
|ИЗ
| ВТТовары КАК ТаблицаТовары
|
|СГРУППИРОВАТЬ ПО
| ТаблицаТовары.ДокументПоступления,
| ТаблицаТовары.Номенклатура,
| ТаблицаТовары.Характеристика,
| ТаблицаТовары.Назначение,
| ТаблицаТовары.Серия
|
|УПОРЯДОЧИТЬ ПО
| Номенклатура,
| Характеристика,
| Назначение,
| Серия,
| ДокументПоступления
|;
|
|//////////////////////////////////////////////////////////////////////////////// 7
|ВЫБРАТЬ
| Товары.ДокументПоступления КАК ДокументПоступления,
| Товары.Номенклатура КАК Номенклатура,
| Товары.Характеристика КАК Характеристика,
| Товары.Назначение КАК Назначение,
| Товары.Серия КАК Серия,
| Товары.Упаковка КАК Упаковка,
| Товары.КоэффициентУпаковки КАК КоэффициентУпаковки,
| СУММА(Товары.Количество) КАК Количество,
| СУММА(Товары.КоличествоУпаковок) КАК КоличествоУпаковок,
| Товары.Цена КАК Цена,
| Товары.СтавкаНДС КАК СтавкаНДС
|ИЗ
| (ВЫБРАТЬ РАЗЛИЧНЫЕ
| ТоварыКПоступлению.ДокументПоступления КАК ДокументПоступления,
| ТоварыКПоступлению.Склад КАК Склад,
| ТоварыКПоступлению.Номенклатура КАК Номенклатура,
| ТоварыКПоступлению.Характеристика КАК Характеристика,
| ТоварыКПоступлению.Назначение КАК Назначение,
| ТоварыКПоступлению.Серия КАК Серия,
| ТоварыКПоступлению.Упаковка КАК Упаковка,
| ТоварыКПоступлению.КоэффициентУпаковки КАК КоэффициентУпаковки,
| ТоварыКПоступлению.Количество КАК Количество,
| ТоварыКПоступлению.КоличествоУпаковок КАК КоличествоУпаковок,
| ВЫБОР
| КОГДА ЦеныТоваров.КоличествоЦен = 1
| ТОГДА ТоварыКПоступлению.Цена
| ИНАЧЕ 0
| КОНЕЦ КАК Цена,
| ВЫБОР
| КОГДА ЦеныТоваров.КоличествоСтавокНДС = 1
| ТОГДА ТоварыКПоступлению.СтавкаНДС
| ИНАЧЕ 0
| КОНЕЦ КАК СтавкаНДС
| ИЗ
| ВТЦеныТоваров КАК ТоварыКПоступлению
| ЛЕВОЕ СОЕДИНЕНИЕ ВТЦеныТоваровГруппировка ЦеныТоваров
| ПО ТоварыКПоступлению.ДокументПоступления = ЦеныТоваров.ДокументПоступления
| И ТоварыКПоступлению.Склад = ЦеныТоваров.Склад
| И ТоварыКПоступлению.Номенклатура = ЦеныТоваров.Номенклатура
| И ТоварыКПоступлению.Характеристика = ЦеныТоваров.Характеристика
| И ТоварыКПоступлению.Назначение = ЦеныТоваров.Назначение
| И ТоварыКПоступлению.Серия = ЦеныТоваров.Серия
| И ТоварыКПоступлению.Упаковка = ЦеныТоваров.Упаковка
| ) КАК Товары
|
|СГРУППИРОВАТЬ ПО
| Товары.ДокументПоступления,
| Товары.Номенклатура,
| Товары.Характеристика,
| Товары.Назначение,
| Товары.Серия,
| Товары.Упаковка,
| Товары.КоэффициентУпаковки,
| Товары.Цена,
| Товары.СтавкаНДС
|
|УПОРЯДОЧИТЬ ПО
| Номенклатура,
| Характеристика,
| Назначение,
| Серия,
| Упаковка,
| ДокументПоступления,
| КоэффициентУпаковки УБЫВ";
ТекстЗапроса = СтрЗаменить(ТекстЗапроса,
"&ТекстЗапросаКоэффициентУпаковки",
Справочники.УпаковкиЕдиницыИзмерения.ТекстЗапросаКоэффициентаУпаковки(
"УпаковкиТоваров.Упаковка",
"УпаковкиТоваров.Номенклатура"));
Возврат ТекстЗапроса;
КонецФункции
Процедура ЗаполнитьДокументНаОснованииСоглашенияСПоставщиком(Знач ДокументОснование, Знач СкладПоступления = Неопределено, Знач ХозяйственнаяОперацияПриемки = Неопределено, Знач ЗаполнятьПоНакладной = Ложь)
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| СоглашениеСПоставщиком.Ссылка КАК Ссылка,
| СоглашениеСПоставщиком.Статус КАК СтатусДокумента,
| СоглашениеСПоставщиком.Партнер КАК Партнер,
| СоглашениеСПоставщиком.Контрагент КАК Контрагент,
| СоглашениеСПоставщиком.Ссылка КАК Соглашение,
| СоглашениеСПоставщиком.Организация КАК Организация,
| СоглашениеСПоставщиком.Валюта КАК Валюта,
| СоглашениеСПоставщиком.ВидЦеныПоставщика КАК ВидЦены,
| СоглашениеСПоставщиком.ЦенаВключаетНДС КАК ЦенаВключаетНДС,
| СоглашениеСПоставщиком.НаправлениеДеятельности КАК НаправлениеДеятельности,
| ВЫБОР
| КОГДА СоглашениеСПоставщиком.ХозяйственнаяОперация = ЗНАЧЕНИЕ(Перечисление.ХозяйственныеОперации.ОказаниеАгентскихУслуг)
| ТОГДА ИСТИНА
| ИНАЧЕ ЛОЖЬ
| КОНЕЦ КАК ЭтоАгентскиеУслуги,
| ВЫБОР
| КОГДА СоглашениеСПоставщиком.Статус <> ЗНАЧЕНИЕ(Перечисление.СтатусыСоглашенийСПоставщиками.Действует)
| ТОГДА ИСТИНА
| ИНАЧЕ ЛОЖЬ
| КОНЕЦ КАК ЕстьОшибкиСтатус
|ПОМЕСТИТЬ ВТРаспоряжение
|ИЗ
| Справочник.СоглашенияСПоставщиками КАК СоглашениеСПоставщиком
|ГДЕ
| СоглашениеСПоставщиком.Ссылка = &ДокументОснование
|;
|
|
|ВЫБРАТЬ
| ТоварыКПоступлениюОстатки.ДокументПоступления КАК ДокументПоступления,
| ТоварыКПоступлениюОстатки.Номенклатура КАК Номенклатура,
| ТоварыКПоступлениюОстатки.Характеристика КАК Характеристика,
| ТоварыКПоступлениюОстатки.Назначение КАК Назначение,
| ТоварыКПоступлениюОстатки.Серия КАК Серия,
| ТоварыКПоступлениюОстатки.КОформлениюПоступленийПоРаспоряжениюОстаток КАК Количество,
| ТоварыКПоступлениюОстатки.КОформлениюПоступленийПоРаспоряжениюОстаток КАК КоличествоУпаковок
|ПОМЕСТИТЬ ВТТовары
|ИЗ
| РегистрНакопления.ТоварыКПоступлению.Остатки(
| ,
| ДокументПоступления = &ДокументОснование
| И ВЫБОР
| КОГДА &СкладУказан
| ТОГДА Склад = &СкладПоступления
| ИНАЧЕ ИСТИНА
| КОНЕЦ
| И (НЕ &ОтборПоХозяйственнойОперации
| ИЛИ ХозяйственнаяОперация В(&ХозяйственнаяОперация))) КАК ТоварыКПоступлениюОстатки
|ГДЕ
| НЕ &ЗаполнятьПоНакладной
| И ТоварыКПоступлениюОстатки.КОформлениюПоступленийПоРаспоряжениюОстаток > 0
|
|ОБЪЕДИНИТЬ ВСЕ
|
|ВЫБРАТЬ
| ТоварыКПоступлениюОстатки.ДокументПоступления КАК ДокументПоступления,
| ТоварыКПоступлениюОстатки.Номенклатура КАК Номенклатура,
| ТоварыКПоступлениюОстатки.Характеристика КАК Характеристика,
| ТоварыКПоступлениюОстатки.Назначение КАК Назначение,
| ТоварыКПоступлениюОстатки.Серия КАК Серия,
| ТоварыКПоступлениюОстатки.КОформлениюПоступленийПоНакладнымОстаток КАК Количество,
| ТоварыКПоступлениюОстатки.КОформлениюПоступленийПоНакладнымОстаток КАК КоличествоУпаковок
|ИЗ
| РегистрНакопления.ТоварыКПоступлению.Остатки(
| ,
| ДокументПоступления = &ДокументОснование
| И ВЫБОР
| КОГДА &СкладУказан
| ТОГДА Склад = &СкладПоступления
| ИНАЧЕ ИСТИНА
| КОНЕЦ
| И (НЕ &ОтборПоХозяйственнойОперации
| ИЛИ ХозяйственнаяОперация В(&ХозяйственнаяОперация))) КАК ТоварыКПоступлениюОстатки
|ГДЕ
| &ЗаполнятьПоНакладной
| И ТоварыКПоступлениюОстатки.КОформлениюПоступленийПоНакладнымОстаток > 0
|;
|
|
|ВЫБРАТЬ
| ТаблицаРаспоряжение.Ссылка КАК Ссылка,
| ТаблицаРаспоряжение.Соглашение КАК Соглашение,
| ТаблицаРаспоряжение.Партнер КАК Партнер,
| ТаблицаРаспоряжение.Контрагент КАК Контрагент,
| ТаблицаРаспоряжение.Организация КАК Организация,
| ТаблицаРаспоряжение.СтатусДокумента КАК СтатусДокумента,
| ТаблицаРаспоряжение.Валюта КАК Валюта,
| ТаблицаРаспоряжение.ВидЦены КАК ВидЦены,
| ТаблицаРаспоряжение.ЦенаВключаетНДС КАК ЦенаВключаетНДС,
| ТаблицаРаспоряжение.НаправлениеДеятельности КАК НаправлениеДеятельности,
| ТаблицаРаспоряжение.ЭтоАгентскиеУслуги КАК ЭтоАгентскиеУслуги,
| ТаблицаРаспоряжение.ЕстьОшибкиСтатус КАК ЕстьОшибкиСтатус
|ИЗ
| ВТРаспоряжение КАК ТаблицаРаспоряжение
|;
|
|
|ВЫБРАТЬ
| ТаблицаТовары.ДокументПоступления КАК ДокументПоступления,
| ТаблицаТовары.Номенклатура КАК Номенклатура,
| ТаблицаТовары.Характеристика КАК Характеристика,
| ТаблицаТовары.Назначение КАК Назначение,
| ТаблицаТовары.Серия КАК Серия,
| ТаблицаТовары.Количество КАК Количество,
| ТаблицаТовары.КоличествоУпаковок КАК КоличествоУпаковок
|ИЗ
| ВТТовары КАК ТаблицаТовары
|
|УПОРЯДОЧИТЬ ПО
| Номенклатура,
| Характеристика,
| Назначение,
| Серия,
| ДокументПоступления";
Запрос.УстановитьПараметр("ДокументОснование", ДокументОснование);
Запрос.УстановитьПараметр("СкладПоступления", СкладПоступления);
Запрос.УстановитьПараметр("СкладУказан", ЗначениеЗаполнено(СкладПоступления));
Запрос.УстановитьПараметр("ЗаполнятьПоНакладной", ЗаполнятьПоНакладной = Истина);
Запрос.УстановитьПараметр("ОтборПоХозяйственнойОперации", ЗначениеЗаполнено(ХозяйственнаяОперацияПриемки));
Запрос.УстановитьПараметр("ХозяйственнаяОперация", ХозяйственнаяОперацияПриемки);
РезультатЗапроса = Запрос.ВыполнитьПакет();
Выборка = РезультатЗапроса[2].Выбрать();
ТЗТовары = РезультатЗапроса[3].Выгрузить();
Выборка.Следующий();
МассивДопустимыхСтатусов = Новый Массив;
МассивДопустимыхСтатусов.Добавить(Перечисления.СтатусыСоглашенийСПоставщиками.Действует);
ОбщегоНазначенияУТ.ПроверитьВозможностьВводаНаОсновании(Выборка.Соглашение,
Выборка.СтатусДокумента,
,
Выборка.ЕстьОшибкиСтатус,
МассивДопустимыхСтатусов);
ОбщегоНазначенияУТ.ПроверитьВозможностьВводаНаОснованииСоглашения(,Выборка.ЭтоАгентскиеУслуги);
Распоряжение = ДокументОснование;
ПарыОперацийРаздельнойЗакупки = ЗакупкиСервер.ПарыОперацийРаздельнойЗакупки(Истина);
ХозяйственнаяОперацияПриемкиФактическоеПоступление = ПарыОперацийРаздельнойЗакупки.Получить(ХозяйственнаяОперацияПриемки);
ХозяйственнаяОперацияПриемкиФактическоеПоступление = ?(Не ЗначениеЗаполнено(ХозяйственнаяОперацияПриемкиФактическоеПоступление),
ХозяйственнаяОперацияПриемки,
ХозяйственнаяОперацияПриемкиФактическоеПоступление);
ХозяйственнаяОперация = ХозяйственнаяОперацияПриемкиФактическоеПоступление;
Если ЗначениеЗаполнено(СкладПоступления) Тогда
Склад = СкладПоступления;
КонецЕсли;
ЗаполнитьЗначенияСвойств(ЭтотОбъект, Выборка);
Товары.Загрузить(ТЗТовары);
ПересчитатьКоличествоУпаковокЗаполнитьСтавкуНДС();
ЗаполнитьЦеныПоСоглашению();
КонецПроцедуры
Процедура ЗаполнитьДокументНаОснованииЗаказаПоставщику(ДокументОснование,
СкладПоступления = Неопределено,
ХозяйственнаяОперацияПриемки = Неопределено,
ЗаполнятьПоНакладной = Ложь,
ЗаполнятьПоОрдеру = Ложь)
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ЗаказПоставщику.Ссылка КАК Ссылка,
| ЗаказПоставщику.Соглашение КАК Соглашение,
| ЗаказПоставщику.Партнер КАК Партнер,
| ЗаказПоставщику.Контрагент КАК Контрагент,
| ЗаказПоставщику.Организация КАК Организация,
| ЗаказПоставщику.Статус КАК СтатусДокумента,
| ЗаказПоставщику.Договор КАК Договор,
| ЗаказПоставщику.Сделка КАК Сделка,
| ЗаказПоставщику.Валюта КАК Валюта,
| ЕСТЬNULL(Соглашения.ВидЦеныПоставщика, ЗНАЧЕНИЕ(Справочник.ВидыЦенПоставщиков.ПустаяСсылка)) КАК ВидЦеныПоставщика,
| ЗаказПоставщику.ЦенаВключаетНДС КАК ЦенаВключаетНДС,
| ЗаказПоставщику.НалогообложениеНДС КАК НалогообложениеНДС,
| ЗаказПоставщику.ЗакупкаПодДеятельность КАК ВидДеятельностиНДС,
| ЗаказПоставщику.НаправлениеДеятельности КАК НаправлениеДеятельности,
| НЕ ЗаказПоставщику.Проведен КАК ЕстьОшибкиПроведен,
| ВЫБОР
| КОГДА ЗаказПоставщику.Статус В (ЗНАЧЕНИЕ(Перечисление.СтатусыЗаказовПоставщикам.НеСогласован),
| ЗНАЧЕНИЕ(Перечисление.СтатусыЗаказовПоставщикам.Согласован))
| ТОГДА ИСТИНА
| ИНАЧЕ ЛОЖЬ
| КОНЕЦ КАК ЕстьОшибкиСтатус
|ПОМЕСТИТЬ ВТРаспоряжение
|ИЗ
| Документ.ЗаказПоставщику КАК ЗаказПоставщику
| ЛЕВОЕ СОЕДИНЕНИЕ Справочник.СоглашенияСПоставщиками КАК Соглашения
| ПО ЗаказПоставщику.Соглашение = Соглашения.Ссылка
|ГДЕ
| ЗаказПоставщику.Ссылка = &ДокументОснование
|
|ИНДЕКСИРОВАТЬ ПО
| Ссылка,
| Договор
|;
|
|
|ВЫБРАТЬ
| ТоварыКПоступлению.ДокументПоступления КАК ДокументПоступления,
| ТоварыКПоступлению.Склад КАК Склад,
| ТоварыКПоступлению.Номенклатура КАК Номенклатура,
| ТоварыКПоступлению.Характеристика КАК Характеристика,
| ТоварыКПоступлению.Назначение КАК Назначение,
| ТоварыКПоступлению.Серия КАК Серия,
| ТоварыКПоступлению.КОформлениюПоступленийПоРаспоряжениюОстаток КАК Количество,
| ТоварыКПоступлению.КОформлениюПоступленийПоРаспоряжениюОстаток КАК КоличествоУпаковок
|ПОМЕСТИТЬ ВТТовары
|ИЗ
| РегистрНакопления.ТоварыКПоступлению.Остатки(
| ,
| ДокументПоступления = &ДокументОснование
| И ВЫБОР
| КОГДА &СкладУказан
| ТОГДА Склад = &СкладПоступления
| ИНАЧЕ ИСТИНА
| КОНЕЦ
| И Номенклатура.ТипНоменклатуры В (&Товары)
| ) КАК ТоварыКПоступлению
|ГДЕ
| &ЗаполнятьПоЗаказу
| И ТоварыКПоступлению.КОформлениюПоступленийПоРаспоряжениюОстаток > 0
|
|ОБЪЕДИНИТЬ ВСЕ
|
|ВЫБРАТЬ
| ТоварыКПоступлению.ДокументПоступления КАК ДокументПоступления,
| ТоварыКПоступлению.Склад КАК Склад,
| ТоварыКПоступлению.Номенклатура КАК Номенклатура,
| ТоварыКПоступлению.Характеристика КАК Характеристика,
| ТоварыКПоступлению.Назначение КАК Назначение,
| ТоварыКПоступлению.Серия КАК Серия,
| ТоварыКПоступлению.КОформлениюПоступленийПоНакладнымОстаток КАК Количество,
| ТоварыКПоступлению.КОформлениюПоступленийПоНакладнымОстаток КАК КоличествоУпаковок
|ИЗ
| РегистрНакопления.ТоварыКПоступлению.Остатки(
| ,
| ДокументПоступления = &ДокументОснование
| И ВЫБОР
| КОГДА &СкладУказан
| ТОГДА Склад = &СкладПоступления
| ИНАЧЕ ИСТИНА
| КОНЕЦ
| И Номенклатура.ТипНоменклатуры В (&Товары)
| ) КАК ТоварыКПоступлению
|ГДЕ
| &ЗаполнятьПоНакладной
| И ТоварыКПоступлению.КОформлениюПоступленийПоНакладнымОстаток > 0
|
|ОБЪЕДИНИТЬ ВСЕ
|
|ВЫБРАТЬ
| ТоварыКПоступлению.ДокументПоступления КАК ДокументПоступления,
| ТоварыКПоступлению.Склад КАК Склад,
| ТоварыКПоступлению.Номенклатура КАК Номенклатура,
| ТоварыКПоступлению.Характеристика КАК Характеристика,
| ТоварыКПоступлению.Назначение КАК Назначение,
| ТоварыКПоступлению.Серия КАК Серия,
| ТоварыКПоступлению.КОформлениюПоступленийПоОрдерамОстаток КАК Количество,
| ТоварыКПоступлению.КОформлениюПоступленийПоОрдерамОстаток КАК КоличествоУпаковок
|ИЗ
| РегистрНакопления.ТоварыКПоступлению.Остатки(
| ,
| ДокументПоступления = &ДокументОснование
| И ВЫБОР
| КОГДА &СкладУказан
| ТОГДА Склад = &СкладПоступления
| ИНАЧЕ ИСТИНА
| КОНЕЦ
| И Номенклатура.ТипНоменклатуры В (&Товары)
| ) КАК ТоварыКПоступлению
|ГДЕ
| &ЗаполнятьПоОрдеру
| И ТоварыКПоступлению.КОформлениюПоступленийПоОрдерамОстаток > 0
|
|ИНДЕКСИРОВАТЬ ПО
| ДокументПоступления,
| Номенклатура,
| Характеристика,
| Назначение,
| Серия,
| Склад
|;
|
|
|ВЫБРАТЬ
| УпаковкиТоваров.ДокументПоступления КАК ДокументПоступления,
| УпаковкиТоваров.Склад КАК Склад,
| УпаковкиТоваров.Номенклатура КАК Номенклатура,
| УпаковкиТоваров.Характеристика КАК Характеристика,
| УпаковкиТоваров.Назначение КАК Назначение,
| УпаковкиТоваров.Серия КАК Серия,
| УпаковкиТоваров.Упаковка КАК Упаковка,
| &ТекстЗапросаКоэффициентУпаковки КАК КоэффициентУпаковки,
| СУММА(УпаковкиТоваров.Количество) КАК Количество,
| СУММА(УпаковкиТоваров.КоличествоУпаковок) КАК КоличествоУпаковок
|ПОМЕСТИТЬ ВТУпаковкиТоваров
|ИЗ
| (ВЫБРАТЬ
| ТоварыКПоступлению.ДокументПоступления КАК ДокументПоступления,
| ТоварыКПоступлению.Склад КАК Склад,
| ТоварыКПоступлению.Номенклатура КАК Номенклатура,
| ТоварыКПоступлению.Характеристика КАК Характеристика,
| ТоварыКПоступлению.Назначение КАК Назначение,
| ТоварыКПоступлению.Серия КАК Серия,
| ТоварыЗаказа.Упаковка КАК Упаковка,
| СУММА(ТоварыЗаказа.Количество) КАК Количество,
| СУММА(ТоварыЗаказа.КоличествоУпаковок) КАК КоличествоУпаковок
| ИЗ
| ВТТовары КАК ТоварыКПоступлению
| ЛЕВОЕ СОЕДИНЕНИЕ Документ.ЗаказПоставщику.Товары КАК ТоварыЗаказа
| ПО ТоварыКПоступлению.ДокументПоступления = ТоварыЗаказа.Ссылка
| И ТоварыКПоступлению.Склад = ТоварыЗаказа.Склад
| И ТоварыКПоступлению.Номенклатура = ТоварыЗаказа.Номенклатура
| И ТоварыКПоступлению.Характеристика = ТоварыЗаказа.Характеристика
| И ТоварыКПоступлению.Назначение = ТоварыЗаказа.Назначение
| ГДЕ
| НЕ ЕСТЬNULL(ТоварыЗаказа.Отменено, ЛОЖЬ)
|
| СГРУППИРОВАТЬ ПО
| ТоварыКПоступлению.ДокументПоступления,
| ТоварыКПоступлению.Склад,
| ТоварыКПоступлению.Номенклатура,
| ТоварыКПоступлению.Характеристика,
| ТоварыКПоступлению.Назначение,
| ТоварыКПоступлению.Серия,
| ТоварыЗаказа.Упаковка
|
| ОБЪЕДИНИТЬ ВСЕ
|
| ВЫБРАТЬ
| ТоварыКПоступлению.ДокументПоступления КАК ДокументПоступления,
| ТоварыКПоступлению.Склад КАК Склад,
| ТоварыКПоступлению.Номенклатура КАК Номенклатура,
| ТоварыКПоступлению.Характеристика КАК Характеристика,
| ТоварыКПоступлению.Назначение КАК Назначение,
| ТоварыКПоступлению.Серия КАК Серия,
| ТоварыПоступления.Упаковка КАК Упаковка,
| -СУММА(ТоварыПоступления.Количество) КАК Количество,
| -СУММА(ТоварыПоступления.КоличествоУпаковок) КАК КоличествоУпаковок
|ИЗ
| ВТТовары КАК ТоварыКПоступлению
| ЛЕВОЕ СОЕДИНЕНИЕ Документ.ПоступлениеТоваровНаСклад КАК ПоступлениеНаСклад
| ПО ТоварыКПоступлению.ДокументПоступления = ПоступлениеНаСклад.Распоряжение
| И ТоварыКПоступлению.Склад = ПоступлениеНаСклад.Склад
|
| ЛЕВОЕ СОЕДИНЕНИЕ Документ.ПоступлениеТоваровНаСклад.Товары КАК ТоварыПоступления
| ПО ПоступлениеНаСклад.Ссылка = ТоварыПоступления.Ссылка
| И ТоварыКПоступлению.Номенклатура = ТоварыПоступления.Номенклатура
| И ТоварыКПоступлению.Характеристика = ТоварыПоступления.Характеристика
| И ТоварыКПоступлению.Назначение = ТоварыПоступления.Назначение
| ГДЕ
| ЕСТЬNULL(ПоступлениеНаСклад.Проведен, ЛОЖЬ)
|
| СГРУППИРОВАТЬ ПО
| ТоварыКПоступлению.ДокументПоступления,
| ТоварыКПоступлению.Склад,
| ТоварыКПоступлению.Номенклатура,
| ТоварыКПоступлению.Характеристика,
| ТоварыКПоступлению.Назначение,
| ТоварыКПоступлению.Серия,
| ТоварыПоступления.Упаковка
| ) КАК УпаковкиТоваров
|
|СГРУППИРОВАТЬ ПО
| УпаковкиТоваров.ДокументПоступления,
| УпаковкиТоваров.Склад,
| УпаковкиТоваров.Номенклатура,
| УпаковкиТоваров.Характеристика,
| УпаковкиТоваров.Назначение,
| УпаковкиТоваров.Серия,
| УпаковкиТоваров.Упаковка
|
|ИМЕЮЩИЕ
| СУММА(УпаковкиТоваров.Количество) > 0
|
|ИНДЕКСИРОВАТЬ ПО
| ДокументПоступления,
| Склад,
| Номенклатура,
| Характеристика,
| Назначение,
| Упаковка
|;
|
|
|ВЫБРАТЬ РАЗЛИЧНЫЕ
| ТоварыКПоступлению.ДокументПоступления КАК ДокументПоступления,
| ТоварыКПоступлению.Склад КАК Склад,
| ТоварыКПоступлению.Номенклатура КАК Номенклатура,
| ТоварыКПоступлению.Характеристика КАК Характеристика,
| ТоварыКПоступлению.Назначение КАК Назначение,
| ТоварыКПоступлению.Серия КАК Серия,
| ТоварыКПоступлению.Упаковка КАК Упаковка,
| ТоварыКПоступлению.КоэффициентУпаковки КАК КоэффициентУпаковки,
| ТоварыКПоступлению.Количество КАК Количество,
| ТоварыКПоступлению.КоличествоУпаковок КАК КоличествоУпаковок,
| ТоварыЗаказа.Цена КАК Цена,
| ТоварыЗаказа.СтавкаНДС КАК СтавкаНДС
|ПОМЕСТИТЬ ВТЦеныТоваров
|ИЗ
| ВТУпаковкиТоваров КАК ТоварыКПоступлению
| ЛЕВОЕ СОЕДИНЕНИЕ Документ.ЗаказПоставщику.Товары КАК ТоварыЗаказа
| ПО ТоварыКПоступлению.ДокументПоступления = ТоварыЗаказа.Ссылка
| И ТоварыКПоступлению.Склад = ТоварыЗаказа.Склад
| И ТоварыКПоступлению.Номенклатура = ТоварыЗаказа.Номенклатура
| И ТоварыКПоступлению.Характеристика = ТоварыЗаказа.Характеристика
| И ТоварыКПоступлению.Назначение = ТоварыЗаказа.Назначение
| И ТоварыКПоступлению.Упаковка = ТоварыЗаказа.Упаковка
|ГДЕ
| НЕ ЕСТЬNULL(ТоварыЗаказа.Отменено, ЛОЖЬ)
|
|ИНДЕКСИРОВАТЬ ПО
| ДокументПоступления,
| Склад,
| Номенклатура,
| Характеристика,
| Назначение,
| Серия,
| Упаковка
|;
|
|
|ВЫБРАТЬ
| ТоварыКПоступлению.ДокументПоступления КАК ДокументПоступления,
| ТоварыКПоступлению.Склад КАК Склад,
| ТоварыКПоступлению.Номенклатура КАК Номенклатура,
| ТоварыКПоступлению.Характеристика КАК Характеристика,
| ТоварыКПоступлению.Назначение КАК Назначение,
| ТоварыКПоступлению.Серия КАК Серия,
| ТоварыКПоступлению.Упаковка КАК Упаковка,
| КОЛИЧЕСТВО(РАЗЛИЧНЫЕ ТоварыКПоступлению.Цена) КАК КоличествоЦен,
| КОЛИЧЕСТВО(РАЗЛИЧНЫЕ ТоварыКПоступлению.СтавкаНДС) КАК КоличествоСтавокНДС
|ПОМЕСТИТЬ ВТЦеныТоваровГруппировка
|ИЗ
| ВТЦеныТоваров КАК ТоварыКПоступлению
|
|СГРУППИРОВАТЬ ПО
| ТоварыКПоступлению.ДокументПоступления,
| ТоварыКПоступлению.Склад,
| ТоварыКПоступлению.Номенклатура,
| ТоварыКПоступлению.Характеристика,
| ТоварыКПоступлению.Назначение,
| ТоварыКПоступлению.Серия,
| ТоварыКПоступлению.Упаковка
|
|ИНДЕКСИРОВАТЬ ПО
| ДокументПоступления,
| Склад,
| Номенклатура,
| Характеристика,
| Назначение,
| Серия,
| Упаковка
|;
|
|
|ВЫБРАТЬ
| ТаблицаРаспоряжение.Ссылка КАК Ссылка,
| ТаблицаРаспоряжение.Соглашение КАК Соглашение,
| ТаблицаРаспоряжение.Партнер КАК Партнер,
| ТаблицаРаспоряжение.Контрагент КАК Контрагент,
| ТаблицаРаспоряжение.Организация КАК Организация,
| ТаблицаРаспоряжение.СтатусДокумента КАК СтатусДокумента,
| ТаблицаРаспоряжение.Договор КАК Договор,
| ТаблицаРаспоряжение.Сделка КАК Сделка,
| ТаблицаРаспоряжение.Валюта КАК Валюта,
| ТаблицаРаспоряжение.ВидЦеныПоставщика КАК ВидЦеныПоставщика,
| ТаблицаРаспоряжение.ЦенаВключаетНДС КАК ЦенаВключаетНДС,
| ТаблицаРаспоряжение.НалогообложениеНДС КАК НалогообложениеНДС,
| ТаблицаРаспоряжение.ВидДеятельностиНДС КАК ВидДеятельностиНДС,
| ТаблицаРаспоряжение.НаправлениеДеятельности КАК НаправлениеДеятельности,
| ТаблицаРаспоряжение.ЕстьОшибкиПроведен КАК ЕстьОшибкиПроведен,
| ТаблицаРаспоряжение.ЕстьОшибкиСтатус КАК ЕстьОшибкиСтатус
|ИЗ
| ВТРаспоряжение КАК ТаблицаРаспоряжение
|;
|
|
|ВЫБРАТЬ
| ТаблицаТовары.ДокументПоступления КАК ДокументПоступления,
| ТаблицаТовары.Номенклатура КАК Номенклатура,
| ТаблицаТовары.Характеристика КАК Характеристика,
| ТаблицаТовары.Назначение КАК Назначение,
| ТаблицаТовары.Серия КАК Серия,
| СУММА(ТаблицаТовары.Количество) КАК Количество,
| СУММА(ТаблицаТовары.КоличествоУпаковок) КАК КоличествоУпаковок
|ИЗ
| ВТТовары КАК ТаблицаТовары
|
|СГРУППИРОВАТЬ ПО
| ТаблицаТовары.ДокументПоступления,
| ТаблицаТовары.Номенклатура,
| ТаблицаТовары.Характеристика,
| ТаблицаТовары.Назначение,
| ТаблицаТовары.Серия
|
|УПОРЯДОЧИТЬ ПО
| Номенклатура,
| Характеристика,
| Назначение,
| Серия,
| ДокументПоступления
|;
|
|
|ВЫБРАТЬ
| Товары.ДокументПоступления КАК ДокументПоступления,
| Товары.Номенклатура КАК Номенклатура,
| Товары.Характеристика КАК Характеристика,
| Товары.Назначение КАК Назначение,
| Товары.Серия КАК Серия,
| Товары.Упаковка КАК Упаковка,
| Товары.КоэффициентУпаковки КАК КоэффициентУпаковки,
| СУММА(Товары.Количество) КАК Количество,
| СУММА(Товары.КоличествоУпаковок) КАК КоличествоУпаковок,
| Товары.Цена КАК Цена,
| Товары.СтавкаНДС КАК СтавкаНДС
|ИЗ
| (ВЫБРАТЬ РАЗЛИЧНЫЕ
| ТоварыКПоступлению.ДокументПоступления КАК ДокументПоступления,
| ТоварыКПоступлению.Склад КАК Склад,
| ТоварыКПоступлению.Номенклатура КАК Номенклатура,
| ТоварыКПоступлению.Характеристика КАК Характеристика,
| ТоварыКПоступлению.Назначение КАК Назначение,
| ТоварыКПоступлению.Серия КАК Серия,
| ТоварыКПоступлению.Упаковка КАК Упаковка,
| ТоварыКПоступлению.КоэффициентУпаковки КАК КоэффициентУпаковки,
| ТоварыКПоступлению.Количество КАК Количество,
| ТоварыКПоступлению.КоличествоУпаковок КАК КоличествоУпаковок,
| ВЫБОР
| КОГДА ЦеныТоваров.КоличествоЦен = 1
| ТОГДА ТоварыКПоступлению.Цена
| ИНАЧЕ 0
| КОНЕЦ КАК Цена,
| ВЫБОР
| КОГДА ЦеныТоваров.КоличествоСтавокНДС = 1
| ТОГДА ТоварыКПоступлению.СтавкаНДС
| ИНАЧЕ 0
| КОНЕЦ КАК СтавкаНДС
| ИЗ
| ВТЦеныТоваров КАК ТоварыКПоступлению
| ЛЕВОЕ СОЕДИНЕНИЕ ВТЦеныТоваровГруппировка ЦеныТоваров
| ПО ТоварыКПоступлению.ДокументПоступления = ЦеныТоваров.ДокументПоступления
| И ТоварыКПоступлению.Склад = ЦеныТоваров.Склад
| И ТоварыКПоступлению.Номенклатура = ЦеныТоваров.Номенклатура
| И ТоварыКПоступлению.Характеристика = ЦеныТоваров.Характеристика
| И ТоварыКПоступлению.Назначение = ЦеныТоваров.Назначение
| И ТоварыКПоступлению.Серия = ЦеныТоваров.Серия
| И ТоварыКПоступлению.Упаковка = ЦеныТоваров.Упаковка
| ) КАК Товары
|
|СГРУППИРОВАТЬ ПО
| Товары.ДокументПоступления,
| Товары.Номенклатура,
| Товары.Характеристика,
| Товары.Назначение,
| Товары.Серия,
| Товары.Упаковка,
| Товары.КоэффициентУпаковки,
| Товары.Цена,
| Товары.СтавкаНДС
|
|УПОРЯДОЧИТЬ ПО
| Номенклатура,
| Характеристика,
| Назначение,
| Серия,
| Упаковка,
| ДокументПоступления,
| КоэффициентУпаковки УБЫВ";
Запрос.Текст = СтрЗаменить(Запрос.Текст,
"&ТекстЗапросаКоэффициентУпаковки",
Справочники.УпаковкиЕдиницыИзмерения.ТекстЗапросаКоэффициентаУпаковки(
"УпаковкиТоваров.Упаковка",
"УпаковкиТоваров.Номенклатура"));
Запрос.УстановитьПараметр("ДокументОснование", ДокументОснование);
Запрос.УстановитьПараметр("СкладПоступления", СкладПоступления);
Запрос.УстановитьПараметр("СкладУказан", ЗначениеЗаполнено(СкладПоступления));
Запрос.УстановитьПараметр("ЗаполнятьПоЗаказу", Не (ЗаполнятьПоНакладной = Истина Или ЗаполнятьПоОрдеру = Истина));
Запрос.УстановитьПараметр("ЗаполнятьПоНакладной", ЗаполнятьПоНакладной = Истина);
Запрос.УстановитьПараметр("ЗаполнятьПоОрдеру", ЗаполнятьПоОрдеру = Истина);
ТипТовары = Новый Массив;
ТипТовары.Добавить(Перечисления.ТипыНоменклатуры.Товар);
ТипТовары.Добавить(Перечисления.ТипыНоменклатуры.МногооборотнаяТара);
Запрос.УстановитьПараметр("Товары", ТипТовары);
РезультатЗапроса = Запрос.ВыполнитьПакет();
Выборка = РезультатЗапроса[5].Выбрать();
ТЗТовары = РезультатЗапроса[6].Выгрузить();
ТЗУпаковки = РезультатЗапроса[7].Выгрузить();
Выборка.Следующий();
МассивДопустимыхСтатусов = Новый Массив;
МассивДопустимыхСтатусов.Добавить(Перечисления.СтатусыЗаказовПоставщикам.Подтвержден);
МассивДопустимыхСтатусов.Добавить(Перечисления.СтатусыЗаказовПоставщикам.Закрыт);
ОбщегоНазначенияУТ.ПроверитьВозможностьВводаНаОсновании(ДокументОснование,
Выборка.СтатусДокумента,
Выборка.ЕстьОшибкиПроведен,
Выборка.ЕстьОшибкиСтатус,
МассивДопустимыхСтатусов);
Распоряжение = ДокументОснование;
Склад = СкладПоступления;
ПарыОперацийРаздельнойЗакупки = ЗакупкиСервер.ПарыОперацийРаздельнойЗакупки(Истина);
ХозяйственнаяОперацияПриемкиФактическоеПоступление = ПарыОперацийРаздельнойЗакупки.Получить(ХозяйственнаяОперацияПриемки);
ХозяйственнаяОперацияПриемкиФактическоеПоступление = ?(Не ЗначениеЗаполнено(ХозяйственнаяОперацияПриемкиФактическоеПоступление),
ХозяйственнаяОперацияПриемки,
ХозяйственнаяОперацияПриемкиФактическоеПоступление);
ХозяйственнаяОперация = ХозяйственнаяОперацияПриемкиФактическоеПоступление;
ЭтоТоварыВПути = Документы.ПоступлениеТоваровНаСклад.ЭтоПоступлениеИзТоваровВПути(ХозяйственнаяОперация);
ИсключаемыеСвойства = ?(ЭтоТоварыВПути, "ВидДеятельностиНДС", "");
ЗаполнитьЗначенияСвойств(ЭтотОбъект, Выборка, , ИсключаемыеСвойства);
ЗаполнитьУпаковкиЦены(ТЗТовары, ТЗУпаковки);
ПересчитатьКоличествоУпаковокЗаполнитьСтавкуНДС();
ЗаполнитьЦеныПоСоглашению(Ложь);
КонецПроцедуры
Процедура ЗаполнитьДокументНаОснованииПриобретенияТоваров(Знач ДокументОснование, Знач СкладПоступления = Неопределено, Знач ХозяйственнаяОперацияПриемки = Неопределено, Знач ЗаполнятьПоНакладной = Ложь)
Запрос = Новый Запрос;
Запрос.Текст = ТекстЗапросаЗаполненияНаОсновании(Ложь);
Запрос.УстановитьПараметр("ДокументОснование", ДокументОснование);
Запрос.УстановитьПараметр("СкладПоступления", СкладПоступления);
Запрос.УстановитьПараметр("СкладУказан", ЗначениеЗаполнено(СкладПоступления));
Запрос.УстановитьПараметр("ЗаполнятьПоНакладной", ЗаполнятьПоНакладной = Истина);
РезультатЗапроса = Запрос.ВыполнитьПакет();
Выборка = РезультатЗапроса[5].Выбрать();
ТЗТовары = РезультатЗапроса[6].Выгрузить();
ТЗУпаковки = РезультатЗапроса[7].Выгрузить();
Выборка.Следующий();
ОбщегоНазначенияУТ.ПроверитьВозможностьВводаНаОсновании(ДокументОснование,
Неопределено,
Выборка.ЕстьОшибкиПроведен,
Выборка.ЕстьОшибкиСтатус);
Распоряжение = ДокументОснование;
Склад = СкладПоступления;
ПарыОперацийРаздельнойЗакупки = ЗакупкиСервер.ПарыОперацийРаздельнойЗакупки(Истина);
ХозяйственнаяОперацияПриемкиФактическоеПоступление = ПарыОперацийРаздельнойЗакупки.Получить(ХозяйственнаяОперацияПриемки);
ХозяйственнаяОперацияПриемкиФактическоеПоступление = ?(Не ЗначениеЗаполнено(ХозяйственнаяОперацияПриемкиФактическоеПоступление),
ХозяйственнаяОперацияПриемки,
ХозяйственнаяОперацияПриемкиФактическоеПоступление);
ХозяйственнаяОперация = ХозяйственнаяОперацияПриемкиФактическоеПоступление;
ЭтоТоварыВПути = Документы.ПоступлениеТоваровНаСклад.ЭтоПоступлениеИзТоваровВПути(ХозяйственнаяОперация);
ИсключаемыеСвойства = ?(ЭтоТоварыВПути, "ВидДеятельностиНДС", "");
ЗаполнитьЗначенияСвойств(ЭтотОбъект, Выборка, , ИсключаемыеСвойства);
ЗаполнитьУпаковкиЦены(ТЗТовары, ТЗУпаковки);
ПересчитатьКоличествоУпаковокЗаполнитьСтавкуНДС();
ЗаполнитьЦеныПоСоглашению(Ложь);
КонецПроцедуры
Процедура ЗаполнитьДокументНаОснованииАктаПриемкиПослеПоступления(ДанныеЗаполнения)
АктОРасхождениях = ДанныеЗаполнения.АктОРасхождениях;
ДокументПриобретение = Неопределено;
Если ДанныеЗаполнения.Свойство("ОснованиеАкта") Тогда
ДокументПриобретение = ДанныеЗаполнения.ОснованиеАкта;
ДокументОснование = ДанныеЗаполнения.ОснованиеАкта;
ИначеЕсли ДанныеЗаполнения.Свойство("ИсправляемыйДокумент") Тогда
ДокументПриобретение = ДанныеЗаполнения.Приобретение;
ДокументОснование = ДанныеЗаполнения.ИсправляемыйДокумент;
КонецЕсли;
Если ДанныеЗаполнения.Свойство("Склад") Тогда
Склад = ДанныеЗаполнения.Склад;
Иначе
Склад = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(ДокументОснование, "Склад");
КонецЕсли;
Запрос = Новый Запрос;
Запрос.Текст = ТекстЗапросаЗаполненияНаОсновании(Истина);
Запрос.УстановитьПараметр("АктОРасхождениях", АктОРасхождениях);
Запрос.УстановитьПараметр("Склад", Склад);
Запрос.УстановитьПараметр("ДокументОснование", ДокументПриобретение);
РезультатЗапроса = Запрос.ВыполнитьПакет();
Выборка = РезультатЗапроса[5].Выбрать();
ТЗТовары = РезультатЗапроса[6].Выгрузить();
ТЗУпаковки = РезультатЗапроса[7].Выгрузить();
Выборка.Следующий();
ОбщегоНазначенияУТ.ПроверитьВозможностьВводаНаОсновании(ДокументОснование,
Неопределено,
Выборка.ЕстьОшибкиПроведен,
Выборка.ЕстьОшибкиСтатус);
ХозяйственнаяОперацияПриемки = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(ДокументОснование, "ХозяйственнаяОперация");
ПарыОперацийРаздельнойЗакупки = ЗакупкиСервер.ПарыОперацийРаздельнойЗакупки(Истина);
ХозяйственнаяОперацияПриемкиФактическоеПоступление = ПарыОперацийРаздельнойЗакупки.Получить(ХозяйственнаяОперацияПриемки);
ХозяйственнаяОперацияПриемкиФактическоеПоступление = ?(Не ЗначениеЗаполнено(ХозяйственнаяОперацияПриемкиФактическоеПоступление),
ХозяйственнаяОперацияПриемки,
ХозяйственнаяОперацияПриемкиФактическоеПоступление);
ХозяйственнаяОперация = ХозяйственнаяОперацияПриемкиФактическоеПоступление;
ЭтоТоварыВПути = Документы.ПоступлениеТоваровНаСклад.ЭтоПоступлениеИзТоваровВПути(ХозяйственнаяОперация);
ИсключаемыеСвойства = ?(ЭтоТоварыВПути, "ВидДеятельностиНДС", "");
ЗаполнитьЗначенияСвойств(ЭтотОбъект, Выборка, , ИсключаемыеСвойства);
ЗаполнитьУпаковкиЦены(ТЗТовары, ТЗУпаковки);
ПересчитатьКоличествоУпаковокЗаполнитьСтавкуНДС();
ЗаполнитьЦеныПоСоглашению(Ложь);
Допоступление = Истина;
КонецПроцедуры
Процедура ЗаполнитьУпаковкиЦены(ТЗТовары, ТЗУпаковки)
СвойстваУпаковок = "Упаковка, Количество, КоличествоУпаковок, Цена, СтавкаНДС";
СвойстваТоваров = "ДокументПоступления, Номенклатура, Характеристика, Назначение";
СвойстваПоиска = Новый Структура(СвойстваТоваров);
ТЗУпаковки.Индексы.Добавить(СвойстваТоваров);
Для Каждого СтрокаТоваров Из ТЗТовары Цикл
СтрокаТЧ = Товары.Добавить();
ЗаполнитьЗначенияСвойств(СтрокаТЧ, СтрокаТоваров);
ЗаполнитьЗначенияСвойств(СвойстваПоиска, СтрокаТоваров);
Количество = СтрокаТоваров.Количество;
УпаковкиТовара = ТЗУпаковки.НайтиСтроки(СвойстваПоиска);
УдаляемыеУпаковки = Новый Массив;
Для Каждого СтрокаУпаковок Из УпаковкиТовара Цикл
Если Количество >= СтрокаУпаковок.Количество Тогда
НоваяСтрокаТЧ = Товары.Добавить();
ЗаполнитьЗначенияСвойств(НоваяСтрокаТЧ, СтрокаТЧ, , СвойстваУпаковок);
ЗаполнитьЗначенияСвойств(НоваяСтрокаТЧ, СтрокаУпаковок, СвойстваУпаковок);
ЗаполнитьСуммовыеПоказателиСтрокиТоваров(НоваяСтрокаТЧ);
Количество = Количество - СтрокаУпаковок.Количество;
Если Количество > 0 Тогда
СтрокаТЧ.Количество = Количество;
СтрокаТЧ.КоличествоУпаковок = Количество;
ЗаполнитьСуммовыеПоказателиСтрокиТоваров(СтрокаТЧ);
Иначе
Товары.Удалить(СтрокаТЧ);
КонецЕсли;
УдаляемыеУпаковки.Добавить(СтрокаУпаковок);
КонецЕсли;
Если Количество <= 0 Тогда
Прервать;
КонецЕсли;
КонецЦикла;
Для Каждого УдаляемаяСтрока Из УдаляемыеУпаковки Цикл
ТЗУпаковки.Удалить(УдаляемаяСтрока);
КонецЦикла;
КонецЦикла;
КонецПроцедуры
Функция ДокументОснованиеПриЗаполнении(ДанныеЗаполнения)
ТипыОснований = Новый Массив;
ТипыОснований.Добавить(Тип("ДокументСсылка.ЗаказПоставщику"));
ТипыОснований.Добавить(Тип("ДокументСсылка.ПриобретениеТоваровУслуг"));
ТипыОснований.Добавить(Тип("СправочникСсылка.ДоговорыКонтрагентов"));
ТипыОснований.Добавить(Тип("СправочникСсылка.СоглашенияСПоставщиками"));
Если ТипЗнч(ДанныеЗаполнения) = Тип("Структура")
И ДанныеЗаполнения.Свойство("ДокументОснование")
И ТипыОснований.Найти(ТипЗнч(ДанныеЗаполнения.ДокументОснование)) <> Неопределено Тогда
Возврат ДанныеЗаполнения.ДокументОснование;
ИначеЕсли ТипыОснований.Найти(ТипЗнч(ДанныеЗаполнения)) <> Неопределено Тогда
Возврат ДанныеЗаполнения;
КонецЕсли;
Возврат Неопределено;
КонецФункции
Процедура ЗаполнитьИсправлениеНаОснованииАктаПриемкиПослеПоступления(ДанныеЗаполнения)
АктОРасхождениях = ДанныеЗаполнения.АктОРасхождениях;
ДокументПриобретение = Неопределено;
ЭтоВводИсправления = Ложь;
Если ДанныеЗаполнения.Свойство("ОснованиеАкта") Тогда
ДокументПриобретение = ДанныеЗаполнения.ОснованиеАкта;
ИначеЕсли ДанныеЗаполнения.Свойство("ИсправляемыйДокумент") Тогда
ДокументПриобретение = ДанныеЗаполнения.Приобретение;
ЭтоВводИсправления = Истина;
КонецЕсли;
Запрос = Новый Запрос();
Запрос.Текст =
"ВЫБРАТЬ
| Таблица.Номенклатура,
| Таблица.Характеристика,
| Таблица.Назначение,
| Таблица.КоличествоПоДокументу - Таблица.Количество КАК Количество,
| Таблица.Серия
|ПОМЕСТИТЬ ВТТоварыАкта
|ИЗ
| Документ.АктОРасхожденияхПослеПриемки.Товары КАК Таблица
|ГДЕ
| Таблица.Ссылка = &АктОРасхождениях
| И Таблица.Действие В
| (ЗНАЧЕНИЕ(Перечисление.ВариантыДействийПоРасхождениямВАктеПослеПриемки.ВернутьПерепоставленноеБезОформления),
| ЗНАЧЕНИЕ(Перечисление.ВариантыДействийПоРасхождениямВАктеПослеПриемки.ОтнестиПерепоставленноеНаПрочиеДоходы))
|;
|
|ВЫБРАТЬ
| ТаблицаОбъединения.Номенклатура,
| ТаблицаОбъединения.Характеристика,
| ТаблицаОбъединения.Назначение,
| ТаблицаОбъединения.Серия,
| СУММА(ТаблицаОбъединения.Количество) КАК КоличествоПослеИзменения,
| ИСТИНА КАК СтрокаПерезаполнена
|ИЗ
| (
| ВЫБРАТЬ
| Таблица.Номенклатура,
| Таблица.Характеристика,
| Таблица.Назначение,
| Таблица.Количество КАК Количество,
| Таблица.Серия
| ИЗ
| ВТТоварыАкта КАК Таблица
|
| ОБЪЕДИНИТЬ ВСЕ
|
| ВЫБРАТЬ
| Таблица.Номенклатура,
| Таблица.Характеристика,
| Таблица.Назначение,
| Таблица.Количество,
| Таблица.Серия
| ИЗ
| Документ.ПоступлениеТоваровНаСклад.Товары КАК Таблица
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВТТоварыАкта КАК ТоварыАкта
| ПО ТоварыАкта.Номенклатура = Таблица.Номенклатура
| И ТоварыАкта.Характеристика = Таблица.Характеристика
| И ТоварыАкта.Назначение = Таблица.Назначение
| ГДЕ
| Таблица.Ссылка = &ИсправляемыйДокумент
| ) КАК ТаблицаОбъединения
|
|СГРУППИРОВАТЬ ПО
| ТаблицаОбъединения.Номенклатура,
| ТаблицаОбъединения.Характеристика,
| ТаблицаОбъединения.Назначение,
| ТаблицаОбъединения.Серия
|
|УПОРЯДОЧИТЬ ПО
| Номенклатура,
| Характеристика,
| Назначение,
| Серия
|";
Запрос.УстановитьПараметр("АктОРасхождениях", ДанныеЗаполнения.АктОРасхождениях);
Запрос.УстановитьПараметр("ИсправляемыйДокумент", ДанныеЗаполнения.ИсправляемыйДокумент);
Результат = Запрос.Выполнить().Выгрузить();
ТЗТовары = Товары.Выгрузить();
ТЗТовары.Колонки.Добавить("СтрокаПерезаполнена", Новый ОписаниеТипов("Булево"));
Ключ = "Номенклатура, Характеристика, Назначение";
Условие = "ПО [Количество]";
НакладныеСервер.РаспределитьКоличествоИЗаполнить(Результат, ТЗТовары, "КоличествоПослеИзменения", Ключ, Условие, Истина, "СтрокаПерезаполнена");
СтруктураДействий = Новый Структура;
СтруктураДействий.Вставить("ПересчитатьКоличествоУпаковок");
ОбрабатываемыеСтроки = Новый Массив;
Для Каждого Строка Из ТЗТовары Цикл
Если Строка.СтрокаПерезаполнена Тогда
Строка.Количество = Строка.КоличествоПослеИзменения;
ОбрабатываемыеСтроки.Добавить(Строка);
КонецЕсли;
КонецЦикла;
ПакетнаяОбработкаТабличнойЧастиСервер.ОбработатьСтрокиТЧ(
ОбрабатываемыеСтроки,
СтруктураДействий,
ТЗТовары);
НакладныеСервер.УдалитьПустыеСтроки(ТЗТовары, "Количество");
Товары.Загрузить(ТЗТовары);
КонецПроцедуры
Процедура ЗаполнитьДокументНаОснованииДоговора(ДокументОснование,
СкладПоступления = Неопределено,
ХозяйственнаяОперацияПриемки = Неопределено,
ЗаполнятьПоНакладной = Ложь,
ЗаполнятьПоОрдеру = Ложь)
Запрос = Новый Запрос(
"ВЫБРАТЬ
| Договор.Ссылка КАК Ссылка,
| Договор.Ссылка КАК Договор,
| Договор.Партнер КАК Партнер,
| Договор.Контрагент КАК Контрагент,
| Договор.Организация КАК Организация,
| Договор.Статус КАК СтатусДокумента,
| ВЫБОР
| КОГДА Договор.Статус <> ЗНАЧЕНИЕ(Перечисление.СтатусыДоговоровКонтрагентов.Действует)
| ТОГДА ИСТИНА
| ИНАЧЕ ЛОЖЬ
| КОНЕЦ КАК ЕстьОшибкиСтатус,
| ВЫБОР
| КОГДА Договор.ХозяйственнаяОперация = ЗНАЧЕНИЕ(Перечисление.ХозяйственныеОперации.ОказаниеАгентскихУслуг)
| ТОГДА ИСТИНА
| ИНАЧЕ ЛОЖЬ
| КОНЕЦ КАК ЭтоАгентскиеУслуги,
| Договор.НаправлениеДеятельности КАК НаправлениеДеятельности
|ПОМЕСТИТЬ ВТРаспоряжение
|ИЗ
| Справочник.ДоговорыКонтрагентов КАК Договор
|ГДЕ
| Договор.Ссылка = &ДокументОснование
|;
|
|
|ВЫБРАТЬ
| ТоварыКПоступлениюОстатки.ДокументПоступления,
| ТоварыКПоступлениюОстатки.Номенклатура,
| ТоварыКПоступлениюОстатки.Характеристика,
| ТоварыКПоступлениюОстатки.Назначение,
| ТоварыКПоступлениюОстатки.Серия,
| ТоварыКПоступлениюОстатки.КОформлениюПоступленийПоРаспоряжениюОстаток КАК Количество,
| ТоварыКПоступлениюОстатки.КОформлениюПоступленийПоРаспоряжениюОстаток КАК КоличествоУпаковок
|ПОМЕСТИТЬ ВТТовары
|ИЗ
| РегистрНакопления.ТоварыКПоступлению.Остатки(,ДокументПоступления = &ДокументОснование
| И ВЫБОР КОГДА &СкладУказан
| ТОГДА Склад = &СкладПоступления
| ИНАЧЕ Склад <> ЗНАЧЕНИЕ(Справочник.Склады.ПустаяСсылка)
| КОНЕЦ) КАК ТоварыКПоступлениюОстатки
|ГДЕ
| НЕ &ЗаполнятьПоНакладной
| И НЕ &ЗаполнятьПоОрдеру
| И ТоварыКПоступлениюОстатки.КОформлениюПоступленийПоРаспоряжениюОстаток > 0
|
|ОБЪЕДИНИТЬ ВСЕ
|
|ВЫБРАТЬ
| ТоварыКПоступлениюОстатки.ДокументПоступления,
| ТоварыКПоступлениюОстатки.Номенклатура,
| ТоварыКПоступлениюОстатки.Характеристика,
| ТоварыКПоступлениюОстатки.Назначение,
| ТоварыКПоступлениюОстатки.Серия,
| ТоварыКПоступлениюОстатки.КОформлениюПоступленийПоОрдерамОстаток КАК Количество,
| ТоварыКПоступлениюОстатки.КОформлениюПоступленийПоОрдерамОстаток КАК КоличествоУпаковок
|ИЗ
| РегистрНакопления.ТоварыКПоступлению.Остатки(,ДокументПоступления = &ДокументОснование
| И ВЫБОР КОГДА &СкладУказан
| ТОГДА Склад = &СкладПоступления
| ИНАЧЕ Склад <> ЗНАЧЕНИЕ(Справочник.Склады.ПустаяСсылка)
| КОНЕЦ) КАК ТоварыКПоступлениюОстатки
|ГДЕ
| НЕ &ЗаполнятьПоНакладной
| И &ЗаполнятьПоОрдеру
| И ТоварыКПоступлениюОстатки.КОформлениюПоступленийПоОрдерамОстаток > 0
|
|ОБЪЕДИНИТЬ ВСЕ
|
|ВЫБРАТЬ
| ТоварыКПоступлениюОстатки.ДокументПоступления,
| ТоварыКПоступлениюОстатки.Номенклатура,
| ТоварыКПоступлениюОстатки.Характеристика,
| ТоварыКПоступлениюОстатки.Назначение,
| ТоварыКПоступлениюОстатки.Серия,
| ТоварыКПоступлениюОстатки.КОформлениюПоступленийПоНакладнымОстаток КАК Количество,
| ТоварыКПоступлениюОстатки.КОформлениюПоступленийПоНакладнымОстаток КАК КоличествоУпаковок
|ИЗ
| РегистрНакопления.ТоварыКПоступлению.Остатки(,ДокументПоступления = &ДокументОснование
| И ВЫБОР КОГДА &СкладУказан
| ТОГДА Склад = &СкладПоступления
| ИНАЧЕ Склад <> ЗНАЧЕНИЕ(Справочник.Склады.ПустаяСсылка)
| КОНЕЦ) КАК ТоварыКПоступлениюОстатки
|ГДЕ
| &ЗаполнятьПоНакладной
| И ТоварыКПоступлениюОстатки.КОформлениюПоступленийПоНакладнымОстаток > 0
|;
|
|
|ВЫБРАТЬ
| ТаблицаРаспоряжение.Ссылка КАК Ссылка,
| ТаблицаРаспоряжение.Договор КАК Договор,
| ТаблицаРаспоряжение.Партнер КАК Партнер,
| ТаблицаРаспоряжение.Контрагент КАК Контрагент,
| ТаблицаРаспоряжение.Организация КАК Организация,
| ТаблицаРаспоряжение.СтатусДокумента КАК СтатусДокумента,
| ТаблицаРаспоряжение.НаправлениеДеятельности КАК НаправлениеДеятельности,
| ТаблицаРаспоряжение.ЭтоАгентскиеУслуги КАК ЭтоАгентскиеУслуги,
| ТаблицаРаспоряжение.ЕстьОшибкиСтатус КАК ЕстьОшибкиСтатус
|ИЗ
| ВТРаспоряжение КАК ТаблицаРаспоряжение
|;
|
|
|ВЫБРАТЬ
| ТаблицаТовары.ДокументПоступления КАК ДокументПоступления,
| ТаблицаТовары.Номенклатура КАК Номенклатура,
| ТаблицаТовары.Характеристика КАК Характеристика,
| ТаблицаТовары.Назначение КАК Назначение,
| ТаблицаТовары.Серия КАК Серия,
| ТаблицаТовары.Количество КАК Количество,
| ТаблицаТовары.КоличествоУпаковок КАК КоличествоУпаковок
|ИЗ
| ВТТовары КАК ТаблицаТовары
|
|УПОРЯДОЧИТЬ ПО
| Номенклатура,
| Характеристика,
| Назначение,
| Серия,
| ДокументПоступления");
Запрос.УстановитьПараметр("ДокументОснование", ДокументОснование);
Запрос.УстановитьПараметр("СкладПоступления", СкладПоступления);
Запрос.УстановитьПараметр("СкладУказан", ЗначениеЗаполнено(СкладПоступления));
Запрос.УстановитьПараметр("ЗаполнятьПоНакладной", ЗаполнятьПоНакладной = Истина);
Запрос.УстановитьПараметр("ЗаполнятьПоОрдеру", ЗаполнятьПоОрдеру = Истина);
РезультатЗапроса = Запрос.ВыполнитьПакет();
Выборка = РезультатЗапроса[2].Выбрать();
ТЗТовары = РезультатЗапроса[3].Выгрузить();
Выборка.Следующий();
МассивДопустимыхСтатусов = Новый Массив();
МассивДопустимыхСтатусов.Добавить(Перечисления.СтатусыДоговоровКонтрагентов.Действует);
ОбщегоНазначенияУТ.ПроверитьВозможностьВводаНаОсновании(
Выборка.Договор,
Выборка.СтатусДокумента,
,
Выборка.ЕстьОшибкиСтатус,
МассивДопустимыхСтатусов);
ПарыОперацийРаздельнойЗакупки = ЗакупкиСервер.ПарыОперацийРаздельнойЗакупки(Истина);
ХозяйственнаяОперацияПриемкиФактическоеПоступление = ПарыОперацийРаздельнойЗакупки.Получить(ХозяйственнаяОперацияПриемки);
ХозяйственнаяОперацияПриемкиФактическоеПоступление = ?(Не ЗначениеЗаполнено(ХозяйственнаяОперацияПриемкиФактическоеПоступление),
ХозяйственнаяОперацияПриемки,
ХозяйственнаяОперацияПриемкиФактическоеПоступление);
Распоряжение = ДокументОснование;
ХозяйственнаяОперация = ХозяйственнаяОперацияПриемкиФактическоеПоступление;
Если ЗначениеЗаполнено(СкладПоступления) Тогда
Склад = СкладПоступления;
КонецЕсли;
ЗаполнитьЗначенияСвойств(ЭтотОбъект, Выборка);
ЗаполнитьНалогообложениеНДС();
Товары.Загрузить(ТЗТовары);
ПересчитатьКоличествоУпаковокЗаполнитьСтавкуНДС(Истина);
ЗаполнитьЦеныПоСоглашению();
КонецПроцедуры
Процедура ЗаполнитьНалогообложениеНДС()
ПараметрыЗаполнения = Документы.ПоступлениеТоваровНаСклад.ПараметрыЗаполненияНалогообложенияНДСЗакупки(ЭтотОбъект);
УчетНДСУП.ЗаполнитьНалогообложениеНДСЗакупки(НалогообложениеНДС, ПараметрыЗаполнения);
КонецПроцедуры
Процедура ЗаполнитьВидДеятельностиНДС()
ПараметрыЗаполнения = Документы.ПоступлениеТоваровНаСклад.ПараметрыЗаполненияВидаДеятельностиНДС(ЭтотОбъект);
УчетНДСУП.ЗаполнитьВидДеятельностиНДС(ВидДеятельностиНДС, ПараметрыЗаполнения);
КонецПроцедуры
#КонецОбласти
#Область ВидыЗапасов
Функция ВременныеТаблицыДанныхДокумента(ДляТоваровУПартнеров)
Запрос = Новый Запрос;
ТекстЗапроса =
"ВЫБРАТЬ
| &Дата КАК Дата,
| &Партнер КАК Партнер,
| &Контрагент КАК Контрагент,
| &Соглашение КАК Соглашение,
| &Договор КАК Договор,
| &Организация КАК Организация,
| &Склад КАК Склад,
| &МестоХранения КАК МестоХранения,
| &ХозяйственнаяОперация КАК ХозяйственнаяОперация,
| &Валюта КАК Валюта,
| ЗНАЧЕНИЕ(Перечисление.ТипыНалогообложенияНДС.ПустаяСсылка) КАК НалогообложениеНДС,
| ЛОЖЬ КАК ЕстьСделкиВТабличнойЧасти,
| &ТипЗапасов КАК ТипЗапасов
|ПОМЕСТИТЬ ТаблицаДанныхДокумента
|;
|
|
|ВЫБРАТЬ
| ТаблицаТоваров.НомерСтроки КАК НомерСтроки,
| ТаблицаТоваров.Номенклатура КАК Номенклатура,
| &ТаблицаТоваровАналитикаУчетаНоменклатуры КАК АналитикаУчетаНоменклатуры,
| ТаблицаТоваров.Характеристика КАК Характеристика,
| ТаблицаТоваров.Назначение КАК Назначение,
| ВЫБОР
| КОГДА ТаблицаТоваров.СтатусУказанияСерийТоварыУПартнеров = 18
| ИЛИ (ТаблицаТоваров.СтатусУказанияСерийТоварыУПартнеров = 0
| И ТаблицаТоваров.СтатусУказанияСерийНаСкладах = 14)
| ТОГДА ТаблицаТоваров.Серия
| ИНАЧЕ ЗНАЧЕНИЕ(Справочник.СерииНоменклатуры.ПустаяСсылка)
| КОНЕЦ КАК Серия,
| ТаблицаТоваров.ВидЗапасов КАК ВидЗапасов,
| ТаблицаТоваров.СтавкаНДС КАК СтавкаНДС,
| ТаблицаТоваров.Упаковка КАК Упаковка,
| ТаблицаТоваров.Количество КАК Количество,
| ВЫБОР
| КОГДА НЕ &ИспользоватьУчетПрослеживаемыхИмпортныхТоваров
| ИЛИ НАЧАЛОПЕРИОДА(&Дата, МЕСЯЦ) < &ДатаНачалаУчетаПрослеживаемыхИмпортныхТоваров
| ТОГДА 0
| ИНАЧЕ &ТекстПоляТаблицаТоваровКоличествоПоРНПТ_
| КОНЕЦ КАК КоличествоПоРНПТ,
| ТаблицаТоваров.Цена КАК Цена,
| ТаблицаТоваров.СуммаСНДС КАК СуммаСНДС,
| ТаблицаТоваров.СуммаНДС КАК СуммаНДС,
| &ТекстПоляТаблицаТоваровНомерГТД_ КАК НомерГТД
|ПОМЕСТИТЬ ВтТаблицаТоваров
|ИЗ
| &ТаблицаТоваров КАК ТаблицаТоваров
|;
|
|
|ВЫБРАТЬ
| ТаблицаТоваров.НомерСтроки КАК НомерСтроки,
| ТаблицаТоваров.Номенклатура КАК Номенклатура,
| ТаблицаТоваров.АналитикаУчетаНоменклатуры КАК АналитикаУчетаНоменклатуры,
| ТаблицаТоваров.Характеристика КАК Характеристика,
| ТаблицаТоваров.Серия КАК Серия,
| ТаблицаТоваров.Количество КАК Количество,
| ТаблицаТоваров.КоличествоПоРНПТ КАК КоличествоПоРНПТ,
| &Склад КАК Склад,
| ТаблицаТоваров.ВидЗапасов КАК ВидЗапасов,
| ТаблицаТоваров.СтавкаНДС КАК СтавкаНДС,
| ТаблицаТоваров.Упаковка КАК Упаковка,
| ТаблицаТоваров.Цена КАК Цена,
| ТаблицаТоваров.СуммаСНДС КАК СуммаСНДС,
| ТаблицаТоваров.СуммаНДС КАК СуммаНДС,
| 0 КАК СуммаВознаграждения,
| 0 КАК СуммаНДСВознаграждения,
| ИСТИНА КАК ПодбиратьВидыЗапасов,
| &ВидЦены КАК ВидЦены,
| ТаблицаТоваров.НомерГТД КАК НомерГТД
|ПОМЕСТИТЬ ТаблицаТоваров
|ИЗ
| ВтТаблицаТоваров КАК ТаблицаТоваров
|;
|
|
|ВЫБРАТЬ
| ТаблицаВидыЗапасов.НомерСтроки КАК НомерСтроки,
| &ТаблицаВидыЗапасовАналитикаУчетаНоменклатуры КАК АналитикаУчетаНоменклатуры,
| ТаблицаВидыЗапасов.АналитикаУчетаПартий КАК АналитикаУчетаПартий,
| ТаблицаВидыЗапасов.ВидЗапасов КАК ВидЗапасов,
| ТаблицаВидыЗапасов.СтавкаНДС КАК СтавкаНДС,
| ТаблицаВидыЗапасов.Количество КАК Количество,
| ВЫБОР
| КОГДА НЕ &ИспользоватьУчетПрослеживаемыхИмпортныхТоваров
| ИЛИ НАЧАЛОПЕРИОДА(&Дата, МЕСЯЦ) < &ДатаНачалаУчетаПрослеживаемыхИмпортныхТоваров
| ТОГДА 0
| ИНАЧЕ ТаблицаВидыЗапасов.КоличествоПоРНПТ
| КОНЕЦ КАК КоличествоПоРНПТ,
| ТаблицаВидыЗапасов.СуммаСНДС КАК СуммаСНДС,
| ТаблицаВидыЗапасов.СуммаНДС КАК СуммаНДС
|ПОМЕСТИТЬ ВтВидыЗапасов
|ИЗ
| &ТаблицаВидыЗапасов КАК ТаблицаВидыЗапасов
|;
|
|
|ВЫБРАТЬ
| ТаблицаВидыЗапасов.НомерСтроки КАК НомерСтроки,
| ТаблицаВидыЗапасов.АналитикаУчетаНоменклатуры КАК АналитикаУчетаНоменклатуры,
| Аналитика.Номенклатура КАК Номенклатура,
| Аналитика.Характеристика КАК Характеристика,
| Аналитика.Серия КАК Серия,
| ТаблицаВидыЗапасов.ВидЗапасов КАК ВидЗапасов,
| ЗНАЧЕНИЕ(Справочник.ВидыЗапасов.ПустаяСсылка) КАК ВидЗапасовПолучателя,
| ТаблицаВидыЗапасов.Количество КАК Количество,
| ТаблицаВидыЗапасов.КоличествоПоРНПТ КАК КоличествоПоРНПТ,
| ТаблицаВидыЗапасов.СуммаСНДС КАК СуммаСНДС,
| ТаблицаВидыЗапасов.СуммаНДС КАК СуммаНДС,
| ТаблицаВидыЗапасов.СтавкаНДС КАК СтавкаНДС,
| 0 КАК СуммаВознаграждения,
| 0 КАК СуммаНДСВознаграждения,
| ЗНАЧЕНИЕ(Справочник.Склады.ПустаяСсылка) КАК СкладОтгрузки,
| Аналитика.МестоХранения КАК Склад,
| ЗНАЧЕНИЕ(Справочник.СделкиСКлиентами.ПустаяСсылка) КАК Сделка,
| ЛОЖЬ КАК ВидыЗапасовУказаныВручную,
| ЗНАЧЕНИЕ(Справочник.НомераГТД.ПустаяСсылка) КАК НомерГТД
|ПОМЕСТИТЬ ТаблицаВидыЗапасов
|ИЗ
| ВтВидыЗапасов КАК ТаблицаВидыЗапасов
| ЛЕВОЕ СОЕДИНЕНИЕ Справочник.КлючиАналитикиУчетаНоменклатуры КАК Аналитика
| ПО ТаблицаВидыЗапасов.АналитикаУчетаНоменклатуры = Аналитика.Ссылка
|
|ИНДЕКСИРОВАТЬ ПО
| АналитикаУчетаНоменклатуры
|;
|
|
|ВЫБРАТЬ
| ТаблицаТоваров.НомерСтроки КАК НомерСтроки,
| ТаблицаТоваров.Номенклатура КАК Номенклатура,
| ВЫБОР
| КОГДА &Проведен
| ТОГДА ТаблицаТоваров.ВидЗапасов
| ИНАЧЕ ЗНАЧЕНИЕ(Справочник.ВидыЗапасов.ПустаяСсылка)
| КОНЕЦ КАК ТекущийВидЗапасов,
| ЛОЖЬ КАК ЭтоВозвратнаяТара,
| &Организация КАК Организация,
| &ХозяйственнаяОперация КАК ХозяйственнаяОперация,
| &ТипЗапасов КАК ТипЗапасов,
| ЗНАЧЕНИЕ(Справочник.СоглашенияСПоставщиками.ПустаяСсылка) КАК Соглашение,
| ЗНАЧЕНИЕ(Справочник.Валюты.ПустаяСсылка) КАК Валюта,
| ЗНАЧЕНИЕ(Перечисление.ТипыНалогообложенияНДС.ПустаяСсылка) КАК НалогообложениеНДС,
| ЗНАЧЕНИЕ(Перечисление.ТипыНалогообложенияНДС.ПустаяСсылка) КАК НалогообложениеОрганизации,
| НЕОПРЕДЕЛЕНО КАК ВладелецТовара,
| ЗНАЧЕНИЕ(Справочник.Контрагенты.ПустаяСсылка) КАК Контрагент,
| ЗНАЧЕНИЕ(Справочник.ДоговорыКонтрагентов.ПустаяСсылка) КАК Договор,
| ЗНАЧЕНИЕ(Справочник.ВидыЦенПоставщиков.ПустаяСсылка) КАК ВидЦены
|ПОМЕСТИТЬ ИсходнаяТаблицаТоваров
|ИЗ
| ТаблицаТоваров КАК ТаблицаТоваров
| ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ВидыЗапасов КАК ВидыЗапасов
| ПО ТаблицаТоваров.ВидЗапасов = ВидыЗапасов.Ссылка
|ГДЕ
| ВЫРАЗИТЬ(ТаблицаТоваров.Номенклатура КАК Справочник.Номенклатура).ТипНоменклатуры <> ЗНАЧЕНИЕ(Перечисление.ТипыНоменклатуры.Работа)
| И (ТаблицаТоваров.ВидЗапасов = ЗНАЧЕНИЕ(Справочник.ВидыЗапасов.ПустаяСсылка)
| ИЛИ ВидыЗапасов.ТипЗапасов <> &ТипЗапасов
| ИЛИ ВидыЗапасов.Организация <> &Организация
| ИЛИ &ПерезаполнитьВидыЗапасов)";
Если ДляТоваровУПартнеров Тогда
ТекстЗапроса = СтрЗаменить(ТекстЗапроса,
"&ТаблицаТоваровАналитикаУчетаНоменклатуры",
"ТаблицаТоваров.АналитикаУчетаНоменклатурыТоварыУПартнеров");
ТекстЗапроса = СтрЗаменить(ТекстЗапроса,
"&ТаблицаВидыЗапасовАналитикаУчетаНоменклатуры",
"ТаблицаВидыЗапасов.АналитикаУчетаНоменклатурыТоварыУПартнеров");
Запрос.УстановитьПараметр("ТипЗапасов", ТипЗапасовПоХозОперации());
Иначе
ТекстЗапроса = СтрЗаменить(ТекстЗапроса,
"&ТаблицаТоваровАналитикаУчетаНоменклатуры",
"ТаблицаТоваров.АналитикаУчетаНоменклатуры");
ТекстЗапроса = СтрЗаменить(ТекстЗапроса,
"&ТаблицаВидыЗапасовАналитикаУчетаНоменклатуры",
"ТаблицаВидыЗапасов.АналитикаУчетаНоменклатуры");
Запрос.УстановитьПараметр("ТипЗапасов", Перечисления.ТипыЗапасов.ПустаяСсылка());
КонецЕсли;
Запрос.Текст = ТекстЗапроса;
Запрос.МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц;
ТаблицаТоваров = ?(ДополнительныеСвойства.Свойство("ТаблицыЗаполненияВидовЗапасовПриОбмене")
И ДополнительныеСвойства.ТаблицыЗаполненияВидовЗапасовПриОбмене <> Неопределено
И ДополнительныеСвойства.ТаблицыЗаполненияВидовЗапасовПриОбмене.Свойство("Товары"),
ДополнительныеСвойства.ТаблицыЗаполненияВидовЗапасовПриОбмене.Товары,
Товары);
Запрос.УстановитьПараметр("ТаблицаТоваров", ТаблицаТоваров);
Запрос.УстановитьПараметр("ТаблицаВидыЗапасов", ВидыЗапасов);
Запрос.УстановитьПараметр("Ссылка", Ссылка);
Запрос.УстановитьПараметр("Дата", Дата);
Запрос.УстановитьПараметр("Партнер", Партнер);
Запрос.УстановитьПараметр("Контрагент", Контрагент);
Запрос.УстановитьПараметр("Соглашение", Соглашение);
Запрос.УстановитьПараметр("Договор", Договор);
Запрос.УстановитьПараметр("Организация", Организация);
Запрос.УстановитьПараметр("Склад", Склад);
Запрос.УстановитьПараметр("МестоХранения", Склад);
Запрос.УстановитьПараметр("ХозяйственнаяОперация", ХозяйственнаяОперация);
Запрос.УстановитьПараметр("Менеджер", Менеджер);
Запрос.УстановитьПараметр("Валюта", Валюта);
Запрос.УстановитьПараметр("ВидЦены", ВидЦеныПоставщика);
Запрос.УстановитьПараметр("Проведен", Проведен);
УчетПрослеживаемыхТоваровЛокализация.УстановитьПараметрыИспользованияУчетаПрослеживаемыхТоваров(Запрос);
ЗапасыСервер.ДополнитьВременныеТаблицыОбязательнымиКолонками(Запрос);
ЗапасыСервер.ПроверитьНеобходимостьПерезаполненияВидовЗапасовДокумента(ЭтотОбъект, Запрос);
ОбщегоНазначенияУТ.ЗаменитьОтсутствующиеПоляТаблицыЗначенийВТекстеЗапроса(
ТаблицаТоваров,
Запрос.Текст,
"&ТекстПоляТаблицаТоваровКоличествоПоРНПТ_",
"ТаблицаТоваров",
"КоличествоПоРНПТ",
"ТаблицаТоваров.КоличествоПоРНПТ",
"0");
ОбщегоНазначенияУТ.ЗаменитьОтсутствующиеПоляТаблицыЗначенийВТекстеЗапроса(
ТаблицаТоваров,
Запрос.Текст,
"&ТекстПоляТаблицаТоваровНомерГТД_",
"ТаблицаТоваров",
"НомерГТД",
"ТаблицаТоваров.НомерГТД",
"ЗНАЧЕНИЕ(Справочник.НомераГТД.ПустаяСсылка)");
Запрос.Выполнить();
Возврат Запрос.МенеджерВременныхТаблиц;
КонецФункции
Процедура ЗаполнитьНоменклатуруТоварыУПартнеров() Экспорт
СтруктураПоиска = Новый Структура("АналитикаУчетаНоменклатуры");
Для Каждого СтрокаТоваров Из Товары Цикл
КоличествоТоваров = СтрокаТоваров.Количество;
СуммаСНДС = СтрокаТоваров.СуммаСНДС;
СуммаНДС = СтрокаТоваров.СуммаНДС;
ЗаполнитьЗначенияСвойств(СтруктураПоиска, СтрокаТоваров);
СтруктураПоиска.АналитикаУчетаНоменклатуры = СтрокаТоваров.АналитикаУчетаНоменклатурыТоварыУПартнеров;
НайденныеСтроки = ВидыЗапасов.НайтиСтроки(СтруктураПоиска);
Для Каждого СтрокаЗапасов Из НайденныеСтроки Цикл
Если СтрокаЗапасов.Количество = 0 Тогда
Продолжить;
КонецЕсли;
Количество = Мин(КоличествоТоваров, СтрокаЗапасов.Количество);
НоваяСтрока = ВидыЗапасов.Добавить();
ЗаполнитьЗначенияСвойств(НоваяСтрока, СтрокаЗапасов);
НоваяСтрока.АналитикаУчетаНоменклатурыТоварыУПартнеров = СтрокаТоваров.АналитикаУчетаНоменклатурыТоварыУПартнеров;
НоваяСтрока.АналитикаУчетаНоменклатуры = СтрокаТоваров.АналитикаУчетаНоменклатуры;
НоваяСтрока.ВидЗапасовНаСкладе = СтрокаТоваров.ВидЗапасов;
НоваяСтрока.Количество = Количество;
НоваяСтрока.КоличествоПоРНПТ = Количество * СтрокаЗапасов.КоличествоПоРНПТ / СтрокаЗапасов.Количество;
Если КоличествоТоваров <> 0 Тогда
НоваяСтрока.СуммаСНДС = Количество * СуммаСНДС / КоличествоТоваров;
НоваяСтрока.СуммаНДС = Количество * СуммаНДС / КоличествоТоваров;
КонецЕсли;
СтрокаЗапасов.Количество = СтрокаЗапасов.Количество - НоваяСтрока.Количество;
СтрокаЗапасов.КоличествоПоРНПТ = СтрокаЗапасов.КоличествоПоРНПТ - НоваяСтрока.КоличествоПоРНПТ;
СтрокаЗапасов.СуммаСНДС = СтрокаЗапасов.СуммаСНДС - НоваяСтрока.СуммаСНДС;
СтрокаЗапасов.СуммаНДС = СтрокаЗапасов.СуммаНДС - НоваяСтрока.СуммаНДС;
КоличествоТоваров = КоличествоТоваров - НоваяСтрока.Количество;
СуммаСНДС = СуммаСНДС - НоваяСтрока.СуммаСНДС;
СуммаНДС = СуммаНДС - НоваяСтрока.СуммаНДС;
Если КоличествоТоваров = 0 Тогда
Прервать;
КонецЕсли;
КонецЦикла;
КонецЦикла;
ПараметрыПоиска = Новый Структура("Количество", 0);
МассивУдаляемыхСтрок = ВидыЗапасов.НайтиСтроки(ПараметрыПоиска);
Для Каждого СтрокаТаблицы Из МассивУдаляемыхСтрок Цикл
ВидыЗапасов.Удалить(СтрокаТаблицы);
КонецЦикла;
КонецПроцедуры
Процедура ЗаполнитьВидыЗапасов(Отказ)
УстановитьПривилегированныйРежим(Истина);
МенеджерВременныхТаблицТоварыСобственные = ВременныеТаблицыДанныхДокумента(Ложь);
ПерезаполнитьВидыЗапасов = ДополнительныеСвойства.Свойство("ПерезаполнитьВидыЗапасов");
ЗапасыСервер.ЗаполнитьВидыЗапасовПоУмолчанию(МенеджерВременныхТаблицТоварыСобственные, Товары);
МенеджерВременныхТаблиц = ВременныеТаблицыДанныхДокумента(Истина);
ВидыЗапасовПерезаполнены = Ложь;
Если Не Проведен
Или ПерезаполнитьВидыЗапасов
Или ПроверитьИзменениеРеквизитовДокумента(МенеджерВременныхТаблиц)
Или ЗапасыСервер.ПроверитьИзменениеТоваровПоКоличествуИСумме(МенеджерВременныхТаблицТоварыСобственные)
Или ЗапасыСервер.ПроверитьИзменениеТоваровПоКоличествуИСумме(МенеджерВременныхТаблиц) Тогда
ДополнительныеСвойства.Вставить("КонтролироватьНомераГТД", Ложь);
ПараметрыЗаполнения = ПараметрыЗаполненияВидовЗапасов();
ЗапасыСервер.ЗаполнитьВидыЗапасовПоОстаткамКОформлению(ЭтотОбъект,
МенеджерВременныхТаблиц,
Отказ,
ПараметрыЗаполнения);
ВидыЗапасов.Свернуть("АналитикаУчетаНоменклатуры, ВидЗапасов, СтавкаНДС, НомерГТД",
"Количество, КоличествоПоРНПТ, СуммаСНДС, СуммаНДС");
ВидыЗапасовПерезаполнены = Истина;
КонецЕсли;
Если ВидыЗапасовПерезаполнены Тогда
ЗаполнитьНоменклатуруТоварыУПартнеров();
Если ХозяйственнаяОперация = Перечисления.ХозяйственныеОперации.ЗакупкаВСтранахЕАЭСПоступлениеИзТоваровВПути
Или ХозяйственнаяОперация = Перечисления.ХозяйственныеОперации.ЗакупкаПоИмпортуПоступлениеИзТоваровВПути
Или ХозяйственнаяОперация = Перечисления.ХозяйственныеОперации.ЗакупкаУПоставщикаПоступлениеИзТоваровВПути Тогда
ЗаполнитьНомераГТД();
КонецЕсли;
ВидыЗапасов.Свернуть("АналитикаУчетаНоменклатуры, АналитикаУчетаНоменклатурыТоварыУПартнеров,
|АналитикаУчетаПартий, ВидЗапасов, НомерГТД, СтавкаНДС, ВидЗапасовНаСкладе",
"Количество, КоличествоПоРНПТ, СуммаСНДС, СуммаНДС");
КонецЕсли;
КонецПроцедуры
Процедура ИзвлечьДетальныеПоляИзАналитики(ТаблицаДанных)
ОсновнаяАналитика = "Номенклатура, Характеристика, Назначение";
АналитикиНоменклатуры = ТаблицаДанных.ВыгрузитьКолонку("АналитикаУчетаНоменклатуры");
ДетальнаяАналитика = ОбщегоНазначения.ЗначенияРеквизитовОбъектов(АналитикиНоменклатуры, ОсновнаяАналитика);
ТаблицаДанных.Колонки.Добавить("Номенклатура", Новый ОписаниеТипов("СправочникСсылка.Номенклатура"));
ТаблицаДанных.Колонки.Добавить("Характеристика", Новый ОписаниеТипов("СправочникСсылка.ХарактеристикиНоменклатуры"));
ТаблицаДанных.Колонки.Добавить("Назначение", Новый ОписаниеТипов("СправочникСсылка.Назначения"));
Для Каждого Строка Из ТаблицаДанных Цикл
КлючЗначение = ДетальнаяАналитика[Строка.АналитикаУчетаНоменклатуры];
ЗаполнитьЗначенияСвойств(Строка, КлючЗначение);
КонецЦикла;
КонецПроцедуры
Процедура ЗаполнитьНомераГТД()
ТекстЗапроса =
"ВЫБРАТЬ РАЗЛИЧНЫЕ
| ВЫРАЗИТЬ(ИсходнаяТаблица.АналитикаУчетаНоменклатуры КАК Справочник.КлючиАналитикиУчетаНоменклатуры) КАК
| АналитикаУчетаНоменклатуры
|ПОМЕСТИТЬ ВтВидыЗапасов
|ИЗ
| &ИсходнаяТаблица КАК ИсходнаяТаблица
|ИНДЕКСИРОВАТЬ ПО
| АналитикаУчетаНоменклатуры
|;
|
|ВЫБРАТЬ РАЗЛИЧНЫЕ
| ВЫРАЗИТЬ(ИсходнаяТаблица.АналитикаУчетаНоменклатуры КАК Справочник.КлючиАналитикиУчетаНоменклатуры) КАК
| АналитикаУчетаНоменклатуры,
| ИсходнаяТаблица.СтатусУказанияСерий КАК СтатусУказанияСерий,
| ИсходнаяТаблица.СтатусУказанияСерийТоварыУПартнеров КАК СтатусУказанияСерийТоварыУПартнеров
|ПОМЕСТИТЬ ВтТаблицаСтатусыУказанияСерий
|ИЗ
| &ДополнительнаяТаблица КАК ИсходнаяТаблица
|ИНДЕКСИРОВАТЬ ПО
| АналитикаУчетаНоменклатуры,
| СтатусУказанияСерий,
| СтатусУказанияСерийТоварыУПартнеров
|;
|
|ВЫБРАТЬ РАЗЛИЧНЫЕ
| ИсходнаяТаблица.АналитикаУчетаНоменклатуры КАК АналитикаУчетаНоменклатуры
|ПОМЕСТИТЬ ТаблицаВидыЗапасов
|ИЗ
| ВтВидыЗапасов КАК ИсходнаяТаблица
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВтТаблицаСтатусыУказанияСерий КАК ТаблицаСерий
| ПО ИсходнаяТаблица.АналитикаУчетаНоменклатуры.Номенклатура = ТаблицаСерий.АналитикаУчетаНоменклатуры.Номенклатура
|ГДЕ
| ИсходнаяТаблица.АналитикаУчетаНоменклатуры.Номенклатура.ТипНоменклатуры = ЗНАЧЕНИЕ(Перечисление.ТипыНоменклатуры.Товар)
| И ИсходнаяТаблица.АналитикаУчетаНоменклатуры.Номенклатура.ВестиУчетПоГТД
| И ТаблицаСерий.СтатусУказанияСерий = 14
| И ТаблицаСерий.СтатусУказанияСерийТоварыУПартнеров = 0
|ИНДЕКСИРОВАТЬ ПО
| АналитикаУчетаНоменклатуры
|;
|
|
|ВЫБРАТЬ РАЗЛИЧНЫЕ
| КлючАналитики.Ссылка КАК АналитикаУчетаНоменклатуры
|ПОМЕСТИТЬ ВТОтборТоварыОрганизацийУПартнеров
|ИЗ
| ТаблицаВидыЗапасов КАК ТаблицаТовары
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.КлючиАналитикиУчетаНоменклатуры КАК КлючАналитики
| ПО КлючАналитики.Номенклатура = ТаблицаТовары.АналитикаУчетаНоменклатуры.Номенклатура
| И КлючАналитики.Характеристика = ТаблицаТовары.АналитикаУчетаНоменклатуры.Характеристика
| И КлючАналитики.Назначение = ТаблицаТовары.АналитикаУчетаНоменклатуры.Назначение
| И КлючАналитики.Серия = ЗНАЧЕНИЕ(Справочник.СерииНоменклатуры.ПустаяСсылка)
| И КлючАналитики.МестоХранения = ТаблицаТовары.АналитикаУчетаНоменклатуры.МестоХранения
|ИНДЕКСИРОВАТЬ ПО
| АналитикаУчетаНоменклатуры";
Если ЗначениеЗаполнено(Распоряжение)
И ХозяйственнаяОперация = Перечисления.ХозяйственныеОперации.ЗакупкаУПоставщикаПоступлениеИзТоваровВПути Тогда
ТекстЗапроса = ТекстЗапроса + ОбщегоНазначения.РазделительПакетаЗапросов() +
"ВЫБРАТЬ
| ДанныеРегистра.АналитикаУчетаНоменклатуры.Номенклатура КАК Номенклатура,
| ДанныеРегистра.АналитикаУчетаНоменклатуры.Характеристика КАК Характеристика,
| ДанныеРегистра.АналитикаУчетаНоменклатуры.Назначение КАК Назначение,
| ДанныеРегистра.НомерГТД КАК НомерГТД,
| СУММА(ДанныеРегистра.Количество) КАК Количество,
| СУММА(ДанныеРегистра.КоличествоПоРНПТ) КАК КоличествоПоРНПТ
|ПОМЕСТИТЬ ВтРезультат
|ИЗ
| (ВЫБРАТЬ
| ТоварыОрганизаций.АналитикаУчетаНоменклатуры КАК АналитикаУчетаНоменклатуры,
| ТоварыОрганизаций.НомерГТД КАК НомерГТД,
| СУММА(ВЫБОР
| КОГДА ТоварыОрганизаций.ВидДвижения = ЗНАЧЕНИЕ(ВидДвиженияНакопления.Приход)
| ТОГДА 1
| ИНАЧЕ -1
| КОНЕЦ * ТоварыОрганизаций.Количество) КАК Количество,
| СУММА(ВЫБОР
| КОГДА ТоварыОрганизаций.ВидДвижения = ЗНАЧЕНИЕ(ВидДвиженияНакопления.Приход)
| ТОГДА 1
| ИНАЧЕ -1
| КОНЕЦ * ТоварыОрганизаций.КоличествоПоРНПТ) КАК КоличествоПоРНПТ
| ИЗ
| РегистрНакопления.ТоварыОрганизаций КАК ТоварыОрганизаций
| ГДЕ
| ТоварыОрганизаций.Период <= &ДатаДокумента
| И (ТоварыОрганизаций.Регистратор, ИСТИНА) В
| (ВЫБРАТЬ
| ТоварыКПоступлению.Регистратор КАК Регистратор,
| ИСТИНА
| ИЗ
| РегистрНакопления.ТоварыКПоступлению КАК ТоварыКПоступлению
| ГДЕ
| ТоварыКПоступлению.ДокументПоступления = &Распоряжение)
| И (ТоварыОрганизаций.АналитикаУчетаНоменклатуры, ИСТИНА) В
| (ВЫБРАТЬ
| ТаблицаОтбор.АналитикаУчетаНоменклатуры,
| ИСТИНА
| ИЗ
| ВТОтборТоварыОрганизацийУПартнеров КАК ТаблицаОтбор)
| И ТоварыОрганизаций.НомерГТД <> ЗНАЧЕНИЕ(Справочник.НомераГТД.ПустаяСсылка)
|
| СГРУППИРОВАТЬ ПО
| ТоварыОрганизаций.АналитикаУчетаНоменклатуры,
| ТоварыОрганизаций.НомерГТД
|
| ИМЕЮЩИЕ
| (СУММА(ВЫБОР
| КОГДА ТоварыОрганизаций.ВидДвижения = ЗНАЧЕНИЕ(ВидДвиженияНакопления.Приход)
| ТОГДА 1
| ИНАЧЕ -1
| КОНЕЦ * ТоварыОрганизаций.Количество) > 0
| ИЛИ СУММА(ВЫБОР
| КОГДА ТоварыОрганизаций.ВидДвижения = ЗНАЧЕНИЕ(ВидДвиженияНакопления.Приход)
| ТОГДА 1
| ИНАЧЕ -1
| КОНЕЦ * ТоварыОрганизаций.КоличествоПоРНПТ) > 0)
|
| ОБЪЕДИНИТЬ ВСЕ
|
| ВЫБРАТЬ
| ТоварыОрганизаций.АналитикаУчетаНоменклатуры,
| ТоварыОрганизаций.НомерГТД,
| ТоварыОрганизаций.Количество,
| ТоварыОрганизаций.КоличествоПоРНПТ
| ИЗ
| РегистрНакопления.ТоварыОрганизаций КАК ТоварыОрганизаций
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВТОтборТоварыОрганизацийУПартнеров КАК ТаблицаТовары
| ПО ТоварыОрганизаций.АналитикаУчетаНоменклатуры = ТаблицаТовары.АналитикаУчетаНоменклатуры
| И (ТоварыОрганизаций.Регистратор = &Регистратор)
| И (ТоварыОрганизаций.ВидДвижения = ЗНАЧЕНИЕ(ВидДвиженияНакопления.Расход))
| И (ТоварыОрганизаций.НомерГТД <> ЗНАЧЕНИЕ(Справочник.НомераГТД.ПустаяСсылка))) КАК ДанныеРегистра
|
|СГРУППИРОВАТЬ ПО
| ДанныеРегистра.АналитикаУчетаНоменклатуры.Номенклатура,
| ДанныеРегистра.АналитикаУчетаНоменклатуры.Характеристика,
| ДанныеРегистра.АналитикаУчетаНоменклатуры.Назначение,
| ДанныеРегистра.НомерГТД
|
|ИМЕЮЩИЕ
| (СУММА(ДанныеРегистра.Количество) <> 0
| ИЛИ СУММА(ДанныеРегистра.КоличествоПоРНПТ) <> 0)
|
|ИНДЕКСИРОВАТЬ ПО
| Номенклатура,
| Характеристика,
| Назначение,
| НомерГТД";
Иначе
ТекстЗапроса = ТекстЗапроса + ОбщегоНазначения.РазделительПакетаЗапросов() +
"ВЫБРАТЬ
| ДанныеРегистра.АналитикаУчетаНоменклатуры.Номенклатура КАК Номенклатура,
| ДанныеРегистра.АналитикаУчетаНоменклатуры.Характеристика КАК Характеристика,
| ДанныеРегистра.АналитикаУчетаНоменклатуры.Назначение КАК Назначение,
| ДанныеРегистра.НомерГТД КАК НомерГТД,
| СУММА(ДанныеРегистра.Количество) КАК Количество,
| СУММА(ДанныеРегистра.КоличествоПоРНПТ) КАК КоличествоПоРНПТ
|ПОМЕСТИТЬ ВтРезультат
|ИЗ (
| ВЫБРАТЬ
| ТоварыОрганизаций.АналитикаУчетаНоменклатуры КАК АналитикаУчетаНоменклатуры,
| ТоварыОрганизаций.НомерГТД КАК НомерГТД,
| ТоварыОрганизаций.КоличествоОстаток КАК Количество,
| ТоварыОрганизаций.КоличествоПоРНПТОстаток КАК КоличествоПоРНПТ
| ИЗ
| РегистрНакопления.ТоварыОрганизаций.Остатки(&ДатаДокумента,
| (АналитикаУчетаНоменклатуры) В
| (ВЫБРАТЬ
| ТаблицаОтбор.АналитикаУчетаНоменклатуры
| ИЗ
| ВТОтборТоварыОрганизацийУПартнеров КАК ТаблицаОтбор)
| И НомерГТД <> ЗНАЧЕНИЕ(Справочник.НомераГТД.ПустаяСсылка)) КАК ТоварыОрганизаций
| ГДЕ
| (ТоварыОрганизаций.КоличествоОстаток > 0
| ИЛИ ТоварыОрганизаций.КоличествоПоРНПТОстаток > 0)
|
| ОБЪЕДИНИТЬ ВСЕ
|
| ВЫБРАТЬ
| ТоварыОрганизаций.АналитикаУчетаНоменклатуры КАК АналитикаУчетаНоменклатуры,
| ТоварыОрганизаций.НомерГТД КАК НомерГТД,
| ТоварыОрганизаций.Количество КАК Количество,
| ТоварыОрганизаций.КоличествоПоРНПТ КАК КоличествоПоРНПТ
| ИЗ
| РегистрНакопления.ТоварыОрганизаций КАК ТоварыОрганизаций
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВТОтборТоварыОрганизацийУПартнеров КАК ТаблицаТовары
| ПО ТоварыОрганизаций.АналитикаУчетаНоменклатуры = ТаблицаТовары.АналитикаУчетаНоменклатуры
| И ТоварыОрганизаций.Регистратор = &Регистратор
| И ТоварыОрганизаций.ВидДвижения = ЗНАЧЕНИЕ(ВидДвиженияНакопления.Расход)
| И ТоварыОрганизаций.НомерГТД <> ЗНАЧЕНИЕ(Справочник.НомераГТД.ПустаяСсылка)
|) КАК ДанныеРегистра
|
|СГРУППИРОВАТЬ ПО
| ДанныеРегистра.АналитикаУчетаНоменклатуры.Номенклатура,
| ДанныеРегистра.АналитикаУчетаНоменклатуры.Характеристика,
| ДанныеРегистра.АналитикаУчетаНоменклатуры.Назначение,
| ДанныеРегистра.НомерГТД
|
|ИМЕЮЩИЕ
| СУММА(ДанныеРегистра.Количество) <> 0
| ИЛИ СУММА(ДанныеРегистра.КоличествоПоРНПТ) <> 0
|
|ИНДЕКСИРОВАТЬ ПО
| Номенклатура,
| Характеристика,
| Назначение,
| НомерГТД";
КонецЕсли;
ТекстЗапроса = ТекстЗапроса + ОбщегоНазначения.РазделительПакетаЗапросов() +
"ВЫБРАТЬ РАЗЛИЧНЫЕ
| ТаблицаТовары.Номенклатура КАК Номенклатура,
| ТаблицаТовары.Характеристика КАК Характеристика,
| ТаблицаТовары.Назначение КАК Назначение
|ИЗ
| ВтРезультат КАК ТаблицаТовары
|;
|
|
|ВЫБРАТЬ
| ТаблицаТовары.Номенклатура КАК Номенклатура,
| ТаблицаТовары.Характеристика КАК Характеристика,
| ТаблицаТовары.Назначение КАК Назначение,
| ТаблицаТовары.НомерГТД КАК НомерГТД,
| ТаблицаТовары.Количество КАК КоличествоУчитываяГТД,
| ТаблицаТовары.Количество КАК КоличествоУчитываяГТДВторойПроход,
| ТаблицаТовары.КоличествоПоРНПТ КАК КоличествоПоРНПТУчитываяГТД
|ИЗ
| ВтРезультат КАК ТаблицаТовары
|";
ВидыЗапасовКЗаполнению = ВидыЗапасов.Выгрузить();
ТоварыССериями = Товары.Выгрузить();
Запрос = Новый Запрос();
Запрос.Текст = ТекстЗапроса;
Запрос.УстановитьПараметр("ИсходнаяТаблица", ВидыЗапасовКЗаполнению);
Запрос.УстановитьПараметр("ДополнительнаяТаблица", ТоварыССериями);
Запрос.УстановитьПараметр("Регистратор", Ссылка);
Запрос.УстановитьПараметр("ДатаДокумента", КонецДня(Дата));
Запрос.УстановитьПараметр("Распоряжение", Распоряжение);
Пакет = Запрос.ВыполнитьПакет();
ВыборкаАналитики = Пакет[5].Выбрать();
АналитикаСГТДКРаспределению = Пакет[6].Выгрузить();
ИзвлечьДетальныеПоляИзАналитики(ВидыЗапасовКЗаполнению);
Пока ВыборкаАналитики.Следующий() Цикл
Отбор = Новый Структура();
Отбор.Вставить("Номенклатура", ВыборкаАналитики.Номенклатура);
Отбор.Вставить("Характеристика", ВыборкаАналитики.Характеристика);
Отбор.Вставить("Назначение", ВыборкаАналитики.Назначение);
НайденныеСтроки = АналитикаСГТДКРаспределению.НайтиСтроки(Отбор);
АналитикиСГТД = АналитикаСГТДКРаспределению.Скопировать(НайденныеСтроки);
НайденныеСтрокиВидыЗапасов = ВидыЗапасовКЗаполнению.НайтиСтроки(Отбор);
ВидыЗапасовПоАналитике = ВидыЗапасовКЗаполнению.Скопировать(НайденныеСтрокиВидыЗапасов);
ВидыЗапасовПоАналитике.ЗаполнитьЗначения(Неопределено, "НомерГТД");
Ключ = "Номенклатура, Характеристика, Назначение";
Условие = "ПО [Количество]";
НакладныеСервер.РаспределитьКоличествоИЗаполнить(АналитикиСГТД, ВидыЗапасовПоАналитике, "КоличествоУчитываяГТД", Ключ, Условие, Ложь, "НомерГТД");
Для Каждого СтрокаСГТД Из АналитикиСГТД Цикл
Отбор = Новый Структура();
Отбор.Вставить("Номенклатура", СтрокаСГТД.Номенклатура);
Отбор.Вставить("Характеристика", СтрокаСГТД.Характеристика);
Отбор.Вставить("Назначение", СтрокаСГТД.Назначение);
Отбор.Вставить("НомерГТД", СтрокаСГТД.НомерГТД);
НайденныеСтроки = ВидыЗапасовПоАналитике.НайтиСтроки(Отбор);
КРаспределению = СтрокаСГТД.КоличествоПоРНПТУчитываяГТД;
Для Каждого Строка Из НайденныеСтроки Цикл
Строка.КоличествоПоРНПТ = Окр(КРаспределению * (Строка.КоличествоУчитываяГТД / СтрокаСГТД.КоличествоУчитываяГТДВторойПроход), 5);
КонецЦикла;
КонецЦикла;
Для Каждого Строка Из НайденныеСтрокиВидыЗапасов Цикл
ВидыЗапасовКЗаполнению.Удалить(Строка);
КонецЦикла;
Для Индекс = 0 По ВидыЗапасовПоАналитике.Количество() - 1 Цикл
Строка = ВидыЗапасовПоАналитике[Индекс];
Если Строка.Количество > Строка.КоличествоУчитываяГТД Тогда
Разница = Строка.Количество - Строка.КоличествоУчитываяГТД;
Строка.Количество = Строка.КоличествоУчитываяГТД;
НоваяСтрока = ВидыЗапасовПоАналитике.Добавить();
ЗаполнитьЗначенияСвойств(НоваяСтрока, Строка);
НоваяСтрока.Количество = Разница;
НоваяСтрока.КоличествоПоРНПТ = 0;
НоваяСтрока.НомерГТД = Неопределено;
Иначе
Строка.Количество = Строка.КоличествоУчитываяГТД;
КонецЕсли;
КонецЦикла;
ОбщегоНазначенияКлиентСервер.ДополнитьТаблицу(ВидыЗапасовПоАналитике, ВидыЗапасовКЗаполнению);
КонецЦикла;
ВидыЗапасов.Загрузить(ВидыЗапасовКЗаполнению);
КонецПроцедуры
Функция ПараметрыЗаполненияВидовЗапасов()
ПараметрыЗаполнения = ЗапасыСервер.ПараметрыЗаполненияВидовЗапасов();
КонтролироватьОстаткиНомеровГТД = Ложь;
КонтролироватьОстаткиНомеровГТД = (ПолучитьФункциональнуюОпцию("КонтролироватьОстаткиНомеровГТДПриЗакупкеУПоставщикаПоСхемеТоварыВПути")
И ХозяйственнаяОперация = Перечисления.ХозяйственныеОперации.ЗакупкаУПоставщикаПоступлениеИзТоваровВПути)
Или (ПолучитьФункциональнуюОпцию("КонтролироватьОстаткиНомеровГТДПриИмпортеПоСхемеТоварыВПути")
И ХозяйственнаяОперация = Перечисления.ХозяйственныеОперации.ЗакупкаПоИмпортуПоступлениеИзТоваровВПути);
ПараметрыЗаполнения.ДокументДелаетИПриходИРасход = Истина;
ПараметрыЗаполнения.ТаблицаРеквизитовВидовЗапасовПоУмолчанию = ТаблицаРеквизитовВидовЗапасовПоУмолчанию();
ПараметрыЗаполнения.ИмяТаблицыОстатков = "ТоварыУПартнеровПоложительныйОстаток";
ПараметрыЗаполнения.БезОтбораПоНомерамГТД = Истина;
ПараметрыЗаполнения.ПриНехваткеТоваровОрганизацииЗаполнятьВидамиЗапасовПоУмолчанию = Не КонтролироватьОстаткиНомеровГТД;
ПараметрыЗаполнения.ОтборыВидовЗапасов.ТипЗапасов.Очистить();
ПараметрыЗаполнения.ОтборыВидовЗапасов.ТипЗапасов.Добавить(ТипЗапасовПоХозОперации());
ПараметрыЗаполнения.ОтборыВидовЗапасов.Организация = Организация;
ПараметрыЗаполнения.ОтборыВидовЗапасов.ВидЦены = ВидЦеныПоставщика;
ПараметрыЗаполнения.СторнируемыйДокумент = СторнируемыйДокумент;
Возврат ПараметрыЗаполнения;
КонецФункции
Функция ТаблицаРеквизитовВидовЗапасовПоУмолчанию()
ТаблицаРеквизитовВидовЗапасовПоУмолчанию = Товары.Выгрузить(, "НомерСтроки, АналитикаУчетаНоменклатуры");
ТаблицаРеквизитовВидовЗапасовПоУмолчанию.Колонки.Добавить(
"ВладелецТовара", Новый ОписаниеТипов("СправочникСсылка.Партнеры"));
ТаблицаРеквизитовВидовЗапасовПоУмолчанию.Колонки.Добавить(
"Договор", Новый ОписаниеТипов("СправочникСсылка.ДоговорыКонтрагентов"));
ТаблицаРеквизитовВидовЗапасовПоУмолчанию.Колонки.Добавить(
"ТипЗапасов", Новый ОписаниеТипов("ПеречислениеСсылка.ТипыЗапасов"));
ТаблицаРеквизитовВидовЗапасовПоУмолчанию.Колонки.Добавить(
"Организация", Новый ОписаниеТипов("СправочникСсылка.Организации"));
ТаблицаРеквизитовВидовЗапасовПоУмолчанию.Колонки.Добавить(
"ВидЗапасов", Новый ОписаниеТипов("СправочникСсылка.ВидыЗапасов"));
ТаблицаРеквизитовВидовЗапасовПоУмолчанию.Колонки.Добавить(
"НомерГТД", Новый ОписаниеТипов("СправочникСсылка.НомераГТД"));
ТаблицаРеквизитовВидовЗапасовПоУмолчанию.Колонки.Добавить(
"Контрагент", Новый ОписаниеТипов("СправочникСсылка.Контрагенты"));
ТаблицаРеквизитовВидовЗапасовПоУмолчанию.ЗаполнитьЗначения(Партнер, "ВладелецТовара");
ТаблицаРеквизитовВидовЗапасовПоУмолчанию.ЗаполнитьЗначения(Договор, "Договор");
ТаблицаРеквизитовВидовЗапасовПоУмолчанию.ЗаполнитьЗначения(Организация, "Организация");
ТаблицаРеквизитовВидовЗапасовПоУмолчанию.ЗаполнитьЗначения(ТипЗапасовПоХозОперации(), "ТипЗапасов");
ТаблицаРеквизитовВидовЗапасовПоУмолчанию.ЗаполнитьЗначения(Контрагент, "Контрагент");
Возврат ТаблицаРеквизитовВидовЗапасовПоУмолчанию;
КонецФункции
Функция ПроверитьИзменениеРеквизитовДокумента(МенеджерВременныхТаблиц)
ИменаРеквизитов = "Организация, Дата, Партнер, Склад, Договор, ХозяйственнаяОперация, Контрагент";
Возврат ЗапасыСервер.ПроверитьИзменениеРеквизитовДокумента(МенеджерВременныхТаблиц, Ссылка, ИменаРеквизитов);
КонецФункции
Процедура ЗаполнитьАналитикиУчетаНоменклатурыВТабличныхЧастяхТоваров(ТаблицыДокумента = Неопределено)
Если ТаблицыДокумента = Неопределено Тогда
ТаблицыДокумента = Документы.ПоступлениеТоваровНаСклад.КоллекцияТабличныхЧастейТоваров();
ЗаполнитьЗначенияСвойств(ТаблицыДокумента, ЭтотОбъект);
КонецЕсли;
ТаблицаТовары = ТаблицыДокумента.Товары;
ОсновнаяХозОперация = ЗакупкиСервер.ОсновнаяХозяйственнаяОперацияРаздельнойЗакупки(ХозяйственнаяОперация);
МестаУчета = РегистрыСведений.АналитикаУчетаНоменклатуры.МестаУчета(ОсновнаяХозОперация,
Склад,
Подразделение,
Партнер,
Договор);
ИменаПолей = РегистрыСведений.АналитикаУчетаНоменклатуры.ИменаПолейКоллекцииПоУмолчанию();
ИменаПолей.СтатусУказанияСерий = "СтатусУказанияСерий";
РегистрыСведений.АналитикаУчетаНоменклатуры.ЗаполнитьВКоллекции(ТаблицаТовары, МестаУчета, ИменаПолей);
МестаУчетаУПартнеров = РегистрыСведений.АналитикаУчетаНоменклатуры.МестаУчета(ХозяйственнаяОперация,
Договор,
Подразделение,
Партнер,
Договор);
ИменаПолей.АналитикаУчетаНоменклатуры = "АналитикаУчетаНоменклатурыТоварыУПартнеров";
Если ХозяйственнаяОперация = Перечисления.ХозяйственныеОперации.ЗакупкаВСтранахЕАЭСПоступлениеИзТоваровВПути
Или ХозяйственнаяОперация = Перечисления.ХозяйственныеОперации.ЗакупкаПоИмпортуПоступлениеИзТоваровВПути
Или ХозяйственнаяОперация = Перечисления.ХозяйственныеОперации.ЗакупкаУПоставщикаПоступлениеИзТоваровВПути Тогда
ИменаПолей.СтатусУказанияСерий = "СтатусУказанияСерийТоварыУПартнеров";
Иначе
ИменаПолей.СтатусУказанияСерий = "СтатусУказанияСерий";
КонецЕсли;
РегистрыСведений.АналитикаУчетаНоменклатуры.ЗаполнитьВКоллекции(ТаблицаТовары, МестаУчетаУПартнеров, ИменаПолей);
КонецПроцедуры
#КонецОбласти
#Область Прочее
Функция ТипЗапасовПоХозОперации()
Если ХозяйственнаяОперация = Перечисления.ХозяйственныеОперации.ЗакупкаВСтранахЕАЭСПоступлениеИзТоваровВПути
Или ХозяйственнаяОперация = Перечисления.ХозяйственныеОперации.ЗакупкаПоИмпортуПоступлениеИзТоваровВПути
Или ХозяйственнаяОперация = Перечисления.ХозяйственныеОперации.ЗакупкаУПоставщикаПоступлениеИзТоваровВПути Тогда
Возврат Перечисления.ТипыЗапасов.СобственныйТоварВПути;
ИначеЕсли ХозяйственнаяОперация = Перечисления.ХозяйственныеОперации.ЗакупкаВСтранахЕАЭСНеотфактурованнаяПоставка
Или ХозяйственнаяОперация = Перечисления.ХозяйственныеОперации.ЗакупкаУПоставщикаНеотфактурованнаяПоставка Тогда
Возврат Перечисления.ТипыЗапасов.СобственныйТоварПоНеотфактурованнойПоставке;
Иначе
Возврат Перечисления.ТипыЗапасов.ПустаяСсылка();
КонецЕсли;
КонецФункции
Процедура ЗаполнитьСуммовыеПоказателиСтрокиТоваров(СтрокаТоваров)
ДействияСоСтрокой = Новый Структура;
Если ЗначениеЗаполнено(СтрокаТоваров.Цена) Тогда
ПараметрыПересчетаСуммы = ПакетнаяОбработкаТабличнойЧастиКлиентСервер.ПараметрыПересчетаСуммыНДСВСтрокеТЧ(ЭтотОбъект);
ДействияСоСтрокой.Вставить("ПересчитатьСумму", "КоличествоУпаковок");
ДействияСоСтрокой.Вставить("ПересчитатьСуммуНДС", ПараметрыПересчетаСуммы);
ДействияСоСтрокой.Вставить("ПересчитатьСуммуСНДС", ПараметрыПересчетаСуммы);
КонецЕсли;
Если Не ЗначениеЗаполнено(СтрокаТоваров.СтавкаНДС) Тогда
ДействияСоСтрокой.Вставить("ЗаполнитьСтавкуНДС", ПакетнаяОбработкаТабличнойЧастиКлиентСервер.ПараметрыЗаполненияСтавкиНДС(ЭтотОбъект));
КонецЕсли;
Если ЗначениеЗаполнено(ДействияСоСтрокой) Тогда
ПакетнаяОбработкаТабличнойЧастиСервер.ОбработатьСтрокуТЧ(СтрокаТоваров, ДействияСоСтрокой, Неопределено);
КонецЕсли;
КонецПроцедуры
Процедура ПересчитатьКоличествоУпаковокЗаполнитьСтавкуНДС(ЗаполнитьСтавкуНДС = Ложь)
СтруктураДействий = Новый Структура("ПересчитатьКоличествоУпаковок",
ПакетнаяОбработкаТабличнойЧастиКлиентСервер.СтруктураПересчетаКоличестваУпаковок());
Если ЗаполнитьСтавкуНДС Тогда
СтруктураДействий.Вставить("ЗаполнитьСтавкуНДС", ПакетнаяОбработкаТабличнойЧастиКлиентСервер.ПараметрыЗаполненияСтавкиНДС(ЭтотОбъект));
КонецЕсли;
ПакетнаяОбработкаТабличнойЧастиСервер.ОбработатьТЧ(Товары, СтруктураДействий, Неопределено);
КонецПроцедуры
Процедура ЗаполнитьЦеныПоСоглашению(ЗаполнитьВсеСтроки = Истина)
СтрокиБезЦен = Неопределено;
Если Не ЗаполнитьВсеСтроки Тогда
СтрокиБезЦен = Новый Массив;
Для Каждого СтрокаТЧ Из Товары Цикл
Если Не ЗначениеЗаполнено(СтрокаТЧ.Цена) Тогда
СтрокиБезЦен.Добавить(СтрокаТЧ);
КонецЕсли;
КонецЦикла;
КонецЕсли;
СтруктураПересчетаСуммы = ПакетнаяОбработкаТабличнойЧастиКлиентСервер.ПараметрыПересчетаСуммыНДСВСтрокеТЧ(ЭтотОбъект);
ПараметрыЗаполнения = ЦеныПартнеровЗаполнениеСервер.НовыйПараметрыЗаполненияЗаполнитьЦены();
ПараметрыЗаполнения.Вставить("ПоляЗаполнения", "Цена, СтавкаНДС");
ПараметрыЗаполнения.Вставить("Дата", Дата);
ПараметрыЗаполнения.Вставить("Валюта", Валюта);
ПараметрыЗаполнения.Вставить("Соглашение", Соглашение);
ПараметрыЗаполнения.Вставить("ВидЦеныПоставщика", ВидЦеныПоставщика);
ПараметрыЗаполнения.Вставить("НалогообложениеНДС", НалогообложениеНДС);
ДействияСоСтроками = Новый Структура;
ДействияСоСтроками.Вставить("ПересчитатьСумму", "КоличествоУпаковок");
ДействияСоСтроками.Вставить("ПересчитатьСуммуНДС", СтруктураПересчетаСуммы);
ДействияСоСтроками.Вставить("ПересчитатьСуммуСНДС", СтруктураПересчетаСуммы);
ЦеныПартнеровЗаполнениеСервер.ЗаполнитьЦены(Товары, СтрокиБезЦен, ПараметрыЗаполнения, ДействияСоСтроками);
КонецПроцедуры
Процедура СвернутьСтрокиТоваров()
ОперацияТоварыВПути = Документы.ПоступлениеТоваровНаСклад.ЭтоПоступлениеИзТоваровВПути(ХозяйственнаяОперация);
Если ОперацияТоварыВПути Тогда
КолонкиГруппировки = "Номенклатура, Характеристика, Назначение, Серия, Упаковка";
КолонкиСуммирования = "Количество, КоличествоУпаковок";
Иначе
КолонкиГруппировки = "Номенклатура, Характеристика, Назначение, Серия, Упаковка, Цена, СтавкаНДС";
КолонкиСуммирования = "Количество, КоличествоУпаковок, Сумма, СуммаНДС, СуммаСНДС";
КонецЕсли;
Товары.Свернуть(КолонкиГруппировки, КолонкиСуммирования);
КонецПроцедуры
#КонецОбласти
#КонецОбласти
#КонецЕсли