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