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