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