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