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