#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда
#Область ПрограммныйИнтерфейс
#Область УсловияПродаж
Процедура ЗаполнитьУсловияПродаж(Знач УсловияПродаж, Знач ЗаполнятьРеквизитыОснования = Истина) Экспорт
Если УсловияПродаж = Неопределено Тогда
Возврат;
КонецЕсли;
Если ЗаполнятьРеквизитыОснования Тогда
Если ЗначениеЗаполнено(УсловияПродаж.Валюта) Тогда
Валюта = УсловияПродаж.Валюта;
КонецЕсли;
ЦенаВключаетНДС = УсловияПродаж.ЦенаВключаетНДС;
НаправлениеДеятельности = УсловияПродаж.НаправлениеДеятельности;
Если ЗначениеЗаполнено(УсловияПродаж.Склад) Тогда
Склад = УсловияПродаж.Склад;
КонецЕсли;
КонецЕсли;
Если ЗначениеЗаполнено(УсловияПродаж.Организация) Тогда
Организация = УсловияПродаж.Организация;
КонецЕсли;
Если Не УсловияПродаж.Типовое Тогда
Если ЗначениеЗаполнено(УсловияПродаж.Контрагент) Тогда
Контрагент = УсловияПродаж.Контрагент;
КонецЕсли;
КонецЕсли;
ПартнерыИКонтрагенты.ЗаполнитьКонтрагентаПартнераПоУмолчанию(Партнер, Контрагент);
Если УсловияПродаж.НоваяСхемаКомиссии <> Неопределено И УсловияПродаж.НоваяСхемаКомиссии
И УсловияПродаж.ХозяйственнаяОперация = Перечисления.ХозяйственныеОперации.ПередачаНаКомиссию Тогда
УсловияПродаж.ХозяйственнаяОперация = Перечисления.ХозяйственныеОперации.РеализацияЧерезКомиссионера;
КонецЕсли;
Если ХозяйственнаяОперация <> Перечисления.ХозяйственныеОперации.ВозвратОтРозничногоПокупателя Тогда
ХозяйственнаяОперация = ПродажиСервер.ПолучитьХозяйственнуюОперациюВозвратаПоРеализации(УсловияПродаж.ХозяйственнаяОперация);
ВозвратПереданнойМногооборотнойТары = УсловияПродаж.ВозвращатьМногооборотнуюТару;
ПредусмотренЗалогЗаТару = УсловияПродаж.ТребуетсяЗалогЗаТару;
КонецЕсли;
ХозяйственнаяОперацияДоговора = Неопределено;
Если ХозяйственнаяОперация = Перечисления.ХозяйственныеОперации.ВозвратТоваровОтКлиента Тогда
ХозяйственнаяОперацияДоговора = Перечисления.ХозяйственныеОперации.РеализацияКлиенту;
ИначеЕсли ХозяйственнаяОперация = Перечисления.ХозяйственныеОперации.ВозвратОтКомиссионера Тогда
ХозяйственнаяОперацияДоговора = Перечисления.ХозяйственныеОперации.ПередачаНаКомиссию;
ИначеЕсли ХозяйственнаяОперация = Перечисления.ХозяйственныеОперации.ВозвратТоваровЧерезКомиссионера Тогда
ХозяйственнаяОперацияДоговора = Перечисления.ХозяйственныеОперации.ПередачаНаКомиссию;
КонецЕсли;
Если ХозяйственнаяОперация <> Перечисления.ХозяйственныеОперации.ВозвратОтРозничногоПокупателя Тогда
Договор = ПродажиСервер.ПолучитьДоговорПоУмолчанию(ЭтотОбъект, ХозяйственнаяОперацияДоговора, Валюта,,
КомиссионнаяТорговляСервер.ВозвратТоваровЧерезКомиссионера(ХозяйственнаяОперация));
Если ПолучитьФункциональнуюОпцию("ИспользоватьУчетДоходовПоНаправлениямДеятельности") Тогда
НаправленияДеятельностиСервер.ЗаполнитьНаправлениеПоУмолчанию(НаправлениеДеятельности, Соглашение, Договор);
КонецЕсли;
КонецЕсли;
Если НЕ ЗначениеЗаполнено(УсловияПродаж.ИспользуютсяДоговорыКонтрагентов)
ИЛИ НЕ УсловияПродаж.ИспользуютсяДоговорыКонтрагентов Тогда
ОплатаВВалюте = УсловияПродаж.ОплатаВВалюте;
Иначе
ОплатаВВалюте = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Договор, "ОплатаВВалюте");
КонецЕсли;
КонецПроцедуры
Процедура ЗаполнитьУсловияПродажПоУмолчанию() Экспорт
ИспользоватьСоглашенияСКлиентами = ПолучитьФункциональнуюОпцию("ИспользоватьСоглашенияСКлиентами");
Если ЗначениеЗаполнено (Партнер) ИЛИ НЕ ИспользоватьСоглашенияСКлиентами Тогда
УсловияПродажПоУмолчанию = ПродажиСервер.ПолучитьУсловияПродажПоУмолчанию(
Партнер,
Новый Структура(
"ВыбранноеСоглашение,
|ПустаяСсылкаДокумента",
Соглашение,
Документы.ВозвратТоваровОтКлиента.ПустаяСсылка()));
Если УсловияПродажПоУмолчанию <> Неопределено Тогда
Если НЕ ИспользоватьСоглашенияСКлиентами ИЛИ
(Соглашение <> УсловияПродажПоУмолчанию.Соглашение И ЗначениеЗаполнено(УсловияПродажПоУмолчанию.Соглашение)) Тогда
Соглашение = УсловияПродажПоУмолчанию.Соглашение;
ЗаполнитьУсловияПродаж(УсловияПродажПоУмолчанию);
Иначе
Соглашение = УсловияПродажПоУмолчанию.Соглашение;
КонецЕсли;
Иначе
ПартнерыИКонтрагенты.ЗаполнитьКонтрагентаПартнераПоУмолчанию(Партнер, Контрагент);
Соглашение = Неопределено;
КонецЕсли;
КонецЕсли;
ПараметрыЗаполнения = Документы.ВозвратТоваровОтКлиента.ПараметрыЗаполненияНалогообложенияНДСПродажи(ЭтотОбъект);
УчетНДСУП.ЗаполнитьНалогообложениеНДСПродажи(НалогообложениеНДС, ПараметрыЗаполнения);
КонецПроцедуры
Процедура ЗаполнитьУсловияПродажПоСоглашению() Экспорт
УсловияПродаж = ПродажиСервер.ПолучитьУсловияПродаж(Соглашение);
ЗаполнитьУсловияПродаж(УсловияПродаж);
ПараметрыЗаполнения = Документы.ВозвратТоваровОтКлиента.ПараметрыЗаполненияНалогообложенияНДСПродажи(ЭтотОбъект);
УчетНДСУП.ЗаполнитьНалогообложениеНДСПродажи(НалогообложениеНДС, ПараметрыЗаполнения);
КонецПроцедуры
#КонецОбласти
#Область Прочее
Функция ВременныеТаблицыДанныхДокумента(ОтборПоСпособуОпределенияСебестоимости = "Все",
ОтборПоТипуНоменклатуры = "Все") Экспорт
Если ОтборПоТипуНоменклатуры = "Тара" Тогда
ИнициализироватьКлючиАналитикиПереданнойТарыКлиенту();
КонецЕсли;
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| &Дата КАК Дата,
| &Организация КАК Организация,
| &Склад КАК Склад,
| &Партнер КАК Партнер,
| &Контрагент КАК Контрагент,
| ЗНАЧЕНИЕ(Справочник.СоглашенияСПоставщиками.ПустаяСсылка) КАК Соглашение,
| &Договор КАК Договор,
| ЗНАЧЕНИЕ(Справочник.Валюты.ПустаяСсылка) КАК Валюта,
| &ДокументРеализации КАК ДокументРеализации,
| &НалогообложениеНДС КАК НалогообложениеНДС,
| &ХозяйственнаяОперация КАК ХозяйственнаяОперация,
| ЛОЖЬ КАК ЕстьСделкиВТабличнойЧасти,
| ЗНАЧЕНИЕ(Перечисление.ТипыЗапасов.Товар) КАК ТипЗапасов
|ПОМЕСТИТЬ ТаблицаДанныхДокумента
|;
|
|
|ВЫБРАТЬ
| ТаблицаТоваров.НомерСтроки КАК НомерСтроки,
| ТаблицаТоваров.Номенклатура КАК Номенклатура,
| ТаблицаТоваров.АналитикаУчетаНоменклатуры КАК АналитикаУчетаНоменклатуры,
| ТаблицаТоваров.Характеристика КАК Характеристика,
| ТаблицаТоваров.Назначение КАК Назначение,
| ТаблицаТоваров.Серия КАК Серия,
| ТаблицаТоваров.СтатусУказанияСерий КАК СтатусУказанияСерий,
| ТаблицаТоваров.НоменклатураОприходование КАК НоменклатураОприходование,
| ТаблицаТоваров.ХарактеристикаОприходование КАК ХарактеристикаОприходование,
| ТаблицаТоваров.Количество КАК Количество,
| ВЫБОР
| КОГДА НЕ &ИспользоватьУчетПрослеживаемыхИмпортныхТоваров
| ИЛИ НАЧАЛОПЕРИОДА(&Дата, МЕСЯЦ) < &ДатаНачалаУчетаПрослеживаемыхИмпортныхТоваров
| ТОГДА 0
| ИНАЧЕ ТаблицаТоваров.КоличествоПоРНПТ
| КОНЕЦ КАК КоличествоПоРНПТ,
| ВЫБОР
| КОГДА &ХозяйственнаяОперация = ЗНАЧЕНИЕ(Перечисление.ХозяйственныеОперации.ВозвратОтКомиссионера)
| ТОГДА ЗНАЧЕНИЕ(Справочник.Склады.ПустаяСсылка)
| ИНАЧЕ ТаблицаТоваров.Склад
| КОНЕЦ КАК Склад,
| ВЫБОР
| КОГДА ТаблицаТоваров.ДокументРеализации = ЗНАЧЕНИЕ(Документ.РеализацияТоваровУслуг.ПустаяСсылка)
| ИЛИ ТаблицаТоваров.ДокументРеализации = ЗНАЧЕНИЕ(Документ.ОтчетОРозничныхПродажах.ПустаяСсылка)
| ТОГДА НЕОПРЕДЕЛЕНО
| ИНАЧЕ ТаблицаТоваров.ДокументРеализации
| КОНЕЦ КАК ДокументРеализации,
| ТаблицаТоваров.СпособОпределенияСебестоимости КАК СпособОпределенияСебестоимости,
| ЗНАЧЕНИЕ(Справочник.СделкиСКлиентами.ПустаяСсылка) КАК Сделка,
| ТаблицаТоваров.СтавкаНДС КАК СтавкаНДС,
| ТаблицаТоваров.Сумма + (ТаблицаТоваров.СуммаНДС * &ЦенаВключаетНДС) КАК СуммаСНДС,
| ТаблицаТоваров.СуммаНДС КАК СуммаНДС,
| 0 КАК СуммаВознаграждения,
| 0 КАК СуммаНДСВознаграждения,
| ТаблицаТоваров.Себестоимость КАК Себестоимость,
| ТаблицаТоваров.СебестоимостьБезНДС КАК СебестоимостьБезНДС,
| ТаблицаТоваров.СебестоимостьРегл КАК СебестоимостьРегл,
| ТаблицаТоваров.СебестоимостьПР КАК СебестоимостьПР,
| ТаблицаТоваров.СебестоимостьВР КАК СебестоимостьВР,
| ТаблицаТоваров.НомерГТД КАК НомерГТД
|ПОМЕСТИТЬ ВтТаблицаТоваров
|ИЗ
| &ТаблицаТоваров КАК ТаблицаТоваров
|
|ГДЕ
| ТаблицаТоваров.СпособОпределенияСебестоимости В(&СпособыОпределенияСебестоимости)
|;
|
|
|ВЫБРАТЬ
| ТаблицаТоваров.НомерСтроки КАК НомерСтроки,
| ТаблицаТоваров.Номенклатура КАК Номенклатура,
| ТаблицаТоваров.Характеристика КАК Характеристика,
| ВЫБОР
| КОГДА &ПодборТары
| ТОГДА ЕСТЬNULL(АналитикаТары.КлючАналитики, ТаблицаТоваров.АналитикаУчетаНоменклатуры)
| ИНАЧЕ ТаблицаТоваров.АналитикаУчетаНоменклатуры
| КОНЕЦ КАК АналитикаУчетаНоменклатуры,
| ТаблицаТоваров.НоменклатураОприходование КАК НоменклатураОприходование,
| ТаблицаТоваров.ХарактеристикаОприходование КАК ХарактеристикаОприходование,
| ТаблицаТоваров.Серия КАК Серия,
| ТаблицаТоваров.СтатусУказанияСерий КАК СтатусУказанияСерий,
| ТаблицаТоваров.Количество КАК Количество,
| ТаблицаТоваров.КоличествоПоРНПТ КАК КоличествоПоРНПТ,
| ТаблицаТоваров.Склад КАК Склад,
| ТаблицаТоваров.ДокументРеализации КАК ДокументРеализации,
| ТаблицаТоваров.СпособОпределенияСебестоимости КАК СпособОпределенияСебестоимости,
| ТаблицаТоваров.Сделка КАК Сделка,
| ТаблицаТоваров.Назначение КАК Назначение,
| ТаблицаТоваров.СтавкаНДС КАК СтавкаНДС,
| ТаблицаТоваров.СуммаСНДС КАК СуммаСНДС,
| ТаблицаТоваров.СуммаНДС КАК СуммаНДС,
| ТаблицаТоваров.СуммаВознаграждения КАК СуммаВознаграждения,
| ТаблицаТоваров.СуммаНДСВознаграждения КАК СуммаНДСВознаграждения,
| ТаблицаТоваров.Себестоимость КАК Себестоимость,
| ТаблицаТоваров.СебестоимостьБезНДС КАК СебестоимостьБезНДС,
| ТаблицаТоваров.СебестоимостьРегл КАК СебестоимостьРегл,
| ТаблицаТоваров.СебестоимостьПР КАК СебестоимостьПР,
| ТаблицаТоваров.СебестоимостьВР КАК СебестоимостьВР,
| ВЫБОР
| КОГДА (СпрНоменклатура.ТипНоменклатуры = ЗНАЧЕНИЕ(Перечисление.ТипыНоменклатуры.МногооборотнаяТара)
| И &ВозвратПереданнойМногооборотнойТары)
| ТОГДА ЛОЖЬ
| ИНАЧЕ ИСТИНА
| КОНЕЦ КАК ПодбиратьВидыЗапасов,
| АналитикаОприходования.КлючАналитики КАК АналитикаУчетаНоменклатурыОприходования,
| ТаблицаТоваров.НомерГТД КАК НомерГТД
|ПОМЕСТИТЬ ТаблицаТоваров
|ИЗ
| ВтТаблицаТоваров КАК ТаблицаТоваров
| ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Номенклатура КАК СпрНоменклатура
| ПО ТаблицаТоваров.Номенклатура = СпрНоменклатура.Ссылка
|
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.АналитикаУчетаНоменклатуры КАК АналитикаОприходования
| ПО ТаблицаТоваров.НоменклатураОприходование = АналитикаОприходования.Номенклатура
| И ТаблицаТоваров.ХарактеристикаОприходование = АналитикаОприходования.Характеристика
| И ТаблицаТоваров.Назначение = АналитикаОприходования.Назначение
| И ТаблицаТоваров.Серия = АналитикаОприходования.Серия
| И ТаблицаТоваров.Склад = АналитикаОприходования.МестоХранения
|
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.АналитикаУчетаНоменклатуры КАК АналитикаТары
| ПО ТаблицаТоваров.Номенклатура = АналитикаТары.Номенклатура
| И ТаблицаТоваров.Характеристика = АналитикаТары.Характеристика
| И АналитикаТары.Назначение = ЗНАЧЕНИЕ(Справочник.Назначения.ПустаяСсылка)
| И АналитикаТары.Серия = ЗНАЧЕНИЕ(Справочник.СерииНоменклатуры.ПустаяСсылка)
| И АналитикаТары.МестоХранения = &Партнер
|
|ГДЕ
| &ОтборПоТипуНоменклатуры
|;
|
|
|ВЫБРАТЬ
| ТаблицаВидыЗапасов.НомерСтроки КАК НомерСтроки,
| ТаблицаВидыЗапасов.АналитикаУчетаНоменклатуры КАК АналитикаУчетаНоменклатуры,
| ТаблицаВидыЗапасов.АналитикаУчетаНоменклатурыОтгрузки КАК АналитикаУчетаНоменклатурыОтгрузки,
| ТаблицаВидыЗапасов.НоменклатураОприходование КАК НоменклатураОприходование,
| ТаблицаВидыЗапасов.ХарактеристикаОприходование КАК ХарактеристикаОприходование,
| ТаблицаВидыЗапасов.Серия КАК Серия,
| ТаблицаВидыЗапасов.ВидЗапасов КАК ВидЗапасов,
| ТаблицаВидыЗапасов.НомерГТД КАК НомерГТД,
| ТаблицаВидыЗапасов.СтавкаНДС КАК СтавкаНДС,
| ВЫБОР
| КОГДА &ХозяйственнаяОперация = ЗНАЧЕНИЕ(Перечисление.ХозяйственныеОперации.ВозвратОтКомиссионера)
| ТОГДА НЕОПРЕДЕЛЕНО
| ИНАЧЕ ТаблицаВидыЗапасов.ДокументРеализации
| КОНЕЦ КАК ДокументРеализации,
| ВЫБОР
| КОГДА ТаблицаВидыЗапасов.СпособОпределенияСебестоимости = ЗНАЧЕНИЕ(Перечисление.СпособыОпределенияСебестоимостиВозврата.Вручную)
| ИЛИ ТаблицаВидыЗапасов.СпособОпределенияСебестоимости = ЗНАЧЕНИЕ(Перечисление.СпособыОпределенияСебестоимостиВозврата.ИзТекущегоДокумента)
| ТОГДА ТаблицаВидыЗапасов.СпособОпределенияСебестоимости
| ИНАЧЕ ЗНАЧЕНИЕ(Перечисление.СпособыОпределенияСебестоимостиВозврата.ИзДокументаПродажи)
| КОНЕЦ КАК СпособОпределенияСебестоимости,
| ЗНАЧЕНИЕ(Справочник.СделкиСКлиентами.ПустаяСсылка) КАК Сделка,
| ТаблицаВидыЗапасов.Количество КАК Количество,
| ВЫБОР
| КОГДА НЕ &ИспользоватьУчетПрослеживаемыхИмпортныхТоваров
| ИЛИ НАЧАЛОПЕРИОДА(&Дата, МЕСЯЦ) < &ДатаНачалаУчетаПрослеживаемыхИмпортныхТоваров
| ТОГДА 0
| ИНАЧЕ ТаблицаВидыЗапасов.КоличествоПоРНПТ
| КОНЕЦ КАК КоличествоПоРНПТ,
| ТаблицаВидыЗапасов.СуммаСНДС КАК СуммаСНДС,
| ТаблицаВидыЗапасов.СуммаНДС КАК СуммаНДС,
| ТаблицаВидыЗапасов.Себестоимость КАК Себестоимость,
| ТаблицаВидыЗапасов.СебестоимостьБезНДС КАК СебестоимостьБезНДС,
| ТаблицаВидыЗапасов.СебестоимостьРегл КАК СебестоимостьРегл,
| ТаблицаВидыЗапасов.СебестоимостьПР КАК СебестоимостьПР,
| ТаблицаВидыЗапасов.СебестоимостьВР КАК СебестоимостьВР
|ПОМЕСТИТЬ ВтВидыЗапасов
|ИЗ
| &ТаблицаВидыЗапасов КАК ТаблицаВидыЗапасов
|
|ГДЕ
| ТаблицаВидыЗапасов.СпособОпределенияСебестоимости В (&СпособыОпределенияСебестоимости)
|;
|
|
|ВЫБРАТЬ
| ТаблицаВидыЗапасов.НомерСтроки КАК НомерСтроки,
| ВЫБОР
| КОГДА &ПодборТары
| ТОГДА ЕСТЬNULL(АналитикаТары.КлючАналитики, ТаблицаВидыЗапасов.АналитикаУчетаНоменклатуры)
| ИНАЧЕ ТаблицаВидыЗапасов.АналитикаУчетаНоменклатуры
| КОНЕЦ КАК АналитикаУчетаНоменклатуры,
| ТаблицаВидыЗапасов.АналитикаУчетаНоменклатурыОтгрузки КАК АналитикаУчетаНоменклатурыОтгрузки,
| Аналитика.Номенклатура КАК Номенклатура,
| Аналитика.Характеристика КАК Характеристика,
| Аналитика.Серия КАК Серия,
| ТаблицаВидыЗапасов.НоменклатураОприходование КАК НоменклатураОприходование,
| ТаблицаВидыЗапасов.ХарактеристикаОприходование КАК ХарактеристикаОприходование,
| ТаблицаВидыЗапасов.ВидЗапасов КАК ВидЗапасов,
| НЕОПРЕДЕЛЕНО КАК ВидЗапасовПолучателя,
| ТаблицаВидыЗапасов.НомерГТД КАК НомерГТД,
| ТаблицаВидыЗапасов.СтавкаНДС КАК СтавкаНДС,
| ЕСТЬNULL(АналитикаОтгрузки.МестоХранения, ЗНАЧЕНИЕ(Справочник.Склады.ПустаяСсылка)) КАК СкладОтгрузки,
| Аналитика.МестоХранения КАК Склад,
| ТаблицаВидыЗапасов.ДокументРеализации КАК ДокументРеализации,
| ТаблицаВидыЗапасов.СпособОпределенияСебестоимости КАК СпособОпределенияСебестоимости,
| ТаблицаВидыЗапасов.Сделка КАК Сделка,
| ТаблицаВидыЗапасов.Количество КАК Количество,
| ТаблицаВидыЗапасов.КоличествоПоРНПТ КАК КоличествоПоРНПТ,
| ТаблицаВидыЗапасов.СуммаСНДС КАК СуммаСНДС,
| ТаблицаВидыЗапасов.СуммаНДС КАК СуммаНДС,
| ТаблицаВидыЗапасов.Себестоимость КАК Себестоимость,
| ТаблицаВидыЗапасов.СебестоимостьБезНДС КАК СебестоимостьБезНДС,
| ТаблицаВидыЗапасов.СебестоимостьРегл КАК СебестоимостьРегл,
| ТаблицаВидыЗапасов.СебестоимостьПР КАК СебестоимостьПР,
| ТаблицаВидыЗапасов.СебестоимостьВР КАК СебестоимостьВР,
| &ВидыЗапасовУказаныВручную КАК ВидыЗапасовУказаныВручную
|ПОМЕСТИТЬ ТаблицаВидыЗапасов
|ИЗ
| ВтВидыЗапасов КАК ТаблицаВидыЗапасов
| ЛЕВОЕ СОЕДИНЕНИЕ Справочник.КлючиАналитикиУчетаНоменклатуры КАК Аналитика
| ПО ТаблицаВидыЗапасов.АналитикаУчетаНоменклатуры = Аналитика.Ссылка
|
| ЛЕВОЕ СОЕДИНЕНИЕ Справочник.КлючиАналитикиУчетаНоменклатуры КАК АналитикаОтгрузки
| ПО ТаблицаВидыЗапасов.АналитикаУчетаНоменклатурыОтгрузки = АналитикаОтгрузки.Ссылка
|
| ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Номенклатура КАК СпрНоменклатура
| ПО Аналитика.Номенклатура = СпрНоменклатура.Ссылка
|
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.АналитикаУчетаНоменклатуры КАК АналитикаТары
| ПО Аналитика.Номенклатура = АналитикаТары.Номенклатура
| И Аналитика.Характеристика = АналитикаТары.Характеристика
| И АналитикаТары.Назначение = ЗНАЧЕНИЕ(Справочник.Назначения.ПустаяСсылка)
| И АналитикаТары.Серия = ЗНАЧЕНИЕ(Справочник.СерииНоменклатуры.ПустаяСсылка)
| И АналитикаТары.МестоХранения = &Партнер
|
|ГДЕ
| &ОтборПоТипуНоменклатуры
|
|ИНДЕКСИРОВАТЬ ПО
| АналитикаУчетаНоменклатуры";
МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц;
Запрос.МенеджерВременныхТаблиц = МенеджерВременныхТаблиц;
ТаблицаТоваров = ?(ДополнительныеСвойства.Свойство("ТаблицыЗаполненияВидовЗапасовПриОбмене")
И ДополнительныеСвойства.ТаблицыЗаполненияВидовЗапасовПриОбмене <> Неопределено
И ДополнительныеСвойства.ТаблицыЗаполненияВидовЗапасовПриОбмене.Свойство("Товары"),
ДополнительныеСвойства.ТаблицыЗаполненияВидовЗапасовПриОбмене.Товары,
Товары);
Запрос.УстановитьПараметр("Ссылка", Ссылка);
Запрос.УстановитьПараметр("Дата", Дата);
Запрос.УстановитьПараметр("Организация", Организация);
Запрос.УстановитьПараметр("Партнер", Партнер);
Запрос.УстановитьПараметр("Контрагент", Контрагент);
Запрос.УстановитьПараметр("Договор", Договор);
Запрос.УстановитьПараметр("Соглашение", Соглашение);
Запрос.УстановитьПараметр("НалогообложениеНДС", НалогообложениеНДС);
Запрос.УстановитьПараметр("Склад", Склад);
Запрос.УстановитьПараметр("ДокументРеализации", ДокументРеализации);
Запрос.УстановитьПараметр("ЦенаВключаетНДС", ?(ЦенаВключаетНДС, 0, 1));
Запрос.УстановитьПараметр("ХозяйственнаяОперация", ХозяйственнаяОперация);
Запрос.УстановитьПараметр("ТаблицаТоваров", ТаблицаТоваров);
Запрос.УстановитьПараметр("ТаблицаВидыЗапасов", ВидыЗапасов);
Запрос.УстановитьПараметр("ВозвратПереданнойМногооборотнойТары", ВозвратПереданнойМногооборотнойТары);
Запрос.УстановитьПараметр("ВидыЗапасовУказаныВручную", ВидыЗапасовУказаныВручную);
Запрос.УстановитьПараметр("ПодборТары", ОтборПоТипуНоменклатуры = "Тара");
Если ОтборПоСпособуОпределенияСебестоимости = "Все" Тогда
СпособыОпределенияСебестоимости = Новый Массив;
СпособыОпределенияСебестоимости.Добавить(Перечисления.СпособыОпределенияСебестоимостиВозврата.ИзДокументаПродажи);
СпособыОпределенияСебестоимости.Добавить(Перечисления.СпособыОпределенияСебестоимостиВозврата.Вручную);
СпособыОпределенияСебестоимости.Добавить(Перечисления.СпособыОпределенияСебестоимостиВозврата.ИзТекущегоДокумента);
СпособыОпределенияСебестоимости.Добавить(Перечисления.СпособыОпределенияСебестоимостиВозврата.ПустаяСсылка());
ИначеЕсли ОтборПоСпособуОпределенияСебестоимости = "ИзДокументаПродажи" Тогда
СпособыОпределенияСебестоимости = Новый Массив;
СпособыОпределенияСебестоимости.Добавить(Перечисления.СпособыОпределенияСебестоимостиВозврата.ИзДокументаПродажи);
ИначеЕсли ОтборПоСпособуОпределенияСебестоимости = "НеИзДокументаПродажи" Тогда
СпособыОпределенияСебестоимости = Новый Массив;
СпособыОпределенияСебестоимости.Добавить(Перечисления.СпособыОпределенияСебестоимостиВозврата.Вручную);
СпособыОпределенияСебестоимости.Добавить(Перечисления.СпособыОпределенияСебестоимостиВозврата.ИзТекущегоДокумента);
СпособыОпределенияСебестоимости.Добавить(Перечисления.СпособыОпределенияСебестоимостиВозврата.ПустаяСсылка());
КонецЕсли;
Запрос.УстановитьПараметр("СпособыОпределенияСебестоимости", СпособыОпределенияСебестоимости);
Если ОтборПоТипуНоменклатуры = "Все" Тогда
ТекстОтборПоТипуНоменклатуры = "ИСТИНА";
ИначеЕсли ОтборПоТипуНоменклатуры = "Номенклатура" Тогда
ТекстОтборПоТипуНоменклатуры = "СпрНоменклатура.ТипНоменклатуры <> ЗНАЧЕНИЕ(Перечисление.ТипыНоменклатуры.МногооборотнаяТара)";
Иначе
ТекстОтборПоТипуНоменклатуры = "СпрНоменклатура.ТипНоменклатуры = ЗНАЧЕНИЕ(Перечисление.ТипыНоменклатуры.МногооборотнаяТара)";
КонецЕсли;
Запрос.Текст = СтрЗаменить(Запрос.Текст, "&ОтборПоТипуНоменклатуры", ТекстОтборПоТипуНоменклатуры);
УчетПрослеживаемыхТоваровЛокализация.УстановитьПараметрыИспользованияУчетаПрослеживаемыхТоваров(Запрос);
ЗапасыСервер.ДополнитьВременныеТаблицыОбязательнымиКолонками(Запрос);
Запрос.Выполнить();
Возврат МенеджерВременныхТаблиц;
КонецФункции
Процедура ИнициализироватьПараметрыЗаполненияВидовЗапасовДляПроведения(ДокументОбъект, РежимЗаписи = Неопределено) Экспорт
ПараметрыЗаполненияВидовЗапасов = ЗапасыСервер.ПараметрыЗаполненияВидовЗапасов();
ДокументОбъект.ДополнительныеСвойства.Вставить("ПараметрыЗаполненияВидовЗапасов", ПараметрыЗаполненияВидовЗапасов);
КонецПроцедуры
Процедура ЗаполнитьВидыЗапасовПриОбмене(Отказ, ТаблицыДокумента) Экспорт
ЗаполнитьАналитикиУчетаНоменклатурыВТабличныхЧастяхТоваров();
Если ТаблицыДокумента <> Неопределено Тогда
ЗаполнитьАналитикиУчетаНоменклатурыВТабличныхЧастяхТоваров(ТаблицыДокумента);
ДополнительныеСвойства.Вставить("ТаблицыЗаполненияВидовЗапасовПриОбмене", ТаблицыДокумента);
Иначе
ИмяПараметра = "ТаблицыДокумента";
ТекстИсключения = НСтр("ru = 'Для заполнения видов запасов не передан параметр ""%1"".'");
ТекстИсключения = СтрШаблон(ТекстИсключения, ИмяПараметра);
ВызватьИсключение ТекстИсключения;
КонецЕсли;
ЗаполнитьВидыЗапасов(Отказ);
ДополнительныеСвойства.Удалить("ТаблицыЗаполненияВидовЗапасовПриОбмене");
КонецПроцедуры
#КонецОбласти
#КонецОбласти
#Область ОбработчикиСобытий
Процедура ОбработкаЗаполнения(ДанныеЗаполнения, СтандартнаяОбработка)
ЗаполненНаОснованииДокумента = Ложь;
ПересчитатьКоличествоПоРНПТ = Истина;
ТипДанныхЗаполнения = ТипЗнч(ДанныеЗаполнения);
Если ТипДанныхЗаполнения = Тип("Структура") Тогда
Если ДанныеЗаполнения.Свойство("ЗаполнитьПоПереданнойТаре") Тогда
ЗаполнитьДокументНаОснованииПереданнойТары(ДанныеЗаполнения);
ЗаполненНаОснованииДокумента = Истина;
ПересчитатьКоличествоПоРНПТ = Ложь;
ИначеЕсли ДанныеЗаполнения.Свойство("АктОРасхождениях")
И ДанныеЗаполнения.Свойство("ОснованиеАкта") Тогда
Если ТипЗнч(ДанныеЗаполнения.ОснованиеАкта) = Тип("ДокументСсылка.РеализацияТоваровУслуг") Тогда
ЗаполнитьДокументНаОснованииАктаПослеОтгрузки(ДанныеЗаполнения);
ИначеЕсли ТипЗнч(ДанныеЗаполнения.ОснованиеАкта) = Тип("ДокументСсылка.ВозвратТоваровОтКлиента") Тогда
ЗаполнитьДокументНаОснованииАктаПослеПриемки(ДанныеЗаполнения);
КонецЕсли;
ИначеЕсли ДанныеЗаполнения.Свойство("МассивЗаказов") Тогда
ЗаполнитьПоЗаказу(ДанныеЗаполнения);
ИначеЕсли ДанныеЗаполнения.Свойство("ЗаполнитьПоРеализацииТоваров") Тогда
ЗаполнитьДокументНаОснованииРеализацииТоваровИУслуг(ДанныеЗаполнения.ДокументОснование, ДанныеЗаполнения.ПараметрыОформления);
ЗаполненНаОснованииДокумента = Истина;
Иначе
ЗаполнитьДокументПоОтбору(ДанныеЗаполнения);
КонецЕсли;
ИначеЕсли ТипДанныхЗаполнения = Тип("ДокументСсылка.РеализацияТоваровУслуг") Тогда
ЗаполнитьДокументНаОснованииРеализацииТоваровИУслуг(ДанныеЗаполнения);
ЗаполненНаОснованииДокумента = Истина;
ИначеЕсли ТипДанныхЗаполнения = Тип("ДокументСсылка.ЗаявкаНаВозвратТоваровОтКлиента") Тогда
ЗаполнитьДокументНаОснованииЗаявкиНаВозвратТоваровОтКлиента(ДанныеЗаполнения);
ЗаполненНаОснованииДокумента = Истина;
КонецЕсли;
ОчиститьСпособОпределенияСебестоимостиИДокументРеализации();
ВозвратТоваровОтКлиентаЛокализация.ОбработкаЗаполнения(ЭтотОбъект, ДанныеЗаполнения, СтандартнаяОбработка);
Если Не ЗаполненНаОснованииДокумента Тогда
ИнициализироватьУсловияПродаж();
КонецЕсли;
ИнициализироватьДокумент(ДанныеЗаполнения);
ВзаиморасчетыСервер.ОбработкаЗаполнения(ЭтотОбъект, ДанныеЗаполнения);
БонусныеБаллыСервер.ЗаполнитьБонусныеБаллыВозвратТоваровОтКлиента(ЭтотОбъект);
Если ПересчитатьКоличествоПоРНПТ Тогда
ПересчитатьКоличествоРНПТ();
КонецЕсли;
СкладГруппа = Справочники.Склады.ЭтоГруппаИСкладыИспользуютсяВТЧДокументовПродажи(Склад);
СкладыСервер.ЗаполнитьСкладыВТабличнойЧасти(Склад, СкладГруппа, Товары, Ложь);
КонецПроцедуры
Процедура ОбработкаПроверкиЗаполнения(Отказ, ПроверяемыеРеквизиты)
МассивНепроверяемыхРеквизитов = Новый Массив;
Если ХозяйственнаяОперация = Перечисления.ХозяйственныеОперации.ВозвратОтКомиссионера
Или ХозяйственнаяОперация = Перечисления.ХозяйственныеОперации.ВозвратОтХранителя Тогда
МассивНепроверяемыхРеквизитов.Добавить("НалогообложениеНДС");
МассивНепроверяемыхРеквизитов.Добавить("Товары.СтавкаНДС");
КонецЕсли;
Если Не ЗначениеЗаполнено(Соглашение) Или Не ОбщегоНазначенияУТ.ЗначениеРеквизитаОбъектаТипаБулево(Соглашение, "ИспользуютсяДоговорыКонтрагентов") Тогда
МассивНепроверяемыхРеквизитов.Добавить("Договор");
КонецЕсли;
НоменклатураСервер.ПроверитьЗаполнениеКоличества(ЭтотОбъект, ПроверяемыеРеквизиты, Отказ);
МассивНепроверяемыхРеквизитов.Добавить("Товары.НоменклатураОприходование");
Если ХозяйственнаяОперация = Перечисления.ХозяйственныеОперации.ВозвратОтКомиссионера Тогда
МассивНепроверяемыхРеквизитов.Добавить("РасшифровкаПлатежа.Сумма");
Иначе
МассивНепроверяемыхРеквизитов.Добавить("Соглашение");
КонецЕсли;
СуммаУменьшенДолг = 0;
Для Каждого СтрокаРасшифровкаПлатежа Из РасшифровкаПлатежа Цикл
Если ЗначениеЗаполнено(СтрокаРасшифровкаПлатежа.ОбъектРасчетов)
И СтрокаРасшифровкаПлатежа.ОбъектРасчетов <> ОбъектРасчетов Тогда
СуммаУменьшенДолг = СуммаУменьшенДолг + СтрокаРасшифровкаПлатежа.Сумма;
КонецЕсли;
КонецЦикла;
СуммаДокумента = ПолучитьСуммуДокумента();
СуммаКомпенсации = СуммаДокумента - СуммаУменьшенДолг;
Если СуммаКомпенсации = 0
Или ХозяйственнаяОперация <> Перечисления.хозяйственныеОперации.ВозвратТоваровОтКлиента Тогда
МассивНепроверяемыхРеквизитов.Добавить("СпособКомпенсации");
КонецЕсли;
ДенежныеСредстваСервер.ПроверитьЗаполнениеРасшифровкиПлатежа(
ЭтотОбъект,
ПолучитьСуммуДокумента(),
ХозяйственнаяОперация,
Отказ);
МассивВсехРеквизитов = Новый Массив;
МассивРеквизитовОперации = Новый Массив;
Документы.ВозвратТоваровОтКлиента.ЗаполнитьИменаРеквизитовПоХозяйственнойОперации(
ХозяйственнаяОперация,
МассивВсехРеквизитов,
МассивРеквизитовОперации);
Если Не ВыданыДенежныеСредства Тогда
МассивНепроверяемыхРеквизитов.Добавить("НомерРасходногоКассовогоОрдера");
МассивНепроверяемыхРеквизитов.Добавить("ДатаРасходногоКассовогоОрдера");
КонецЕсли;
Для Каждого ЭлементМассива Из МассивВсехРеквизитов Цикл
Если МассивРеквизитовОперации.Найти(ЭлементМассива) = Неопределено Тогда
МассивНепроверяемыхРеквизитов.Добавить(ЭлементМассива);
ИначеЕсли ПроверяемыеРеквизиты.Найти(ЭлементМассива) = Неопределено Тогда
ПроверяемыеРеквизиты.Добавить(ЭлементМассива);
КонецЕсли;
КонецЦикла;
ПараметрыПроверки = НоменклатураСервер.ПараметрыПроверкиЗаполненияХарактеристик();
ПараметрыПроверки.ИменаПолейССуффиксом.Вставить("Номенклатура", "НоменклатураОприходование");
ПараметрыПроверки.ИменаПолейССуффиксом.Вставить("Характеристика", "ХарактеристикаОприходование");
НоменклатураСервер.ПроверитьЗаполнениеХарактеристик(ЭтотОбъект,МассивНепроверяемыхРеквизитов,Отказ,ПараметрыПроверки);
ПараметрыУказанияСерий = НоменклатураСервер.ПараметрыУказанияСерий(ЭтотОбъект, Документы.ВозвратТоваровОтКлиента);
НоменклатураСервер.ПроверитьЗаполнениеСерий(ЭтотОбъект,
ПараметрыУказанияСерий,
Отказ,
МассивНепроверяемыхРеквизитов);
НоменклатураСервер.ПроверитьВидНоменклатурыОприходования(ЭтотОбъект,Отказ);
ЭтоПрослеживаемыйДокумент = УчетПрослеживаемыхТоваровЛокализация.ЭтоПрослеживаемыйДокумент(Товары, Дата);
МассивНепроверяемыхРеквизитов.Добавить("Товары.НомерГТД");
Если Не ХозяйственнаяОперация = Перечисления.ХозяйственныеОперации.ВозвратОтКомиссионера
И (ЭтоПрослеживаемыйДокумент
Или ПолучитьФункциональнуюОпцию("ЗапретитьПоступлениеТоваровБезНомеровГТД")) Тогда
ЗапасыСервер.ПроверитьЗаполнениеНомеровГТД(ЭтотОбъект, Отказ);
КонецЕсли;
Если ЭтоПрослеживаемыйДокумент Тогда
Если ВозвратПорчи Тогда
УчетПрослеживаемыхТоваровЛокализация.ПроверитьКорректностьНастроекТоваровРНПТ(
ЭтотОбъект,
Товары,
Дата,
"НоменклатураОприходование");
Иначе
УчетПрослеживаемыхТоваровЛокализация.ПроверитьКорректностьНастроекТоваровРНПТ(ЭтотОбъект, Товары, Дата);
КонецЕсли;
КонецЕсли;
МассивНепроверяемыхРеквизитов.Добавить("Товары.КоличествоПоРНПТ");
МассивНепроверяемыхРеквизитов.Добавить("Товары.ДокументРеализации");
Если ХозяйственнаяОперация = Перечисления.ХозяйственныеОперации.ВозвратОтКомиссионера
И ВозвратПереданнойМногооборотнойТары Тогда
СоответствиеНоменклатураТип = ОбщегоНазначения.ЗначениеРеквизитаОбъектов(Товары.ВыгрузитьКолонку("Номенклатура"), "ТипНоменклатуры");
КонецЕсли;
Для Каждого СтрТабл Из Товары Цикл
АдресОшибки = " " + НСтр("ru='в строке %НомерСтроки% списка ""Товары""'");
АдресОшибки = СтрЗаменить(АдресОшибки, "%НомерСтроки%", СтрТабл.НомерСтроки);
ПолеДокументПродажи = ОбщегоНазначенияКлиентСервер.ПутьКТабличнойЧасти("Товары", СтрТабл.НомерСтроки, "ДокументРеализации");
ПолеНоменклатураОприходование = ОбщегоНазначенияКлиентСервер.ПутьКТабличнойЧасти("Товары", СтрТабл.НомерСтроки, "НоменклатураОприходование");
Если Не ЗначениеЗаполнено(СтрТабл.ДокументРеализации)
И (СтрТабл.СпособОпределенияСебестоимости = Перечисления.СпособыОпределенияСебестоимостиВозврата.ИзДокументаПередачи
Или (ХозяйственнаяОперация = Перечисления.ХозяйственныеОперации.ВозвратОтКомиссионера
И ВозвратПереданнойМногооборотнойТары
И СоответствиеНоменклатураТип.Получить(СтрТабл.Номенклатура) = Перечисления.ТипыНоменклатуры.МногооборотнаяТара)) Тогда
ТекстОшибки = НСтр("ru='Не заполнена колонка ""Документ продажи""'");
ОбщегоНазначения.СообщитьПользователю(ТекстОшибки + АдресОшибки, ЭтотОбъект, ПолеДокументПродажи,, Отказ);
КонецЕсли;
Если СтрТабл.Порча Тогда
Если Не ЗначениеЗаполнено(СтрТабл.НоменклатураОприходование) Тогда
ТекстОшибки = НСтр("ru='Не заполнена колонка ""Номенклатура (оприходование)""'");
ОбщегоНазначения.СообщитьПользователю(ТекстОшибки + АдресОшибки,ЭтотОбъект,ПолеНоменклатураОприходование,,Отказ);
ИначеЕсли СтрТабл.Номенклатура = СтрТабл.НоменклатураОприходование Тогда
ТекстОшибки = НСтр("ru='Товар исходного качества совпадает с товаром другого качества'");
ОбщегоНазначения.СообщитьПользователю(ТекстОшибки + АдресОшибки,ЭтотОбъект,ПолеНоменклатураОприходование,,Отказ);
КонецЕсли;
КонецЕсли;
КонецЦикла;
ОбщегоНазначения.УдалитьНепроверяемыеРеквизитыИзМассива(ПроверяемыеРеквизиты,МассивНепроверяемыхРеквизитов);
ВозвратТоваровОтКлиентаЛокализация.ОбработкаПроверкиЗаполнения(ЭтотОбъект, Отказ, ПроверяемыеРеквизиты);
КонецПроцедуры
Процедура ПередЗаписью(Отказ, РежимЗаписи, РежимПроведения)
Если ОбменДанными.Загрузка Тогда
Возврат;
КонецЕсли;
ОбновлениеИнформационнойБазы.ПроверитьОбъектОбработан(ЭтотОбъект);
ИсправлениеДокументов.ПередЗаписью(ЭтотОбъект, Отказ, РежимЗаписи, РежимПроведения);
ПроведениеДокументов.ПередЗаписьюДокумента(ЭтотОбъект, РежимЗаписи, РежимПроведения);
НоменклатураСервер.ОкруглитьКоличествоШтучныхТоваров(ЭтотОбъект, РежимЗаписи);
ОчиститьСпособОпределенияСебестоимостиИДокументРеализации();
Если ПолучитьФункциональнуюОпцию("ИспользоватьКачествоТоваров") Тогда
ВозвратПорчи = Ложь;
Для Каждого СтрТабл Из Товары Цикл
Если СтрТабл.Порча Тогда
ВозвратПорчи = Истина;
Прервать;
КонецЕсли;
КонецЦикла;
КонецЕсли;
Если Не ВозвратПереданнойМногооборотнойТары
И ПредусмотренЗалогЗаТару Тогда
ПредусмотренЗалогЗаТару = Ложь;
КонецЕсли;
СуммаДокумента = ПолучитьСуммуДокумента();
ПараметрыУказанияСерий = НоменклатураСервер.ПараметрыУказанияСерий(ЭтотОбъект, Документы.ВозвратТоваровОтКлиента);
НоменклатураСервер.ОчиститьНеиспользуемыеСерии(ЭтотОбъект,ПараметрыУказанияСерий);
ПараметрыРегистрации = Документы.ВозвратТоваровОтКлиента.ПараметрыРегистрацииСчетовФактурПолученных(ЭтотОбъект);
УчетНДСУП.АктуализироватьСчетаФактурыПолученныеПередЗаписью(ПараметрыРегистрации, РежимЗаписи, ПометкаУдаления, Проведен);
ПараметрыРегистрации = Документы.ВозвратТоваровОтКлиента.ПараметрыРегистрацииСчетовФактурВыданных(ЭтотОбъект);
УчетНДСУП.АктуализироватьСчетаФактурыВыданныеПередЗаписью(ПараметрыРегистрации, РежимЗаписи, ПометкаУдаления, Проведен);
Если Не ЗначениеЗаполнено(Номер) Тогда
УстановитьНовыйНомер();
КонецЕсли;
ВзаиморасчетыСервер.ПередЗаписью(ЭтотОбъект, Отказ, РежимЗаписи);
Если ХозяйственнаяОперация = Перечисления.ХозяйственныеОперации.ВозвратОтКомиссионера Тогда
УчетПрослеживаемыхТоваровЛокализация.ОчиститьДанныеПоИмпортнымТоварамВДокументахКомиссионера(ЭтотОбъект);
КонецЕсли;
Если РежимЗаписи = РежимЗаписиДокумента.Проведение Тогда
ПродажиСервер.ПроверитьКорректностьЗаполненияДокументаПродажи(ЭтотОбъект, Отказ);
ПродажиСервер.ПроверитьКорректностьВозвращаемыхТоваров(ЭтотОбъект, "Товары", Отказ);
ЗаполнитьАналитикиУчетаНоменклатурыВТабличныхЧастяхТоваров();
ЗаполнитьВидыЗапасов(Отказ);
ИначеЕсли РежимЗаписи = РежимЗаписиДокумента.ОтменаПроведения Тогда
Если Не ВидыЗапасовУказаныВручную Тогда
ВидыЗапасов.Очистить();
КонецЕсли;
КонецЕсли;
Если ХозяйственнаяОперация <> Перечисления.ХозяйственныеОперации.ВозвратОтРозничногоПокупателя Тогда
ЧекККМ = Неопределено;
КонецЕсли;
БонусныеБаллыСервер.ЗаполнитьБонусныеБаллыВозвратТоваровОтКлиента(ЭтотОбъект);
Если Не ВыданыДенежныеСредства Тогда
НомерРасходногоКассовогоОрдера = "";
ДатаРасходногоКассовогоОрдера = '00010101';
КонецЕсли;
ОбщегоНазначенияУТ.ЗаполнитьИдентификаторыДокумента(ЭтотОбъект, "Товары,ВидыЗапасов");
ВозвратТоваровОтКлиентаЛокализация.ПередЗаписью(ЭтотОбъект, Отказ, РежимЗаписи, РежимПроведения);
Если Не ЗначениеЗаполнено(Автор) И ЭтоНовый() Тогда
Автор = Пользователи.ТекущийПользователь();
КонецЕсли;
КонецПроцедуры
Процедура ОбработкаПроведения(Отказ, РежимПроведения)
ИнициализироватьПараметрыЗаполненияВидовЗапасовДляПроведения(ЭтотОбъект);
ПроведениеДокументов.ОбработкаПроведенияДокумента(ЭтотОбъект, Отказ);
ВозвратТоваровОтКлиентаЛокализация.ОбработкаПроведения(ЭтотОбъект, Отказ, РежимПроведения);
ПараметрыРегистрации = Документы.ВозвратТоваровОтКлиента.ПараметрыРегистрацииСчетовФактурПолученных(ЭтотОбъект);
УчетНДСУП.АктуализироватьСчетаФактурыПолученныеПриПроведении(ПараметрыРегистрации);
ПараметрыРегистрации = Документы.ВозвратТоваровОтКлиента.ПараметрыРегистрацииСчетовФактурВыданных(ЭтотОбъект);
УчетНДСУП.АктуализироватьСчетаФактурыВыданныеПриПроведении(ПараметрыРегистрации);
КонецПроцедуры
Процедура ОбработкаУдаленияПроведения(Отказ)
ИнициализироватьПараметрыЗаполненияВидовЗапасовДляПроведения(ЭтотОбъект);
ПроведениеДокументов.ОбработкаУдаленияПроведенияДокумента(ЭтотОбъект, Отказ);
ВозвратТоваровОтКлиентаЛокализация.ОбработкаУдаленияПроведения(ЭтотОбъект, Отказ);
ПараметрыРегистрации = Документы.ВозвратТоваровОтКлиента.ПараметрыРегистрацииСчетовФактурПолученных(ЭтотОбъект);
УчетНДСУП.АктуализироватьСчетаФактурыПолученныеПриУдаленииПроведения(ПараметрыРегистрации);
ПараметрыРегистрации = Документы.ВозвратТоваровОтКлиента.ПараметрыРегистрацииСчетовФактурВыданных(ЭтотОбъект);
УчетНДСУП.АктуализироватьСчетаФактурыВыданныеПриУдаленииПроведения(ПараметрыРегистрации);
КонецПроцедуры
Процедура ПриКопировании(ОбъектКопирования)
ВидыЗапасовУказаныВручную = Ложь;
ЗаявкаНаВозвратТоваровОтКлиента = Документы.ЗаявкаНаВозвратТоваровОтКлиента.ПустаяСсылка();
СостояниеЗаполненияМногооборотнойТары = Перечисления.СостоянияЗаполненияМногооборотнойТары.ПустаяСсылка();
Для Каждого СтрокаТЧ Из Товары Цикл
СтрокаТЧ.КодСтроки = 0;
КонецЦикла;
ВидыЗапасов.Очистить();
Серии.Очистить();
ИнициализироватьДокумент();
ВзаиморасчетыСервер.ПриКопировании(ЭтотОбъект);
ПересчитатьКоличествоРНПТ();
ОбщегоНазначенияУТ.ОчиститьИдентификаторыДокумента(ЭтотОбъект, "Товары,ВидыЗапасов");
ВозвратТоваровОтКлиентаЛокализация.ПриКопировании(ЭтотОбъект, ОбъектКопирования);
КонецПроцедуры
Процедура ПриЗаписи(Отказ)
Если ОбменДанными.Загрузка Тогда
Возврат;
КонецЕсли;
ПроведениеДокументов.ПриЗаписиДокумента(ЭтотОбъект, Отказ);
ВозвратТоваровОтКлиентаЛокализация.ПриЗаписи(ЭтотОбъект, Отказ);
КонецПроцедуры
#КонецОбласти
#Область СлужебныеПроцедурыИФункции
#Область ЗаполнениеПоОснованию
Процедура ЗаполнитьДокументПоОтбору(Знач ДанныеЗаполнения)
Если ДанныеЗаполнения.Свойство("ХозяйственнаяОперация") Тогда
ХозяйственнаяОперация = ДанныеЗаполнения.ХозяйственнаяОперация;
Если ДанныеЗаполнения.ХозяйственнаяОперация = Перечисления.ХозяйственныеОперации.ВозвратОтРозничногоПокупателя Тогда
Партнер = Справочники.Партнеры.РозничныйПокупатель;
ПартнерыИКонтрагенты.ЗаполнитьКонтрагентаПартнераПоУмолчанию(Партнер, Контрагент);
Если ПолучитьФункциональнуюОпцию("ИспользоватьСоглашенияСКлиентами") Тогда
ЗаполнитьУсловияПродажПоУмолчанию();
КонецЕсли;
ИначеЕсли ДанныеЗаполнения.ХозяйственнаяОперация = Перечисления.ХозяйственныеОперации.ВозвратОтКомиссионера Тогда
КонецЕсли;
ИначеЕсли ДанныеЗаполнения.Свойство("Партнер") Тогда
Партнер = ДанныеЗаполнения.Партнер;
ПартнерыИКонтрагенты.ЗаполнитьКонтрагентаПартнераПоУмолчанию(Партнер, Контрагент);
Если ПолучитьФункциональнуюОпцию("ИспользоватьСоглашенияСКлиентами") Тогда
ЗаполнитьУсловияПродажПоУмолчанию();
КонецЕсли;
КонецЕсли;
КонецПроцедуры
Процедура ЗаполнитьДокументНаОснованииРеализацииТоваровИУслуг(Знач ДокументОснование, ПараметрыОформления = Неопределено)
ВводитьНаОснованииНепроведенного = Ложь;
Если Не ПараметрыОформления = Неопределено
И ТипЗнч(ПараметрыОформления) = Тип("Структура") Тогда
ПараметрыОформления.Свойство("ВводитьНаОснованииНепроведенного", ВводитьНаОснованииНепроведенного);
ВводитьНаОснованииНепроведенного = ?(ВводитьНаОснованииНепроведенного = Неопределено,
Ложь,
ВводитьНаОснованииНепроведенного);
КонецЕсли;
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ РАЗЛИЧНЫЕ
| ТаблицаТовары.ОбъектРасчетов КАК ОбъектРасчетов
|ПОМЕСТИТЬ ОбъектыРасчетов
|ИЗ
| Документ.РеализацияТоваровУслуг.Товары КАК ТаблицаТовары
|ГДЕ
| ТаблицаТовары.Ссылка = &ДокументОснование
|;
|
|
|ВЫБРАТЬ
| РеализацияТоваровУслуг.Ссылка КАК ДокументРеализации,
| РеализацияТоваровУслуг.Ссылка КАК Ссылка,
| РеализацияТоваровУслуг.Соглашение КАК Соглашение,
| РеализацияТоваровУслуг.Организация КАК Организация,
| РеализацияТоваровУслуг.Партнер КАК Партнер,
| РеализацияТоваровУслуг.Контрагент КАК Контрагент,
| РеализацияТоваровУслуг.КонтактноеЛицо КАК КонтактноеЛицо,
| РеализацияТоваровУслуг.Валюта КАК Валюта,
| РеализацияТоваровУслуг.ВалютаВзаиморасчетов КАК ВалютаВзаиморасчетов,
| РеализацияТоваровУслуг.Сделка КАК Сделка,
| РеализацияТоваровУслуг.Подразделение КАК Подразделение,
| РеализацияТоваровУслуг.Статус КАК СтатусДокумента,
| ВЫБОР
| КОГДА РеализацияТоваровУслуг.Склад.ЭтоГруппа
| И РеализацияТоваровУслуг.Склад.ВыборГруппы = ЗНАЧЕНИЕ(Перечисление.ВыборГруппыСкладов.РазрешитьВЗаказах)
| ТОГДА ЗНАЧЕНИЕ(Справочник.Склады.ПустаяСсылка)
| ИНАЧЕ РеализацияТоваровУслуг.Склад
| КОНЕЦ КАК Склад,
| РеализацияТоваровУслуг.ХозяйственнаяОперация КАК ХозяйственнаяОперацияРеализация,
| РеализацияТоваровУслуг.ЦенаВключаетНДС КАК ЦенаВключаетНДС,
| РеализацияТоваровУслуг.НалогообложениеНДС КАК НалогообложениеНДС,
| РеализацияТоваровУслуг.Договор КАК Договор,
| РеализацияТоваровУслуг.ВернутьМногооборотнуюТару КАК ВозвратПереданнойМногооборотнойТары,
| РеализацияТоваровУслуг.ТребуетсяЗалогЗаТару КАК ПредусмотренЗалогЗаТару,
| НЕ РеализацияТоваровУслуг.Проведен
| И НЕ &ВводитьНаОснованииНепроведенного КАК ЕстьОшибкиПроведен,
| ВЫБОР
| КОГДА РеализацияТоваровУслуг.Статус = ЗНАЧЕНИЕ(Перечисление.СтатусыРеализацийТоваровУслуг.Отгружено)
| ИЛИ РеализацияТоваровУслуг.ХозяйственнаяОперация = ЗНАЧЕНИЕ(Перечисление.ХозяйственныеОперации.РеализацияКлиентуРеглУчет)
| ТОГДА ЛОЖЬ
| ИНАЧЕ ИСТИНА
| КОНЕЦ КАК ЕстьОшибкиСтатус,
| РеализацияТоваровУслуг.НаправлениеДеятельности КАК НаправлениеДеятельности,
| РеализацияТоваровУслуг.ГруппаФинансовогоУчета КАК ГруппаФинансовогоУчета,
| РеализацияТоваровУслуг.ОплатаВВалюте КАК ОплатаВВалюте,
| РеализацияТоваровУслуг.КлиентКонтрагент КАК КлиентКонтрагент,
| РеализацияТоваровУслуг.КлиентПартнер КАК КлиентПартнер,
| РеализацияТоваровУслуг.КлиентДоговор КАК КлиентДоговор
|ИЗ
| Документ.РеализацияТоваровУслуг КАК РеализацияТоваровУслуг
|ГДЕ
| РеализацияТоваровУслуг.Ссылка = &ДокументОснование
|;
|
|
|ВЫБРАТЬ
| РасчетыСКлиентами.ОбъектРасчетов КАК ОбъектРасчетов,
| РасчетыСКлиентами.Валюта КАК ВалютаВзаиморасчетов,
| ЕСТЬNULL(РасчетыСКлиентами.СуммаОстаток, 0) КАК СуммаОстаток
|ИЗ
| РегистрНакопления.РасчетыСКлиентами.Остатки(
| ,
| ОбъектРасчетов В
| (ВЫБРАТЬ
| ОбъектыРасчетов.ОбъектРасчетов
| ИЗ
| ОбъектыРасчетов)) КАК РасчетыСКлиентами
|;
|
|
|ВЫБРАТЬ ПЕРВЫЕ 1
| КорректировкаРеализации.Ссылка КАК Ссылка
|ПОМЕСТИТЬ ДанныеПоследнейКорректировки
|ИЗ
| Документ.КорректировкаРеализации КАК КорректировкаРеализации
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.РеестрДокументов КАК РеестрДокументовСторноИсправление
| ПО КорректировкаРеализации.Ссылка = РеестрДокументовСторноИсправление.СторнируемыйДокумент
| И РеестрДокументовСторноИсправление.Проведен
| И НЕ РеестрДокументовСторноИсправление.ДополнительнаяЗапись
|ГДЕ
| КорректировкаРеализации.Проведен
| И РеестрДокументовСторноИсправление.Ссылка ЕСТЬ NULL
| И КорректировкаРеализации.ДокументОснование = &ДокументОснование
| И НЕ КорректировкаРеализации.ВидКорректировки В (ЗНАЧЕНИЕ(Перечисление.ХозяйственныеОперации.РеализацияПерепоставленногоТовара),
| ЗНАЧЕНИЕ(Перечисление.ХозяйственныеОперации.ВозвратНедопоставленногоТовара))
|
|УПОРЯДОЧИТЬ ПО
| КорректировкаРеализации.МоментВремени УБЫВ
|;
|
|
|ВЫБРАТЬ
| ЕСТЬNULL(АналитикаНаборов.КлючАналитики, ЗНАЧЕНИЕ(Справочник.КлючиАналитикиУчетаНаборов.ПустаяСсылка)) КАК АналитикаУчетаНаборов,
| ТаблицаТовары.НоменклатураНабора КАК НоменклатураНабора,
| ТаблицаТовары.ХарактеристикаНабора КАК ХарактеристикаНабора,
| АналитикаНоменклатуры.КлючАналитики КАК АналитикаУчетаНоменклатуры,
| ТаблицаТовары.Номенклатура КАК Номенклатура,
| СправочникНоменклатура.ТипНоменклатуры КАК ТипНоменклатуры,
| ТаблицаТовары.Характеристика КАК Характеристика,
| ТаблицаТовары.Назначение КАК Назначение,
| ТаблицаТовары.Серия КАК Серия,
| ТаблицаТовары.Упаковка КАК Упаковка,
| ТаблицаТовары.КоличествоУпаковок КАК КоличествоУпаковок,
| ТаблицаТовары.Количество КАК Количество,
| ТаблицаТовары.Сумма КАК Сумма,
| ТаблицаТовары.СтавкаНДС КАК СтавкаНДС,
| ТаблицаТовары.СуммаНДС КАК СуммаНДС,
| ТаблицаТовары.СуммаСНДС КАК СуммаСНДС,
| ТаблицаТовары.Склад КАК Склад
|ПОМЕСТИТЬ ТоварыДокументаПродажи
|ИЗ
| Документ.КорректировкаРеализации.Товары КАК ТаблицаТовары
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ ДанныеПоследнейКорректировки КАК ДанныеПоследнейКорректировки
| ПО ТаблицаТовары.Ссылка = ДанныеПоследнейКорректировки.Ссылка
|
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.АналитикаУчетаНаборов КАК АналитикаНаборов
| ПО ТаблицаТовары.НоменклатураНабора = АналитикаНаборов.НоменклатураНабора
| И ТаблицаТовары.ХарактеристикаНабора = АналитикаНаборов.ХарактеристикаНабора
|
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.АналитикаУчетаНоменклатуры КАК АналитикаНоменклатуры
| ПО ТаблицаТовары.Номенклатура = АналитикаНоменклатуры.Номенклатура
| И ТаблицаТовары.Характеристика = АналитикаНоменклатуры.Характеристика
| И ТаблицаТовары.Назначение = АналитикаНоменклатуры.Назначение
| И ТаблицаТовары.Серия = АналитикаНоменклатуры.Серия
| И ТаблицаТовары.Склад = АналитикаНоменклатуры.МестоХранения
|
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.Номенклатура КАК СправочникНоменклатура
| ПО ТаблицаТовары.Номенклатура = СправочникНоменклатура.Ссылка
|
|ОБЪЕДИНИТЬ ВСЕ
|
|ВЫБРАТЬ
| ТаблицаТовары.АналитикаУчетаНаборов,
| ТаблицаТовары.НоменклатураНабора,
| ТаблицаТовары.ХарактеристикаНабора,
| ТаблицаТовары.АналитикаУчетаНоменклатуры,
| ТаблицаТовары.Номенклатура,
| СправочникНоменклатура.ТипНоменклатуры,
| ТаблицаТовары.Характеристика,
| ТаблицаТовары.Назначение,
| ТаблицаТовары.Серия,
| ТаблицаТовары.Упаковка,
| ТаблицаТовары.КоличествоУпаковок,
| ТаблицаТовары.Количество,
| ТаблицаТовары.Сумма,
| ТаблицаТовары.СтавкаНДС,
| ТаблицаТовары.СуммаНДС,
| ТаблицаТовары.СуммаСНДС,
| ТаблицаТовары.Склад
|ИЗ
| Документ.РеализацияТоваровУслуг.Товары КАК ТаблицаТовары
| ЛЕВОЕ СОЕДИНЕНИЕ ДанныеПоследнейКорректировки КАК ДанныеПоследнейКорректировки
| ПО ИСТИНА
|
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.РеестрДокументов КАК РеестрДокументовСторноИсправление
| ПО ТаблицаТовары.Ссылка = РеестрДокументовСторноИсправление.СторнируемыйДокумент
| И РеестрДокументовСторноИсправление.Проведен
| И НЕ РеестрДокументовСторноИсправление.ДополнительнаяЗапись
|
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.Номенклатура КАК СправочникНоменклатура
| ПО ТаблицаТовары.Номенклатура = СправочникНоменклатура.Ссылка
|
|ГДЕ
| ТаблицаТовары.Ссылка = &ДокументОснование
| И ДанныеПоследнейКорректировки.Ссылка ЕСТЬ NULL
| И РеестрДокументовСторноИсправление.Ссылка ЕСТЬ NULL
|
|ИНДЕКСИРОВАТЬ ПО
| НоменклатураНабора,
| ХарактеристикаНабора
|;
|
|
|ВЫБРАТЬ
| ТоварыДокументаПродажи.АналитикаУчетаНаборов КАК АналитикаУчетаНаборов,
| ТоварыДокументаПродажи.НоменклатураНабора КАК НоменклатураНабора,
| ТоварыДокументаПродажи.ХарактеристикаНабора КАК ХарактеристикаНабора,
| ЕСТЬNULL(ВариантыКомплектацииНоменклатуры.СодержитУслуги, ЛОЖЬ) КАК НаборСодержитУслуги,
| ТоварыДокументаПродажи.АналитикаУчетаНоменклатуры КАК АналитикаУчетаНоменклатуры,
| ТоварыДокументаПродажи.Номенклатура КАК Номенклатура,
| ТоварыДокументаПродажи.ТипНоменклатуры КАК ТипНоменклатуры,
| ТоварыДокументаПродажи.Характеристика КАК Характеристика,
| ТоварыДокументаПродажи.Назначение КАК Назначение,
| ТоварыДокументаПродажи.Серия КАК Серия,
| ТоварыДокументаПродажи.Упаковка КАК Упаковка,
| СУММА(ТоварыДокументаПродажи.КоличествоУпаковок) КАК КоличествоУпаковок,
| СУММА(ТоварыДокументаПродажи.Количество) КАК Количество,
| СУММА(ТоварыДокументаПродажи.Сумма) КАК Сумма,
| ТоварыДокументаПродажи.СтавкаНДС КАК СтавкаНДС,
| СУММА(ТоварыДокументаПродажи.СуммаНДС) КАК СуммаНДС,
| СУММА(ТоварыДокументаПродажи.СуммаСНДС) КАК СуммаСНДС,
| ТоварыДокументаПродажи.Склад КАК Склад
|ПОМЕСТИТЬ ТоварыРеализации
|ИЗ
| ТоварыДокументаПродажи КАК ТоварыДокументаПродажи
| ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ВариантыКомплектацииНоменклатуры КАК ВариантыКомплектацииНоменклатуры
| ПО ВариантыКомплектацииНоменклатуры.Владелец = ТоварыДокументаПродажи.НоменклатураНабора
| И ВариантыКомплектацииНоменклатуры.Характеристика = ТоварыДокументаПродажи.ХарактеристикаНабора
| И ВариантыКомплектацииНоменклатуры.Основной
|
|СГРУППИРОВАТЬ ПО
| ТоварыДокументаПродажи.АналитикаУчетаНаборов,
| ТоварыДокументаПродажи.НоменклатураНабора,
| ТоварыДокументаПродажи.ХарактеристикаНабора,
| ЕСТЬNULL(ВариантыКомплектацииНоменклатуры.СодержитУслуги, ЛОЖЬ),
| ТоварыДокументаПродажи.АналитикаУчетаНоменклатуры,
| ТоварыДокументаПродажи.Номенклатура,
| ТоварыДокументаПродажи.ТипНоменклатуры,
| ТоварыДокументаПродажи.Характеристика,
| ТоварыДокументаПродажи.Назначение,
| ТоварыДокументаПродажи.Серия,
| ТоварыДокументаПродажи.Упаковка,
| ТоварыДокументаПродажи.СтавкаНДС,
| ТоварыДокументаПродажи.Склад
|
|ИНДЕКСИРОВАТЬ ПО
| АналитикаУчетаНаборов,
| АналитикаУчетаНоменклатуры,
| Упаковка
|;
|
|
|ВЫБРАТЬ
| ЕСТЬNULL(КлючиАналитикиНаборов.Ссылка, ЗНАЧЕНИЕ(Справочник.КлючиАналитикиУчетаНаборов.ПустаяСсылка)) КАК АналитикаУчетаНаборов,
| ЕСТЬNULL(КлючиАналитикиНаборов.НоменклатураНабора, ЗНАЧЕНИЕ(Справочник.Номенклатура.ПустаяСсылка)) КАК НоменклатураНабора,
| ЕСТЬNULL(КлючиАналитикиНаборов.ХарактеристикаНабора, ЗНАЧЕНИЕ(Справочник.ХарактеристикиНоменклатуры.ПустаяСсылка)) КАК ХарактеристикаНабора,
| ТоварыВозвратов.АналитикаУчетаНоменклатурыОтгрузки КАК АналитикаУчетаНоменклатуры,
| КлючиАналитики.Номенклатура КАК Номенклатура,
| СправочникНоменклатура.ТипНоменклатуры КАК ТипНоменклатуры,
| КлючиАналитики.Характеристика КАК Характеристика,
| КлючиАналитики.Назначение КАК Назначение,
| КлючиАналитики.Серия КАК Серия,
| ТоварыВозвратов.Упаковка КАК Упаковка,
| СУММА(ТоварыВозвратов.КоличествоУпаковок) КАК КоличествоУпаковок,
| СУММА(ТоварыВозвратов.Количество) КАК Количество,
| СУММА(ТоварыВозвратов.СуммаСНДС - ТоварыВозвратов.СуммаНДС) КАК Сумма,
| ТоварыВозвратов.СтавкаНДС КАК СтавкаНДС,
| СУММА(ТоварыВозвратов.СуммаНДС) КАК СуммаНДС,
| СУММА(ТоварыВозвратов.СуммаСНДС) КАК СуммаСНДС,
| КлючиАналитики.МестоХранения КАК Склад
|ПОМЕСТИТЬ ТоварыПредыдущихВозвратов
|ИЗ
| Документ.ВозвратТоваровОтКлиента.ВидыЗапасов КАК ТоварыВозвратов
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.РеестрДокументов КАК РеестрДокументовСторноИсправление
| ПО ТоварыВозвратов.Ссылка = РеестрДокументовСторноИсправление.СторнируемыйДокумент
| И РеестрДокументовСторноИсправление.Проведен
| И НЕ РеестрДокументовСторноИсправление.ДополнительнаяЗапись
|
| ЛЕВОЕ СОЕДИНЕНИЕ Справочник.КлючиАналитикиУчетаНаборов КАК КлючиАналитикиНаборов
| ПО ТоварыВозвратов.АналитикаУчетаНаборов = КлючиАналитикиНаборов.Ссылка
|
| ЛЕВОЕ СОЕДИНЕНИЕ Справочник.КлючиАналитикиУчетаНоменклатуры КАК КлючиАналитики
| ПО ТоварыВозвратов.АналитикаУчетаНоменклатурыОтгрузки = КлючиАналитики.Ссылка
|
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.Номенклатура КАК СправочникНоменклатура
| ПО КлючиАналитики.Номенклатура = СправочникНоменклатура.Ссылка
|
|ГДЕ
| ТоварыВозвратов.Ссылка.Проведен
| И РеестрДокументовСторноИсправление.Ссылка ЕСТЬ NULL
| И ТоварыВозвратов.ДокументРеализации = &ДокументОснование
|
|СГРУППИРОВАТЬ ПО
| ЕСТЬNULL(КлючиАналитикиНаборов.Ссылка, ЗНАЧЕНИЕ(Справочник.КлючиАналитикиУчетаНаборов.ПустаяСсылка)),
| ЕСТЬNULL(КлючиАналитикиНаборов.НоменклатураНабора, ЗНАЧЕНИЕ(Справочник.Номенклатура.ПустаяСсылка)),
| ЕСТЬNULL(КлючиАналитикиНаборов.ХарактеристикаНабора, ЗНАЧЕНИЕ(Справочник.ХарактеристикиНоменклатуры.ПустаяСсылка)),
| ТоварыВозвратов.АналитикаУчетаНоменклатурыОтгрузки,
| КлючиАналитики.Номенклатура,
| СправочникНоменклатура.ТипНоменклатуры,
| КлючиАналитики.Характеристика,
| КлючиАналитики.Назначение,
| КлючиАналитики.Серия,
| ТоварыВозвратов.Упаковка,
| ТоварыВозвратов.СтавкаНДС,
| КлючиАналитики.МестоХранения
|
|ИНДЕКСИРОВАТЬ ПО
| АналитикаУчетаНаборов,
| АналитикаУчетаНоменклатуры,
| Упаковка
|;
|
|
|ВЫБРАТЬ
| ЕСТЬNULL(ТоварыРеализации.АналитикаУчетаНаборов, ТоварыПредыдущихВозвратов.АналитикаУчетаНаборов) КАК АналитикаУчетаНаборов,
| ЕСТЬNULL(ТоварыРеализации.НоменклатураНабора, ТоварыПредыдущихВозвратов.НоменклатураНабора) КАК НоменклатураНабора,
| ЕСТЬNULL(ТоварыРеализации.НоменклатураНабора.Наименование, ТоварыПредыдущихВозвратов.НоменклатураНабора.Наименование) КАК НоменклатураНабораПредставление,
| ЕСТЬNULL(ТоварыРеализации.ХарактеристикаНабора, ТоварыПредыдущихВозвратов.ХарактеристикаНабора) КАК ХарактеристикаНабора,
| ЕСТЬNULL(ТоварыРеализации.ХарактеристикаНабора.Наименование, ТоварыПредыдущихВозвратов.ХарактеристикаНабора.Наименование) КАК ХарактеристикаНабораПредставление,
| ЕСТЬNULL(ТоварыРеализации.НаборСодержитУслуги, ЛОЖЬ) КАК НаборСодержитУслуги,
| ЕСТЬNULL(ТоварыРеализации.Номенклатура, ТоварыПредыдущихВозвратов.Номенклатура) КАК Номенклатура,
| ЕСТЬNULL(ТоварыРеализации.Номенклатура.Наименование, ТоварыПредыдущихВозвратов.Номенклатура.Наименование) КАК НоменклатураПредставление,
| ЕСТЬNULL(ТоварыРеализации.АналитикаУчетаНоменклатуры, ТоварыПредыдущихВозвратов.АналитикаУчетаНоменклатуры) КАК АналитикаУчетаНоменклатуры,
| ЕСТЬNULL(ТоварыРеализации.ТипНоменклатуры, ТоварыПредыдущихВозвратов.ТипНоменклатуры) КАК ТипНоменклатуры,
| ЕСТЬNULL(ТоварыРеализации.Характеристика, ТоварыПредыдущихВозвратов.Характеристика) КАК Характеристика,
| ЕСТЬNULL(ТоварыРеализации.Характеристика.Наименование, ТоварыПредыдущихВозвратов.Характеристика.Наименование) КАК ХарактеристикаПредставление,
| ЕСТЬNULL(ТоварыРеализации.Назначение, ТоварыПредыдущихВозвратов.Назначение) КАК Назначение,
| ЕСТЬNULL(ТоварыРеализации.Серия, ТоварыПредыдущихВозвратов.Серия) КАК Серия,
| ЕСТЬNULL(ТоварыРеализации.Серия.Наименование, ТоварыПредыдущихВозвратов.Серия.Наименование) КАК СерияПредставление,
| ЕСТЬNULL(ТоварыРеализации.Количество, 0) - ЕСТЬNULL(ТоварыПредыдущихВозвратов.Количество, 0) КАК Количество,
| 0 КАК КоличествоУпаковок,
| ЕСТЬNULL(ТоварыРеализации.Упаковка, ТоварыПредыдущихВозвратов.Упаковка) КАК Упаковка,
| ЕСТЬNULL(ТоварыРеализации.Упаковка.Наименование, ТоварыПредыдущихВозвратов.Упаковка.Наименование) КАК УпаковкаПредставление,
| ЕСТЬNULL(ТоварыРеализации.СтавкаНДС, ТоварыПредыдущихВозвратов.СтавкаНДС) КАК СтавкаНДС,
| ЕСТЬNULL(ТоварыРеализации.Сумма, 0) - ЕСТЬNULL(ТоварыПредыдущихВозвратов.Сумма, 0) КАК Сумма,
| ЕСТЬNULL(ТоварыРеализации.СуммаНДС, 0) - ЕСТЬNULL(ТоварыПредыдущихВозвратов.СуммаНДС, 0) КАК СуммаНДС,
| ЕСТЬNULL(ТоварыРеализации.СуммаСНДС, 0) - ЕСТЬNULL(ТоварыПредыдущихВозвратов.СуммаСНДС, 0) КАК СуммаСНДС,
| &ДокументОснование КАК ДокументРеализации,
| ЕСТЬNULL(ТоварыРеализации.Склад, ТоварыПредыдущихВозвратов.Склад) КАК Склад
|ИЗ
| ТоварыРеализации КАК ТоварыРеализации
| ПОЛНОЕ СОЕДИНЕНИЕ ТоварыПредыдущихВозвратов КАК ТоварыПредыдущихВозвратов
| ПО ТоварыРеализации.АналитикаУчетаНаборов = ТоварыПредыдущихВозвратов.АналитикаУчетаНаборов
| И ТоварыРеализации.АналитикаУчетаНоменклатуры = ТоварыПредыдущихВозвратов.АналитикаУчетаНоменклатуры
| И ТоварыРеализации.Упаковка = ТоварыПредыдущихВозвратов.Упаковка
|
|УПОРЯДОЧИТЬ ПО
| НоменклатураНабораПредставление,
| ХарактеристикаНабораПредставление,
| НоменклатураПредставление,
| ХарактеристикаПредставление,
| СерияПредставление,
| УпаковкаПредставление
|;
|
|
|ВЫБРАТЬ
| ПереданнаяВозвратнаяТараОстатки.Номенклатура КАК Номенклатура,
| ПереданнаяВозвратнаяТараОстатки.Характеристика КАК Характеристика,
| ПереданнаяВозвратнаяТараОстатки.Партнер КАК Партнер,
| ПереданнаяВозвратнаяТараОстатки.ДокументПередачи КАК ДокументПередачи,
| ПереданнаяВозвратнаяТараОстатки.КоличествоОстаток КАК Количество,
| ПереданнаяВозвратнаяТараОстатки.СуммаОстаток КАК Сумма
|ПОМЕСТИТЬ втПереданнаяВозвратнаяТара
|ИЗ
| РегистрНакопления.ПереданнаяВозвратнаяТара.Остатки(, ДокументПередачи = &ДокументОснование) КАК ПереданнаяВозвратнаяТараОстатки
|;
|
|
|ВЫБРАТЬ
| втПереданнаяВозвратнаяТара.Номенклатура КАК Номенклатура,
| втПереданнаяВозвратнаяТара.Характеристика КАК Характеристика,
| втПереданнаяВозвратнаяТара.ДокументПередачи КАК ДокументРеализации,
| СУММА(втПереданнаяВозвратнаяТара.Количество) КАК Количество,
| СУММА(втПереданнаяВозвратнаяТара.Количество) КАК КоличествоУпаковок,
| СУММА(втПереданнаяВозвратнаяТара.Сумма) КАК Сумма,
| СУММА(втПереданнаяВозвратнаяТара.Сумма) КАК СуммаСНДС,
| ВЫБОР
| КОГДА СУММА(втПереданнаяВозвратнаяТара.Количество) = 0
| ТОГДА СУММА(втПереданнаяВозвратнаяТара.Сумма)
| ИНАЧЕ СУММА(втПереданнаяВозвратнаяТара.Сумма) / СУММА(втПереданнаяВозвратнаяТара.Количество)
| КОНЕЦ КАК Цена,
| ЗНАЧЕНИЕ(Справочник.СтавкиНДС.БезНДС) КАК СтавкаНДС
|ИЗ
| втПереданнаяВозвратнаяТара КАК втПереданнаяВозвратнаяТара
|
|СГРУППИРОВАТЬ ПО
| втПереданнаяВозвратнаяТара.Номенклатура,
| втПереданнаяВозвратнаяТара.Характеристика,
| втПереданнаяВозвратнаяТара.ДокументПередачи
|
|ИМЕЮЩИЕ
| СУММА(втПереданнаяВозвратнаяТара.Количество) > 0
|
|УПОРЯДОЧИТЬ ПО
| Номенклатура,
| Характеристика,
| ДокументРеализации";
Запрос.УстановитьПараметр("ДокументОснование", ДокументОснование);
Запрос.УстановитьПараметр("ВводитьНаОснованииНепроведенного", ВводитьНаОснованииНепроведенного);
УстановитьПривилегированныйРежим(Истина);
ПакетЗапросов = Запрос.ВыполнитьПакет();
УстановитьПривилегированныйРежим(Ложь);
ВыборкаШапка = ПакетЗапросов[1].Выбрать();
ВыборкаШапка.Следующий();
ВыборкаРасчетыПоОснованию = ПакетЗапросов[2].Выбрать();
МассивДопустимыхСтатусов = Новый Массив;
МассивДопустимыхСтатусов.Добавить(Перечисления.СтатусыРеализацийТоваровУслуг.Отгружено);
ОбщегоНазначенияУТ.ПроверитьВозможностьВводаНаОсновании(
ВыборкаШапка.Ссылка,
ВыборкаШапка.СтатусДокумента,
ВыборкаШапка.ЕстьОшибкиПроведен,
ВыборкаШапка.ЕстьОшибкиСтатус,
МассивДопустимыхСтатусов);
ЗаполнитьЗначенияСвойств(ЭтотОбъект, ВыборкаШапка);
ХозяйственнаяОперация = ПродажиСервер.ПолучитьХозяйственнуюОперациюВозвратаПоРеализации(ВыборкаШапка.ХозяйственнаяОперацияРеализация);
КлючиПоиска = "АналитикаУчетаНоменклатуры, АналитикаУчетаНаборов, СтавкаНДС";
ТаблицаТоваров = ПакетЗапросов[7].Выгрузить();
ТаблицаТоваров.Индексы.Добавить(КлючиПоиска);
СтруктураПоиска = Новый Структура(КлючиПоиска);
Для Каждого Строка Из ТаблицаТоваров Цикл
Если Строка.Количество < 0 Тогда
ЗаполнитьЗначенияСвойств(СтруктураПоиска, Строка);
СтрокиПродажи = ТаблицаТоваров.НайтиСтроки(СтруктураПоиска);
Для Каждого СтрокаПродажи Из СтрокиПродажи Цикл
Если СтрокаПродажи.Количество < 0 Тогда
Продолжить;
КонецЕсли;
Строка.Количество = -Строка.Количество;
Строка.Сумма = -Строка.Сумма;
Строка.СуммаНДС = -Строка.СуммаНДС;
Строка.СуммаСНДС = -Строка.СуммаСНДС;
Если Строка.Количество > СтрокаПродажи.Количество Тогда
КоличествоНаВычет = СтрокаПродажи.Количество;
СуммаНаВычет = СтрокаПродажи.Сумма;
СуммаНДСНаВычет = СтрокаПродажи.СуммаНДС;
СуммаСНДСНаВычет = СтрокаПродажи.СуммаСНДС;
Иначе
КоличествоНаВычет = Строка.Количество;
СуммаНаВычет = Строка.Сумма;
СуммаНДСНаВычет = Строка.СуммаНДС;
СуммаСНДСНаВычет = Строка.СуммаСНДС;
КонецЕсли;
СтрокаПродажи.Количество = СтрокаПродажи.Количество - КоличествоНаВычет;
Строка.Количество = Строка.Количество - КоличествоНаВычет;
СтрокаПродажи.Сумма = СтрокаПродажи.Сумма - СуммаНаВычет;
Строка.Сумма = Строка.Сумма - СуммаНаВычет;
СтрокаПродажи.СуммаНДС = СтрокаПродажи.СуммаНДС - СуммаНДСНаВычет;
Строка.СуммаНДС = Строка.СуммаНДС - СуммаНДСНаВычет;
СтрокаПродажи.СуммаСНДС = СтрокаПродажи.СуммаСНДС - СуммаСНДСНаВычет;
Строка.СуммаСНДС = Строка.СуммаСНДС - СуммаСНДСНаВычет;
КонецЦикла;
КонецЕсли;
КонецЦикла;
МассивУдаляемыхСтрок = Новый Массив;
Для Каждого Строка Из ТаблицаТоваров Цикл
Если Строка.Количество <= 0 Тогда
МассивУдаляемыхСтрок.Добавить(Строка);
КонецЕсли;
КонецЦикла;
Для Каждого Строка Из МассивУдаляемыхСтрок Цикл
ТаблицаТоваров.Удалить(Строка);
КонецЦикла;
ТаблицаТоваров.Колонки.Удалить("АналитикаУчетаНаборов");
ТаблицаТоваров.Колонки.Удалить("АналитикаУчетаНоменклатуры");
СтруктураДействий = Новый Структура;
СтруктураДействий.Вставить("ПересчитатьКоличествоУпаковок");
ПакетнаяОбработкаТабличнойЧастиСервер.ОбработатьТЧ(ТаблицаТоваров, СтруктураДействий);
Для Каждого ТекСтрока Из ТаблицаТоваров Цикл
Если ТекСтрока.ТипНоменклатуры = Перечисления.ТипыНоменклатуры.Товар
И Не ЗначениеЗаполнено(ТекСтрока.НоменклатураНабора)
Или (ТекСтрока.ТипНоменклатуры = Перечисления.ТипыНоменклатуры.МногооборотнаяТара
И Не ВыборкаШапка.ВозвратПереданнойМногооборотнойТары)
И Не ЗначениеЗаполнено(ТекСтрока.НоменклатураНабора)
Или ЗначениеЗаполнено(ТекСтрока.НоменклатураНабора)
И Не ТекСтрока.НаборСодержитУслуги Тогда
НоваяСтрока = Товары.Добавить();
ЗаполнитьЗначенияСвойств(НоваяСтрока, ТекСтрока);
НоваяСтрока.СпособОпределенияСебестоимости =
?(ЗначениеЗаполнено(НоваяСтрока.ДокументРеализации),
Перечисления.СпособыОпределенияСебестоимостиВозврата.ИзДокументаПродажи,
Перечисления.СпособыОпределенияСебестоимостиВозврата.ИзТекущегоДокумента);
Ценообразование.ПересчитатьСуммыВСтрокеПоСуммеСНДС(
НоваяСтрока,
ВыборкаШапка.ЦенаВключаетНДС,
Ложь,
Ложь,
Истина);
КонецЕсли;
КонецЦикла;
ТаблицаТары = ПакетЗапросов[9].Выгрузить();
Для Каждого ТекущаяСтрока Из ТаблицаТары Цикл
НоваяСтрока = Товары.Добавить();
ЗаполнитьЗначенияСвойств(НоваяСтрока,ТекущаяСтрока);
НоваяСтрока.СпособОпределенияСебестоимости =
?(ЗначениеЗаполнено(НоваяСтрока.ДокументРеализации),
Перечисления.СпособыОпределенияСебестоимостиВозврата.ИзДокументаПродажи,
Перечисления.СпособыОпределенияСебестоимостиВозврата.ИзТекущегоДокумента);
Ценообразование.ПересчитатьСуммыВСтрокеПоСуммеСНДС(НоваяСтрока, ВыборкаШапка.ЦенаВключаетНДС, Ложь, Ложь, Истина);
КонецЦикла;
ЗаполнитьНомераГТДПоРаспоряжениям(ВыборкаШапка.ЦенаВключаетНДС);
ЗаполнитьВзаиморасчеты(ВыборкаРасчетыПоОснованию);
КонецПроцедуры
Процедура ЗаполнитьДокументНаОснованииЗаявкиНаВозвратТоваровОтКлиента(Знач ДокументОснование)
УстановитьПривилегированныйРежим(Истина);
Запрос = Новый Запрос;
Запрос.МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц();
Запрос.УстановитьПараметр("ДокументОснование", ДокументОснование);
Запрос.УстановитьПараметр("ПустаяСерия", Справочники.СерииНоменклатуры.ПустаяСсылка());
Запрос.Текст =
"ВЫБРАТЬ
| ЗаявкаНаВозвратТоваровОтКлиента.Ссылка КАК ЗаявкаНаВозвратТоваровОтКлиента,
| ЗаявкаНаВозвратТоваровОтКлиента.Партнер КАК Партнер,
| ЗаявкаНаВозвратТоваровОтКлиента.ДокументРеализации КАК ДокументРеализации,
| ЗаявкаНаВозвратТоваровОтКлиента.ЧекККМ КАК ЧекККМ,
| ЗаявкаНаВозвратТоваровОтКлиента.Контрагент КАК Контрагент,
| ЗаявкаНаВозвратТоваровОтКлиента.КонтактноеЛицо КАК КонтактноеЛицо,
| ЗаявкаНаВозвратТоваровОтКлиента.Организация КАК Организация,
| ЗаявкаНаВозвратТоваровОтКлиента.Соглашение КАК Соглашение,
| ЗаявкаНаВозвратТоваровОтКлиента.Валюта КАК Валюта,
| ЗаявкаНаВозвратТоваровОтКлиента.Склад КАК Склад,
| ЗаявкаНаВозвратТоваровОтКлиента.Подразделение КАК Подразделение,
| ЗаявкаНаВозвратТоваровОтКлиента.ВозвратПорчи КАК ВозвратПорчи,
| ЗаявкаНаВозвратТоваровОтКлиента.Сделка КАК Сделка,
| ЗаявкаНаВозвратТоваровОтКлиента.ЦенаВключаетНДС КАК ЦенаВключаетНДС,
| ЗаявкаНаВозвратТоваровОтКлиента.НалогообложениеНДС КАК НалогообложениеНДС,
| ЗаявкаНаВозвратТоваровОтКлиента.ХозяйственнаяОперация КАК ХозяйственнаяОперация,
| ЗаявкаНаВозвратТоваровОтКлиента.Статус КАК СтатусДокумента,
| ЗаявкаНаВозвратТоваровОтКлиента.Договор КАК Договор,
| ЗаявкаНаВозвратТоваровОтКлиента.ВариантПриемкиТоваров КАК ВариантПриемкиТоваров,
|
| ВЫБОР КОГДА ЗаявкаНаВозвратТоваровОтКлиента.СпособКомпенсации = ЗНАЧЕНИЕ(Перечисление.СпособыКомпенсацииВозвратовТоваров.ЗаменитьТовары) ТОГДА
| ЗНАЧЕНИЕ(Перечисление.СпособыКомпенсацииВозвратовТоваров.ВернутьДенежныеСредства)
| ИНАЧЕ
| ЗаявкаНаВозвратТоваровОтКлиента.СпособКомпенсации
| КОНЕЦ КАК СпособКомпенсации,
|
| НЕ ЗаявкаНаВозвратТоваровОтКлиента.Проведен КАК ЕстьОшибкиПроведен,
| ЗаявкаНаВозвратТоваровОтКлиента.ВернутьМногооборотнуюТару КАК ВозвратПереданнойМногооборотнойТары,
| ЗаявкаНаВозвратТоваровОтКлиента.ТребуетсяЗалогЗаТару КАК ПредусмотренЗалогЗаТару,
| ЗаявкаНаВозвратТоваровОтКлиента.НаправлениеДеятельности КАК НаправлениеДеятельности,
| ЗаявкаНаВозвратТоваровОтКлиента.ОплатаВВалюте КАК ОплатаВВалюте,
| ЕСТЬNULL(ЗаявкаНаВозвратТоваровОтКлиента.Договор.КомиссионныеПродажи25, ЛОЖЬ) КАК ДоговорКомиссионныеПродажи25,
| ЗаявкаНаВозвратТоваровОтКлиента.ЭтоЗаказКакСчет КАК ЭтоЗаказКакСчет,
|
| ЗаявкаНаВозвратТоваровОтКлиента.ВозвращаемыеСерии.(
| Номенклатура КАК Номенклатура,
| Характеристика КАК Характеристика,
| Серия КАК Серия,
| Назначение КАК Назначение,
| Количество КАК Количество,
| ДокументРеализации КАК ДокументРеализации,
| Склад КАК Склад
| ) КАК Серии
|
|ИЗ
| Документ.ЗаявкаНаВозвратТоваровОтКлиента КАК ЗаявкаНаВозвратТоваровОтКлиента
|ГДЕ
| ЗаявкаНаВозвратТоваровОтКлиента.Ссылка = &ДокументОснование";
ВыборкаШапка = Запрос.Выполнить().Выбрать();
ВыборкаШапка.Следующий();
Если ВыборкаШапка.ДоговорКомиссионныеПродажи25 Тогда
ТекстОшибки = НСтр("ru = 'Невозможно оформить документ ""%1"" на основании распоряжения %2 с договором комиссии версии %3. Для оформления возврата воспользуйтесь документом ""%4""'");
ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстОшибки,
Метаданные.Документы.ВозвратТоваровОтКлиента.Синоним,
ДокументОснование,
КомиссионнаяТорговляСервер.ПостфиксСхемыКомиссии25(),
Метаданные.Документы.ПоступлениеТоваровОтХранителя.Синоним);
ВызватьИсключение ТекстОшибки;
КонецЕсли;
ОбщегоНазначенияУТ.ПроверитьВозможностьВводаНаОснованииПоОперации(ДокументОснование, "ВозвратТоваровОтКлиента",
ВыборкаШапка.ХозяйственнаяОперация);
Документы.ЗаявкаНаВозвратТоваровОтКлиента.ПроверитьВозможностьВводаНаОсновании(
ВыборкаШапка.ЗаявкаНаВозвратТоваровОтКлиента,
ВыборкаШапка.СтатусДокумента,
ВыборкаШапка.ЕстьОшибкиПроведен,
Истина);
Запрос.УстановитьПараметр("ЭтоЗаказКакСчет", ВыборкаШапка.ЭтоЗаказКакСчет);
ЗаполнитьЗначенияСвойств(ЭтотОбъект, ВыборкаШапка);
Серии.Загрузить(ВыборкаШапка.Серии.Выгрузить());
ПараметрыФормированияТаблицы = РегистрыНакопления.РаспоряженияНаОтгрузкуИВозврат.НовыйПараметрыФормированияРазвернутойТаблицы();
ПараметрыФормированияТаблицы.ТекстУсловия =
"Распоряжение = &ДокументОснование";
ПараметрыФормированияТаблицы.Группировка = "Номенклатура, Характеристика, КодСтроки";
ПараметрыФормированияТаблицы.Показатели = "КОформлениюПоВозвратам, ОформленоПоВозвратам";
ПараметрыФормированияТаблицы.Ресурсы = "Количество";
ПараметрыФормированияТаблицы.Индексы = ПараметрыФормированияТаблицы.Группировка;
ПараметрыФормированияТаблицы.ИмяВременнойТаблицы = "ВТ_ЗаявкиНаВозвратОборотыРазвернутая";
ВТ_ЗаявкиНаВозвратОборотыРазвернутая =
РегистрыНакопления.РаспоряженияНаОтгрузкуИВозврат.ТекстЗапросаРазвернутаяТаблица(
ПараметрыФормированияТаблицы);
ТекстЗапроса = ВТ_ЗаявкиНаВозвратОборотыРазвернутая +
ОбщегоНазначения.РазделительПакетаЗапросов() +
"ВЫБРАТЬ
| ЗаявкаТовары.НомерСтроки КАК НомерСтроки,
| ЗаявкаТовары.НоменклатураНабора КАК НоменклатураНабора,
| ЗаявкаТовары.ХарактеристикаНабора КАК ХарактеристикаНабора,
| ЗаявкаТовары.Номенклатура КАК Номенклатура,
| ЗаявкаТовары.Характеристика КАК Характеристика,
| ЗаявкаТовары.Серия КАК Серия,
| ЗаявкаТовары.Назначение КАК Назначение,
| ЗаявкаТовары.Количество КАК КоличествоВЗаявке,
| ЗаявкаТовары.Порча КАК Порча,
| ЗаявкаТовары.НоменклатураОприходование КАК НоменклатураОприходование,
| ЗаявкаТовары.ХарактеристикаОприходование КАК ХарактеристикаОприходование,
| ЗаявкаТовары.КодСтроки КАК КодСтроки,
| ВЫБОР
| КОГДА ЗаявкаТовары.Упаковка = ЗНАЧЕНИЕ(Справочник.УпаковкиЕдиницыИзмерения.ПустаяСсылка)
| ТОГДА 1
| ИНАЧЕ &ТекстЗапросаКоэффициентУпаковки
| КОНЕЦ КАК Коэффициент,
| ЗаявкаТовары.Упаковка КАК Упаковка,
| ЗаявкаТовары.Цена КАК Цена,
| ЗаявкаТовары.СтавкаНДС КАК СтавкаНДС,
| (ЗаявкиНаВозвратТоваровОтКлиентов.КОформлениюПоВозвратамКоличествоОборот -
| ЗаявкиНаВозвратТоваровОтКлиентов.ОформленоПоВозвратамКоличествоОборот) КАК Количество,
| ЗаявкаТовары.КоличествоУпаковок КАК КоличествоУпаковок,
| ЗаявкаТовары.Сумма КАК Сумма,
| ЗаявкаТовары.Склад КАК Склад,
| ЗаявкаТовары.ДокументРеализации КАК ДокументРеализации
|ПОМЕСТИТЬ ЗаявкаТовары
|ИЗ
| ВТ_ЗаявкиНаВозвратОборотыРазвернутая КАК ЗаявкиНаВозвратТоваровОтКлиентов
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ Документ.ЗаявкаНаВозвратТоваровОтКлиента.ВозвращаемыеТовары КАК ЗаявкаТовары
| ПО (ЗаявкаТовары.Ссылка = &ДокументОснование)
| И ЗаявкиНаВозвратТоваровОтКлиентов.КодСтроки = ЗаявкаТовары.КодСтроки
| И (ЗаявкиНаВозвратТоваровОтКлиентов.Номенклатура = ВЫБОР
| КОГДА ЗаявкаТовары.Порча
| И ЗаявкаТовары.Ссылка.ХозяйственнаяОперация <> ЗНАЧЕНИЕ(Перечисление.ХозяйственныеОперации.ВозвратОтКомиссионера)
| ТОГДА ЗаявкаТовары.НоменклатураОприходование
| ИНАЧЕ ЗаявкаТовары.Номенклатура
| КОНЕЦ)
| И (ЗаявкиНаВозвратТоваровОтКлиентов.Характеристика = ВЫБОР
| КОГДА ЗаявкаТовары.Порча
| И ЗаявкаТовары.Ссылка.ХозяйственнаяОперация <> ЗНАЧЕНИЕ(Перечисление.ХозяйственныеОперации.ВозвратОтКомиссионера)
| ТОГДА ЗаявкаТовары.ХарактеристикаОприходование
| ИНАЧЕ ЗаявкаТовары.Характеристика
| КОНЕЦ)
|ГДЕ
| (ЗаявкиНаВозвратТоваровОтКлиентов.КОформлениюПоВозвратамКоличествоОборот -
| ЗаявкиНаВозвратТоваровОтКлиентов.ОформленоПоВозвратамКоличествоОборот) > 0
| И НЕ &ЭтоЗаказКакСчет
|
|ОБЪЕДИНИТЬ ВСЕ
|
|ВЫБРАТЬ
| ЗаявкаТовары.НомерСтроки КАК НомерСтроки,
| ЗаявкаТовары.НоменклатураНабора КАК НоменклатураНабора,
| ЗаявкаТовары.ХарактеристикаНабора КАК ХарактеристикаНабора,
| ЗаявкаТовары.Номенклатура КАК Номенклатура,
| ЗаявкаТовары.Характеристика КАК Характеристика,
| ЗаявкаТовары.Серия КАК Серия,
| ЗаявкаТовары.Назначение КАК Назначение,
| ЗаявкаТовары.Количество КАК КоличествоВЗаявке,
| ЗаявкаТовары.Порча КАК Порча,
| ЗаявкаТовары.НоменклатураОприходование КАК НоменклатураОприходование,
| ЗаявкаТовары.ХарактеристикаОприходование КАК ХарактеристикаОприходование,
| ЗаявкаТовары.КодСтроки КАК КодСтроки,
| ВЫБОР
| КОГДА ЗаявкаТовары.Упаковка = ЗНАЧЕНИЕ(Справочник.УпаковкиЕдиницыИзмерения.ПустаяСсылка)
| ТОГДА 1
| ИНАЧЕ &ТекстЗапросаКоэффициентУпаковки
| КОНЕЦ КАК Коэффициент,
| ЗаявкаТовары.Упаковка КАК Упаковка,
| ЗаявкаТовары.Цена КАК Цена,
| ЗаявкаТовары.СтавкаНДС КАК СтавкаНДС,
| ЗаявкаТовары.Количество КАК Количество,
| ЗаявкаТовары.КоличествоУпаковок КАК КоличествоУпаковок,
| ЗаявкаТовары.Сумма КАК Сумма,
| ЗаявкаТовары.Склад КАК Склад,
| ЗаявкаТовары.ДокументРеализации КАК ДокументРеализации
|ИЗ
| Документ.ЗаявкаНаВозвратТоваровОтКлиента.ВозвращаемыеТовары КАК ЗаявкаТовары
|
|ГДЕ
| ЗаявкаТовары.Ссылка = &ДокументОснование
| И &ЭтоЗаказКакСчет
|;
|
|
|ВЫБРАТЬ
| ЗаявкаТовары.НомерСтроки КАК НомерСтроки,
| ЗаявкаТовары.НоменклатураНабора КАК НоменклатураНабора,
| ЗаявкаТовары.ХарактеристикаНабора КАК ХарактеристикаНабора,
| ЗаявкаТовары.Номенклатура КАК Номенклатура,
| ЗаявкаТовары.Характеристика КАК Характеристика,
| ЗаявкаТовары.Серия КАК Серия,
| ЗаявкаТовары.Назначение КАК Назначение,
| ЗаявкаТовары.КоличествоВЗаявке КАК КоличествоВЗаявке,
| ЗаявкаТовары.Порча КАК Порча,
| ЗаявкаТовары.НоменклатураОприходование КАК НоменклатураОприходование,
| ЗаявкаТовары.ХарактеристикаОприходование КАК ХарактеристикаОприходование,
| ЗаявкаТовары.КодСтроки КАК КодСтроки,
| ЗаявкаТовары.Коэффициент,
| ЗаявкаТовары.Упаковка КАК Упаковка,
| ЗаявкаТовары.Цена КАК Цена,
| ЗаявкаТовары.СтавкаНДС КАК СтавкаНДС,
| ЗаявкаТовары.Количество КАК Количество,
| ЗаявкаТовары.КоличествоУпаковок КАК КоличествоУпаковок,
| ЗаявкаТовары.Сумма КАК Сумма,
| ЗаявкаТовары.Склад КАК Склад,
| ЗаявкаТовары.ДокументРеализации КАК ДокументРеализации
|ИЗ
| ЗаявкаТовары КАК ЗаявкаТовары
|
|УПОРЯДОЧИТЬ ПО
| ЗаявкаТовары.НомерСтроки
|";
ТекстЗапроса = СтрЗаменить(ТекстЗапроса,
"&ТекстЗапросаКоэффициентУпаковки",
Справочники.УпаковкиЕдиницыИзмерения.ТекстЗапросаКоэффициентаУпаковки(
"ЗаявкаТовары.Упаковка",
"ЗаявкаТовары.Номенклатура"));
Запрос.Текст = ТекстЗапроса;
ВыборкаТовары = Запрос.Выполнить().Выбрать();
Пока ВыборкаТовары.Следующий() Цикл
СтрокаТаб = Товары.Добавить();
ЗаполнитьЗначенияСвойств(СтрокаТаб, ВыборкаТовары, "НоменклатураНабора, ХарактеристикаНабора,
|Номенклатура, Характеристика, Серия, Склад, Назначение, Упаковка, КодСтроки, Цена, СтавкаНДС, ДокументРеализации");
Если НЕ ЗначениеЗаполнено(СтрокаТаб.ДокументРеализации) Тогда
СтрокаТаб.ДокументРеализации = ДокументРеализации;
КонецЕсли;
СтрокаТаб.Количество = ВыборкаТовары.Количество;
СтрокаТаб.КоличествоУпаковок = ВыборкаТовары.Количество / ВыборкаТовары.Коэффициент;
Если ВыборкаТовары.КоличествоВЗаявке = СтрокаТаб.Количество Тогда
СтрокаТаб.Сумма = ВыборкаТовары.Сумма;
Иначе
СтрокаТаб.Сумма = СтрокаТаб.КоличествоУпаковок * СтрокаТаб.Цена;
КонецЕсли;
СтрокаТаб.СуммаНДС = ЦенообразованиеКлиентСервер.РассчитатьСуммуНДС(СтрокаТаб.Сумма, СтрокаТаб.СтавкаНДС, ЦенаВключаетНДС);
СтрокаТаб.СуммаСНДС = ?(ЦенаВключаетНДС, СтрокаТаб.Сумма, СтрокаТаб.Сумма+СтрокаТаб.СуммаНДС);
Если ВыборкаТовары.Порча
И ХозяйственнаяОперация <> Перечисления.ХозяйственныеОперации.ВозвратОтКомиссионера Тогда
ЗаполнитьЗначенияСвойств(СтрокаТаб, ВыборкаТовары, "Порча, НоменклатураОприходование, ХарактеристикаОприходование")
КонецЕсли;
СтрокаТаб.СпособОпределенияСебестоимости = ?(ЗначениеЗаполнено(СтрокаТаб.ДокументРеализации),
Перечисления.СпособыОпределенияСебестоимостиВозврата.ИзДокументаПродажи,
Перечисления.СпособыОпределенияСебестоимостиВозврата.ИзТекущегоДокумента);
КонецЦикла;
ЗаполнитьНомераГТДПоРаспоряжениям(ВыборкаШапка.ЦенаВключаетНДС);
Если Товары.Количество() = 0 Тогда
ТекстСообщения = НСтр("ru = 'Нет данных для заполнения по документу ""%Заявка%"" .'");
ТекстСообщения = СтрЗаменить(ТекстСообщения, "%Заявка%", ВыборкаШапка.ЗаявкаНаВозвратТоваровОтКлиента);
ОбщегоНазначения.СообщитьПользователю(ТекстСообщения, ЭтотОбъект, "ЗаявкаНаВозвратТоваровОтКлиента");
Иначе
ЗаполнитьВзаиморасчетыПоЗаявкамНаВозврат(ДокументОснование);
КонецЕсли;
УстановитьПривилегированныйРежим(Ложь);
КонецПроцедуры
Процедура ЗаполнитьДокументНаОснованииПереданнойТары(Знач РеквизитыЗаполнения)
ЗаполнитьЗначенияСвойств(ЭтотОбъект, РеквизитыЗаполнения.РеквизитыШапки);
ПартнерыИКонтрагенты.ЗаполнитьКонтрагентаПартнераПоУмолчанию(Партнер, Контрагент);
Если ПолучитьФункциональнуюОпцию("ИспользоватьСоглашенияСКлиентами") Тогда
Если Не ЗначениеЗаполнено(Соглашение) Тогда
ЗаполнитьУсловияПродажПоУмолчанию();
КонецЕсли;
Иначе
Если РеквизитыЗаполнения.РеквизитыШапки.ЦенаВключаетНДС = Неопределено Тогда
РеквизитыЦеныПоУмолчанию = Справочники.ВидыЦен.ВидЦеныИПризнакЦенаВключаетНДСПоУмолчанию(
Новый Структура("ИспользоватьПриПродаже", Истина),
Документы.ВозвратТоваровОтКлиента.ПустаяСсылка());
ЗаполнитьЗначенияСвойств(ЭтотОбъект, РеквизитыЦеныПоУмолчанию);
КонецЕсли;
КонецЕсли;
ВозвратПереданнойМногооборотнойТары = Истина;
ПредусмотренЗалогЗаТару = РеквизитыЗаполнения.РеквизитыШапки.ПредусмотренЗалогЗаТару;
Если ЭтоАдресВременногоХранилища(РеквизитыЗаполнения.АдресТарыВоВременномХранилище) Тогда
ПереданнаяТара = ПолучитьИзВременногоХранилища(РеквизитыЗаполнения.АдресТарыВоВременномХранилище);
Товары.Загрузить(ПереданнаяТара);
Для каждого ТекущаяСтрока Из Товары Цикл
ТекущаяСтрока.СуммаСНДС = ТекущаяСтрока.Сумма;
ТекущаяСтрока.КоличествоУпаковок = ТекущаяСтрока.Количество;
ТекущаяСтрока.СтавкаНДС = Справочники.СтавкиНДС.БезНДС;
ТекущаяСтрока.СпособОпределенияСебестоимости = ?(ЗначениеЗаполнено(ТекущаяСтрока.ДокументРеализации),
Перечисления.СпособыОпределенияСебестоимостиВозврата.ИзДокументаПродажи,
Перечисления.СпособыОпределенияСебестоимостиВозврата.ИзТекущегоДокумента);
Ценообразование.ПересчитатьСуммыВСтрокеПоСуммеСНДС(ТекущаяСтрока, ЦенаВключаетНДС, Ложь, Ложь, Истина);
КонецЦикла;
КонецЕсли;
ЗаполнитьНомераГТДПоРаспоряжениям(ЦенаВключаетНДС);
Если ХозяйственнаяОперация = Перечисления.ХозяйственныеОперации.ВозвратТоваровОтКлиента
ИЛИ ХозяйственнаяОперация = Перечисления.ХозяйственныеОперации.ВозвратОтРозничногоПокупателя Тогда
Запрос = Новый Запрос(
"ВЫБРАТЬ РАЗЛИЧНЫЕ
| ТаблицаТовары.ОбъектРасчетов КАК ОбъектРасчетов
|ПОМЕСТИТЬ ОбъектыРасчетов
|ИЗ
| Документ.РеализацияТоваровУслуг.Товары КАК ТаблицаТовары
|ГДЕ
| ТаблицаТовары.Ссылка В (&ДокументыОснования)
| И ТаблицаТовары.Ссылка.РеализацияПоЗаказам
| И ТаблицаТовары.ЗаказКлиента <> НЕОПРЕДЕЛЕНО
|;
|
|
|ВЫБРАТЬ
| РасчетыСКлиентами.ОбъектРасчетов КАК ОбъектРасчетов,
| РасчетыСКлиентами.Валюта КАК ВалютаВзаиморасчетов,
| ЕСТЬNULL(РасчетыСКлиентами.СуммаОстаток, 0) КАК СуммаОстаток
|ИЗ
| РегистрНакопления.РасчетыСКлиентами.Остатки(
| ,
| ОбъектРасчетов В
| (ВЫБРАТЬ
| ОбъектРасчетов
| ИЗ
| ОбъектыРасчетов)) КАК РасчетыСКлиентами
|;
|");
Запрос.УстановитьПараметр("ДокументыОснования", Товары.ВыгрузитьКолонку("ДокументРеализации"));
РезультатЗапроса = Запрос.Выполнить();
ВыборкаРасчетыПоОснованию = РезультатЗапроса.Выбрать();
СуммаКРаспределению = ПолучитьСуммуДокумента();
Пока СуммаКРаспределению > 0 И ВыборкаРасчетыПоОснованию.Следующий() Цикл
Если ВыборкаРасчетыПоОснованию.СуммаОстаток > 0 Тогда
НоваяСтрока = РасшифровкаПлатежа.Добавить();
НоваяСтрока.ВалютаВзаиморасчетов = ВыборкаРасчетыПоОснованию.ВалютаВзаиморасчетов;
НоваяСтрока.ОбъектРасчетов = ВыборкаРасчетыПоОснованию.ОбъектРасчетов;
Если СуммаКРаспределению > ВыборкаРасчетыПоОснованию.СуммаОстаток Тогда
НоваяСтрока.Сумма = ВыборкаРасчетыПоОснованию.СуммаОстаток;
Иначе
НоваяСтрока.Сумма = СуммаКРаспределению;
КонецЕсли;
СуммаКРаспределению = СуммаКРаспределению - НоваяСтрока.Сумма;
КонецЕсли;
КонецЦикла;
Если СуммаКРаспределению > 0 Тогда
НоваяСтрока = РасшифровкаПлатежа.Добавить();
НоваяСтрока.ВалютаВзаиморасчетов = Валюта;
НоваяСтрока.Сумма = СуммаКРаспределению;
КонецЕсли;
КонецЕсли;
КонецПроцедуры
Процедура ЗаполнитьДокументНаОснованииАктаПослеОтгрузки(Знач ДанныеЗаполнения)
УстановитьПривилегированныйРежим(Истина);
ТекстЗапроса = Документы.АктОРасхожденияхПослеОтгрузки.ТекстЗапросаПерепоставленныйТовар();
Запрос = Новый Запрос(ТекстЗапроса);
Запрос.УстановитьПараметр("ДокументОснование", ДанныеЗаполнения.ОснованиеАкта);
Запрос.УстановитьПараметр("АктОРасхождениях", ДанныеЗаполнения.АктОРасхождениях);
ПакетЗапросов = Запрос.ВыполнитьПакет();
ВыборкаШапка = ПакетЗапросов[1].Выбрать();
ВыборкаРасчетыПоОснованию = ПакетЗапросов[2].Выбрать();
ВыборкаШапка.Следующий();
МассивДопустимыхСтатусов = Новый Массив();
МассивДопустимыхСтатусов.Добавить(Перечисления.СтатусыРеализацийТоваровУслуг.Отгружено);
ОбщегоНазначенияУТ.ПроверитьВозможностьВводаНаОсновании(
ВыборкаШапка.Ссылка,
ВыборкаШапка.СтатусДокумента,
ВыборкаШапка.ЕстьОшибкиПроведен,
ВыборкаШапка.ЕстьОшибкиСтатус,
МассивДопустимыхСтатусов);
ЗаполнитьЗначенияСвойств(ЭтотОбъект, ВыборкаШапка);
ХозяйственнаяОперация = ПродажиСервер.ПолучитьХозяйственнуюОперациюВозвратаПоРеализации(ВыборкаШапка.ХозяйственнаяОперацияРеализация);
ТаблицаТоваров = ПакетЗапросов[12].Выгрузить();
Для Каждого ТекСтрока Из ТаблицаТоваров Цикл
НоваяСтрока = Товары.Добавить();
ЗаполнитьЗначенияСвойств(НоваяСтрока,ТекСтрока);
НоваяСтрока.СпособОпределенияСебестоимости = ?(ЗначениеЗаполнено(НоваяСтрока.ДокументРеализации),
Перечисления.СпособыОпределенияСебестоимостиВозврата.ИзДокументаПродажи,
Перечисления.СпособыОпределенияСебестоимостиВозврата.ИзТекущегоДокумента);
Ценообразование.ПересчитатьСуммыВСтроке(
НоваяСтрока,
Ложь,
Ложь,
Ложь,
ВыборкаШапка.ЦенаВключаетНДС);
КонецЦикла;
ЗаполнитьВзаиморасчеты(ВыборкаРасчетыПоОснованию);
КонецПроцедуры
Процедура ЗаполнитьДокументНаОснованииАктаПослеПриемки(ДанныеЗаполнения)
Запрос = Новый Запрос;
Запрос.Текст = "
|ВЫБРАТЬ
| ВозвратТоваровОтКлиента.Ссылка КАК ДовозвратПоВозврату,
| АктОРасхожденияхПослеПриемки.Ссылка КАК АктОРасхождениях,
| ВозвратТоваровОтКлиента.Соглашение КАК Соглашение,
| ВозвратТоваровОтКлиента.Организация КАК Организация,
| ВозвратТоваровОтКлиента.Партнер КАК Партнер,
| ВозвратТоваровОтКлиента.Контрагент КАК Контрагент,
| ВозвратТоваровОтКлиента.Валюта КАК Валюта,
| ВозвратТоваровОтКлиента.Сделка КАК Сделка,
| ВозвратТоваровОтКлиента.Подразделение КАК Подразделение,
| ВозвратТоваровОтКлиента.ДокументРеализации КАК ДокументРеализации,
| ВозвратТоваровОтКлиента.Склад КАК Склад,
| ВозвратТоваровОтКлиента.ХозяйственнаяОперация КАК ХозяйственнаяОперация,
| ВозвратТоваровОтКлиента.ЗаявкаНаВозвратТоваровОтКлиента КАК ЗаявкаНаВозвратТоваровОтКлиента,
| ВозвратТоваровОтКлиента.ЦенаВключаетНДС КАК ЦенаВключаетНДС,
| ВозвратТоваровОтКлиента.НалогообложениеНДС КАК НалогообложениеНДС,
| ВозвратТоваровОтКлиента.Договор КАК Договор,
| ВозвратТоваровОтКлиента.ПричинаВозврата КАК ПричинаВозврата,
| ВозвратТоваровОтКлиента.ВозвратПереданнойМногооборотнойТары КАК ВозвратПереданнойМногооборотнойТары,
| ВозвратТоваровОтКлиента.ПредусмотренЗалогЗаТару КАК ПредусмотренЗалогЗаТару,
| ВозвратТоваровОтКлиента.СпособКомпенсации КАК СпособКомпенсации,
| НЕ ВозвратТоваровОтКлиента.Проведен КАК ЕстьОшибкиПроведенОснование,
| НЕ АктОРасхожденияхПослеПриемки.Проведен КАК ЕстьОшибкиПроведенАктОРасхождениях,
| АктОРасхожденияхПослеПриемки.Статус КАК СтатусАктаОРасхождениях,
| НЕ АктОРасхожденияхПослеПриемки.Статус В (ЗНАЧЕНИЕ(Перечисление.СтатусыАктаОРасхождениях.КВыполнению), ЗНАЧЕНИЕ(Перечисление.СтатусыАктаОРасхождениях.Отработано)) КАК ЕстьОшибкиСтатусАкт
|ИЗ
| Документ.ВозвратТоваровОтКлиента КАК ВозвратТоваровОтКлиента
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ Документ.АктОРасхожденияхПослеПриемки КАК АктОРасхожденияхПослеПриемки
| ПО (ИСТИНА)
| ЛЕВОЕ СОЕДИНЕНИЕ
| РегистрСведений.РеестрДокументов КАК РеестрДокументовСторноИсправление
| ПО
| ВозвратТоваровОтКлиента.Ссылка = РеестрДокументовСторноИсправление.СторнируемыйДокумент
| И РеестрДокументовСторноИсправление.Проведен
| И НЕ РеестрДокументовСторноИсправление.ДополнительнаяЗапись
|ГДЕ
| ВозвратТоваровОтКлиента.Ссылка = &ДокументОснование
| И АктОРасхожденияхПослеПриемки.Ссылка = &АктОРасхождениях
| И РеестрДокументовСторноИсправление.Ссылка ЕСТЬ NULL
|;
|
|
|ВЫБРАТЬ
| АктОРасхожденияхПослеПриемки.Номенклатура КАК Номенклатура,
| АктОРасхожденияхПослеПриемки.Характеристика КАК Характеристика,
| АктОРасхожденияхПослеПриемки.Назначение КАК Назначение,
| АктОРасхожденияхПослеПриемки.Серия КАК Серия,
| АктОРасхожденияхПослеПриемки.СтатусУказанияСерий КАК СтатусУказанияСерий,
| АктОРасхожденияхПослеПриемки.Упаковка КАК Упаковка,
| АктОРасхожденияхПослеПриемки.Цена КАК Цена,
| АктОРасхожденияхПослеПриемки.СтавкаНДС КАК СтавкаНДС,
| АктОРасхожденияхПослеПриемки.ДокументРеализации КАК ДокументРеализации,
| АктОРасхожденияхПослеПриемки.КодСтроки КАК КодСтроки,
| АктОРасхожденияхПослеПриемки.НомерГТД КАК НомерГТД,
|
| СУММА(АктОРасхожденияхПослеПриемки.КоличествоПоДокументу - АктОРасхожденияхПослеПриемки.Количество) КАК Количество,
| СУММА(АктОРасхожденияхПослеПриемки.КоличествоУпаковокПоДокументу - АктОРасхожденияхПослеПриемки.КоличествоУпаковок) КАК КоличествоУпаковок,
| СУММА(АктОРасхожденияхПослеПриемки.СуммаПоДокументу - АктОРасхожденияхПослеПриемки.Сумма) КАК Сумма,
| СУММА(АктОРасхожденияхПослеПриемки.СуммаНДСПоДокументу - АктОРасхожденияхПослеПриемки.СуммаНДС) КАК СуммаНДС,
| СУММА(АктОРасхожденияхПослеПриемки.СуммаСНДСПоДокументу - АктОРасхожденияхПослеПриемки.СуммаСНДС) КАК СуммаСНДС
|ИЗ
| Документ.АктОРасхожденияхПослеПриемки.Товары КАК АктОРасхожденияхПослеПриемки
|ГДЕ
| АктОРасхожденияхПослеПриемки.Ссылка = &АктОРасхождениях
| И АктОРасхожденияхПослеПриемки.Действие = ЗНАЧЕНИЕ(Перечисление.ВариантыДействийПоРасхождениямВАктеПослеПриемки.ОформитьНедостачуИОжидатьДопоставку)
| И АктОРасхожденияхПослеПриемки.ДокументОснование = &ДокументОснование
| И АктОРасхожденияхПослеПриемки.КоличествоУпаковокПоДокументу - АктОРасхожденияхПослеПриемки.КоличествоУпаковок > 0
|
|СГРУППИРОВАТЬ ПО
| Номенклатура,
| Характеристика,
| Назначение,
| Серия,
| СтатусУказанияСерий,
| Упаковка,
| Цена,
| СтавкаНДС,
| ДокументРеализации,
| КодСтроки,
| НомерГТД
|
|;
|
|
|ВЫБРАТЬ
| АктОРасхожденияхПослеПриемкиСерии.Номенклатура КАК Номенклатура,
| АктОРасхожденияхПослеПриемкиСерии.Характеристика КАК Характеристика,
| АктОРасхожденияхПослеПриемкиСерии.Серия КАК Серия,
| АктОРасхожденияхПослеПриемкиСерии.Назначение КАК Назначение,
| СУММА(АктОРасхожденияхПослеПриемкиСерии.КоличествоПоДокументу - АктОРасхожденияхПослеПриемкиСерии.Количество) КАК Количество
|ИЗ
| Документ.АктОРасхожденияхПослеПриемки.Серии КАК АктОРасхожденияхПослеПриемкиСерии
|ГДЕ
| АктОРасхожденияхПослеПриемкиСерии.Ссылка = &АктОРасхождениях
| И АктОРасхожденияхПослеПриемкиСерии.Действие = ЗНАЧЕНИЕ(Перечисление.ВариантыДействийПоРасхождениямВАктеПослеПриемки.ОформитьНедостачуИОжидатьДопоставку)
| И АктОРасхожденияхПослеПриемкиСерии.ДокументОснование = &ДокументОснование
| И АктОРасхожденияхПослеПриемкиСерии.КоличествоПоДокументу - АктОРасхожденияхПослеПриемкиСерии.Количество > 0
|
|СГРУППИРОВАТЬ ПО
| АктОРасхожденияхПослеПриемкиСерии.Номенклатура,
| АктОРасхожденияхПослеПриемкиСерии.Характеристика,
| АктОРасхожденияхПослеПриемкиСерии.Назначение,
| АктОРасхожденияхПослеПриемкиСерии.Серия
|
|;
|
|
|
|ВЫБРАТЬ РАЗЛИЧНЫЕ
| АктОРасхожденияхПослеПриемкиТовары.ДокументРеализации КАК ДокументРеализации
|
|ПОМЕСТИТЬ РеализацииВозврата
|ИЗ
| Документ.АктОРасхожденияхПослеПриемки.Товары КАК АктОРасхожденияхПослеПриемкиТовары
|ГДЕ
| АктОРасхожденияхПослеПриемкиТовары.Ссылка = &АктОРасхождениях
| И АктОРасхожденияхПослеПриемкиТовары.Действие = ЗНАЧЕНИЕ(Перечисление.ВариантыДействийПоРасхождениямВАктеПослеПриемки.ОформитьНедостачуИОжидатьДопоставку)
| И АктОРасхожденияхПослеПриемкиТовары.ДокументОснование = &ДокументОснование
| И АктОРасхожденияхПослеПриемкиТовары.КоличествоУпаковокПоДокументу - АктОРасхожденияхПослеПриемкиТовары.КоличествоУпаковок > 0
|
|;
|
|
|
|ВЫБРАТЬ
| СправочникОбъектыРасчетов.Ссылка КАК ОбъектРасчетов
|ПОМЕСТИТЬ ОбъектыРасчетов
|ИЗ
| Документ.АктОРасхожденияхПослеПриемки КАК АктОРасхожденияхПослеПриемки
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.ОбъектыРасчетов КАК СправочникОбъектыРасчетов
| ПО СправочникОбъектыРасчетов.Объект = АктОРасхожденияхПослеПриемки.Договор
| И НЕ СправочникОбъектыРасчетов.ПометкаУдаления
|ГДЕ
| АктОРасхожденияхПослеПриемки.Ссылка = &АктОРасхождениях
|
|ОБЪЕДИНИТЬ ВСЕ
|
|ВЫБРАТЬ
| РеализацияТоваровУслугТовары.ОбъектРасчетов КАК ОбъектРасчетов
|ИЗ
|Документ.РеализацияТоваровУслуг.Товары КАК РеализацияТоваровУслугТовары
|ГДЕ
| РеализацияТоваровУслугТовары.Ссылка В
| (ВЫБРАТЬ
| РеализацииВозврата.ДокументРеализации
| ИЗ
| РеализацииВозврата КАК РеализацииВозврата)
|
|;
|
|
|ВЫБРАТЬ
| РасчетыСКлиентами.ОбъектРасчетов КАК ОбъектРасчетов,
| РасчетыСКлиентами.Валюта КАК ВалютаВзаиморасчетов,
| ЕСТЬNULL(РасчетыСКлиентами.СуммаОстаток, 0) КАК СуммаОстаток
|ИЗ
| РегистрНакопления.РасчетыСКлиентами.Остатки(
| ,
| ОбъектРасчетов В
| (ВЫБРАТЬ
| ОбъектРасчетов
| ИЗ
| ОбъектыРасчетов)) КАК РасчетыСКлиентами";
УстановитьПривилегированныйРежим(Истина);
Запрос.УстановитьПараметр("ДокументОснование", ДанныеЗаполнения.ОснованиеАкта);
Запрос.УстановитьПараметр("АктОРасхождениях", ДанныеЗаполнения.АктОРасхождениях);
ПакетЗапросов = Запрос.ВыполнитьПакет();
УстановитьПривилегированныйРежим(Истина);
ПакетЗапросов = Запрос.ВыполнитьПакет();
ВыборкаШапка = ПакетЗапросов[0].Выбрать();
ВыборкаШапка.Следующий();
ОбщегоНазначенияУТ.ПроверитьВозможностьВводаНаОсновании(
ВыборкаШапка.ДовозвратПоВозврату,
,
ВыборкаШапка.ЕстьОшибкиПроведенОснование,
,
);
ОбщегоНазначенияУТ.ПроверитьВозможностьВводаНаОсновании(
ВыборкаШапка.АктОРасхождениях,
ВыборкаШапка.СтатусАктаОРасхождениях,
ВыборкаШапка.ЕстьОшибкиПроведенАктОРасхождениях,
ВыборкаШапка.ЕстьОшибкиСтатусАкт,
РасхожденияСервер.МассивДопустимыхСтатусовАктовОРасхожденияхПриСозданииНаОсновании());
ЗаполнитьЗначенияСвойств(ЭтотОбъект, ВыборкаШапка);
ТаблицаТоваров = ПакетЗапросов[1].Выгрузить();
Для Каждого ТекСтрока Из ТаблицаТоваров Цикл
НоваяСтрока = Товары.Добавить();
ЗаполнитьЗначенияСвойств(НоваяСтрока,ТекСтрока);
НоваяСтрока.СпособОпределенияСебестоимости = ?(ЗначениеЗаполнено(НоваяСтрока.ДокументРеализации),
Перечисления.СпособыОпределенияСебестоимостиВозврата.ИзДокументаПродажи,
Перечисления.СпособыОпределенияСебестоимостиВозврата.ИзТекущегоДокумента);
Ценообразование.ПересчитатьСуммыВСтроке(
НоваяСтрока,
Ложь,
Ложь,
Ложь,
ВыборкаШапка.ЦенаВключаетНДС);
КонецЦикла;
Серии.Загрузить(ПакетЗапросов[2].Выгрузить());
ВыборкаРасчетыПоОснованию = ПакетЗапросов[5].Выбрать();
ЗаполнитьВзаиморасчеты(ВыборкаРасчетыПоОснованию);
КонецПроцедуры
Процедура ЗаполнитьПоЗаказу(СтруктураЗаполнения)
МассивЗаказов = СтруктураЗаполнения.МассивЗаказов;
Если СтруктураЗаполнения.Свойство("Склад") И ЗначениеЗаполнено(СтруктураЗаполнения.Склад) Тогда
СтруктураЗаполнения.РеквизитыШапки.Склад = СтруктураЗаполнения.Склад;
КонецЕсли;
Если СтруктураЗаполнения.РеквизитыШапки.СпособКомпенсации = Перечисления.СпособыКомпенсацииВозвратовТоваров.ЗаменитьТовары Тогда
СтруктураЗаполнения.РеквизитыШапки.СпособКомпенсации = Перечисления.СпособыКомпенсацииВозвратовТоваров.ВернутьДенежныеСредства;
КонецЕсли;
ПараметрыЗаполнения = Документы.ВозвратТоваровОтКлиента.ПараметрыЗаполненияДокумента();
ЗаполнитьЗначенияСвойств(ПараметрыЗаполнения, СтруктураЗаполнения);
Документы.ВозвратТоваровОтКлиента.ИнициализироватьПараметрыЗаполнения(ПараметрыЗаполнения,
СтруктураЗаполнения.РеквизитыШапки, МассивЗаказов);
Если СтруктураЗаполнения.Свойство("ЗаполнятьПоОрдеру") Тогда
ПараметрыЗаполнения.ЗаполнятьПоОрдеру = СтруктураЗаполнения.ЗаполнятьПоОрдеру;
Иначе
СкладОтгрузки = СтруктураЗаполнения.РеквизитыШапки.Склад;
ИспользоватьОрдернуюСхему = СкладыСервер.ИспользоватьОрдернуюСхемуПриОтгрузке(СкладОтгрузки, ТекущаяДатаСеанса());
ПорядокОформления = Константы.ПорядокОформленияНакладныхРасходныхОрдеров.Получить();
СначалаОрдера = (ПорядокОформления = Перечисления.ПорядокОформленияНакладныхРасходныхОрдеров.СначалаОрдера);
ПараметрыЗаполнения.ЗаполнятьПоОрдеру = ИспользоватьОрдернуюСхему И СначалаОрдера;
КонецЕсли;
ТаблицаНакладная = Документы.ВозвратТоваровОтКлиента.ДанныеТаблицыТоварыДокумента(Ссылка);
ТаблицаШтрихкодыУпаковок = ВозвратТоваровОтКлиентаЛокализация.СформироватьСтруктуруШтрихкодыУпаковок();
Документы.ВозвратТоваровОтКлиента.ЗаполнитьПоЗаказамОрдерам(ТаблицаНакладная, Ссылка, ПараметрыЗаполнения, ТаблицаШтрихкодыУпаковок);
ТаблицаНакладнаяКолонкиКоличество = ТаблицаНакладная.Колонки.Количество;
ТаблицаНакладнаяКолонкиКоличествоВОрдере = ТаблицаНакладная.Колонки.КоличествоВОрдере;
ТаблицаНакладнаяКолонкиКоличествоВЗаказе = ТаблицаНакладная.Колонки.КоличествоВЗаказе;
Если ПараметрыЗаполнения.ЗаполнятьПоОрдеру Тогда
ТаблицаНакладнаяКолонкиКоличество.Имя = "КоличествоДоИзменения";
ТаблицаНакладнаяКолонкиКоличествоВОрдере.Имя = "Количество";
Иначе
ТаблицаНакладнаяКолонкиКоличество.Имя = "КоличествоДоИзменения";
ТаблицаНакладнаяКолонкиКоличествоВЗаказе.Имя = "Количество";
КонецЕсли;
НакладныеСервер.УдалитьПустыеСтроки(ТаблицаНакладная, "Количество");
Товары.Загрузить(ТаблицаНакладная);
Для Каждого ТекСтрока Из Товары Цикл
Если Не ЗначениеЗаполнено(ТекСтрока.СпособОпределенияСебестоимости) Тогда
ТекСтрока.СпособОпределенияСебестоимости = ?(ЗначениеЗаполнено(ТекСтрока.ДокументРеализации),
Перечисления.СпособыОпределенияСебестоимостиВозврата.ИзДокументаПродажи,
Перечисления.СпособыОпределенияСебестоимостиВозврата.ИзТекущегоДокумента);
КонецЕсли;
КонецЦикла;
Если ПараметрыЗаполнения.ЗаполнятьПоОрдеру И ТаблицаШтрихкодыУпаковок.Количество() > 0 Тогда
ШтрихкодыУпаковок.Загрузить(ТаблицаШтрихкодыУпаковок);
КонецЕсли;
ЗаполнитьНомераГТДПоРаспоряжениям(СтруктураЗаполнения.РеквизитыШапки.ЦенаВключаетНДС);
Документы.ВозвратТоваровОтКлиента.ЗаполнитьШапкуДокументаПоЗаказу(ЭтотОбъект, ПараметрыЗаполнения, СтруктураЗаполнения.МассивЗаказов);
Документы.ВозвратТоваровОтКлиента.ОбновитьЗависимыеРеквизитыТабличнойЧасти(Товары, ПараметрыЗаполнения, Ложь);
ЗаполнитьВзаиморасчетыПоЗаявкамНаВозврат(МассивЗаказов);
КонецПроцедуры
#КонецОбласти
#Область Инициализация
Процедура ИнициализироватьДокумент(ДанныеЗаполнения = Неопределено)
Автор = Пользователи.ТекущийПользователь();
ДокументОснование = ПродажиСервер.ДокументОснование(ЭтотОбъект,
"ЗаявкаНаВозвратТоваровОтКлиента, ДокументРеализации, Товары.ДокументРеализации");
ОтветственныеЛицаСервер.УстановитьМенеджера(ЭтотОбъект, ДокументОснование);
Организация = ЗначениеНастроекПовтИсп.ПолучитьОрганизациюПоУмолчанию(Организация);
Если Не ЗначениеЗаполнено(Валюта) Тогда
Валюта = ЗначениеНастроекПовтИсп.ВалютаРегламентированногоУчетаОрганизации(Организация);
КонецЕсли;
Склад = ЗначениеНастроекПовтИсп.ПолучитьСкладПоУмолчанию(Склад);
Подразделение = ЗначениеНастроекПовтИсп.ПодразделениеПользователя(Менеджер, Подразделение);
ВариантПриемкиТоваров = ЗакупкиСервер.ПолучитьВариантПриемкиТоваров(ЗаявкаНаВозвратТоваровОтКлиента);
ПараметрыЗаполнения = Документы.ВозвратТоваровОтКлиента.ПараметрыЗаполненияНалогообложенияНДСПродажи(ЭтотОбъект);
УчетНДСУП.ЗаполнитьНалогообложениеНДСПродажи(НалогообложениеНДС, ПараметрыЗаполнения);
СтруктураДействий = Новый Структура;
КэшированныеЗначения = ПакетнаяОбработкаТабличнойЧастиКлиентСервер.ПолучитьСтруктуруКэшируемыеЗначения();
СтруктураЗаполненияСтавкиНДС =
ПакетнаяОбработкаТабличнойЧастиКлиентСервер.ПараметрыЗаполненияСтавкиНДС(
ЭтотОбъект, Ложь, ВозвратПереданнойМногооборотнойТары);
СтруктураЗаполненияСтавкиНДС.ЗаполнениеНаОснованииКопирование = ЗначениеЗаполнено(ДанныеЗаполнения);
СтруктураДействий.Вставить("СкорректироватьСтавкуНДС", СтруктураЗаполненияСтавкиНДС);
ПакетнаяОбработкаТабличнойЧастиСервер.ОбработатьТЧ(Товары, СтруктураДействий, КэшированныеЗначения);
СтруктураПересчетаСуммы = ПакетнаяОбработкаТабличнойЧастиКлиентСервер.ПараметрыПересчетаСуммыНДСВТЧ(ЭтотОбъект);
СтруктураДействий = Новый Структура;
СтруктураДействий.Вставить("ПересчитатьСуммуНДС", СтруктураПересчетаСуммы);
СтруктураДействий.Вставить("ПересчитатьСуммуСНДС", СтруктураПересчетаСуммы);
ПакетнаяОбработкаТабличнойЧастиСервер.ОбработатьСтрокиТЧ(
КэшированныеЗначения.ОбработанныеСтроки,
СтруктураДействий,
Товары);
КонецПроцедуры
Процедура ИнициализироватьУсловияПродаж()
Если Не ПолучитьФункциональнуюОпцию("ИспользоватьСоглашенияСКлиентами") Тогда
ЗаполнитьУсловияПродажПоУмолчанию();
КонецЕсли;
КонецПроцедуры
#КонецОбласти
#Область ВидыЗапасов
Процедура ЗаполнитьВидыЗапасов(Отказ)
Если Отказ Тогда
Возврат;
КонецЕсли;
УстановитьПривилегированныйРежим(Истина);
ВидыЗапасовПерезаполнены = Ложь;
НоменклатураДокумента = ОбщегоНазначенияКлиентСервер.СвернутьМассив(Товары.ВыгрузитьКолонку("Номенклатура"));
СоответствиеТиповНоменклатуры = ОбщегоНазначения.ЗначениеРеквизитаОбъектов(НоменклатураДокумента, "ТипНоменклатуры");
ДокументСодержитТовары = Истина;
ДокументСодержитОборотнуюТару = Ложь;
Если ВозвратПереданнойМногооборотнойТары Тогда
ДокументСодержитТовары = ДокументСодержитТипНоменклатуры(СоответствиеТиповНоменклатуры,
Перечисления.ТипыНоменклатуры.Товар);
ДокументСодержитОборотнуюТару = ДокументСодержитТипНоменклатуры(СоответствиеТиповНоменклатуры,
Перечисления.ТипыНоменклатуры.МногооборотнаяТара);
КонецЕсли;
Если ХозяйственнаяОперация = Перечисления.ХозяйственныеОперации.ВозвратОтКомиссионера Тогда
МенеджерВременныхТаблиц = ВременныеТаблицыДанныхДокумента("Все");
Если Не Проведен
Или ЗапасыСервер.ПроверитьНеобходимостьПерезаполненияВидовЗапасовДокумента(ЭтотОбъект)
Или ПроверитьИзменениеРеквизитовДокумента(МенеджерВременныхТаблиц)
Или ПроверитьИзменениеТоваров(МенеджерВременныхТаблиц) Тогда
ПараметрыЗаполнения = ЗапасыСервер.ПараметрыЗаполненияВидовЗапасов();
ПараметрыЗаполнения.ПодбиратьВидыЗапасовПоИнтеркампани = Ложь;
ПараметрыЗаполнения.СообщатьОбОшибкахЗаполнения = Истина;
ПараметрыЗаполнения.ПриНехваткеТоваровОрганизацииЗаполнятьВидамиЗапасовПоУмолчанию = Истина;
Отборы = ПараметрыЗаполнения.ОтборыВидовЗапасов;
Отборы.Организация = Организация;
Отборы.НалогообложениеНДС = НалогообложениеНДС;
ПараметрыЗаполнения.ИмяТаблицыОстатков = "ТоварыПереданныеНаКомиссию";
ЗапасыСервер.ЗаполнитьВидыЗапасовПоОстаткамКОформлению(ЭтотОбъект,
МенеджерВременныхТаблиц,
Отказ,
ПараметрыЗаполнения);
Если Не Отказ Тогда
ВидыЗапасовПерезаполнены = Истина;
КонецЕсли;
КонецЕсли;
Иначе
ОтборСтрок = Новый Структура("СпособОпределенияСебестоимости",
Перечисления.СпособыОпределенияСебестоимостиВозврата.ИзДокументаПродажи);
ПоДокументамПродажи = Товары.НайтиСтроки(ОтборСтрок);
ЕстьПоДокументамПродажи = ПоДокументамПродажи.Количество() > 0;
ЕстьБезДокументовПродажи = ПоДокументамПродажи.Количество() <> Товары.Количество();
МенеджерВременныхТаблиц = ВременныеТаблицыДанныхДокумента("ИзДокументаПродажи");
Если Не Проведен
Или ЗапасыСервер.ПроверитьНеобходимостьПерезаполненияВидовЗапасовДокумента(ЭтотОбъект)
Или ПроверитьИзменениеРеквизитовДокумента(МенеджерВременныхТаблиц)
Или ПроверитьИзменениеТоваров(МенеджерВременныхТаблиц) Тогда
МенеджерВременныхТаблицТоваров = ?(ДокументСодержитТовары,
?(ВозвратПереданнойМногооборотнойТары,
ВременныеТаблицыДанныхДокумента("ИзДокументаПродажи", "Номенклатура"),
МенеджерВременныхТаблиц),
Неопределено);
МенеджерВременныхТаблицТары = ?(ДокументСодержитОборотнуюТару,
ВременныеТаблицыДанныхДокумента("ИзДокументаПродажи", "Тара"),
Неопределено);
Если ЕстьБезДокументовПродажи Тогда
ОтборСтрок = Новый Структура("СпособОпределенияСебестоимости",
Перечисления.СпособыОпределенияСебестоимостиВозврата.Вручную);
ВидыЗапасовБезДокументовПродажи = ВидыЗапасов.Выгрузить(ОтборСтрок);
ОтборСтрок = Новый Структура("СпособОпределенияСебестоимости",
Перечисления.СпособыОпределенияСебестоимостиВозврата.ИзТекущегоДокумента);
ОбщегоНазначенияУТ.ДобавитьСтрокиВТаблицу(ВидыЗапасовБезДокументовПродажи,
ВидыЗапасов.Выгрузить(ОтборСтрок));
ВидыЗапасов.Очистить();
КонецЕсли;
Если ДокументСодержитТовары Тогда
ПараметрыЗаполнения = ПараметрыЗаполненияВидовЗапасовПоДокументамПродажи();
ПараметрыЗаполнения.ИмяТаблицыОстатков = "РеализованныеТовары";
ЗапасыСервер.ЗаполнитьВидыЗапасовПоОстаткамКОформлению(ЭтотОбъект,
МенеджерВременныхТаблицТоваров,
Отказ,
ПараметрыЗаполнения);
КонецЕсли;
Если ДокументСодержитОборотнуюТару Тогда
ВидыЗапасовТоваров = ВидыЗапасовТоваров();
ПараметрыЗаполнения = ПараметрыЗаполненияВидовЗапасовПоДокументамПродажи();
ПараметрыЗаполнения.ИмяТаблицыОстатков = "ПереданнаяВозвратнаяТара";
ВидыЗапасов.Очистить();
ЗапасыСервер.ЗаполнитьВидыЗапасовПоОстаткамКОформлению(ЭтотОбъект,
МенеджерВременныхТаблицТары,
Отказ,
ПараметрыЗаполнения);
ОбщегоНазначенияУТ.ДобавитьСтрокиВТаблицу(ВидыЗапасов, ВидыЗапасовТоваров);
КонецЕсли;
Если Не Отказ Тогда
ВидыЗапасовПерезаполнены = Истина;
КонецЕсли;
Для Каждого СтрокаТаблицы из ВидыЗапасов Цикл
СтрокаТаблицы.СпособОпределенияСебестоимости = Перечисления.СпособыОпределенияСебестоимостиВозврата.ИзДокументаПродажи;
КонецЦикла;
Если ЕстьБезДокументовПродажи Тогда
ОбщегоНазначенияУТ.ДобавитьСтрокиВТаблицу(ВидыЗапасов, ВидыЗапасовБезДокументовПродажи);
КонецЕсли;
КонецЕсли;
МенеджерВременныхТаблиц = ВременныеТаблицыДанныхДокумента("НеИзДокументаПродажи");
Если Не Проведен
Или ЗапасыСервер.ПроверитьНеобходимостьПерезаполненияВидовЗапасовДокумента(ЭтотОбъект)
Или ПроверитьИзменениеРеквизитовДокумента(МенеджерВременныхТаблиц)
Или ПроверитьИзменениеТоваров(МенеджерВременныхТаблиц) Тогда
Если ЕстьПоДокументамПродажи Тогда
ОтборСтрок = Новый Структура("СпособОпределенияСебестоимости",
Перечисления.СпособыОпределенияСебестоимостиВозврата.ИзДокументаПродажи);
ВидыЗапасовПоДокументамПродажи = ВидыЗапасов.Выгрузить(ОтборСтрок);
ВидыЗапасов.Очистить();
КонецЕсли;
ПараметрыЗаполнения = ЗапасыСервер.ПараметрыЗаполненияВидовЗапасов();
ПараметрыЗаполнения.ПодбиратьВидыЗапасовПоИнтеркампани = Ложь;
ПараметрыЗаполнения.СообщатьОбОшибкахЗаполнения = Ложь;
ПараметрыЗаполнения.ПриНехваткеТоваровОрганизацииЗаполнятьВидамиЗапасовПоУмолчанию = Истина;
Отборы = ПараметрыЗаполнения.ОтборыВидовЗапасов;
Отборы.Организация = Организация;
Отборы.НалогообложениеНДС = НалогообложениеНДС;
УчетНДСУП.ПараметрыЗаполненияВидовЗапасовПоНалогообложению(ПараметрыЗаполнения.ОтборыВидовЗапасов,
Организация,
Дата,
НалогообложениеНДС);
ПараметрыЗаполнения.ИмяТаблицыОстатков = "ТаблицаВидыЗапасов";
ЗапасыСервер.ЗаполнитьВидыЗапасовПоОстаткамКОформлению(ЭтотОбъект, МенеджерВременныхТаблиц, Отказ, ПараметрыЗаполнения);
Если Не Отказ Тогда
ВидыЗапасовПерезаполнены = Истина;
КонецЕсли;
Если ЕстьПоДокументамПродажи Тогда
ОбщегоНазначенияУТ.ДобавитьСтрокиВТаблицу(ВидыЗапасов, ВидыЗапасовПоДокументамПродажи);
КонецЕсли;
КонецЕсли;
КонецЕсли;
Если ВидыЗапасовПерезаполнены Тогда
ОбщегоНазначенияУТ.СвернутьТабличнуюЧасть(ЭтотОбъект, "ВидыЗапасов");
ЗаполнитьСебестоимостьВидовЗапасов(СоответствиеТиповНоменклатуры, ДокументСодержитОборотнуюТару);
ЗаполнитьНоменклатуруОприходованиеВидовЗапасов();
КонецЕсли;
КонецПроцедуры
Функция ДокументСодержитТипНоменклатуры(СоответствиеТиповНоменклатуры, ТипНоменклатуры)
ДокументСодержитТипНоменклатуры = Ложь;
Для Каждого ДанныеСоответствия Из СоответствиеТиповНоменклатуры Цикл
Если ДанныеСоответствия.Значение = ТипНоменклатуры Тогда
ДокументСодержитТипНоменклатуры = Истина;
Прервать;
КонецЕсли;
КонецЦикла;
Возврат ДокументСодержитТипНоменклатуры;
КонецФункции
Функция ПараметрыЗаполненияВидовЗапасовПоДокументамПродажи()
ПараметрыЗаполнения = ЗапасыСервер.ПараметрыЗаполненияВидовЗапасов();
ПараметрыЗаполнения.ПодбиратьВидыЗапасовПоИнтеркампани = Ложь;
ПараметрыЗаполнения.СообщатьОбОшибкахЗаполнения = Истина;
ПараметрыЗаполнения.ПриНехваткеТоваровОрганизацииЗаполнятьВидамиЗапасовПоУмолчанию = Ложь;
ПараметрыЗаполнения.ОтборыВидовЗапасов.Организация = Организация;
Возврат ПараметрыЗаполнения;
КонецФункции
Функция ВидыЗапасовТоваров()
ВидыЗапасовТоваров = ВидыЗапасов.ВыгрузитьКолонки();
Если ВидыЗапасов.Количество() = 0 Тогда
Возврат ВидыЗапасовТоваров;
КонецЕсли;
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ТаблицаВидыЗапасов.НомерСтроки КАК НомерСтроки,
| ТаблицаВидыЗапасов.АналитикаУчетаНоменклатуры КАК АналитикаУчетаНоменклатуры
|ПОМЕСТИТЬ ТаблицаВидыЗапасов
|ИЗ
| &ТаблицаВидыЗапасов КАК ТаблицаВидыЗапасов
|;
|
|
|ВЫБРАТЬ
| ТаблицаВидыЗапасов.НомерСтроки КАК НомерСтроки
|ИЗ
| ТаблицаВидыЗапасов КАК ТаблицаВидыЗапасов
| ЛЕВОЕ СОЕДИНЕНИЕ Справочник.КлючиАналитикиУчетаНоменклатуры КАК Аналитика
| ПО ТаблицаВидыЗапасов.АналитикаУчетаНоменклатуры = Аналитика.Ссылка
|
| ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Номенклатура КАК ДанныеНоменклатуры
| ПО Аналитика.Номенклатура = ДанныеНоменклатуры.Ссылка
|
|ГДЕ
| ДанныеНоменклатуры.ТипНоменклатуры <> ЗНАЧЕНИЕ(Перечисление.ТипыНоменклатуры.МногооборотнаяТара)";
Запрос.УстановитьПараметр("ТаблицаВидыЗапасов", ВидыЗапасов);
Выборка = Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл
НоваяСтрока = ВидыЗапасовТоваров.Добавить();
ЗаполнитьЗначенияСвойств(НоваяСтрока, ВидыЗапасов[Выборка.НомерСтроки - 1]);
КонецЦикла;
Возврат ВидыЗапасовТоваров;
КонецФункции
Процедура ЗаполнитьНоменклатуруОприходованиеВидовЗапасов()
Если ВозвратПорчи Тогда
СтруктураПоиска = Новый Структура("АналитикаУчетаНоменклатуры");
МассивТоваров = Товары.НайтиСтроки(Новый Структура("Порча", Истина));
Для Каждого СтрокаТоваров Из МассивТоваров Цикл
КоличествоТоваров = СтрокаТоваров.Количество;
СуммаСНДС = СтрокаТоваров.СуммаСНДС;
СуммаНДС = СтрокаТоваров.СуммаНДС;
ЗаполнитьЗначенияСвойств(СтруктураПоиска, СтрокаТоваров);
Для Каждого СтрокаЗапасов Из ВидыЗапасов.НайтиСтроки(СтруктураПоиска) Цикл
Если СтрокаЗапасов.Количество = 0 Тогда
Продолжить;
КонецЕсли;
Количество = Мин(КоличествоТоваров, СтрокаЗапасов.Количество);
НоваяСтрока = ВидыЗапасов.Добавить();
ЗаполнитьЗначенияСвойств(НоваяСтрока, СтрокаЗапасов);
НоваяСтрока.НоменклатураОприходование = СтрокаТоваров.НоменклатураОприходование;
НоваяСтрока.ХарактеристикаОприходование = СтрокаТоваров.ХарактеристикаОприходование;
НоваяСтрока.Количество = Количество;
НоваяСтрока.СуммаСНДС = Мин(СуммаСНДС, ?(СтрокаЗапасов.Количество <> 0, Количество * СтрокаЗапасов.СуммаСНДС / СтрокаЗапасов.Количество, 0));
НоваяСтрока.СуммаНДС = Мин(СуммаНДС, ?(СтрокаЗапасов.Количество <> 0, Количество * СтрокаЗапасов.СуммаНДС / СтрокаЗапасов.Количество, 0));
СтрокаЗапасов.Количество = СтрокаЗапасов.Количество - НоваяСтрока.Количество;
СтрокаЗапасов.СуммаСНДС = СтрокаЗапасов.СуммаСНДС - НоваяСтрока.СуммаСНДС;
СтрокаЗапасов.СуммаНДС = СтрокаЗапасов.СуммаНДС - НоваяСтрока.СуммаНДС;
КоличествоТоваров = КоличествоТоваров - НоваяСтрока.Количество;
СуммаСНДС = СуммаСНДС - НоваяСтрока.СуммаСНДС;
СуммаНДС = СуммаНДС - НоваяСтрока.СуммаНДС;
Если КоличествоТоваров = 0 Тогда
Прервать;
КонецЕсли;
КонецЦикла;
КонецЦикла;
КонецЕсли;
МассивУдаляемыхСтрок = ВидыЗапасов.НайтиСтроки(Новый Структура("Количество", 0));
Для Каждого СтрокаТаблицы Из МассивУдаляемыхСтрок Цикл
ВидыЗапасов.Удалить(СтрокаТаблицы);
КонецЦикла;
КонецПроцедуры
Процедура ЗаполнитьАналитикиУчетаНоменклатурыВТабличныхЧастяхТоваров(ТаблицыДокумента = Неопределено)
Если ТаблицыДокумента = Неопределено Тогда
ТаблицыДокумента = Документы.ВозвратТоваровОтКлиента.КоллекцияТабличныхЧастейТоваров();
ЗаполнитьЗначенияСвойств(ТаблицыДокумента, ЭтотОбъект);
КонецЕсли;
ТаблицаТовары = ТаблицыДокумента.Товары;
МестаУчета = РегистрыСведений.АналитикаУчетаНоменклатуры.МестаУчета(ХозяйственнаяОперация,
Склад,
Подразделение,
Партнер,
Договор);
ИменаПолей = РегистрыСведений.АналитикаУчетаНоменклатуры.ИменаПолейКоллекцииПоУмолчанию();
РеквизитыСклада = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(Склад, "ЭтоГруппа, ВыборГруппы");
Если ЗначениеЗаполнено(Склад)
И РеквизитыСклада.ЭтоГруппа
И РеквизитыСклада.ВыборГруппы = Перечисления.ВыборГруппыСкладов.РазрешитьВЗаказахИНакладных Тогда
ИменаПолей.Вставить("Произвольный", "Склад");
КонецЕсли;
РегистрыСведений.АналитикаУчетаНоменклатуры.ЗаполнитьВКоллекции(ТаблицаТовары, МестаУчета, ИменаПолей);
РегистрыСведений.АналитикаУчетаНаборов.ЗаполнитьВКоллекции(ТаблицаТовары);
КонецПроцедуры
Процедура ИнициализироватьКлючиАналитикиПереданнойТарыКлиенту()
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ТаблицаТоваров.Номенклатура КАК Номенклатура,
| ТаблицаТоваров.Характеристика КАК Характеристика,
| ЗНАЧЕНИЕ(Справочник.СерииНоменклатуры.ПустаяСсылка) КАК Серия,
| ЗНАЧЕНИЕ(Справочник.Назначения.ПустаяСсылка) КАК Назначение,
| &Партнер КАК Склад
|ПОМЕСТИТЬ ТаблицаТовары
|ИЗ
| &ТаблицаТоваров КАК ТаблицаТоваров
|
|ГДЕ
| ТаблицаТоваров.СпособОпределенияСебестоимости В(&СпособыОпределенияСебестоимости)
|
|;
|
|ВЫБРАТЬ РАЗЛИЧНЫЕ
| ТаблицаТовары.Номенклатура КАК Номенклатура,
| ТаблицаТовары.Характеристика КАК Характеристика,
| ТаблицаТовары.Серия КАК Серия,
| ТаблицаТовары.Назначение КАК Назначение,
| ТаблицаТовары.Склад КАК Склад
|ИЗ
| ТаблицаТовары КАК ТаблицаТовары
| ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Номенклатура КАК СпрНоменклатура
| ПО ТаблицаТовары.Номенклатура = СпрНоменклатура.Ссылка
|
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.АналитикаУчетаНоменклатуры КАК АналитикаТары
| ПО ТаблицаТовары.Номенклатура = АналитикаТары.Номенклатура
| И ТаблицаТовары.Характеристика = АналитикаТары.Характеристика
| И ТаблицаТовары.Назначение = АналитикаТары.Назначение
| И ТаблицаТовары.Серия = АналитикаТары.Серия
| И ТаблицаТовары.Склад = АналитикаТары.МестоХранения
|
|ГДЕ
| СпрНоменклатура.ТипНоменклатуры = ЗНАЧЕНИЕ(Перечисление.ТипыНоменклатуры.МногооборотнаяТара)
| И АналитикаТары.КлючАналитики ЕСТЬ NULL
|";
СпособыОпределенияСебестоимости = Новый Массив;
СпособыОпределенияСебестоимости.Добавить(Перечисления.СпособыОпределенияСебестоимостиВозврата.ИзДокументаПродажи);
Запрос.УстановитьПараметр("Партнер", Партнер);
Запрос.УстановитьПараметр("ТаблицаТоваров", Товары);
Запрос.УстановитьПараметр("СпособыОпределенияСебестоимости", СпособыОпределенияСебестоимости);
Выборка = Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл
РегистрыСведений.АналитикаУчетаНоменклатуры.СоздатьКлючАналитики(Выборка)
КонецЦикла;
КонецПроцедуры
#КонецОбласти
#Область Прочее
Функция ПолучитьСуммуДокумента() Экспорт
Запрос = Новый Запрос("
|ВЫБРАТЬ
| Товары.Номенклатура КАК Номенклатура,
| Товары.СуммаСНДС КАК СуммаСНДС
|ПОМЕСТИТЬ
| Товары
|ИЗ
| &Товары КАК Товары
|;
|ВЫБРАТЬ
| ЕСТЬNULL(СУММА(Товары.СуммаСНДС),0) КАК СуммаСНДС
|ИЗ
| Товары КАК Товары
|ГДЕ
| Товары.Номенклатура.ТипНоменклатуры <> ЗНАЧЕНИЕ(Перечисление.ТипыНоменклатуры.МногооборотнаяТара)
| ИЛИ НЕ &ВернутьМногооборотнуюТару
| ИЛИ &ПредусмотренЗалогЗаТару
|");
Запрос.УстановитьПараметр("Товары", Товары.Выгрузить(,"Номенклатура,СуммаСНДС"));
Запрос.УстановитьПараметр("ВернутьМногооборотнуюТару", ВозвратПереданнойМногооборотнойТары);
Запрос.УстановитьПараметр("ПредусмотренЗалогЗаТару", ПредусмотренЗалогЗаТару);
Выгрузка = Запрос.Выполнить().Выгрузить();
СуммаИтого = Выгрузка[0].СуммаСНДС;
Возврат СуммаИтого;
КонецФункции
Функция ПроверитьИзменениеРеквизитовДокумента(МенеджерВременныхТаблиц)
ИменаРеквизитов = "Организация, ДокументРеализации, НалогообложениеНДС, Дата";
Возврат ЗапасыСервер.ПроверитьИзменениеРеквизитовДокумента(МенеджерВременныхТаблиц, Ссылка, ИменаРеквизитов);
КонецФункции
Функция ПроверитьИзменениеТоваров(МенеджерВременныхТаблиц)
Запрос = Новый Запрос("
|////////////////////////////////////////////////////////////////////////////////
|// Проверим соответствие табличных частей Товары и ВидыЗапасов
|ВЫБРАТЬ
| ТаблицаТоваров.АналитикаУчетаНоменклатуры КАК АналитикаУчетаНоменклатуры
|ИЗ (
| ВЫБРАТЬ
| ТаблицаТоваров.АналитикаУчетаНоменклатуры КАК АналитикаУчетаНоменклатуры,
| ТаблицаТоваров.НоменклатураОприходование КАК НоменклатураОприходование,
| ТаблицаТоваров.ХарактеристикаОприходование КАК ХарактеристикаОприходование,
| ТаблицаТоваров.СтавкаНДС КАК СтавкаНДС,
| ВЫБОР
| КОГДА &ХозяйственнаяОперация = ЗНАЧЕНИЕ(Перечисление.ХозяйственныеОперации.ВозвратОтКомиссионера)
| ТОГДА НЕОПРЕДЕЛЕНО
| ИНАЧЕ ТаблицаТоваров.ДокументРеализации
| КОНЕЦ КАК ДокументРеализации,
| ТаблицаТоваров.СпособОпределенияСебестоимости КАК СпособОпределенияСебестоимости,
| ТаблицаТоваров.НомерГТД КАК НомерГТД,
| ТаблицаТоваров.Количество КАК Количество,
| ТаблицаТоваров.КоличествоПоРНПТ КАК КоличествоПоРНПТ,
| ТаблицаТоваров.СуммаСНДС КАК СуммаСНДС,
| ТаблицаТоваров.СуммаНДС КАК СуммаНДС,
| ТаблицаТоваров.Себестоимость КАК Себестоимость,
| ТаблицаТоваров.СебестоимостьБезНДС КАК СебестоимостьБезНДС,
| ТаблицаТоваров.СебестоимостьРегл КАК СебестоимостьРегл,
| ТаблицаТоваров.СебестоимостьПР КАК СебестоимостьПР,
| ТаблицаТоваров.СебестоимостьВР КАК СебестоимостьВР
| ИЗ
| ВТТаблицаТоваров КАК ТаблицаТоваров
|
| ОБЪЕДИНИТЬ ВСЕ
|
| ВЫБРАТЬ
| ТаблицаВидыЗапасов.АналитикаУчетаНоменклатуры КАК АналитикаУчетаНоменклатуры,
| ТаблицаВидыЗапасов.НоменклатураОприходование КАК НоменклатураОприходование,
| ТаблицаВидыЗапасов.ХарактеристикаОприходование КАК ХарактеристикаОприходование,
| ТаблицаВидыЗапасов.СтавкаНДС КАК СтавкаНДС,
| ТаблицаВидыЗапасов.ДокументРеализации КАК ДокументРеализации,
| ТаблицаВидыЗапасов.СпособОпределенияСебестоимости КАК СпособОпределенияСебестоимости,
| ТаблицаВидыЗапасов.НомерГТД КАК НомерГТД,
| -ТаблицаВидыЗапасов.Количество КАК Количество,
| -ТаблицаВидыЗапасов.КоличествоПоРНПТ КАК КоличествоПоРНПТ,
| -ТаблицаВидыЗапасов.СуммаСНДС КАК СуммаСНДС,
| -ТаблицаВидыЗапасов.СуммаНДС КАК СуммаНДС,
| -ТаблицаВидыЗапасов.Себестоимость КАК Себестоимость,
| -ТаблицаВидыЗапасов.СебестоимостьБезНДС КАК СебестоимостьБезНДС,
| -ТаблицаВидыЗапасов.СебестоимостьРегл КАК СебестоимостьРегл,
| -ТаблицаВидыЗапасов.СебестоимостьПР КАК СебестоимостьПР,
| -ТаблицаВидыЗапасов.СебестоимостьВР КАК СебестоимостьВР
| ИЗ
| ТаблицаВидыЗапасов КАК ТаблицаВидыЗапасов
|
| ) КАК ТаблицаТоваров
|
| ЛЕВОЕ СОЕДИНЕНИЕ
| ТаблицаВидыЗапасов КАК ТаблицаВидыЗапасов
| ПО
| ТаблицаТоваров.АналитикаУчетаНоменклатуры = ТаблицаВидыЗапасов.АналитикаУчетаНоменклатуры
| И ТаблицаТоваров.НоменклатураОприходование = ТаблицаВидыЗапасов.НоменклатураОприходование
| И ТаблицаТоваров.ХарактеристикаОприходование = ТаблицаВидыЗапасов.ХарактеристикаОприходование
|
|СГРУППИРОВАТЬ ПО
| ТаблицаТоваров.АналитикаУчетаНоменклатуры,
| ТаблицаТоваров.НоменклатураОприходование,
| ТаблицаТоваров.ХарактеристикаОприходование,
| ТаблицаТоваров.СтавкаНДС,
| ТаблицаТоваров.ДокументРеализации,
| ТаблицаТоваров.СпособОпределенияСебестоимости,
| ТаблицаТоваров.НомерГТД
|
|ИМЕЮЩИЕ
| СУММА(ТаблицаТоваров.Количество) <> 0
| ИЛИ СУММА(ТаблицаТоваров.КоличествоПоРНПТ) <> 0
| ИЛИ СУММА(ТаблицаТоваров.СуммаСНДС) <> 0
| ИЛИ СУММА(ТаблицаТоваров.СуммаНДС) <> 0
| ИЛИ СУММА(ТаблицаТоваров.Себестоимость) <> 0
| ИЛИ СУММА(ТаблицаТоваров.СебестоимостьБезНДС) <> 0
| ИЛИ СУММА(ТаблицаТоваров.СебестоимостьРегл) <> 0
| ИЛИ СУММА(ТаблицаТоваров.СебестоимостьПР) <> 0
| ИЛИ СУММА(ТаблицаТоваров.СебестоимостьВР) <> 0
|
|ОБЪЕДИНИТЬ ВСЕ
|
|ВЫБРАТЬ ПЕРВЫЕ 1
| ТаблицаВидыЗапасов.АналитикаУчетаНоменклатуры КАК АналитикаУчетаНоменклатуры
|ИЗ
| ТаблицаВидыЗапасов КАК ТаблицаВидыЗапасов
|ГДЕ
| ТаблицаВидыЗапасов.СкладОтгрузки = ЗНАЧЕНИЕ(Справочник.Склады.ПустаяСсылка)
|;
|////////////////////////////////////////////////////////////////////////////////
|");
Запрос.МенеджерВременныхТаблиц = МенеджерВременныхТаблиц;
Запрос.УстановитьПараметр("ХозяйственнаяОперация", ХозяйственнаяОперация);
РезультатЗапрос = Запрос.Выполнить();
Возврат (Не РезультатЗапрос.Пустой());
КонецФункции
Процедура СформироватьВременнуюТаблицуТоваровИАналитики(МенеджерВременныхТаблиц) Экспорт
Запрос = Новый Запрос("
|ВЫБРАТЬ
| ТаблицаТоваров.АналитикаУчетаНоменклатуры,
| ТаблицаТоваров.Номенклатура,
| ТаблицаТоваров.Характеристика,
| ВЫБОР
| КОГДА ТаблицаТоваров.СтатусУказанияСерий = 14
| ТОГДА ТаблицаТоваров.Серия
| ИНАЧЕ ЗНАЧЕНИЕ(Справочник.СерииНоменклатуры.ПустаяСсылка)
| КОНЕЦ КАК Серия,
| ТаблицаТоваров.Склад,
|
| ЗНАЧЕНИЕ(Справочник.СтруктураПредприятия.ПустаяСсылка) КАК Подразделение,
| ЗНАЧЕНИЕ(Справочник.Пользователи.ПустаяСсылка) КАК Менеджер,
| ЗНАЧЕНИЕ(Справочник.СделкиСКлиентами.ПустаяСсылка) КАК Сделка,
| ТаблицаТоваров.Назначение КАК Назначение,
|
| ЗНАЧЕНИЕ(Справочник.Партнеры.ПустаяСсылка) КАК Партнер,
| ЗНАЧЕНИЕ(Справочник.СоглашенияСПоставщиками.ПустаяСсылка) КАК Соглашение,
| &НалогообложениеНДС КАК НалогообложениеНДС,
|
| ТаблицаТоваров.Количество КАК Количество
|
|ПОМЕСТИТЬ ТаблицаТоваровИАналитики
|ИЗ
| ТаблицаТоваров КАК ТаблицаТоваров
|
| ЛЕВОЕ СОЕДИНЕНИЕ
| ТаблицаДанныхДокумента КАК ТаблицаДанныхДокумента
| ПО
| ИСТИНА
|;
|");
Запрос.УстановитьПараметр("НалогообложениеНДС", НалогообложениеНДС);
Запрос.МенеджерВременныхТаблиц = МенеджерВременныхТаблиц;
Запрос.Выполнить();
КонецПроцедуры
Процедура ЗаполнитьВзаиморасчеты(ВыборкаРасчетыПоОснованию)
Если ХозяйственнаяОперация = Перечисления.ХозяйственныеОперации.ВозвратТоваровОтКлиента
Или ХозяйственнаяОперация = Перечисления.ХозяйственныеОперации.ВозвратОтРозничногоПокупателя
Или ХозяйственнаяОперация = Перечисления.ХозяйственныеОперации.ВозвратТоваровЧерезКомиссионера Тогда
СуммаКРаспределению = ПолучитьСуммуДокумента();
Пока СуммаКРаспределению > 0 И ВыборкаРасчетыПоОснованию.Следующий() Цикл
Если ВыборкаРасчетыПоОснованию.СуммаОстаток > 0 Тогда
НоваяСтрока = РасшифровкаПлатежа.Добавить();
НоваяСтрока.ВалютаВзаиморасчетов = ВыборкаРасчетыПоОснованию.ВалютаВзаиморасчетов;
НоваяСтрока.ОбъектРасчетов = ВыборкаРасчетыПоОснованию.ОбъектРасчетов;
Коэффициенты = РаботаСКурсамивалютУТ.ПолучитьКоэффициентыПересчетаВалюты(
Валюта, ВыборкаРасчетыПоОснованию.ВалютаВзаиморасчетов, ТекущаяДатаСеанса(), Организация);
СуммаПоСтроке = ?(Коэффициенты.КоэффициентПересчетаВВалютуВзаиморасчетов <> 0, ВыборкаРасчетыПоОснованию.СуммаОстаток / Коэффициенты.КоэффициентПересчетаВВалютуВзаиморасчетов, 0);
Если СуммаКРаспределению > СуммаПоСтроке Тогда
НоваяСтрока.Сумма = ВыборкаРасчетыПоОснованию.СуммаОстаток;
Иначе
НоваяСтрока.Сумма = СуммаКРаспределению;
КонецЕсли;
СуммаКРаспределению = СуммаКРаспределению - НоваяСтрока.Сумма;
КонецЕсли;
КонецЦикла;
Если СуммаКРаспределению > 0 Тогда
НоваяСтрока = РасшифровкаПлатежа.Добавить();
НоваяСтрока.ВалютаВзаиморасчетов = Валюта;
НоваяСтрока.Сумма = СуммаКРаспределению;
КонецЕсли;
КонецЕсли;
КонецПроцедуры
Процедура ЗаполнитьВзаиморасчетыПоЗаявкамНаВозврат(ДокументОснование)
УстановитьПривилегированныйРежим(Истина);
Если ХозяйственнаяОперация = Перечисления.ХозяйственныеОперации.ВозвратТоваровОтКлиента Или
ХозяйственнаяОперация = Перечисления.ХозяйственныеОперации.ВозвратОтРозничногоПокупателя Тогда
Запрос = Новый Запрос;
Запрос.МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц();
Запрос.УстановитьПараметр("ДокументОснование", ДокументОснование);
Запрос.Текст =
"ВЫБРАТЬ
| ЗаявкаНаВозвратТоваровОтКлиента.ОбъектРасчетов КАК ОбъектРасчетов
|ПОМЕСТИТЬ ОбъектыРасчетов
|ИЗ
| Документ.ЗаявкаНаВозвратТоваровОтКлиента КАК ЗаявкаНаВозвратТоваровОтКлиента
|ГДЕ
| ЗаявкаНаВозвратТоваровОтКлиента.Ссылка В (&ДокументОснование)
|
|ОБЪЕДИНИТЬ ВСЕ
|
|ВЫБРАТЬ РАЗЛИЧНЫЕ
| ТаблицаТовары.ОбъектРасчетов
|ИЗ
| Документ.РеализацияТоваровУслуг.Товары КАК ТаблицаТовары
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ Документ.ЗаявкаНаВозвратТоваровОтКлиента КАК ЗаявкаНаВозврат
| ПО (ЗаявкаНаВозврат.ДокументРеализации = ТаблицаТовары.Ссылка)
|ГДЕ
| ЗаявкаНаВозврат.Ссылка В (&ДокументОснование)
| И ТаблицаТовары.Ссылка.РеализацияПоЗаказам
| И ТаблицаТовары.ЗаказКлиента <> НЕОПРЕДЕЛЕНО
|;
|
|
|ВЫБРАТЬ
| ЗаявкаНаВозврат.ОбъектРасчетов КАК ОбъектРасчетов
|ПОМЕСТИТЬ ОбъектыРасчетовПоЗаявке
|ИЗ
| Документ.ЗаявкаНаВозвратТоваровОтКлиента КАК ЗаявкаНаВозврат
|ГДЕ
| ЗаявкаНаВозврат.Ссылка В (&ДокументОснование)
|
|ОБЪЕДИНИТЬ ВСЕ
|
|ВЫБРАТЬ РАЗЛИЧНЫЕ
| ТаблицаТовары.ОбъектРасчетов
|ИЗ
| Документ.ЗаявкаНаВозвратТоваровОтКлиента КАК ЗаявкаНаВозврат
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ Документ.РеализацияТоваровУслуг.Товары КАК ТаблицаТовары
| ПО (ТаблицаТовары.ЗаказКлиента = ЗаявкаНаВозврат.Ссылка)
|ГДЕ
| ЗаявкаНаВозврат.Ссылка В (&ДокументОснование)
| И ТаблицаТовары.Ссылка.РеализацияПоЗаказам
| И ТаблицаТовары.ЗаказКлиента <> НЕОПРЕДЕЛЕНО
|;
|
|
|ВЫБРАТЬ
| РасчетыСКлиентами.ОбъектРасчетов КАК ОбъектРасчетов,
| РасчетыСКлиентами.Валюта КАК ВалютаВзаиморасчетов,
| РасчетыСКлиентами.КОплатеОстаток КАК Сумма,
| ЕСТЬNULL(РасчетыСКлиентами.КОплатеОстаток, 0) + ЕСТЬNULL(РасчетыСКлиентами.СуммаОстаток, 0) КАК СуммаОстаток
|ИЗ
| РегистрНакопления.РасчетыСКлиентами.Остатки(
| ,
| ОбъектРасчетов В
| (ВЫБРАТЬ
| ОбъектыРасчетовПоЗаявке.ОбъектРасчетов
| ИЗ
| ОбъектыРасчетовПоЗаявке)) КАК РасчетыСКлиентами
|;
|
|
|ВЫБРАТЬ
| РасчетыСКлиентами.ОбъектРасчетов КАК ОбъектРасчетов,
| РасчетыСКлиентами.Валюта КАК ВалютаВзаиморасчетов,
| РасчетыСКлиентами.КОплатеОстаток КАК Сумма,
| ЕСТЬNULL(РасчетыСКлиентами.СуммаОстаток, 0) КАК СуммаОстаток
|ИЗ
| РегистрНакопления.РасчетыСКлиентами.Остатки(
| ,
| ОбъектРасчетов В
| (ВЫБРАТЬ
| ОбъектыРасчетов.ОбъектРасчетов
| ИЗ
| ОбъектыРасчетов)) КАК РасчетыСКлиентами";
МассивРезультатов = Запрос.ВыполнитьПакет();
РезультатРасчетыПоЗаявке = МассивРезультатов[2];
РезультатРасчетыПоОснованиюЗаявки = МассивРезультатов[3];
ВыборкаРасчетыПоЗаявке = РезультатРасчетыПоЗаявке.Выбрать();
ВыборкаРасчетыПоОснованиюЗаявки = РезультатРасчетыПоОснованиюЗаявки.Выбрать();
СуммаКРаспределению = ПолучитьСуммуДокумента();
Пока СуммаКРаспределению > 0 И ВыборкаРасчетыПоОснованиюЗаявки.Следующий() Цикл
Если ВыборкаРасчетыПоОснованиюЗаявки.СуммаОстаток > 0 Тогда
НоваяСтрока = РасшифровкаПлатежа.Добавить();
НоваяСтрока.ВалютаВзаиморасчетов = ВыборкаРасчетыПоОснованиюЗаявки.ВалютаВзаиморасчетов;
НоваяСтрока.ОбъектРасчетов = ВыборкаРасчетыПоОснованиюЗаявки.ОбъектРасчетов;
Коэффициенты = РаботаСКурсамивалютУТ.ПолучитьКоэффициентыПересчетаВалюты(
Валюта, ВыборкаРасчетыПоОснованиюЗаявки.ВалютаВзаиморасчетов, ТекущаяДатаСеанса(), Организация);
СуммаПоСтроке = ?(
Коэффициенты.КоэффициентПересчетаВВалютуВзаиморасчетов <> 0,
ВыборкаРасчетыПоОснованиюЗаявки.СуммаОстаток / Коэффициенты.КоэффициентПересчетаВВалютуВзаиморасчетов,
0);
Если СуммаКРаспределению > СуммаПоСтроке Тогда
НоваяСтрока.Сумма = СуммаПоСтроке;
Иначе
НоваяСтрока.Сумма = СуммаКРаспределению;
КонецЕсли;
СуммаКРаспределению = СуммаКРаспределению - НоваяСтрока.Сумма;
КонецЕсли;
КонецЦикла;
Если СуммаКРаспределению > 0 И ВыборкаРасчетыПоЗаявке.Следующий() Тогда
Если ВыборкаРасчетыПоЗаявке.СуммаОстаток > 0 Тогда
НоваяСтрока = РасшифровкаПлатежа.Добавить();
НоваяСтрока.ВалютаВзаиморасчетов = ВыборкаРасчетыПоЗаявке.ВалютаВзаиморасчетов;
НоваяСтрока.ОбъектРасчетов = ВыборкаРасчетыПоЗаявке.ОбъектРасчетов;
Если СуммаКРаспределению > ВыборкаРасчетыПоЗаявке.СуммаОстаток Тогда
НоваяСтрока.Сумма = ВыборкаРасчетыПоЗаявке.СуммаОстаток;
Иначе
НоваяСтрока.Сумма = СуммаКРаспределению;
КонецЕсли;
СуммаКРаспределению = СуммаКРаспределению - НоваяСтрока.Сумма;
КонецЕсли;
КонецЕсли;
Если СуммаКРаспределению > 0 Тогда
НоваяСтрока = РасшифровкаПлатежа.Добавить();
НоваяСтрока.ВалютаВзаиморасчетов = Валюта;
НоваяСтрока.ОбъектРасчетов = Неопределено;
НоваяСтрока.Сумма = СуммаКРаспределению;
КонецЕсли;
РасшифровкаПлатежа.Свернуть("ОбъектРасчетов, ВалютаВзаиморасчетов", "Сумма");
КонецЕсли;
КонецПроцедуры
Процедура ЗаполнитьСебестоимостьВидовЗапасов(СоответствиеТиповНоменклатуры, ДокументСодержитОборотнуюТару)
Если ДокументСодержитОборотнуюТару Тогда
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ТаблицаВидыЗапасов.АналитикаУчетаНоменклатуры КАК АналитикаУчетаНоменклатуры
|ПОМЕСТИТЬ ТаблицаВидыЗапасов
|ИЗ
| &ТаблицаВидыЗапасов КАК ТаблицаВидыЗапасов
|;
|
|
|ВЫБРАТЬ РАЗЛИЧНЫЕ
| ТаблицаВидыЗапасов.АналитикаУчетаНоменклатуры КАК АналитикаУчетаНоменклатуры,
| Аналитика.Номенклатура КАК Номенклатура,
| Аналитика.Характеристика КАК Характеристика
|ИЗ
| ТаблицаВидыЗапасов КАК ТаблицаВидыЗапасов
| ЛЕВОЕ СОЕДИНЕНИЕ Справочник.КлючиАналитикиУчетаНоменклатуры КАК Аналитика
| ПО ТаблицаВидыЗапасов.АналитикаУчетаНоменклатуры = Аналитика.Ссылка
|
| ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Номенклатура КАК ДанныеНоменклатуры
| ПО Аналитика.Номенклатура = ДанныеНоменклатуры.Ссылка
|
|ГДЕ
| ДанныеНоменклатуры.ТипНоменклатуры = ЗНАЧЕНИЕ(Перечисление.ТипыНоменклатуры.МногооборотнаяТара)";
Запрос.УстановитьПараметр("ТаблицаВидыЗапасов", ВидыЗапасов.Выгрузить());
РезультатЗапроса = Запрос.Выполнить();
ДанныеАналитики = РезультатЗапроса.Выгрузить();
ДанныеАналитики.Индексы.Добавить("Номенклатура, Характеристика");
КонецЕсли;
ТаблицаЗапасов = ВидыЗапасов.Выгрузить();
ТаблицаЗапасов.Колонки.Добавить("КорАналитикаУчетаНоменклатуры",
Новый ОписаниеТипов("СправочникСсылка.КлючиАналитикиУчетаНоменклатуры"));
Для Каждого СтрокаТоваров Из Товары Цикл
КоличествоТоваровВСтроке = СтрокаТоваров.Количество;
КоличествоУпаковокВСтроке = СтрокаТоваров.КоличествоУпаковок;
СуммаСНДСВСтроке = СтрокаТоваров.СуммаСНДС;
СуммаНДСВСтроке = СтрокаТоваров.СуммаНДС;
СебестоимостьВСтроке = СтрокаТоваров.Себестоимость;
СебестоимостьБезНДСВСтроке = СтрокаТоваров.СебестоимостьБезНДС;
СебестоимостьРеглВСтроке = СтрокаТоваров.СебестоимостьРегл;
СебестоимостьПРВСтроке = СтрокаТоваров.СебестоимостьПР;
СебестоимостьВРВСтроке = СтрокаТоваров.СебестоимостьВР;
СтруктураПоиска = ?(ЗначениеЗаполнено(СтрокаТоваров.ДокументРеализации),
Новый Структура("АналитикаУчетаНоменклатуры, ДокументРеализации"),
Новый Структура("АналитикаУчетаНоменклатуры"));
ЗаполнитьЗначенияСвойств(СтруктураПоиска, СтрокаТоваров);
Если ДокументСодержитОборотнуюТару Тогда
ТипНоменклатуры = СоответствиеТиповНоменклатуры.Получить(СтрокаТоваров.Номенклатура);
Если ТипНоменклатуры = Перечисления.ТипыНоменклатуры.МногооборотнаяТара Тогда
КлючДанных = Новый Структура("Номенклатура, Характеристика");
ЗаполнитьЗначенияСвойств(КлючДанных, СтрокаТоваров);
СтрокиОтбора = ДанныеАналитики.НайтиСтроки(КлючДанных);
Если СтрокиОтбора.Количество() > 0 Тогда
СтруктураПоиска.АналитикаУчетаНоменклатуры = СтрокиОтбора[0].АналитикаУчетаНоменклатуры;
КонецЕсли;
КонецЕсли;
КонецЕсли;
Для Каждого СтрокаЗапасов Из ТаблицаЗапасов.НайтиСтроки(СтруктураПоиска) Цикл
Если СтрокаЗапасов.Количество = 0 Тогда
Продолжить;
КонецЕсли;
Количество = Мин(КоличествоТоваровВСтроке, СтрокаЗапасов.Количество);
НоваяСтрока = ТаблицаЗапасов.Добавить();
ЗаполнитьЗначенияСвойств(НоваяСтрока, СтрокаЗапасов);
НоваяСтрока.КорАналитикаУчетаНоменклатуры = СтрокаТоваров.АналитикаУчетаНоменклатуры;
НоваяСтрока.АналитикаУчетаНаборов = СтрокаТоваров.АналитикаУчетаНаборов;
НоваяСтрока.СпособОпределенияСебестоимости = СтрокаТоваров.СпособОпределенияСебестоимости;
НоваяСтрока.Количество = Количество;
НоваяСтрока.КоличествоПоРНПТ = Количество * СтрокаЗапасов.КоличествоПоРНПТ
/ СтрокаЗапасов.Количество;
НоваяСтрока.Упаковка = СтрокаТоваров.Упаковка;
НоваяСтрока.КоличествоУпаковок = ?(Количество = КоличествоТоваровВСтроке,
КоличествоУпаковокВСтроке,
КоличествоУпаковокВСтроке * Количество / КоличествоТоваровВСтроке);
НоваяСтрока.СуммаСНДС = ?(Количество = КоличествоТоваровВСтроке,
СуммаСНДСВСтроке,
Количество * СуммаСНДСВСтроке / КоличествоТоваровВСтроке);
НоваяСтрока.СуммаНДС = ?(Количество = КоличествоТоваровВСтроке,
СуммаНДСВСтроке,
Количество * СуммаНДСВСтроке / КоличествоТоваровВСтроке);
НоваяСтрока.Себестоимость = ?(Количество = КоличествоТоваровВСтроке,
СебестоимостьВСтроке,
Количество * СебестоимостьВСтроке / КоличествоТоваровВСтроке);
НоваяСтрока.СебестоимостьБезНДС = ?(Количество = КоличествоТоваровВСтроке,
СебестоимостьБезНДСВСтроке,
Количество * СебестоимостьБезНДСВСтроке / КоличествоТоваровВСтроке);
НоваяСтрока.СебестоимостьРегл = ?(Количество = КоличествоТоваровВСтроке,
СебестоимостьРеглВСтроке,
Количество * СебестоимостьРеглВСтроке / КоличествоТоваровВСтроке);
НоваяСтрока.СебестоимостьПР = ?(Количество = КоличествоТоваровВСтроке,
СебестоимостьПРВСтроке,
Количество * СебестоимостьПРВСтроке / КоличествоТоваровВСтроке);
НоваяСтрока.СебестоимостьВР = ?(Количество = КоличествоТоваровВСтроке,
СебестоимостьВРВСтроке,
Количество * СебестоимостьВРВСтроке / КоличествоТоваровВСтроке);
СтрокаЗапасов.КорАналитикаУчетаНоменклатуры = СтрокаТоваров.АналитикаУчетаНоменклатуры;
СтрокаЗапасов.Количество = СтрокаЗапасов.Количество - НоваяСтрока.Количество;
СтрокаЗапасов.КоличествоПоРНПТ = СтрокаЗапасов.КоличествоПоРНПТ - НоваяСтрока.КоличествоПоРНПТ;
СтрокаЗапасов.КоличествоУпаковок = СтрокаЗапасов.КоличествоУпаковок - НоваяСтрока.КоличествоУпаковок;
СтрокаЗапасов.СуммаСНДС = СтрокаЗапасов.СуммаСНДС- НоваяСтрока.СуммаСНДС;
СтрокаЗапасов.СуммаНДС = СтрокаЗапасов.СуммаНДС - НоваяСтрока.СуммаНДС;
СтрокаЗапасов.Себестоимость = СтрокаЗапасов.Себестоимость - НоваяСтрока.Себестоимость;
СтрокаЗапасов.СебестоимостьБезНДС = СтрокаЗапасов.СебестоимостьБезНДС - НоваяСтрока.СебестоимостьБезНДС;
СтрокаЗапасов.СебестоимостьРегл = СтрокаЗапасов.СебестоимостьРегл - НоваяСтрока.СебестоимостьРегл;
СтрокаЗапасов.СебестоимостьПР = СтрокаЗапасов.СебестоимостьПР - НоваяСтрока.СебестоимостьПР;
СтрокаЗапасов.СебестоимостьВР = СтрокаЗапасов.СебестоимостьВР - НоваяСтрока.СебестоимостьВР;
КоличествоТоваровВСтроке = КоличествоТоваровВСтроке - НоваяСтрока.Количество;
КоличествоУпаковокВСтроке = КоличествоУпаковокВСтроке - НоваяСтрока.КоличествоУпаковок;
СуммаСНДСВСтроке = СуммаСНДСВСтроке - НоваяСтрока.СуммаСНДС;
СуммаНДСВСтроке = СуммаНДСВСтроке - НоваяСтрока.СуммаНДС;
СебестоимостьВСтроке = СебестоимостьВСтроке - НоваяСтрока.Себестоимость;
СебестоимостьБезНДСВСтроке = СебестоимостьБезНДСВСтроке - НоваяСтрока.СебестоимостьБезНДС;
СебестоимостьРеглВСтроке = СебестоимостьРеглВСтроке - НоваяСтрока.СебестоимостьРегл;
СебестоимостьПРВСтроке = СебестоимостьПРВСтроке - НоваяСтрока.СебестоимостьПР;
СебестоимостьВРВСтроке = СебестоимостьВРВСтроке - НоваяСтрока.СебестоимостьВР;
Если КоличествоТоваровВСтроке = 0 Тогда
Прервать;
КонецЕсли;
КонецЦикла;
КонецЦикла;
Если ДокументСодержитОборотнуюТару Тогда
Для Каждого СтрокаТаблицы Из ТаблицаЗапасов Цикл
Если Не ЗначениеЗаполнено(СтрокаТаблицы.КорАналитикаУчетаНоменклатуры) Тогда
Продолжить;
КонецЕсли;
СтрокаТаблицы.АналитикаУчетаНоменклатуры = СтрокаТаблицы.КорАналитикаУчетаНоменклатуры;
КонецЦикла;
КонецЕсли;
ВидыЗапасов.Загрузить(ТаблицаЗапасов);
ПараметрыПоиска = Новый Структура("Количество", 0);
МассивУдаляемыхСтрок = ВидыЗапасов.НайтиСтроки(ПараметрыПоиска);
Для Каждого СтрокаТаблицы Из МассивУдаляемыхСтрок Цикл
ВидыЗапасов.Удалить(СтрокаТаблицы);
КонецЦикла;
КонецПроцедуры
Процедура ОчиститьСпособОпределенияСебестоимостиИДокументРеализации()
Если ХозяйственнаяОперация = Перечисления.ХозяйственныеОперации.ВозвратОтКомиссионера Тогда
СоответствиеНоменклатураТип = ОбщегоНазначения.ЗначениеРеквизитаОбъектов(Товары.ВыгрузитьКолонку("Номенклатура"), "ТипНоменклатуры");
Для Каждого СтрТовары Из Товары Цикл
Если СоответствиеНоменклатураТип.Получить(СтрТовары.Номенклатура) = Перечисления.ТипыНоменклатуры.МногооборотнаяТара
И ВозвратПереданнойМногооборотнойТары Тогда
Иначе
СтрТовары.СпособОпределенияСебестоимости = Перечисления.СпособыОпределенияСебестоимостиВозврата.ИзТекущегоДокумента;
КонецЕсли;
КонецЦикла;
Иначе
Для Каждого СтрТабл Из Товары Цикл
Если СтрТабл.СпособОпределенияСебестоимости <> Перечисления.СпособыОпределенияСебестоимостиВозврата.ИзДокументаПродажи Тогда
СтрТабл.ДокументРеализации = Неопределено;
КонецЕсли;
КонецЦикла;
КонецЕсли;
КонецПроцедуры
Процедура ЗаполнитьНомераГТДПоРаспоряжениям(ЦенаВключаетНДС, ПересчитатьСуммовыеПоказатели = Истина)
ПараметрыЗаполнения = ЗакупкиСервер.ПараметрыЗаполненияНомеровГТДПоУчетнымДанным();
ПараметрыЗапроса = ПараметрыЗаполнения.ПараметрыЗапроса;
ПараметрыЗапроса.Ссылка = Ссылка;
ПараметрыПересчетаСуммы = ПакетнаяОбработкаТабличнойЧастиКлиентСервер.ПараметрыПересчетаСуммыНДСВСтрокеТЧ(ЭтотОбъект);
ДействияСоСтрокой = Новый Структура;
ДействияСоСтрокой.Вставить("ПересчитатьСумму");
ДействияСоСтрокой.Вставить("ПересчитатьСуммуНДС", ПараметрыПересчетаСуммы);
ДействияСоСтрокой.Вставить("ПересчитатьСуммуСНДС", ПараметрыПересчетаСуммы);
Если ПересчитатьСуммовыеПоказатели Тогда
ПараметрыЗаполнения.ДействияСоСтрокой = ДействияСоСтрокой;
КонецЕсли;
ПараметрыЗаполнения.ИмяПоляРаспоряжение = "ДокументРеализации";
ЗакупкиСервер.ЗаполнитьНомераГТДПоУчетнымДанным(Товары, "ПоРаспоряжениям", ПараметрыЗаполнения);
Если Не ПересчитатьСуммовыеПоказатели Тогда
ПакетнаяОбработкаТабличнойЧастиСервер.ОбработатьТЧ(Товары, ДействияСоСтрокой, Неопределено);
КонецЕсли;
КонецПроцедуры
Процедура ПересчитатьКоличествоРНПТ()
ИмяПоляМестоХранения = ?(ХозяйственнаяОперация = Перечисления.ХозяйственныеОперации.ВозвратОтКомиссионера,
"Партнер",
"Склад");
ПараметрыПолученияКоэффициентаРНПТ = УчетПрослеживаемыхТоваровКлиентСерверЛокализация.ПараметрыПолученияКоэффициентаРНПТ(
ЭтотОбъект,
ИмяПоляМестоХранения);
УчетПрослеживаемыхТоваровЛокализация.ЗаполнитьКоличествоПоРНПТВТабличнойЧасти(ПараметрыПолученияКоэффициентаРНПТ,
Товары);
КонецПроцедуры
#КонецОбласти
#КонецОбласти
#КонецЕсли