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