#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда
#Область ПрограммныйИнтерфейс
Функция УстановитьСтатус(НовыйСтатус, ДополнительныеПараметры) Экспорт
ДатаПерехода = Дата('00010101');
Если ДополнительныеПараметры <> Неопределено Тогда
ДополнительныеПараметры.Свойство("НоваяДата", ДатаПерехода);
КонецЕсли;
ТекущийСтатус = Статус;
Статус = Перечисления.СтатусыРеализацийТоваровУслуг[НовыйСтатус];
ПараметрыУказанияСерий = НоменклатураСервер.ПараметрыУказанияСерий(ЭтотОбъект, Документы.РеализацияТоваровУслуг);
НоменклатураСервер.ЗаполнитьСтатусыУказанияСерий(ЭтотОбъект, ПараметрыУказанияСерий);
Отказ = Ложь;
ПараметрыПроверкиЗаполненияСерий = НоменклатураСервер.ПараметрыПроверкиЗаполненияСерий();
ПараметрыПроверкиЗаполненияСерий.ВыдаватьСообщения = Ложь;
НоменклатураСервер.ПроверитьЗаполнениеСерий(ЭтотОбъект,ПараметрыУказанияСерий,Отказ,,ПараметрыПроверкиЗаполненияСерий);
Если Отказ Тогда
ТекстСообщения = НСтр("ru = 'Статус ""%Статус%"" не установлен - есть товары, по которым нужно указать серии.'");
ТекстСообщения = СтрЗаменить(ТекстСообщения,"%Статус%",Статус);
ОбщегоНазначения.СообщитьПользователю(ТекстСообщения);
Статус = ТекущийСтатус;
Иначе
Если ЗначениеЗаполнено(ДатаПерехода) Тогда
Если ХозяйственнаяОперация = Перечисления.ХозяйственныеОперации.РеализацияБезПереходаПраваСобственности
Или ХозяйственнаяОперация = Перечисления.ХозяйственныеОперации.РеализацияЧерезКомиссионераБезПереходаПраваСобственности Тогда
ДатаПереходаПраваСобственности = ДатаПерехода;
КонецЕсли;
ЕстьЗависимыеЭтапы = ЭтапыГрафикаОплаты.НайтиСтроки(Новый Структура("ВариантОтсчета",Перечисления.ВариантыОтсчетаДатыПлатежа.ОтДатыПереходаПраваСобственности)).Количество() > 0;
Если ПолучитьФункциональнуюОпцию("ИспользоватьСоглашенияСКлиентами") Тогда
РеквизитыСоглашения = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(Соглашение,
"СрокВозвратаМногооборотнойТары, РассчитыватьДатуВозвратаТарыПоКалендарю, КалендарьВозвратаТары, Календарь");
ДатаВозвратаМногооборотнойТары = МногооборотнаяТараСервер.РассчитатьДатуВозвратаМногооборотнойТары(
ЭтотОбъект,
РеквизитыСоглашения.СрокВозвратаМногооборотнойТары,
РеквизитыСоглашения.РассчитыватьДатуВозвратаТарыПоКалендарю,
РеквизитыСоглашения.КалендарьВозвратаТары);
Для Каждого Стр Из ЭтапыГрафикаОплаты Цикл
Если Стр.ВариантОтсчета = Перечисления.ВариантыОтсчетаДатыПлатежа.ОтДатыПереходаПраваСобственности Тогда
ПараметрыЗаполненияДатыПлатежа = ЭтапыОплатыКлиентСервер.ПараметрыРасчетаДатыПлатежа();
ПараметрыЗаполненияДатыПлатежа.ВариантОтсчета = Стр.ВариантОтсчета;
ПараметрыЗаполненияДатыПлатежа.ДатаЗаказа = Дата(1,1,1);
ПараметрыЗаполненияДатыПлатежа.ДатаОтгрузки = Дата;
ПараметрыЗаполненияДатыПлатежа.ДатаПереходаПраваСобственности = ДатаПереходаПраваСобственности;
ПараметрыЗаполненияДатыПлатежа.ДатаСогласования = Дата(1,1,1);
ПараметрыЗаполненияДатыПлатежа.Календарь = РеквизитыСоглашения.Календарь;
ПараметрыЗаполненияДатыПлатежа.Сдвиг = Стр.Сдвиг;
ПараметрыЗаполненияДатыПлатежа.СрокПереходаПраваСобственности = 0;
Если ЗначениеЗаполнено(РеквизитыСоглашения.Календарь) Тогда
Стр.ДатаПлатежа = ЭтапыОплатыВызовСервера.ДатаПлатежаПоКалендарю(ПараметрыЗаполненияДатыПлатежа);
Иначе
Стр.ДатаПлатежа = ЭтапыОплатыКлиентСервер.ДатаПлатежаБезКалендаря(ПараметрыЗаполненияДатыПлатежа);
КонецЕсли;
КонецЕсли;
КонецЦикла;
УсловияПродаж = ПродажиСервер.ПолучитьУсловияПродаж(Соглашение, Истина, Истина);
Иначе
УсловияПродаж = ПродажиСервер.ПолучитьУсловияПродажПоУмолчанию(
Партнер,
Новый Структура("ИсключитьГруппыСкладовДоступныеВЗаказах, ВыбранноеСоглашение, ХозяйственныеОперации",
Истина,
Соглашение,
ПредопределенноеЗначение("Перечисление.ХозяйственныеОперации.РеализацияКлиенту")));
Для Каждого Стр Из ЭтапыГрафикаОплаты Цикл
Если Стр.ВариантОтсчета = Перечисления.ВариантыОтсчетаДатыПлатежа.ОтДатыПереходаПраваСобственности Тогда
ПараметрыЗаполненияДатыПлатежа = ЭтапыОплатыКлиентСервер.ПараметрыРасчетаДатыПлатежа();
ПараметрыЗаполненияДатыПлатежа.ВариантОтсчета = Стр.ВариантОтсчета;
ПараметрыЗаполненияДатыПлатежа.ДатаЗаказа = Дата(1,1,1);
ПараметрыЗаполненияДатыПлатежа.ДатаОтгрузки = Дата;
ПараметрыЗаполненияДатыПлатежа.ДатаПереходаПраваСобственности = ДатаПереходаПраваСобственности;
ПараметрыЗаполненияДатыПлатежа.ДатаСогласования = Дата(1,1,1);
ПараметрыЗаполненияДатыПлатежа.Календарь = РеквизитыСоглашения.Календарь;
ПараметрыЗаполненияДатыПлатежа.Сдвиг = Стр.Сдвиг;
ПараметрыЗаполненияДатыПлатежа.СрокПереходаПраваСобственности = 0;
Стр.ДатаПлатежа = ЭтапыОплатыКлиентСервер.ДатаПлатежаБезКалендаря(ПараметрыЗаполненияДатыПлатежа);
КонецЕсли;
КонецЦикла;
КонецЕсли;
КонецЕсли;
КонецЕсли;
ПараметрыУказанияСерий = НоменклатураСервер.ПараметрыУказанияСерий(ЭтотОбъект, Документы.РеализацияТоваровУслуг);
НоменклатураСервер.ЗаполнитьСтатусыУказанияСерий(ЭтотОбъект, ПараметрыУказанияСерий);
Возврат Не Отказ;
КонецФункции
Функция ВременныеТаблицыДанныхДокумента() Экспорт
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| &Дата КАК Дата,
| &Организация КАК Организация,
| НЕОПРЕДЕЛЕНО КАК Партнер,
| НЕОПРЕДЕЛЕНО КАК Контрагент,
| ЗНАЧЕНИЕ(Справочник.СоглашенияСПоставщиками.ПустаяСсылка) КАК Соглашение,
| ЗНАЧЕНИЕ(Справочник.ДоговорыКонтрагентов.ПустаяСсылка) КАК Договор,
| ЗНАЧЕНИЕ(Справочник.Валюты.ПустаяСсылка) КАК Валюта,
| &НалогообложениеНДС КАК НалогообложениеНДС,
| &ХозяйственнаяОперация КАК ХозяйственнаяОперация,
| ЛОЖЬ КАК ЕстьСделкиВТабличнойЧасти,
| ВЫБОР
| КОГДА СтруктураПредприятия.ВариантОбособленногоУчетаТоваров = ЗНАЧЕНИЕ(Перечисление.ВариантыОбособленногоУчетаТоваров.ПоПодразделению)
| И &ФормироватьВидыЗапасовПоПодразделениямМенеджерам
| ТОГДА &Подразделение
| ИНАЧЕ ЗНАЧЕНИЕ(Справочник.СтруктураПредприятия.ПустаяСсылка)
| КОНЕЦ КАК Подразделение,
| ВЫБОР
| КОГДА СтруктураПредприятия.ВариантОбособленногоУчетаТоваров = ЗНАЧЕНИЕ(Перечисление.ВариантыОбособленногоУчетаТоваров.ПоМенеджерамПодразделения)
| И &ФормироватьВидыЗапасовПоПодразделениямМенеджерам
| ТОГДА &Менеджер
| ИНАЧЕ ЗНАЧЕНИЕ(Справочник.Пользователи.ПустаяСсылка)
| КОНЕЦ КАК Менеджер,
| ВЫБОР
| КОГДА СделкиСКлиентами.ОбособленныйУчетТоваровПоСделке
| И &ФормироватьВидыЗапасовПоСделкам
| ТОГДА &Сделка
| ИНАЧЕ ЗНАЧЕНИЕ(Справочник.СделкиСКлиентами.ПустаяСсылка)
| КОНЕЦ КАК Сделка,
| ЗНАЧЕНИЕ(Перечисление.ТипыЗапасов.Товар) КАК ТипЗапасов
|ПОМЕСТИТЬ ТаблицаДанныхДокумента
|ИЗ
| Справочник.Организации КАК Организации
| ЛЕВОЕ СОЕДИНЕНИЕ Справочник.СтруктураПредприятия КАК СтруктураПредприятия
| ПО СтруктураПредприятия.Ссылка = &Подразделение
|
| ЛЕВОЕ СОЕДИНЕНИЕ Справочник.СделкиСКлиентами КАК СделкиСКлиентами
| ПО СделкиСКлиентами.Ссылка = &Сделка
|
|ГДЕ
| Организации.Ссылка = &Организация
|;
|
|
|ВЫБРАТЬ
| ТаблицаТоваров.НомерСтроки КАК НомерСтроки,
| ТаблицаТоваров.Номенклатура КАК Номенклатура,
| ТаблицаТоваров.Характеристика КАК Характеристика,
| ТаблицаТоваров.Назначение КАК Назначение,
| ТаблицаТоваров.Серия КАК Серия,
| ТаблицаТоваров.СтатусУказанияСерий КАК СтатусУказанияСерий,
| ТаблицаТоваров.АналитикаУчетаНоменклатуры КАК АналитикаУчетаНоменклатуры,
| ТаблицаТоваров.АналитикаУчетаНаборов КАК АналитикаУчетаНаборов,
| ТаблицаТоваров.Количество КАК Количество,
| ВЫБОР
| КОГДА НЕ &ИспользоватьУчетПрослеживаемыхИмпортныхТоваров
| ИЛИ НАЧАЛОПЕРИОДА(&Дата, МЕСЯЦ) < &ДатаНачалаУчетаПрослеживаемыхИмпортныхТоваров
| ТОГДА 0
| ИНАЧЕ &ТекстПоляТаблицаТоваровКоличествоПоРНПТ_
| КОНЕЦ КАК КоличествоПоРНПТ,
| ТаблицаТоваров.КоличествоУпаковок КАК КоличествоУпаковок,
| ТаблицаТоваров.Склад КАК Склад,
| ТаблицаТоваров.СтавкаНДС КАК СтавкаНДС,
| ТаблицаТоваров.КодТНВЭД КАК КодТНВЭД,
| ТаблицаТоваров.Упаковка КАК Упаковка,
| ТаблицаТоваров.Цена КАК Цена,
| ТаблицаТоваров.Сумма + (ТаблицаТоваров.СуммаНДС * &ЦенаВключаетНДС) КАК СуммаСНДС,
| ТаблицаТоваров.СуммаНДС КАК СуммаНДС,
| ТаблицаТоваров.СуммаНДСРегл КАК СуммаНДСРегл,
| ТаблицаТоваров.СуммаНДСУпр КАК СуммаНДСУпр,
| ТаблицаТоваров.СуммаВзаиморасчетов КАК СуммаВзаиморасчетов,
| ТаблицаТоваров.СуммаРучнойСкидки КАК СуммаРучнойСкидки,
| ТаблицаТоваров.СуммаАвтоматическойСкидки КАК СуммаАвтоматическойСкидки,
| 0 КАК СуммаВознаграждения,
| 0 КАК СуммаНДСВознаграждения,
| &Сделка КАК Сделка,
| ТаблицаТоваров.ЗаказКлиента КАК Заказ,
| ТаблицаТоваров.ОбъектРасчетов КАК ОбъектРасчетов,
| &ТекстПоляТаблицаТоваровНомерГТД_ КАК НомерГТД,
| ТаблицаТоваров.НоменклатураПартнера КАК НоменклатураПартнера
|ПОМЕСТИТЬ ВтТаблицаТоваров
|ИЗ
| &ТаблицаТоваров КАК ТаблицаТоваров
|;
|
|
|ВЫБРАТЬ
| ТаблицаТоваров.НомерСтроки КАК НомерСтроки,
| ТаблицаТоваров.Номенклатура КАК Номенклатура,
| ТаблицаТоваров.Характеристика КАК Характеристика,
| ТаблицаТоваров.Серия КАК Серия,
| ТаблицаТоваров.СтатусУказанияСерий КАК СтатусУказанияСерий,
| ТаблицаТоваров.АналитикаУчетаНоменклатуры КАК АналитикаУчетаНоменклатуры,
| ТаблицаТоваров.АналитикаУчетаНаборов КАК АналитикаУчетаНаборов,
| ТаблицаТоваров.Количество КАК Количество,
| ТаблицаТоваров.КоличествоПоРНПТ КАК КоличествоПоРНПТ,
| ТаблицаТоваров.КоличествоУпаковок КАК КоличествоУпаковок,
| ВЫБОР
| КОГДА &РеализацияЧерезКомиссионера
| ТОГДА Аналитика.МестоХранения
| ИНАЧЕ ТаблицаТоваров.Склад
| КОНЕЦ КАК Склад,
| ТаблицаТоваров.Заказ КАК ЗаказКлиента,
| ТаблицаТоваров.ОбъектРасчетов КАК ОбъектРасчетов,
| ТаблицаТоваров.СтавкаНДС КАК СтавкаНДС,
| ТаблицаТоваров.КодТНВЭД КАК КодТНВЭД,
| ТаблицаТоваров.Упаковка КАК Упаковка,
| ТаблицаТоваров.Цена КАК Цена,
| ТаблицаТоваров.СуммаСНДС КАК СуммаСНДС,
| ТаблицаТоваров.СуммаНДС КАК СуммаНДС,
| ТаблицаТоваров.СуммаНДСРегл КАК СуммаНДСРегл,
| ТаблицаТоваров.СуммаНДСУпр КАК СуммаНДСУпр,
| ТаблицаТоваров.СуммаВзаиморасчетов КАК СуммаВзаиморасчетов,
| ТаблицаТоваров.СуммаРучнойСкидки КАК СуммаРучнойСкидки,
| ТаблицаТоваров.СуммаАвтоматическойСкидки КАК СуммаАвтоматическойСкидки,
| 0 КАК СуммаВознаграждения,
| 0 КАК СуммаНДСВознаграждения,
| &Сделка КАК Сделка,
| ТаблицаТоваров.Назначение КАК Назначение,
| ИСТИНА КАК ПодбиратьВидыЗапасов,
| ТаблицаТоваров.НомерГТД КАК НомерГТД,
| ТаблицаТоваров.НоменклатураПартнера КАК НоменклатураПартнера
|ПОМЕСТИТЬ ТаблицаТоваров
|ИЗ
| ВтТаблицаТоваров КАК ТаблицаТоваров
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.Номенклатура КАК СправочникНоменклатура
| ПО ТаблицаТоваров.Номенклатура = СправочникНоменклатура.Ссылка
|
| ЛЕВОЕ СОЕДИНЕНИЕ Справочник.КлючиАналитикиУчетаНоменклатуры КАК Аналитика
| ПО ТаблицаТоваров.АналитикаУчетаНоменклатуры = Аналитика.Ссылка
|ГДЕ
| СправочникНоменклатура.ТипНоменклатуры В(ЗНАЧЕНИЕ(Перечисление.ТипыНоменклатуры.Товар),
| ЗНАЧЕНИЕ(Перечисление.ТипыНоменклатуры.МногооборотнаяТара))
|
|ОБЪЕДИНИТЬ ВСЕ
|
|ВЫБРАТЬ
| ТаблицаТоваров.НомерСтроки КАК НомерСтроки,
| ТаблицаТоваров.Номенклатура КАК Номенклатура,
| ТаблицаТоваров.Характеристика КАК Характеристика,
| ТаблицаТоваров.Серия КАК Серия,
| ТаблицаТоваров.СтатусУказанияСерий КАК СтатусУказанияСерий,
| ТаблицаТоваров.АналитикаУчетаНоменклатуры КАК АналитикаУчетаНоменклатуры,
| ТаблицаТоваров.АналитикаУчетаНаборов КАК АналитикаУчетаНаборов,
| ТаблицаТоваров.Количество КАК Количество,
| ТаблицаТоваров.КоличествоПоРНПТ КАК КоличествоПоРНПТ,
| ТаблицаТоваров.КоличествоУпаковок КАК КоличествоУпаковок,
| Аналитика.МестоХранения КАК Склад,
| ТаблицаТоваров.Заказ КАК ЗаказКлиента,
| ТаблицаТоваров.ОбъектРасчетов КАК ОбъектРасчетов,
| ТаблицаТоваров.СтавкаНДС КАК СтавкаНДС,
| ТаблицаТоваров.КодТНВЭД КАК КодТНВЭД,
| ТаблицаТоваров.Упаковка КАК Упаковка,
| ТаблицаТоваров.Цена КАК Цена,
| ТаблицаТоваров.СуммаСНДС КАК СуммаСНДС,
| ТаблицаТоваров.СуммаНДС КАК СуммаНДС,
| ТаблицаТоваров.СуммаНДСРегл КАК СуммаНДСРегл,
| ТаблицаТоваров.СуммаНДСУпр КАК СуммаНДСУпр,
| ТаблицаТоваров.СуммаВзаиморасчетов КАК СуммаВзаиморасчетов,
| ТаблицаТоваров.СуммаРучнойСкидки КАК СуммаРучнойСкидки,
| ТаблицаТоваров.СуммаАвтоматическойСкидки КАК СуммаАвтоматическойСкидки,
| 0 КАК СуммаВознаграждения,
| 0 КАК СуммаНДСВознаграждения,
| &Сделка КАК Сделка,
| ТаблицаТоваров.Назначение КАК Назначение,
| ИСТИНА КАК ПодбиратьВидыЗапасов,
| ТаблицаТоваров.НомерГТД КАК НомерГТД,
| ТаблицаТоваров.НоменклатураПартнера КАК НоменклатураПартнера
|ИЗ
| ВтТаблицаТоваров КАК ТаблицаТоваров
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.Номенклатура КАК СправочникНоменклатура
| ПО ТаблицаТоваров.Номенклатура = СправочникНоменклатура.Ссылка
|
| ЛЕВОЕ СОЕДИНЕНИЕ Справочник.КлючиАналитикиУчетаНоменклатуры КАК Аналитика
| ПО ТаблицаТоваров.АналитикаУчетаНоменклатуры = Аналитика.Ссылка
|ГДЕ
| &ИспользоватьУчетПрослеживаемыхИмпортныхТоваров
| И СправочникНоменклатура.ТипНоменклатуры = ЗНАЧЕНИЕ(Перечисление.ТипыНоменклатуры.Работа)
| И СправочникНоменклатура.ПрослеживаемыйТовар
|;
|
|
|ВЫБРАТЬ
| ТаблицаВидыЗапасов.НомерСтроки КАК НомерСтроки,
| ТаблицаВидыЗапасов.АналитикаУчетаНоменклатуры КАК АналитикаУчетаНоменклатуры,
| ТаблицаВидыЗапасов.АналитикаУчетаНаборов КАК АналитикаУчетаНаборов,
| ТаблицаВидыЗапасов.ВидЗапасов КАК ВидЗапасов,
| ТаблицаВидыЗапасов.НомерГТД КАК НомерГТД,
| ТаблицаВидыЗапасов.КодТНВЭД КАК КодТНВЭД,
| ТаблицаВидыЗапасов.СтавкаНДС КАК СтавкаНДС,
| ТаблицаВидыЗапасов.Упаковка КАК Упаковка,
| ТаблицаВидыЗапасов.Цена КАК Цена,
| ЗНАЧЕНИЕ(Справочник.Склады.ПустаяСсылка) КАК СкладОтгрузки,
| ТаблицаВидыЗапасов.ЗаказКлиента КАК ЗаказКлиента,
| ТаблицаВидыЗапасов.ОбъектРасчетов КАК ОбъектРасчетов,
| ТаблицаВидыЗапасов.Количество КАК Количество,
| ВЫБОР
| КОГДА НЕ &ИспользоватьУчетПрослеживаемыхИмпортныхТоваров
| ИЛИ НАЧАЛОПЕРИОДА(&Дата, МЕСЯЦ) < &ДатаНачалаУчетаПрослеживаемыхИмпортныхТоваров
| ТОГДА 0
| ИНАЧЕ ТаблицаВидыЗапасов.КоличествоПоРНПТ
| КОНЕЦ КАК КоличествоПоРНПТ,
| ТаблицаВидыЗапасов.КоличествоУпаковок КАК КоличествоУпаковок,
| ТаблицаВидыЗапасов.СуммаСНДС КАК СуммаСНДС,
| ТаблицаВидыЗапасов.СуммаНДС КАК СуммаНДС,
| ТаблицаВидыЗапасов.СуммаНДСРегл КАК СуммаНДСРегл,
| ТаблицаВидыЗапасов.СуммаНДСУпр КАК СуммаНДСУпр,
| ТаблицаВидыЗапасов.СуммаВзаиморасчетов КАК СуммаВзаиморасчетов,
| ТаблицаВидыЗапасов.СуммаРучнойСкидки КАК СуммаРучнойСкидки,
| ТаблицаВидыЗапасов.СуммаАвтоматическойСкидки КАК СуммаАвтоматическойСкидки
|ПОМЕСТИТЬ ВТВидыЗапасов
|ИЗ
| &ТаблицаВидыЗапасов КАК ТаблицаВидыЗапасов
|;
|
|
|ВЫБРАТЬ
| ТаблицаВидыЗапасов.НомерСтроки КАК НомерСтроки,
| ТаблицаВидыЗапасов.АналитикаУчетаНоменклатуры КАК АналитикаУчетаНоменклатуры,
| ТаблицаВидыЗапасов.АналитикаУчетаНаборов КАК АналитикаУчетаНаборов,
| Аналитика.Номенклатура КАК Номенклатура,
| Аналитика.Характеристика КАК Характеристика,
| Аналитика.Серия КАК Серия,
| ТаблицаВидыЗапасов.ВидЗапасов КАК ВидЗапасов,
| ТаблицаВидыЗапасов.НомерГТД КАК НомерГТД,
| ТаблицаВидыЗапасов.КодТНВЭД КАК КодТНВЭД,
| ТаблицаВидыЗапасов.СтавкаНДС КАК СтавкаНДС,
| ТаблицаВидыЗапасов.СуммаНДСРегл КАК СуммаНДСРегл,
| ТаблицаВидыЗапасов.СуммаНДСУпр КАК СуммаНДСУпр,
| ТаблицаВидыЗапасов.Упаковка КАК Упаковка,
| ТаблицаВидыЗапасов.Цена КАК Цена,
| ЗНАЧЕНИЕ(Справочник.Склады.ПустаяСсылка) КАК СкладОтгрузки,
| Аналитика.МестоХранения КАК Склад,
| ТаблицаВидыЗапасов.ЗаказКлиента КАК ЗаказКлиента,
| ТаблицаВидыЗапасов.ОбъектРасчетов КАК ОбъектРасчетов,
| &Сделка КАК Сделка,
| ТаблицаВидыЗапасов.Количество КАК Количество,
| ТаблицаВидыЗапасов.КоличествоПоРНПТ КАК КоличествоПоРНПТ,
| ТаблицаВидыЗапасов.КоличествоУпаковок КАК КоличествоУпаковок,
| ТаблицаВидыЗапасов.СуммаСНДС КАК СуммаСНДС,
| ТаблицаВидыЗапасов.СуммаНДС КАК СуммаНДС,
| ТаблицаВидыЗапасов.СуммаВзаиморасчетов КАК СуммаВзаиморасчетов,
| ТаблицаВидыЗапасов.СуммаРучнойСкидки КАК СуммаРучнойСкидки,
| ТаблицаВидыЗапасов.СуммаАвтоматическойСкидки КАК СуммаАвтоматическойСкидки,
| &ВидыЗапасовУказаныВручную КАК ВидыЗапасовУказаныВручную
|ПОМЕСТИТЬ ТаблицаВидыЗапасов
|ИЗ
| ВТВидыЗапасов КАК ТаблицаВидыЗапасов
| ЛЕВОЕ СОЕДИНЕНИЕ Справочник.КлючиАналитикиУчетаНоменклатуры КАК Аналитика
| ПО ТаблицаВидыЗапасов.АналитикаУчетаНоменклатуры = Аналитика.Ссылка
|
|ИНДЕКСИРОВАТЬ ПО
| Номенклатура,
| Характеристика,
| Серия,
| Склад
|;
|
|
|УНИЧТОЖИТЬ ВТВидыЗапасов";
МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц;
Запрос.МенеджерВременныхТаблиц = МенеджерВременныхТаблиц;
ТаблицаТоваров = ?(ДополнительныеСвойства.Свойство("ТаблицыЗаполненияВидовЗапасовПриОбмене")
И ДополнительныеСвойства.ТаблицыЗаполненияВидовЗапасовПриОбмене <> Неопределено
И ДополнительныеСвойства.ТаблицыЗаполненияВидовЗапасовПриОбмене.Свойство("Товары"),
ДополнительныеСвойства.ТаблицыЗаполненияВидовЗапасовПриОбмене.Товары,
Товары);
Запрос.УстановитьПараметр("Ссылка", Ссылка);
Запрос.УстановитьПараметр("Дата", Дата);
Запрос.УстановитьПараметр("Организация", Организация);
Запрос.УстановитьПараметр("Менеджер", Менеджер);
Запрос.УстановитьПараметр("Подразделение", Подразделение);
Запрос.УстановитьПараметр("Сделка", Сделка);
Запрос.УстановитьПараметр("НалогообложениеНДС", НалогообложениеНДС);
Запрос.УстановитьПараметр("ЦенаВключаетНДС", ?(ЦенаВключаетНДС, 0, 1));
Запрос.УстановитьПараметр("ХозяйственнаяОперация", ХозяйственнаяОперация);
Запрос.УстановитьПараметр("РеализацияПоЗаказам", РеализацияПоЗаказам);
Запрос.УстановитьПараметр("ВидыЗапасовУказаныВручную", ВидыЗапасовУказаныВручную);
Запрос.УстановитьПараметр("ФормироватьВидыЗапасовПоПодразделениямМенеджерам",
ПолучитьФункциональнуюОпцию("ФормироватьВидыЗапасовПоПодразделениямМенеджерам"));
Запрос.УстановитьПараметр("ФормироватьВидыЗапасовПоСделкам",
ПолучитьФункциональнуюОпцию("ФормироватьВидыЗапасовПоСделкам"));
Запрос.УстановитьПараметр("РеализацияПоНесколькимЗаказам", РеализацияПоЗаказам
И Не ЗначениеЗаполнено(ЗаказКлиента));
Запрос.УстановитьПараметр("ТаблицаТоваров", ТаблицаТоваров);
Запрос.УстановитьПараметр("ТаблицаВидыЗапасов", ВидыЗапасов);
Запрос.УстановитьПараметр("РеализацияЧерезКомиссионера",
КомиссионнаяТорговляСервер.РеализацияЧерезКомиссионера(ХозяйственнаяОперация));
УчетПрослеживаемыхТоваровЛокализация.УстановитьПараметрыИспользованияУчетаПрослеживаемыхТоваров(Запрос);
ЗапасыСервер.ДополнитьВременныеТаблицыОбязательнымиКолонками(Запрос);
ОбщегоНазначенияУТ.ЗаменитьОтсутствующиеПоляТаблицыЗначенийВТекстеЗапроса(
ТаблицаТоваров,
Запрос.Текст,
"&ТекстПоляТаблицаТоваровКоличествоПоРНПТ_",
"ТаблицаТоваров",
"КоличествоПоРНПТ",
"ТаблицаТоваров.КоличествоПоРНПТ",
"0");
ОбщегоНазначенияУТ.ЗаменитьОтсутствующиеПоляТаблицыЗначенийВТекстеЗапроса(
ТаблицаТоваров,
Запрос.Текст,
"&ТекстПоляТаблицаТоваровНомерГТД_",
"ТаблицаТоваров",
"НомерГТД",
"ТаблицаТоваров.НомерГТД",
"ЗНАЧЕНИЕ(Справочник.НомераГТД.ПустаяСсылка)");
Запрос.Выполнить();
Возврат МенеджерВременныхТаблиц;
КонецФункции
Процедура ЗаполнитьАналитикиУчетаНоменклатуры() Экспорт
ЗаполнитьАналитикиУчетаНоменклатурыВТабличныхЧастяхТоваров();
КонецПроцедуры
Процедура ЗаполнитьУсловияПродаж(Знач УсловияПродаж) Экспорт
Если УсловияПродаж = Неопределено Тогда
Возврат;
КонецЕсли;
Если ЗначениеЗаполнено(УсловияПродаж.Валюта) Тогда
Валюта = УсловияПродаж.Валюта;
КонецЕсли;
Если ЗначениеЗаполнено(УсловияПродаж.ВалютаВзаиморасчетов) Тогда
ВалютаВзаиморасчетов = УсловияПродаж.ВалютаВзаиморасчетов;
КонецЕсли;
Если УсловияПродаж.НоваяСхемаКомиссии
И УсловияПродаж.ХозяйственнаяОперация = Перечисления.ХозяйственныеОперации.ПередачаНаКомиссию Тогда
Если Не (ХозяйственнаяОперация = Перечисления.ХозяйственныеОперации.РеализацияЧерезКомиссионераБезПереходаПраваСобственности
И ЗначениеЗаполнено(Соглашение)
И ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Соглашение, "ВозможнаРеализацияБезПереходаПраваСобственности")) Тогда
ХозяйственнаяОперация = Перечисления.ХозяйственныеОперации.РеализацияЧерезКомиссионера;
КонецЕсли;
Иначе
ХозяйственнаяОперация = УсловияПродаж.ХозяйственнаяОперация;
КонецЕсли;
ЦенаВключаетНДС = УсловияПродаж.ЦенаВключаетНДС;
ИзмененаОрганизация = ЗначениеЗаполнено(УсловияПродаж.Организация) И УсловияПродаж.Организация <> Организация;
ИзмененаФормаОплаты = ЗначениеЗаполнено(УсловияПродаж.ФормаОплаты) И УсловияПродаж.ФормаОплаты <> ФормаОплаты;
ФормаОплаты = УсловияПродаж.ФормаОплаты;
НаправлениеДеятельности = УсловияПродаж.НаправлениеДеятельности;
Если ИзмененаОрганизация Тогда
Организация = УсловияПродаж.Организация;
КонецЕсли;
Если ИзмененаОрганизация Или ИзмененаФормаОплаты Тогда
СтруктураПараметров = ДенежныеСредстваСервер.ПараметрыЗаполненияБанковскогоСчетаОрганизацииПоУмолчанию();
СтруктураПараметров.Организация = Организация;
СтруктураПараметров.НаправлениеДеятельности = НаправлениеДеятельности;
БанковскийСчетОрганизации = ЗначениеНастроекПовтИсп.ПолучитьБанковскийСчетОрганизацииПоУмолчанию(СтруктураПараметров);
СтруктураПараметров = ДенежныеСредстваСервер.ПараметрыЗаполненияКассыОрганизацииПоУмолчанию();
СтруктураПараметров.Организация = Организация;
СтруктураПараметров.НаправлениеДеятельности = НаправлениеДеятельности;
СтруктураПараметров.ФормаОплаты = ФормаОплаты;
СтруктураПараметров.ФизическоеЛицо = Курьер;
Касса = ЗначениеНастроекПовтИсп.ПолучитьКассуОрганизацииПоУмолчанию(СтруктураПараметров);
КонецЕсли;
Если Не УсловияПродаж.Типовое Тогда
Если ЗначениеЗаполнено(УсловияПродаж.Контрагент) И УсловияПродаж.Контрагент<>Контрагент Тогда
Контрагент = УсловияПродаж.Контрагент;
КонецЕсли;
КонецЕсли;
ПартнерыИКонтрагенты.ЗаполнитьКонтрагентаПартнераПоУмолчанию(Партнер, Контрагент);
Если Не УсловияПродаж.Типовое Тогда
Если ЗначениеЗаполнено(УсловияПродаж.КонтактноеЛицо)
И НЕ ЗначениеЗаполнено(КонтактноеЛицо) Тогда
КонтактноеЛицо = УсловияПродаж.КонтактноеЛицо;
КонецЕсли;
КонецЕсли;
ПартнерыИКонтрагенты.ЗаполнитьКонтактноеЛицоПартнераПоУмолчанию(Партнер, КонтактноеЛицо);
Если УсловияПродаж.ИспользуютсяДоговорыКонтрагентов <> Неопределено И УсловияПродаж.ИспользуютсяДоговорыКонтрагентов Тогда
Договор = ПродажиСервер.ПолучитьДоговорПоУмолчанию(
ЭтотОбъект,
?(УсловияПродаж.ХозяйственнаяОперация = Перечисления.ХозяйственныеОперации.РеализацияКлиентуРеглУчет,
Перечисления.ХозяйственныеОперации.РеализацияКлиенту,
УсловияПродаж.ХозяйственнаяОперация
),
?(КомиссионнаяТорговляСервер.РеализацияЧерезКомиссионера(ХозяйственнаяОперация), Неопределено, ВалютаВзаиморасчетов),
,
КомиссионнаяТорговляСервер.РеализацияЧерезКомиссионера(ХозяйственнаяОперация));
ПродажиСервер.ЗаполнитьБанковскиеСчетаПоДоговору(Договор, БанковскийСчетОрганизации, БанковскийСчетКонтрагента);
Если ПолучитьФункциональнуюОпцию("ИспользоватьУчетДоходовПоНаправлениямДеятельности") Тогда
НаправленияДеятельностиСервер.ЗаполнитьНаправлениеПоУмолчанию(НаправлениеДеятельности, Соглашение, Договор);
КонецЕсли;
ВариантВыбытияМаркируемойПродукции = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Договор, "ВариантВыбытияМаркируемойПродукции");
КонецЕсли;
Если НЕ ЗначениеЗаполнено(УсловияПродаж.ИспользуютсяДоговорыКонтрагентов)
ИЛИ НЕ УсловияПродаж.ИспользуютсяДоговорыКонтрагентов Тогда
ОплатаВВалюте = УсловияПродаж.ОплатаВВалюте;
Иначе
ОплатаВВалюте = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Договор, "ОплатаВВалюте");
КонецЕсли;
ВернутьМногооборотнуюТару = УсловияПродаж.ВозвращатьМногооборотнуюТару;
ДатаВозвратаМногооборотнойТары = МногооборотнаяТараСервер.РассчитатьДатуВозвратаМногооборотнойТары(
ЭтотОбъект,
УсловияПродаж.СрокВозвратаМногооборотнойТары,
УсловияПродаж.РассчитыватьДатуВозвратаТарыПоКалендарю,
УсловияПродаж.КалендарьВозвратаТары);
ТребуетсяЗалогЗаТару = УсловияПродаж.ТребуетсяЗалогЗаТару;
Если ЗначениеЗаполнено(УсловияПродаж.Склад) Тогда
Склад = УсловияПродаж.Склад;
СтруктураОтветственного = ПродажиСервер.ПолучитьОтветственногоПоСкладу(Склад);
Если СтруктураОтветственного <> Неопределено Тогда
Отпустил = СтруктураОтветственного.Ответственный;
ОтпустилДолжность = СтруктураОтветственного.ОтветственныйДолжность;
КонецЕсли;
КонецЕсли;
Если ЗначениеЗаполнено(УсловияПродаж.ГруппаФинансовогоУчета) Тогда
ГруппаФинансовогоУчета = УсловияПродаж.ГруппаФинансовогоУчета;
КонецЕсли;
СкидкиНаценки.Очистить();
КонецПроцедуры
Процедура ЗаполнитьУсловияПродажПоУмолчанию() Экспорт
ИспользоватьСоглашенияСКлиентами = ПолучитьФункциональнуюОпцию("ИспользоватьСоглашенияСКлиентами");
Если ЗначениеЗаполнено(Партнер) Или Не ИспользоватьСоглашенияСКлиентами Тогда
КомиссионныеПродажи25 = ?(ХозяйственнаяОперация = Перечисления.ХозяйственныеОперации.РеализацияЧерезКомиссионераБезПереходаПраваСобственности
Или ХозяйственнаяОперация = Перечисления.ХозяйственныеОперации.РеализацияЧерезКомиссионера, Истина, Ложь);
ПараметрыОтбора = Новый Структура();
ПараметрыОтбора.Вставить("ИсключитьГруппыСкладовДоступныеВЗаказах", Истина);
ПараметрыОтбора.Вставить("ВыбранноеСоглашение", Соглашение);
ПараметрыОтбора.Вставить("ПустаяСсылкаДокумента", Документы.РеализацияТоваровУслуг.ПустаяСсылка());
ПараметрыОтбора.Вставить("КомиссионныеПродажи25", КомиссионныеПродажи25);
ПараметрыОтбора.Вставить("ХозяйственныеОперации", ОбщегоНазначенияУТ.ДопустимыеХозяйственныеОперацииДокумента("РеализацияТоваровУслуг"));
УсловияПродажПоУмолчанию = ПродажиСервер.ПолучитьУсловияПродажПоУмолчанию(Партнер,ПараметрыОтбора);
Если УсловияПродажПоУмолчанию <> Неопределено Тогда
Если НЕ ИспользоватьСоглашенияСКлиентами ИЛИ
(Соглашение <> УсловияПродажПоУмолчанию.Соглашение И ЗначениеЗаполнено(УсловияПродажПоУмолчанию.Соглашение)) Тогда
Соглашение = УсловияПродажПоУмолчанию.Соглашение;
ЗаполнитьУсловияПродаж(УсловияПродажПоУмолчанию);
Если Не РеализацияПоЗаказам
Или ХозяйственнаяОперация <> Перечисления.ХозяйственныеОперации.ПереходПраваСобственности Тогда
ПараметрыЗаполнения = Документы.РеализацияТоваровУслуг.ПараметрыЗаполненияНалогообложенияНДСПродажи(ЭтотОбъект);
УчетНДСУП.ЗаполнитьНалогообложениеНДСПродажи(НалогообложениеНДС, ПараметрыЗаполнения);
КонецЕсли;
Если ИспользоватьСоглашенияСКлиентами Тогда
ПересчитатьСуммуСУчетомРучнойСкидки = Новый Структура("Очищать", Ложь);
СтруктураПересчетаСуммы = ПакетнаяОбработкаТабличнойЧастиКлиентСервер.ПараметрыПересчетаСуммыНДСВСтрокеТЧ(ЭтотОбъект);
СтруктураДействий = Новый Структура;
СтруктураДействий.Вставить("ЗаполнитьСтавкуНДС", ПакетнаяОбработкаТабличнойЧастиКлиентСервер.ПараметрыЗаполненияСтавкиНДС(ЭтотОбъект));
СтруктураДействий.Вставить("ПересчитатьСумму", "КоличествоУпаковок");
СтруктураДействий.Вставить("ПересчитатьСуммуНДС", СтруктураПересчетаСуммы);
СтруктураДействий.Вставить("ПересчитатьСуммуСНДС", СтруктураПересчетаСуммы);
СтруктураДействий.Вставить("ПересчитатьСуммуРучнойСкидки", "КоличествоУпаковок");
СтруктураДействий.Вставить("ОчиститьАвтоматическуюСкидку", Неопределено);
СтруктураДействий.Вставить("ОчиститьСуммуВзаиморасчетов", Неопределено);
СтруктураДействий.Вставить("ПересчитатьСуммуСУчетомРучнойСкидки", ПересчитатьСуммуСУчетомРучнойСкидки);
ПараметрыЗаполнения = ЦеныПредприятияЗаполнениеСервер.НовыйПараметрыЗаполненияЗаполнитьЦены();
ПараметрыЗаполнения.Вставить("Дата", Дата);
ПараметрыЗаполнения.Вставить("Организация", Организация);
ПараметрыЗаполнения.Вставить("Валюта", Валюта);
ПараметрыЗаполнения.Вставить("Соглашение", Соглашение);
ПараметрыЗаполнения.Вставить("НалогообложениеНДС", НалогообложениеНДС);
ПараметрыЗаполнения.Вставить("ВозвращатьМногооборотнуюТару", ВернутьМногооборотнуюТару);
ПараметрыЗаполнения.Вставить("РассчитыватьНаборы", Истина);
ПараметрыЗаполнения.Вставить("ПоляЗаполнения", "Цена, СтавкаНДС, ВидЦены, СрокПоставки");
ЦеныПредприятияЗаполнениеСервер.ЗаполнитьЦены(
Товары,
,
ПараметрыЗаполнения,
СтруктураДействий);
КонецЕсли;
Иначе
Соглашение = УсловияПродажПоУмолчанию.Соглашение;
КонецЕсли;
Иначе
ПартнерыИКонтрагенты.ЗаполнитьКонтрагентаПартнераПоУмолчанию(Партнер, Контрагент);
Соглашение = Неопределено;
КонецЕсли;
БанковскийСчетКонтрагента = ЗначениеНастроекПовтИсп.ПолучитьБанковскийСчетКонтрагентаПоУмолчанию(Контрагент, , БанковскийСчетКонтрагента);
КонецЕсли;
ПартнерыИКонтрагенты.ЗаполнитьКонтактноеЛицоПартнераПоУмолчанию(Партнер, КонтактноеЛицо);
Если НЕ ПолучитьФункциональнуюОпцию("ИспользоватьУправлениеДоставкой") Тогда
АдресДоставки = ФормированиеПечатныхФорм.ПолучитьАдресИзКонтактнойИнформации(Партнер);
КонецЕсли;
КонецПроцедуры
Процедура ЗаполнитьУсловияПродажПоСоглашению() Экспорт
УсловияПродаж = ПродажиСервер.ПолучитьУсловияПродаж(Соглашение, Истина, Истина);
ЗаполнитьУсловияПродаж(УсловияПродаж);
Если Не РеализацияПоЗаказам
Или ХозяйственнаяОперация <> Перечисления.ХозяйственныеОперации.ПереходПраваСобственности Тогда
ПараметрыЗаполнения = Документы.РеализацияТоваровУслуг.ПараметрыЗаполненияНалогообложенияНДСПродажи(ЭтотОбъект);
УчетНДСУП.ЗаполнитьНалогообложениеНДСПродажи(НалогообложениеНДС, ПараметрыЗаполнения);
КонецЕсли;
ПересчитатьСуммуСУчетомРучнойСкидки = Новый Структура("Очищать", Ложь);
СтруктураПересчетаСуммы = ПакетнаяОбработкаТабличнойЧастиКлиентСервер.ПараметрыПересчетаСуммыНДСВСтрокеТЧ(ЭтотОбъект);
СтруктураДействий = Новый Структура;
СтруктураДействий.Вставить("ЗаполнитьСтавкуНДС", ПакетнаяОбработкаТабличнойЧастиКлиентСервер.ПараметрыЗаполненияСтавкиНДС(ЭтотОбъект));
СтруктураДействий.Вставить("ПересчитатьСумму", "КоличествоУпаковок");
СтруктураДействий.Вставить("ПересчитатьСуммуНДС", СтруктураПересчетаСуммы);
СтруктураДействий.Вставить("ПересчитатьСуммуСНДС", СтруктураПересчетаСуммы);
СтруктураДействий.Вставить("ПересчитатьСуммуРучнойСкидки", "КоличествоУпаковок");
СтруктураДействий.Вставить("ОчиститьАвтоматическуюСкидку", Неопределено);
СтруктураДействий.Вставить("ОчиститьСуммуВзаиморасчетов", Неопределено);
СтруктураДействий.Вставить("ПересчитатьСуммуСУчетомРучнойСкидки", ПересчитатьСуммуСУчетомРучнойСкидки);
ПараметрыЗаполнения = Новый Структура();
ПараметрыЗаполнения.Вставить("Дата", Дата);
ПараметрыЗаполнения.Вставить("Организация", Организация);
ПараметрыЗаполнения.Вставить("Валюта", Валюта);
ПараметрыЗаполнения.Вставить("Соглашение", Соглашение);
ПараметрыЗаполнения.Вставить("НалогообложениеНДС", НалогообложениеНДС);
ПараметрыЗаполнения.Вставить("ВозвращатьМногооборотнуюТару", ВернутьМногооборотнуюТару);
ПараметрыЗаполнения.Вставить("РассчитыватьНаборы", Истина);
ПараметрыЗаполнения.Вставить("ПоляЗаполнения", "Цена, СтавкаНДС, ВидЦены, СрокПоставки");
ЦеныПредприятияЗаполнениеСервер.ЗаполнитьЦены(
Товары,
,
ПараметрыЗаполнения,
СтруктураДействий);
БанковскийСчетКонтрагента = ЗначениеНастроекПовтИсп.ПолучитьБанковскийСчетКонтрагентаПоУмолчанию(Контрагент, , БанковскийСчетКонтрагента);
СтруктураПараметров = ДенежныеСредстваСервер.ПараметрыЗаполненияБанковскогоСчетаОрганизацииПоУмолчанию();
СтруктураПараметров.Организация = Организация;
СтруктураПараметров.БанковскийСчет = БанковскийСчетОрганизации;
БанковскийСчетОрганизации = ЗначениеНастроекПовтИсп.ПолучитьБанковскийСчетОрганизацииПоУмолчанию(СтруктураПараметров);
Если НЕ ПолучитьФункциональнуюОпцию("ИспользоватьУправлениеДоставкой") Тогда
АдресДоставки = ФормированиеПечатныхФорм.ПолучитьАдресИзКонтактнойИнформации(Партнер);
КонецЕсли;
КонецПроцедуры
Процедура ИнициализироватьПараметрыЗаполненияВидовЗапасовДляПроведения(ДокументОбъект, РежимЗаписи = Неопределено) Экспорт
ПараметрыЗаполнения = ПараметрыЗаполненияВидовЗапасов(Истина);
ДокументОбъект.ДополнительныеСвойства.Вставить("ПараметрыЗаполненияВидовЗапасов", ПараметрыЗаполнения);
КонецПроцедуры
Процедура ЗаполнитьВидыЗапасовПриОбмене(Отказ, ТаблицыДокумента) Экспорт
ЗаполнитьАналитикиУчетаНоменклатурыВТабличныхЧастяхТоваров();
Если ТаблицыДокумента <> Неопределено Тогда
ЗаполнитьАналитикиУчетаНоменклатурыВТабличныхЧастяхТоваров(ТаблицыДокумента);
ДополнительныеСвойства.Вставить("ТаблицыЗаполненияВидовЗапасовПриОбмене", ТаблицыДокумента);
Иначе
ИмяПараметра = "ТаблицыДокумента";
ТекстИсключения = НСтр("ru = 'Для заполнения видов запасов не передан параметр ""%1"".'");
ТекстИсключения = СтрШаблон(ТекстИсключения, ИмяПараметра);
ВызватьИсключение ТекстИсключения;
КонецЕсли;
ЗаполнитьВидыЗапасов(Отказ);
ДополнительныеСвойства.Удалить("ТаблицыЗаполненияВидовЗапасовПриОбмене");
КонецПроцедуры
#КонецОбласти
#Область ОбработчикиСобытий
Процедура ПередЗаписью(Отказ, РежимЗаписи, РежимПроведения)
Если ОбменДанными.Загрузка Тогда
Возврат;
КонецЕсли;
ОбновлениеИнформационнойБазы.ПроверитьОбъектОбработан(ЭтотОбъект);
ИсправлениеДокументов.ПередЗаписью(ЭтотОбъект, Отказ, РежимЗаписи, РежимПроведения);
ПроведениеДокументов.ПередЗаписьюДокумента(ЭтотОбъект, РежимЗаписи, РежимПроведения);
ЕстьКорректировки = Ложь;
ПродажиСервер.ПроверитьНаличиеКорректировок(Ссылка, Ссылка, ЕстьКорректировки);
Если РежимЗаписи = РежимЗаписиДокумента.ОтменаПроведения И ЕстьКорректировки Тогда
ПродажиСервер.СообщитьОбОшибкахОтменаПроведенияЕстьКорректировки(Ссылка,Отказ);
КонецЕсли;
Если РежимЗаписи = РежимЗаписиДокумента.Проведение
И ХозяйственнаяОперация <> ПредопределенноеЗначение("Перечисление.ХозяйственныеОперации.ПередачаНаКомиссию")
И Не КомиссионнаяТорговляСервер.РеализацияЧерезКомиссионера(ХозяйственнаяОперация)
И ПолучитьФункциональнуюОпцию("ИспользоватьАвтоматическиеСкидкиВПродажах")
И Не СкидкиРассчитаны Тогда
Отказ = Истина;
ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = 'В документе %1 не рассчитаны автоматические скидки (наценки). Проведение невозможно. Для расчёта автоматических скидок (наценок) проведите документ из формы документа.'"),
Ссылка);
ОбщегоНазначения.СообщитьПользователю(ТекстОшибки, Ссылка, , , Отказ);
КонецЕсли;
Если ХозяйственнаяОперация = Перечисления.ХозяйственныеОперации.ПередачаНаКомиссию Тогда
Для каждого Строка Из Товары Цикл
Если Не ЗначениеЗаполнено(Строка.СтавкаНДС) Тогда
Строка.СтавкаНДС = Справочники.СтавкиНДС.БезНДС;
КонецЕсли;
КонецЦикла;
КонецЕсли;
НоменклатураСервер.ОкруглитьКоличествоШтучныхТоваров(ЭтотОбъект, РежимЗаписи);
МассивВсехРеквизитов = Новый Массив;
МассивРеквизитовОперации = Новый Массив;
Документы.РеализацияТоваровУслуг.ЗаполнитьИменаРеквизитовПоХозяйственнойОперации(
ХозяйственнаяОперация,
МассивВсехРеквизитов,
МассивРеквизитовОперации);
ДенежныеСредстваСервер.ОчиститьНеиспользуемыеРеквизиты(
ЭтотОбъект,
МассивВсехРеквизитов,
МассивРеквизитовОперации);
Если (ХозяйственнаяОперация = Перечисления.ХозяйственныеОперации.ПередачаНаКомиссию
Или Не ВернутьМногооборотнуюТару)
И ТребуетсяЗалогЗаТару Тогда
ТребуетсяЗалогЗаТару = Ложь;
КонецЕсли;
СуммаДокумента = ПолучитьСуммуДокумента();
НоменклатураСервер.ОчиститьНеиспользуемыеСерии(
ЭтотОбъект,
НоменклатураСервер.ПараметрыУказанияСерий(ЭтотОбъект, Документы.РеализацияТоваровУслуг));
ПараметрыРегистрации = Документы.РеализацияТоваровУслуг.ПараметрыРегистрацииСчетовФактурВыданных(ЭтотОбъект);
УчетНДСУП.АктуализироватьСчетаФактурыВыданныеПередЗаписью(ПараметрыРегистрации, РежимЗаписи, ПометкаУдаления, Проведен);
ОбщегоНазначенияУТ.ИзменитьПризнакСогласованностиДокумента(
ЭтотОбъект,
РежимЗаписи);
Если РеализацияПоЗаказам И ЗначениеЗаполнено(ЗаказКлиента) Тогда
Для Каждого ТекСтрока Из Товары Цикл
Если Не ЗначениеЗаполнено(ТекСтрока.ЗаказКлиента) Тогда
ТекСтрока.ЗаказКлиента = ЗаказКлиента;
КонецЕсли;
КонецЦикла;
КонецЕсли;
Если ЭтоНовый() И НЕ ЗначениеЗаполнено(Номер) Тогда
УстановитьНовыйНомер();
КонецЕсли;
Если РежимЗаписи = РежимЗаписиДокумента.Проведение Тогда
Если ХозяйственнаяОперация = Перечисления.ХозяйственныеОперации.РеализацияКлиентуРеглУчет Тогда
ВзаиморасчетыСервер.ЗаполнитьСуммуРасшифровкиПлатежаПоСуммеДокумента(
СуммаДокумента,
РасшифровкаПлатежа);
ВзаиморасчетыСервер.ЗаполнитьСуммуВзаиморасчетовВТабличнойЧасти(
Валюта,
Дата,
РасшифровкаПлатежа,
Организация);
ДополненныеПараметры = ВзаиморасчетыСервер.ДополненныеПараметрыМеханизма(ЭтотОбъект);
Для Каждого СтруктураПараметров Из ДополненныеПараметры.МассивПараметров Цикл
Если СтруктураПараметров.Организация <> Справочники.Организации.УправленческаяОрганизация Тогда
Продолжить;
КонецЕсли;
Если ЭтоНовый() Тогда
СсылкаНового = ПолучитьСсылкуНового();
Если Не ЗначениеЗаполнено(СсылкаНового) Тогда
СсылкаНового = ОбщегоНазначения.МенеджерОбъектаПоСсылке(Ссылка).ПолучитьСсылку();
УстановитьСсылкуНового(СсылкаНового);
КонецЕсли;
СтруктураПараметров.Вставить("СсылкаНового", СсылкаНового);
КонецЕсли;
РеквизитыОбъектаРасчетов = ОбъектыРасчетовСервер.РеквизитыОбъектаРасчетовПоСтруктуре(ЭтотОбъект,Ссылка,СтруктураПараметров, РежимЗаписи);
ОбъектРасчетовПоУпрОрганизации = ОбъектыРасчетовСервер.ПроверитьСоздатьОбъектРасчетов(РеквизитыОбъектаРасчетов);
Если ОбъектыРасчетовСервер.ЕстьОбъектыРасчетовПоУпрОрганизации(Ссылка, РасшифровкаПлатежа) Тогда
Для Каждого Стр Из РасшифровкаПлатежа Цикл
Если НЕ ЗначениеЗаполнено(Стр.ОбъектРасчетов) Тогда
Стр.ОбъектРасчетов = ОбъектРасчетовПоУпрОрганизации;
КонецЕсли;
КонецЦикла;
Если ЗначениеЗаполнено(ОбъектРасчетовУпр) Тогда
ОбъектРасчетовУпр = Справочники.ОбъектыРасчетов.ПустаяСсылка();
КонецЕсли;
ИначеЕсли Не ЗначениеЗаполнено(ОбъектРасчетовУпр) Тогда
Счетчик = РасшифровкаПлатежа.Количество();
Пока Счетчик > 0 Цикл
Счетчик = Счетчик - 1;
Если РасшифровкаПлатежа[Счетчик].ОбъектРасчетов = ОбъектРасчетовПоУпрОрганизации Тогда
РасшифровкаПлатежа.Удалить(Счетчик);
КонецЕсли;
КонецЦикла;
ОбъектРасчетовУпр = ОбъектРасчетовПоУпрОрганизации;
КонецЕсли;
КонецЦикла;
ИначеЕсли ХозяйственнаяОперация = Перечисления.ХозяйственныеОперации.ПереходПраваСобственности Тогда
ЗаполнитьСуммыНДСРеглУпр();
ИначеЕсли Организация <> Справочники.Организации.УправленческаяОрганизация Тогда
Если ЗначениеЗаполнено(ОбъектРасчетовУпр) Тогда
ОбъектРасчетовУпр = Справочники.ОбъектыРасчетов.ПустаяСсылка();
КонецЕсли;
ОбъектРасчетовПоУпрОрганизации = ОбъектыРасчетовСервер.ПолучитьОбъектРасчетовПоСсылке(Ссылка,
Справочники.Организации.УправленческаяОрганизация, Перечисления.ТипыРасчетовСПартнерами.РасчетыСКлиентом);
Если ЗначениеЗаполнено(ОбъектРасчетовПоУпрОрганизации) Тогда
ОбъектыРасчетовСервер.ПроверитьУдалитьОбъектРасчетов(ОбъектРасчетовПоУпрОрганизации, Отказ, Истина);
КонецЕсли;
КонецЕсли;
ЗаполнитьАналитикиУчетаНоменклатурыВТабличныхЧастяхТоваров();
РегистрыСведений.АналитикаУчетаНаборов.ЗаполнитьВКоллекции(Товары);
КонецЕсли;
ИдентификаторПлатежа = ОбщегоНазначенияУТ.ПолучитьУникальныйИдентификаторПлатежа(ЭтотОбъект);
ВзаиморасчетыСервер.ПередЗаписью(ЭтотОбъект, Отказ, РежимЗаписи);
Если РежимЗаписи = РежимЗаписиДокумента.Проведение Тогда
ЗаполнитьВидыЗапасов(Отказ);
ИначеЕсли РежимЗаписи = РежимЗаписиДокумента.ОтменаПроведения Тогда
Если Не ВидыЗапасовУказаныВручную Тогда
ВидыЗапасов.Очистить();
КонецЕсли;
КонецЕсли;
ОбщегоНазначенияУТ.ЗаполнитьИдентификаторыДокумента(ЭтотОбъект, "Товары,ВидыЗапасов");
Если ХозяйственнаяОперация = Перечисления.ХозяйственныеОперации.ПередачаНаКомиссию
Или ХозяйственнаяОперация = Перечисления.ХозяйственныеОперации.РеализацияКлиентуРеглУчет Тогда
Статус = Перечисления.СтатусыРеализацийТоваровУслуг.Отгружено;
КонецЕсли;
Если Не ХозяйственнаяОперация = Перечисления.ХозяйственныеОперации.РеализацияБезПереходаПраваСобственности
И Не ХозяйственнаяОперация = Перечисления.ХозяйственныеОперации.РеализацияЧерезКомиссионераБезПереходаПраваСобственности Тогда
ДатаПереходаПраваСобственности = Дата('00010101');
Иначе
Если Статус = Перечисления.СтатусыРеализацийТоваровУслуг.КПредоплате Тогда
ДатаПереходаПраваСобственности = Дата('00010101');
КонецЕсли;
КонецЕсли;
Если ЭтотОбъект.ДополнительныеСвойства.Свойство("ЗаполняемыйВариантОформленияПродажи") Тогда
ВариантОформленияПродажи = ЭтотОбъект.ДополнительныеСвойства.ЗаполняемыйВариантОформленияПродажи;
КонецЕсли;
УстановитьСвойстваИзмененияРеквизитов(ЭтотОбъект, ДополнительныеСвойства);
РеализацияТоваровУслугЛокализация.ПередЗаписью(ЭтотОбъект, Отказ, РежимЗаписи, РежимПроведения);
Если Не ЗначениеЗаполнено(Автор) И ЭтоНовый() Тогда
Автор = Пользователи.ТекущийПользователь();
КонецЕсли;
КонецПроцедуры
Процедура ОбработкаЗаполнения(ДанныеЗаполнения, СтандартнаяОбработка)
Перем СкладОтгрузки;
Перем РеквизитыШапки;
Перем ВариантОформления;
Перем ПараметрыОформления;
ТипДанныхЗаполнения = ТипЗнч(ДанныеЗаполнения);
ЗаполненНаОснованииДокумента = Ложь;
ПерезаполнятьСтавкуНДС = Ложь;
Если ТипДанныхЗаполнения = Тип("Структура") Тогда
Если ДанныеЗаполнения.Свойство("ДокументОснование")
И (ТипЗнч(ДанныеЗаполнения.ДокументОснование) = Тип("ДокументСсылка.ЗаказКлиента")
Или ТипЗнч(ДанныеЗаполнения.ДокументОснование) = Тип("ДокументСсылка.ЗаявкаНаВозвратТоваровОтКлиента")
Или ТипЗнч(ДанныеЗаполнения.ДокументОснование) = Тип("Массив")) Тогда
ХозяйственнаяОперацияРеализации = Перечисления.ХозяйственныеОперации.ПустаяСсылка();
ДанныеЗаполнения.Свойство("СкладОтгрузки", СкладОтгрузки);
ДанныеЗаполнения.Свойство("РеквизитыШапки", РеквизитыШапки);
ДанныеЗаполнения.Свойство("ВариантОформленияПродажи", ВариантОформления);
ДанныеЗаполнения.Свойство("ПараметрыОформления", ПараметрыОформления);
ДанныеЗаполнения.Свойство("ПараметрыОформления", ПараметрыОформления);
ДанныеЗаполнения.Свойство("ХозяйственнаяОперация", ХозяйственнаяОперацияРеализации);
ЗаполнитьДокументНаОснованииЗаказаКлиента(ДанныеЗаполнения.ДокументОснование,
СкладОтгрузки,
ВариантОформления,
РеквизитыШапки,
ПараметрыОформления,
ХозяйственнаяОперацияРеализации);
ЗаполненНаОснованииДокумента = Ложь;
ИначеЕсли ДанныеЗаполнения.Свойство("АктОРасхождениях")
И ДанныеЗаполнения.Свойство("ОснованиеАкта") Тогда
Если ТипЗнч(ДанныеЗаполнения.ОснованиеАкта) = Тип("ДокументСсылка.РеализацияТоваровУслуг") Тогда
ЗаполнитьДокументНаОснованииАктаОРасхожденияхПослеОтгрузки(ДанныеЗаполнения);
ЗаполненНаОснованииДокумента = Истина;
ИначеЕсли ТипЗнч(ДанныеЗаполнения.ОснованиеАкта) = Тип("ДокументСсылка.ВозвратТоваровОтКлиента") Тогда
ЗаполнитьДокументНаОснованииАктаОРасхожденияхПослеПриемки(ДанныеЗаполнения);
ЗаполненНаОснованииДокумента = Истина;
КонецЕсли;
ИначеЕсли ДанныеЗаполнения.Свойство("ХозяйственнаяОперация")
И ДанныеЗаполнения.ХозяйственнаяОперация = Перечисления.ХозяйственныеОперации.РеализацияЧерезКомиссионера Тогда
ЗаполнитьДаннымиПоПереданнымНаКомиссиюТоварам(ДанныеЗаполнения);
Если ЗначениеЗаполнено(Договор) Тогда
ЗаполненНаОснованииДокумента = Истина;
Иначе
ЗаполнитьУсловияПродажПоУмолчанию();
КонецЕсли;
Иначе
ЗаполнитьДокументПоОтбору(ДанныеЗаполнения);
КонецЕсли;
ИначеЕсли ТипДанныхЗаполнения = Тип("СправочникСсылка.СделкиСКлиентами") Тогда
ЗаполнитьДокументНаОснованииСделкиПоПродаже(ДанныеЗаполнения);
ИначеЕсли ТипДанныхЗаполнения = Тип("ДокументСсылка.ЗаказКлиента") Или
ТипДанныхЗаполнения = Тип("ДокументСсылка.ЗаявкаНаВозвратТоваровОтКлиента") Тогда
ЗаполнитьДокументНаОснованииЗаказаКлиента(ДанныеЗаполнения, СкладОтгрузки, ВариантОформления);
ЗаполненНаОснованииДокумента = Истина;
ИначеЕсли ТипДанныхЗаполнения = Тип("СправочникСсылка.СоглашенияСКлиентами") Тогда
ЗаполнитьДокументНаОснованииИндивидуальногоСоглашенияСКлиентом(ДанныеЗаполнения);
ИначеЕсли ТипДанныхЗаполнения = Тип("ДокументСсылка.ВозвратТоваровОтКлиента") Тогда
ЗаполнитьДокументНаОснованииВозвратаТоваровОтКлиента(ДанныеЗаполнения);
ЗаполненНаОснованииДокумента = Истина;
ИначеЕсли ТипДанныхЗаполнения = Тип("ДокументСсылка.ПриобретениеТоваровУслуг") Тогда
ЗаполнитьДокументНаОснованииПриобретенияТоваровУслуг(ДанныеЗаполнения);
ЗаполненНаОснованииДокумента = Истина;
ПерезаполнятьСтавкуНДС = НЕ ДанныеЗаполнения.ХозяйственнаяОперация = Перечисления.ХозяйственныеОперации.ПриемНаКомиссию;
КонецЕсли;
Если Не ЗаполненНаОснованииДокумента Тогда
ИнициализироватьУсловияПродаж();
КонецЕсли;
ДополнительныеСвойства.Вставить("НеобходимостьЗаполненияКассыПриФОИспользоватьНесколькоКассЛожь", Ложь);
ДополнительныеСвойства.Вставить("НеобходимостьЗаполненияСчетаПриФОИспользоватьНесколькоСчетовЛожь", Ложь);
Автор = Пользователи.ТекущийПользователь();
ЗаполнениеОбъектовПоСтатистике.ЗаполнитьРеквизитыОбъекта(ЭтотОбъект, ДанныеЗаполнения);
ОтветственныеЛицаСервер.УстановитьМенеджера(
ЭтотОбъект, ПродажиСервер.ДокументОснование(ЭтотОбъект, "РеализацияПоЗаказам, ЗаказКлиента, Товары.ЗаказКлиента"));
ОписаниеРеквизитов = Новый Структура;
Параметры = ЗаполнениеОбъектовПоСтатистике.ПараметрыЗаполняемыхРеквизитов();
Параметры.РазрезыСбораСтатистики.ИспользоватьВсегда = "Склад, Менеджер";
Параметры.ЗаполнятьПриУсловии.ПоляОбъектаЗаполнены = "Склад";
ЗаполнениеОбъектовПоСтатистике.ДобавитьОписаниеЗаполняемыхРеквизитов(ОписаниеРеквизитов, "Отпустил", Параметры);
Параметры = ЗаполнениеОбъектовПоСтатистике.ПараметрыЗаполняемыхРеквизитов();
Параметры.РазрезыСбораСтатистики.ИспользоватьВсегда = "Склад, Менеджер";
Параметры.РазрезыСбораСтатистики.ИспользоватьТолькоЗаполненные = "Отпустил";
Параметры.ЗаполнятьПриУсловии.ПоляОбъектаЗаполнены = "Склад";
ЗаполнениеОбъектовПоСтатистике.ДобавитьОписаниеЗаполняемыхРеквизитов(ОписаниеРеквизитов, "ОтпустилДолжность", Параметры);
ЗаполнениеОбъектовПоСтатистике.ЗаполнитьРеквизитыОбъекта(ЭтотОбъект, ДанныеЗаполнения, ОписаниеРеквизитов);
РеализацияТоваровУслугЛокализация.ОбработкаЗаполнения(ЭтотОбъект, ДанныеЗаполнения, СтандартнаяОбработка);
ИнициализироватьДокумент(ДанныеЗаполнения, ПерезаполнятьСтавкуНДС);
ЕстьКорректировки = Ложь;
ПродажиСервер.ПроверитьНаличиеКорректировок(Ссылка, Ссылка, ЕстьКорректировки);
ВзаиморасчетыСервер.ОбработкаЗаполнения(ЭтотОбъект, ДанныеЗаполнения);
Если РеализацияПоЗаказам И (ПорядокРасчетов = Перечисления.ПорядокРасчетов.ПоНакладным
Или ПорядокРасчетов = Перечисления.ПорядокРасчетов.ПоДоговорамНакладным
Или ПорядокРасчетов = Перечисления.ПорядокРасчетов.ПоЗаказамНакладным)
Или (Не РеализацияПоЗаказам И ПорядокРасчетов <> Перечисления.ПорядокРасчетов.ПоДоговорамКонтрагентов) Тогда
Если ЗначениеЗаполнено(Соглашение) Тогда
РеквизитыСоглашения = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(Соглашение,"ИспользуютсяДоговорыКонтрагентов,ГруппаФинансовогоУчета");
Если РеквизитыСоглашения.ИспользуютсяДоговорыКонтрагентов
И ЗначениеЗаполнено(Договор) Тогда
ГруппаФинансовогоУчета = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Договор,"ГруппаФинансовогоУчета");
Иначе
ГруппаФинансовогоУчета = РеквизитыСоглашения.ГруппаФинансовогоУчета;
КонецЕсли;
ИначеЕсли ЗначениеЗаполнено(Договор) Тогда
ГруппаФинансовогоУчета = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Договор,"ГруппаФинансовогоУчета");
КонецЕсли;
КонецЕсли;
Если КомиссионнаяТорговляСервер.РеализацияЧерезКомиссионера(ХозяйственнаяОперация) Тогда
Склад = Справочники.Склады.ПустаяСсылка();
КонецЕсли;
СкладГруппа = Справочники.Склады.ЭтоГруппаИСкладыИспользуютсяВТЧДокументовПродажи(Склад);
СкладыСервер.ЗаполнитьСкладыВТабличнойЧасти(Склад, СкладГруппа, Товары, Ложь);
КонецПроцедуры
Процедура ОбработкаПроверкиЗаполнения(Отказ, ПроверяемыеРеквизиты)
МассивНепроверяемыхРеквизитов = Новый Массив;
Если ХозяйственнаяОперация = Перечисления.ХозяйственныеОперации.ПередачаНаКомиссию
Или ХозяйственнаяОперация = Перечисления.ХозяйственныеОперации.ПередачаНаХранениеСПравомПродажи Тогда
МассивНепроверяемыхРеквизитов.Добавить("НалогообложениеНДС");
МассивНепроверяемыхРеквизитов.Добавить("Товары.СтавкаНДС");
КонецЕсли;
НоменклатураСервер.ПроверитьЗаполнениеКоличества(ЭтотОбъект, ПроверяемыеРеквизиты, Отказ);
НоменклатураСервер.ПроверитьЗаполнениеХарактеристик(ЭтотОбъект,МассивНепроверяемыхРеквизитов,Отказ);
НоменклатураСервер.ПроверитьЗаполнениеСерий(ЭтотОбъект,
НоменклатураСервер.ПараметрыУказанияСерий(ЭтотОбъект, Документы.РеализацияТоваровУслуг),
Отказ,
МассивНепроверяемыхРеквизитов);
МассивВсехРеквизитов = Новый Массив;
МассивРеквизитовОперации = Новый Массив;
Документы.РеализацияТоваровУслуг.ЗаполнитьИменаРеквизитовПоХозяйственнойОперации(
ХозяйственнаяОперация,
МассивВсехРеквизитов,
МассивРеквизитовОперации);
Для Каждого ЭлементМассива Из МассивВсехРеквизитов Цикл
Если МассивРеквизитовОперации.Найти(ЭлементМассива) = Неопределено Тогда
МассивНепроверяемыхРеквизитов.Добавить(ЭлементМассива);
КонецЕсли;
КонецЦикла;
Если Товары.НайтиСтроки(Новый Структура("СуммаВзаиморасчетов", 0)).Количество()=0 Тогда
ДополнительныеСвойства.Вставить("СуммаВВалютеВзаиморасчетов", ПолучитьСуммуВзаиморасчетовПоТЧ());
ДополнительныеСвойства.Вставить("СуммаЗалогаВВалютеВзаиморасчетов", ПолучитьСуммуВзаиморасчетовПоТаре());
Иначе
СтруктураПараметров = Новый Структура("Дата, Валюта, ВалютаВзаиморасчетов, СуммаВзаиморасчетов, Организация");
ЗаполнитьЗначенияСвойств(СтруктураПараметров, ЭтотОбъект);
СтруктураПараметров.Вставить("СуммаДокумента", ЭтотОбъект.Товары.Итог("СуммаСНДС"));
ВзаиморасчетыСервер.ЗаполнитьСуммуВзаиморасчетов(СтруктураПараметров);
ДополнительныеСвойства.Вставить("СуммаВВалютеВзаиморасчетов", Окр(СтруктураПараметров.СуммаВзаиморасчетов, 2));
СтруктураПараметров.Вставить("СуммаДокумента", ПолучитьСуммуДокументаПоТаре());
ВзаиморасчетыСервер.ЗаполнитьСуммуВзаиморасчетов(СтруктураПараметров);
ДополнительныеСвойства.Вставить("СуммаЗалогаВВалютеВзаиморасчетов", Окр(СтруктураПараметров.СуммаВзаиморасчетов, 2));
КонецЕсли;
Если Не РеализацияПоЗаказам
И ХозяйственнаяОперация = Перечисления.ХозяйственныеОперации.ПереходПраваСобственности Тогда
ТекстОшибки = НСтр("ru = 'Переход права собственности должен формироваться только по распоряжению.'");
ОбщегоНазначения.СообщитьПользователю(
ТекстОшибки,,
"Объект.РеализацияПоЗаказам",,
Отказ);
КонецЕсли;
Если ХозяйственнаяОперация = Перечисления.ХозяйственныеОперации.ПереходПраваСобственности Тогда
ТекстЗапроса = "
|ВЫБРАТЬ
| ТаблицаТовары.Номенклатура КАК Номенклатура
|ПОМЕСТИТЬ Товары
|ИЗ
| &ТаблицаТовары КАК ТаблицаТовары
|;
|
|
|ВЫБРАТЬ РАЗЛИЧНЫЕ
| Товары.Номенклатура КАК Номенклатура,
| Товары.Номенклатура.ТипНоменклатуры КАК ТипНоменклатуры,
| ПРЕДСТАВЛЕНИЕ(Товары.Номенклатура.ТипНоменклатуры) КАК ПредставлениеТипаНоменклатуры
|ИЗ
| Товары КАК Товары
|ГДЕ
| Товары.Номенклатура.ТипНоменклатуры <> ЗНАЧЕНИЕ(Перечисление.ТипыНоменклатуры.Товар)
|";
Запрос = Новый Запрос(ТекстЗапроса);
Запрос.УстановитьПараметр("ТаблицаТовары", Товары.Выгрузить(, "Номенклатура"));
ОшибочныеТипыНоменклатуры = Запрос.Выполнить().Выгрузить();
КонецЕсли;
Для ТекИндекс = 0 По Товары.Количество()-1 Цикл
СтрокаТовары = Товары[ТекИндекс];
Если РеализацияПоЗаказам
И Не ЗначениеЗаполнено(ЗаказКлиента)
И Не ЗначениеЗаполнено(СтрокаТовары.ЗаказКлиента) Тогда
Если ХозяйственнаяОперация = Перечисления.ХозяйственныеОперации.ПереходПраваСобственности Тогда
ТекстОшибки = НСтр("ru='Не заполнено поле ""Распоряжение"" в строке %НомерСтроки% списка ""Товары""'");
Иначе
ТекстОшибки = НСтр("ru='Не заполнено поле ""Заказ клиента"" в строке %НомерСтроки% списка ""Товары""'");
КонецЕсли;
ТекстОшибки = СтрЗаменить(ТекстОшибки, "%НомерСтроки%", СтрокаТовары.НомерСтроки);
ОбщегоНазначения.СообщитьПользователю(
ТекстОшибки,
ЭтотОбъект,
ОбщегоНазначенияКлиентСервер.ПутьКТабличнойЧасти("Товары", СтрокаТовары.НомерСтроки, "ЗаказКлиента"),
,
Отказ);
КонецЕсли;
Если ХозяйственнаяОперация = Перечисления.ХозяйственныеОперации.ПереходПраваСобственности Тогда
НайденнаяСтрока = ОшибочныеТипыНоменклатуры.Найти(СтрокаТовары.Номенклатура);
Если НайденнаяСтрока <> Неопределено Тогда
ТекстОшибки = НСтр("ru = 'В строке %НомерСтроки% списка ""Товары"" указана номенклатура с типом ""%ПредставлениеТипаНоменклатуры%"", Переход права собственности может делаться только по товарам.'");
ТекстОшибки = СтрЗаменить(ТекстОшибки, "%НомерСтроки%", СтрокаТовары.НомерСтроки);
ТекстОшибки = СтрЗаменить(ТекстОшибки,
"%ПредставлениеТипаНоменклатуры%",
НайденнаяСтрока.ПредставлениеТипаНоменклатуры);
ОбщегоНазначения.СообщитьПользователю(
ТекстОшибки,
ЭтотОбъект,
ОбщегоНазначенияКлиентСервер.ПутьКТабличнойЧасти("Товары", СтрокаТовары.НомерСтроки, "Номенклатура"),
,
Отказ);
КонецЕсли;
КонецЕсли;
КонецЦикла;
ЕстьСтрокиСверхЗаказа = ПраваПользователяПовтИсп.РеализацияСверхЗаказа()
И (Товары.НайтиСтроки(Новый Структура("КодСтроки", 0)).Количество() > 0);
Если Не РеализацияПоЗаказам
Или (РеализацияПоЗаказам
И ЕстьСтрокиСверхЗаказа) Тогда
МассивНепроверяемыхРеквизитов.Добавить("Товары.КодСтроки");
КонецЕсли;
УстановитьПривилегированныйРежим(Истина);
Если (Не ЗначениеЗаполнено(Соглашение)
Или Не ОбщегоНазначенияУТ.ЗначениеРеквизитаОбъектаТипаБулево(Соглашение, "ИспользуютсяДоговорыКонтрагентов")
И ПорядокРасчетов <> Перечисления.ПорядокРасчетов.ПоДоговорамКонтрагентов)
И ХозяйственнаяОперация <> Перечисления.ХозяйственныеОперации.ПереходПраваСобственности Тогда
МассивНепроверяемыхРеквизитов.Добавить("Договор");
КонецЕсли;
УстановитьПривилегированныйРежим(Ложь);
ДоставкаТоваров.ПроверитьЗаполнениеРеквизитовДоставки(ЭтотОбъект,
МассивНепроверяемыхРеквизитов,
Отказ,
РеализацияПоЗаказам);
Если Не ВернутьМногооборотнуюТару Тогда
МассивНепроверяемыхРеквизитов.Добавить("ДатаВозвратаМногооборотнойТары");
КонецЕсли;
Если ПолучитьФункциональнуюОпцию("ФормироватьВидыЗапасовПоПодразделениямМенеджерам") Тогда
ПроверяемыеРеквизиты.Добавить("Подразделение");
КонецЕсли;
Если Не ХозяйственнаяОперация = Перечисления.ХозяйственныеОперации.РеализацияБезПереходаПраваСобственности
И Не ХозяйственнаяОперация = Перечисления.ХозяйственныеОперации.РеализацияЧерезКомиссионераБезПереходаПраваСобственности Тогда
МассивНепроверяемыхРеквизитов.Добавить("ДатаПереходаПраваСобственности");
Иначе
Если Статус <> Перечисления.СтатусыРеализацийТоваровУслуг.Отгружено Тогда
МассивНепроверяемыхРеквизитов.Добавить("ДатаПереходаПраваСобственности");
КонецЕсли;
КонецЕсли;
ПроверитьВариантОформленияПродажи(МассивНепроверяемыхРеквизитов);
ОбщегоНазначения.УдалитьНепроверяемыеРеквизитыИзМассива(ПроверяемыеРеквизиты,МассивНепроверяемыхРеквизитов);
ПроверитьИзменениеХозяйственнойОперации(Отказ);
Если Не Отказ
И ОбщегоНазначенияУТ.ПроверитьЗаполнениеРеквизитовОбъекта(ЭтотОбъект, ПроверяемыеРеквизиты) Тогда
Отказ = Истина;
КонецЕсли;
ПродажиСервер.ПроверитьКорректностьЗаполненияДокументаПродажи(ЭтотОбъект,Отказ);
ОбщегоНазначенияУТ.ПроверитьПравильностьУказанияХозяйственнойОперации(ЭтотОбъект, Отказ);
Если Не РеализацияПоЗаказам
И Не ПраваПользователяПовтИсп.СозданиеРеализацииТоваровУслугБезЗаказа() Тогда
Если ХозяйственнаяОперация = Перечисления.ХозяйственныеОперации.ПереходПраваСобственности Тогда
ТекстОшибки = НСтр("ru='Нет прав на создание реализации товаров и услуг без распоряжения'");
Иначе
ТекстОшибки = НСтр("ru='Нет прав на создание реализации товаров и услуг без заказа'");
КонецЕсли;
ОбщегоНазначения.СообщитьПользователю(
ТекстОшибки,
Ссылка,
,
,
Отказ);
КонецЕсли;
Если ЗначениеЗаполнено("ДатаВозвратаМногооборотнойТары")
И ВернутьМногооборотнуюТару
И ДатаВозвратаМногооборотнойТары < НачалоДня(Дата) Тогда
ТекстОшибки = НСтр("ru='Дата возврата многооборотной тары не должна быть меньше даты документа.'");
ОбщегоНазначения.СообщитьПользователю(
ТекстОшибки,
,
"Объект.ДатаВозвратаМногооборотнойТары",
,
Отказ);
КонецЕсли;
Если Не (ХозяйственнаяОперация = Перечисления.ХозяйственныеОперации.РеализацияБезПереходаПраваСобственности
Или ХозяйственнаяОперация = Перечисления.ХозяйственныеОперации.РеализацияЧерезКомиссионераБезПереходаПраваСобственности)
И ДатаПереходаПраваСобственности <> Дата('00010101')
И ДатаПереходаПраваСобственности < НачалоДня(Дата) Тогда
ТекстОшибки = НСтр("ru='Дата перехода права собственности должна быть больше даты документа.'");
ОбщегоНазначения.СообщитьПользователю(
ТекстОшибки,
,
"Объект.ДатаПереходаПраваСобственности",
,
Отказ);
КонецЕсли;
Если Статус <> Перечисления.СтатусыРеализацийТоваровУслуг.КПредоплате Тогда
ПродажиСервер.ПроверитьЗапретОтгрузки(Партнер, Отказ);
КонецЕсли;
РеализацияТоваровУслугЛокализация.ОбработкаПроверкиЗаполнения(ЭтотОбъект, Отказ, ПроверяемыеРеквизиты);
КонецПроцедуры
Процедура ОбработкаПроведения(Отказ, РежимПроведения)
ИнициализироватьПараметрыЗаполненияВидовЗапасовДляПроведения(ЭтотОбъект);
Если ДополнительныеСвойства.Свойство("ИзменилосьТолькоСостояниеПереходаПраваСобственности")
И ДополнительныеСвойства.ИзменилосьТолькоСостояниеПереходаПраваСобственности Тогда
ПропуститьПроверкуЗапретаИзмененияРегистров(Движения);
КонецЕсли;
ПроведениеДокументов.ОбработкаПроведенияДокумента(ЭтотОбъект, Отказ);
ДоставкаТоваров.ОтразитьСостояниеДоставки(Ссылка, Отказ);
Если Не ДополнительныеСвойства.ИзменилосьТолькоСостояниеПереходаПраваСобственности Тогда
ПараметрыРегистрации = Документы.РеализацияТоваровУслуг.ПараметрыРегистрацииСчетовФактурВыданных(ЭтотОбъект);
УчетНДСУП.АктуализироватьСчетаФактурыВыданныеПриПроведении(ПараметрыРегистрации);
КонецЕсли;
РеализацияТоваровУслугЛокализация.ОбработкаПроведения(ЭтотОбъект, Отказ, РежимПроведения);
КонецПроцедуры
Процедура ОбработкаУдаленияПроведения(Отказ)
ИнициализироватьПараметрыЗаполненияВидовЗапасовДляПроведения(ЭтотОбъект);
ПроведениеДокументов.ОбработкаУдаленияПроведенияДокумента(ЭтотОбъект, Отказ);
ДоставкаТоваров.ОтразитьСостояниеДоставки(Ссылка, Отказ, Истина);
ПараметрыРегистрации = Документы.РеализацияТоваровУслуг.ПараметрыРегистрацииСчетовФактурВыданных(ЭтотОбъект);
УчетНДСУП.АктуализироватьСчетаФактурыВыданныеПриУдаленииПроведения(ПараметрыРегистрации);
РеализацияТоваровУслугЛокализация.ОбработкаУдаленияПроведения(ЭтотОбъект, Отказ);
КонецПроцедуры
Процедура ПриКопировании(ОбъектКопирования)
Согласован = Ложь;
ЗаказКлиента = Неопределено;
ИдентификаторПлатежа= Неопределено;
Статус = Метаданные.Документы.РеализацияТоваровУслуг.Реквизиты.Статус.ЗначениеЗаполнения;
СкидкиРассчитаны = Ложь;
РеализацияПоЗаказам = Ложь;
ВидыЗапасовУказаныВручную = Ложь;
СостояниеЗаполненияМногооборотнойТары = Перечисления.СостоянияЗаполненияМногооборотнойТары.ПустаяСсылка();
ДатаПереходаПраваСобственности = Дата(1,1,1);
СопроводительныеДокументы = "";
СведенияОТранспортировкеИГрузе = "";
СоглашениеЗаполнено = ПолучитьФункциональнуюОпцию("ИспользоватьСоглашенияСКлиентами") И ЗначениеЗаполнено(Соглашение);
Если СоглашениеЗаполнено Тогда
УсловияПродаж = ПродажиСервер.ПолучитьУсловияПродаж(Соглашение, Истина, Истина);
Если УсловияПродаж.СтатусСоглашения <> Перечисления.СтатусыСоглашенийСКлиентами.Закрыто Тогда
ДатаВозвратаМногооборотнойТары = МногооборотнаяТараСервер.РассчитатьДатуВозвратаМногооборотнойТары(
ЭтотОбъект,
УсловияПродаж.СрокВозвратаМногооборотнойТары,
УсловияПродаж.РассчитыватьДатуВозвратаТарыПоКалендарю,
УсловияПродаж.КалендарьВозвратаТары);
Иначе
Соглашение = Неопределено;
ДатаВозвратаМногооборотнойТары = Дата(1,1,1);
КонецЕсли;
Иначе
ДатаВозвратаМногооборотнойТары = Дата(1,1,1);
КонецЕсли;
Для Каждого ТекСтрока Из Товары Цикл
ТекСтрока.ЗаказКлиента = Неопределено;
ТекСтрока.КодСтроки = 0;
ТекСтрока.ИдентификаторСтроки = "";
КонецЦикла;
НазначениеПоУмолчанию = НаправленияДеятельностиСервер.ТолкающееНазначение(НаправлениеДеятельности);
НакладныеСервер.ЗаполнитьНазначенияВТабличнойЧасти(Товары, НазначениеПоУмолчанию);
Серии.Очистить();
ВидыЗапасов.Очистить();
СкидкиНаценкиЗаполнениеСервер.ОтменитьСкидки(ЭтотОбъект, "Товары", Истина, Истина);
Для Каждого СтрокаТЧ Из Товары Цикл
СтрокаТЧ.СуммаБонусныхБалловКСписанию = 0;
СтрокаТЧ.СуммаБонусныхБалловКСписаниюВВалюте = 0;
КонецЦикла;
ИнициализироватьДокумент();
ВзаиморасчетыСервер.ПриКопировании(ЭтотОбъект);
ОбщегоНазначенияУТ.ОчиститьИдентификаторыДокумента(ЭтотОбъект, "Товары,ВидыЗапасов");
СтруктураОснование = Документы.РеализацияТоваровУслуг.СтруктураОснованияДляПечати(ЭтотОбъект);
ЗаполнитьЗначенияСвойств(ЭтотОбъект, СтруктураОснование);
РеализацияТоваровУслугЛокализация.ПриКопировании(ЭтотОбъект, ОбъектКопирования);
Автор = Пользователи.ТекущийПользователь();
КонецПроцедуры
Процедура ПриЗаписи(Отказ)
Если ОбменДанными.Загрузка Тогда
Возврат;
КонецЕсли;
ПроведениеДокументов.ПриЗаписиДокумента(ЭтотОбъект, Отказ);
РеализацияТоваровУслугЛокализация.ПриЗаписи(ЭтотОбъект, Отказ);
КонецПроцедуры
Процедура ПриУстановкеНовогоНомера(СтандартнаяОбработка, Префикс)
Префикс = ОбщегоНазначенияУТПовтИсп.ДополнительныйПрефиксНумератораДокументыРеализацииТоваров();
КонецПроцедуры
#КонецОбласти
#Область СлужебныеПроцедурыИФункции
#Область ИнициализацияИЗаполнение
Процедура ЗаполнитьДокументНаОснованииЗаказаКлиента(Знач ДокументОснование,
Знач СкладОтгрузки,
ВариантОформления,
РеквизитыЗаказа = Неопределено,
ПараметрыОформления = Неопределено,
ХозяйственнаяОперацияРеализации = Неопределено)
ТипОснования = ТипЗнч(ДокументОснование);
ЗаполнятьПоОстаткам = Ложь;
ИспользоватьСоглашенияСКлиентами = ПолучитьФункциональнуюОпцию("ИспользоватьСоглашенияСКлиентами");
ВводитьНаОснованииНепроведенного = Ложь;
Если Не ПараметрыОформления = Неопределено И ТипЗнч(ПараметрыОформления) = Тип("Структура") Тогда
ПараметрыОформления.Свойство("ВводитьНаОснованииНепроведенного", ВводитьНаОснованииНепроведенного);
ВводитьНаОснованииНепроведенного = ?(ВводитьНаОснованииНепроведенного = Неопределено, Ложь, ВводитьНаОснованииНепроведенного)
КонецЕсли;
Если ТипОснования = Тип("ДокументСсылка.ЗаказКлиента") Тогда
Запрос = Новый Запрос;
Запрос.Текст = Документы.РеализацияТоваровУслуг.ТекстЗапросаЗаполненияНаОснованииЗаказа();
Запрос.УстановитьПараметр("ЗаказКлиента", ДокументОснование);
Запрос.УстановитьПараметр("ИспользоватьСоглашенияСКлиентами", ИспользоватьСоглашенияСКлиентами);
Запрос.УстановитьПараметр("ИспользоватьЗаданияНаПеревозкуДляУчетаДоставкиПеревозчиками",
ПолучитьФункциональнуюОпцию("ИспользоватьЗаданияНаПеревозкуДляУчетаДоставкиПеревозчиками"));
Запрос.УстановитьПараметр("ВводитьНаОснованииНепроведенного", ВводитьНаОснованииНепроведенного);
РезультатЗапроса = Запрос.ВыполнитьПакет();
РеквизитыЗаказа = РезультатЗапроса[0].Выбрать();
РеквизитыЗаказа.Следующий();
ОбщегоНазначенияУТ.ПроверитьВозможностьВводаНаОснованииПоОперации(ДокументОснование,
"РеализацияТоваровУслуг",
РеквизитыЗаказа.ХозяйственнаяОперация,
ВариантОформления);
Документы.ЗаказКлиента.ПроверитьВозможностьВводаНаОсновании(
РеквизитыЗаказа.ЗаказКлиента,
РеквизитыЗаказа.СтатусДокумента,
РеквизитыЗаказа.ЕстьОшибкиПроведен);
ЗаполнитьЗначенияСвойств(ЭтотОбъект, РеквизитыЗаказа);
Если ЗначениеЗаполнено(ХозяйственнаяОперацияРеализации) Тогда
ХозяйственнаяОперация = ХозяйственнаяОперацияРеализации;
КонецЕсли;
Если РеквизитыЗаказа.ЭтоЗаказКакСчет Тогда
Если Не ЗначениеЗаполнено(Дата) Тогда
Дата = ТекущаяДатаСеанса();
КонецЕсли;
КонецЕсли;
ДатаВозвратаМногооборотнойТары = МногооборотнаяТараСервер.РассчитатьДатуВозвратаМногооборотнойТары(
ЭтотОбъект,
РеквизитыЗаказа.СрокВозвратаМногооборотнойТары,
РеквизитыЗаказа.РассчитыватьДатуВозвратаТарыПоКалендарю,
РеквизитыЗаказа.КалендарьВозвратаТары);
Если РеквизитыЗаказа.ЗапрещеноВыбиратьГруппуСкладов Тогда
МассивСкладов = РезультатЗапроса[1].Выгрузить().ВыгрузитьКолонку("Склад");
КонецЕсли;
ИначеЕсли ТипОснования = Тип("ДокументСсылка.ЗаявкаНаВозвратТоваровОтКлиента") Тогда
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ЗаявкаНаВозврат.Ссылка КАК ЗаказКлиента,
| ЗаявкаНаВозврат.Партнер КАК Партнер,
| ЗаявкаНаВозврат.Контрагент КАК Контрагент,
| ЗаявкаНаВозврат.КонтактноеЛицо КАК КонтактноеЛицо,
| ЗаявкаНаВозврат.Договор КАК Договор,
| ЗаявкаНаВозврат.Организация КАК Организация,
| ЗаявкаНаВозврат.ФормаОплаты КАК ФормаОплаты,
| ЗаявкаНаВозврат.Соглашение КАК Соглашение,
| ЗаявкаНаВозврат.Сделка КАК Сделка,
| ЗаявкаНаВозврат.Валюта КАК Валюта,
| ЗаявкаНаВозврат.Валюта КАК ВалютаВзаиморасчетов,
| ЗаявкаНаВозврат.ГрафикОплаты КАК ГрафикОплаты,
| ЗаявкаНаВозврат.ДатаОтгрузки КАК ДатаОтгрузки,
| ЗаявкаНаВозврат.ЭтоЗаказКакСчет КАК ЭтоЗаказКакСчет,
| ВЫБОР
| КОГДА ЗаявкаНаВозврат.Склад.ЭтоГруппа
| И ЗаявкаНаВозврат.Склад.ВыборГруппы = ЗНАЧЕНИЕ(Перечисление.ВыборГруппыСкладов.РазрешитьВЗаказах)
| ТОГДА ЗНАЧЕНИЕ(Справочник.Склады.ПустаяСсылка)
| ИНАЧЕ ЗаявкаНаВозврат.Склад
| КОНЕЦ КАК Склад,
| ВЫБОР КОГДА ЗаявкаНаВозврат.Склад.ЭтоГруппа
| И ЗаявкаНаВозврат.Склад.ВыборГруппы = ЗНАЧЕНИЕ(Перечисление.ВыборГруппыСкладов.РазрешитьВЗаказах)
| ТОГДА ИСТИНА
| ИНАЧЕ ЛОЖЬ
| КОНЕЦ КАК ЗапрещеноВыбиратьГруппуСкладов,
| ЗаявкаНаВозврат.ЦенаВключаетНДС КАК ЦенаВключаетНДС,
| ЗаявкаНаВозврат.НалогообложениеНДС КАК НалогообложениеНДС,
| ВЫБОР
| КОГДА ЗаявкаНаВозврат.ХозяйственнаяОперация = ЗНАЧЕНИЕ(Перечисление.ХозяйственныеОперации.ВозвратТоваровОтКлиента)
| ИЛИ ЗаявкаНаВозврат.ХозяйственнаяОперация = ЗНАЧЕНИЕ(Перечисление.ХозяйственныеОперации.ВозвратОтРозничногоПокупателя)
| ТОГДА ЗНАЧЕНИЕ(Перечисление.ХозяйственныеОперации.РеализацияКлиенту)
| КОГДА ЗаявкаНаВозврат.ХозяйственнаяОперация = ЗНАЧЕНИЕ(Перечисление.ХозяйственныеОперации.ВозвратОтКомиссионера)
| ТОГДА ЗНАЧЕНИЕ(Перечисление.ХозяйственныеОперации.ПередачаНаКомиссию)
| ИНАЧЕ
| ЗНАЧЕНИЕ(Перечисление.ХозяйственныеОперации.ПередачаНаХранениеСПравомПродажи)
| КОНЕЦ КАК ХозяйственнаяОперация,
| ЗаявкаНаВозврат.НеОтгружатьЧастями КАК НеОтгружатьЧастями,
| ЗаявкаНаВозврат.АдресДоставки КАК АдресДоставки,
| ЗаявкаНаВозврат.Склад.ИспользоватьОрдернуюСхемуПриОтгрузке КАК ОрдернаяСхемаПриОтгрузке,
| ЗаявкаНаВозврат.ВернутьМногооборотнуюТару КАК ВернутьМногооборотнуюТару,
| ЗаявкаНаВозврат.СрокВозвратаМногооборотнойТары КАК СрокВозвратаМногооборотнойТары,
| ЗаявкаНаВозврат.ТребуетсяЗалогЗаТару КАК ТребуетсяЗалогЗаТару,
| ВЫБОР
| КОГДА &ИспользоватьСоглашенияСКлиентами
| ТОГДА ЗаявкаНаВозврат.Соглашение.КалендарьВозвратаТары
| ИНАЧЕ ЗНАЧЕНИЕ(Справочник.ПроизводственныеКалендари.ПустаяСсылка)
| КОНЕЦ КАК КалендарьВозвратаТары,
| ВЫБОР
| КОГДА &ИспользоватьСоглашенияСКлиентами
| ТОГДА ЗаявкаНаВозврат.Соглашение.РассчитыватьДатуВозвратаТарыПоКалендарю
| ИНАЧЕ ЛОЖЬ
| КОНЕЦ КАК РассчитыватьДатуВозвратаТарыПоКалендарю,
| ЗаявкаНаВозврат.Статус КАК СтатусДокумента,
| НЕ ЗаявкаНаВозврат.Проведен КАК ЕстьОшибкиПроведен,
|
| ЗаявкаНаВозврат.БанковскийСчет КАК БанковскийСчетОрганизации,
| ЗаявкаНаВозврат.БанковскийСчетКонтрагента КАК БанковскийСчетКонтрагента,
| ЗаявкаНаВозврат.Грузоотправитель КАК Грузоотправитель,
| ЗаявкаНаВозврат.Грузополучатель КАК Грузополучатель,
| ЗаявкаНаВозврат.БанковскийСчетГрузоотправителя КАК БанковскийСчетГрузоотправителя,
| ЗаявкаНаВозврат.БанковскийСчетГрузополучателя КАК БанковскийСчетГрузополучателя,
|
| ЗаявкаНаВозврат.СкидкиНаценки.(
| КлючСвязи,
| СкидкаНаценка,
| Сумма
| ) КАК СкидкиНаценки,
| ЗаявкаНаВозврат.АдресДоставкиЗначенияПолей КАК АдресДоставкиЗначенияПолей,
| ВЫБОР КОГДА НЕ &ИспользоватьЗаданияНаПеревозкуДляУчетаДоставкиПеревозчиками
| И ЗаявкаНаВозврат.СпособДоставки = ЗНАЧЕНИЕ(Перечисление.СпособыДоставки.СиламиПеревозчика) ТОГДА
| ЗаявкаНаВозврат.СпособДоставки
| КОНЕЦ КАК СпособДоставки,
|
| ВЫБОР КОГДА ЗаявкаНаВозврат.СпособДоставки = ЗНАЧЕНИЕ(Перечисление.СпособыДоставки.СиламиПеревозчика) ТОГДА
| ЗаявкаНаВозврат.ПеревозчикПартнер
| КОНЕЦ КАК ПеревозчикПартнер,
|
| ВЫБОР КОГДА НЕ &ИспользоватьЗаданияНаПеревозкуДляУчетаДоставкиПеревозчиками
| И ЗаявкаНаВозврат.СпособДоставки = ЗНАЧЕНИЕ(Перечисление.СпособыДоставки.СиламиПеревозчика) ТОГДА
| ЗаявкаНаВозврат.ДополнительнаяИнформацияПоДоставке
| КОНЕЦ КАК ДополнительнаяИнформацияПоДоставке,
|
| ЗаявкаНаВозврат.ПорядокРасчетов КАК ПорядокРасчетов,
| ЗаявкаНаВозврат.НаправлениеДеятельности КАК НаправлениеДеятельности
|
|ИЗ
| Документ.ЗаявкаНаВозвратТоваровОтКлиента КАК ЗаявкаНаВозврат
|ГДЕ
| ЗаявкаНаВозврат.Ссылка = &ДокументОснование
|;
|ВЫБРАТЬ РАЗЛИЧНЫЕ
| РаспоряженияОбороты.Склад КАК Склад
|ИЗ
| РегистрНакопления.РаспоряженияНаОтгрузкуИВозврат.Обороты(,,, Распоряжение = &ДокументОснование) КАК РаспоряженияОбороты";
Запрос.УстановитьПараметр("ДокументОснование", ДокументОснование);
Запрос.УстановитьПараметр("ИспользоватьСоглашенияСКлиентами", ИспользоватьСоглашенияСКлиентами);
Запрос.УстановитьПараметр("ИспользоватьЗаданияНаПеревозкуДляУчетаДоставкиПеревозчиками",
ПолучитьФункциональнуюОпцию("ИспользоватьЗаданияНаПеревозкуДляУчетаДоставкиПеревозчиками"));
РезультатЗапроса = Запрос.ВыполнитьПакет();
РеквизитыЗаказа = РезультатЗапроса[0].Выбрать();
РеквизитыЗаказа.Следующий();
ОбщегоНазначенияУТ.ПроверитьВозможностьВводаНаОснованииПоОперации(ДокументОснование,
"РеализацияТоваровУслуг",
РеквизитыЗаказа.ХозяйственнаяОперация,
ВариантОформления);
Документы.ЗаявкаНаВозвратТоваровОтКлиента.ПроверитьВозможностьВводаНаОсновании(
РеквизитыЗаказа.ЗаказКлиента,
РеквизитыЗаказа.СтатусДокумента,
РеквизитыЗаказа.ЕстьОшибкиПроведен);
ЗаполнитьЗначенияСвойств(ЭтотОбъект, РеквизитыЗаказа);
Если РеквизитыЗаказа.ЭтоЗаказКакСчет Тогда
Если НЕ ЗначениеЗаполнено(Дата) Тогда
Дата = ТекущаяДатаСеанса();
КонецЕсли;
КонецЕсли;
ДатаВозвратаМногооборотнойТары = МногооборотнаяТараСервер.РассчитатьДатуВозвратаМногооборотнойТары(
ЭтотОбъект,
РеквизитыЗаказа.СрокВозвратаМногооборотнойТары,
РеквизитыЗаказа.РассчитыватьДатуВозвратаТарыПоКалендарю,
РеквизитыЗаказа.КалендарьВозвратаТары);
Если РеквизитыЗаказа.ЗапрещеноВыбиратьГруппуСкладов Тогда
МассивСкладов = РезультатЗапроса[1].Выгрузить().ВыгрузитьКолонку("Склад");
КонецЕсли;
ИначеЕсли ТипОснования = Тип("Массив") Тогда
ЗаполнитьЗначенияСвойств(ЭтотОбъект, РеквизитыЗаказа);
Если ЗначениеЗаполнено(ХозяйственнаяОперацияРеализации) Тогда
ХозяйственнаяОперация = ХозяйственнаяОперацияРеализации;
КонецЕсли;
Валюта = ВалютаВзаиморасчетов;
БанковскийСчетОрганизации = РеквизитыЗаказа.БанковскийСчет;
ДатаВозвратаМногооборотнойТары = МногооборотнаяТараСервер.РассчитатьДатуВозвратаМногооборотнойТары(
ЭтотОбъект,
РеквизитыЗаказа.СрокВозвратаМногооборотнойТары,
РеквизитыЗаказа.РассчитыватьДатуВозвратаТарыПоКалендарю,
РеквизитыЗаказа.КалендарьВозвратаТары);
ПродажиСервер.ЗаполнитьБанковскиеСчетаПоДоговору(Договор, БанковскийСчетОрганизации, БанковскийСчетКонтрагента);
Если Не ЗначениеЗаполнено(БанковскийСчетОрганизации) Тогда
СтруктураПараметров = ДенежныеСредстваСервер.ПараметрыЗаполненияБанковскогоСчетаОрганизацииПоУмолчанию();
СтруктураПараметров.Организация = Организация;
СтруктураПараметров.БанковскийСчет = БанковскийСчетОрганизации;
БанковскийСчетОрганизации = ЗначениеНастроекПовтИсп.ПолучитьБанковскийСчетОрганизацииПоУмолчанию(СтруктураПараметров);
КонецЕсли;
Если Не ЗначениеЗаполнено(БанковскийСчетКонтрагента) Тогда
БанковскийСчетКонтрагента = ЗначениеНастроекПовтИсп.ПолучитьБанковскийСчетКонтрагентаПоУмолчанию(Контрагент, , БанковскийСчетКонтрагента);
КонецЕсли;
Если РеквизитыЗаказа.ЗапрещеноВыбиратьГруппуСкладов Тогда
Запрос = Новый Запрос;
Запрос.УстановитьПараметр("МассивДокументов", ДокументОснование);
Запрос.Текст =
"ВЫБРАТЬ РАЗЛИЧНЫЕ
| РаспоряженияОбороты.Склад КАК Склад
|ИЗ
| РегистрНакопления.РаспоряженияНаОтгрузкуИВозврат.Обороты(,,, Распоряжение В (&МассивДокументов)) КАК РаспоряженияОбороты";
РезультатЗапросаПоСкладам = Запрос.Выполнить();
МассивСкладов = РезультатЗапросаПоСкладам.Выгрузить().ВыгрузитьКолонку("Склад");
Склад = РеквизитыЗаказа.СкладОтгрузки;
КонецЕсли;
КонецЕсли;
Если ХозяйственнаяОперацияРеализации = Перечисления.ХозяйственныеОперации.ПереходПраваСобственности
И ИспользоватьСоглашенияСКлиентами
И ЗначениеЗаполнено(Соглашение) Тогда
РеквизитыСоглашения = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(Соглашение,
"ВозможнаРеализацияБезПереходаПраваСобственности, ИспользуютсяДоговорыКонтрагентов, Представление");
Если Не РеквизитыСоглашения.ВозможнаРеализацияБезПереходаПраваСобственности Тогда
ТекстИсключения = НСтр("ru = 'По соглашению ""%1"" невозможна отгрузка товаров без перехода права собственности.'");
ТекстИсключения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
ТекстИсключения,
РеквизитыСоглашения.Представление);
ВызватьИсключение ТекстИсключения;
КонецЕсли;
Если Не РеквизитыСоглашения.ИспользуютсяДоговорыКонтрагентов Тогда
ТекстИсключения = НСтр("ru = 'В соглашении ""%1"" не используются договоры с контрагентами. Использование договоров является обязательным для реализации товаров с отложенным переходом права собственности.'");
ТекстИсключения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
ТекстИсключения,
РеквизитыСоглашения.Представление);
ВызватьИсключение ТекстИсключения;
КонецЕсли;
КонецЕсли;
РеализацияПоЗаказам = Истина;
Если ПорядокРасчетов = Перечисления.ПорядокРасчетов.ПоНакладным Тогда
Если ИспользоватьСоглашенияСКлиентами И ЗначениеЗаполнено(Соглашение) Тогда
УсловияПродаж = ПродажиСервер.ПолучитьУсловияПродаж(Соглашение);
ФормаОплаты = УсловияПродаж.ФормаОплаты;
СтруктураПараметров = ДенежныеСредстваСервер.ПараметрыЗаполненияКассыОрганизацииПоУмолчанию();
СтруктураПараметров.Организация = Организация;
СтруктураПараметров.НаправлениеДеятельности = НаправлениеДеятельности;
СтруктураПараметров.ФормаОплаты = ФормаОплаты;
СтруктураПараметров.ФизическоеЛицо = Курьер;
Касса = ЗначениеНастроекПовтИсп.ПолучитьКассуОрганизацииПоУмолчанию(СтруктураПараметров);
КонецЕсли;
КонецЕсли;
Если ХозяйственнаяОперацияРеализации = Перечисления.ХозяйственныеОперации.ПереходПраваСобственности Тогда
ЗаполнятьПоОстаткам = Истина;
Склад = Справочники.Склады.ПустаяСсылка();
СкладОтгрузки = Справочники.Склады.ПустаяСсылка();
ИначеЕсли Не ЗначениеЗаполнено(СкладОтгрузки) Тогда
Если РеквизитыЗаказа.ЗапрещеноВыбиратьГруппуСкладов Тогда
Если МассивСкладов.Количество() = 0 Тогда
ЗаполнятьПоОстаткам = Истина;
ИначеЕсли МассивСкладов.Количество() >= 1 Тогда
СкладОтгрузки = МассивСкладов[0];
Склад = СкладОтгрузки;
ЗаполнятьПоОстаткам = Истина;
КонецЕсли;
Иначе
ЗаполнятьПоОстаткам = Истина;
СкладОтгрузки = Склад;
КонецЕсли;
Иначе
Если РеквизитыЗаказа.ЗапрещеноВыбиратьГруппуСкладов Тогда
Склад = СкладОтгрузки;
КонецЕсли;
ЗаполнятьПоОстаткам = Истина;
КонецЕсли;
Если Не ЗначениеЗаполнено(Статус) Тогда
Статус = Перечисления.СтатусыРеализацийТоваровУслуг.Отгружено;
КонецЕсли;
Если ВводитьНаОснованииНепроведенного Тогда
ЗаполнятьПоОстаткам = Ложь;
КонецЕсли;
Если ЗаполнятьПоОстаткам Тогда
Если ТипОснования = Тип("Массив") Тогда
МассивЗаказов = ДокументОснование;
Иначе
МассивЗаказов = Новый Массив();
МассивЗаказов.Добавить(ЗаказКлиента);
КонецЕсли;
ВариантОформленияПродажи = ?(ЗначениеЗаполнено(ВариантОформления),
ВариантОформления,
Перечисления.ВариантыОформленияПродажи.РеализацияТоваровУслуг);
ПараметрыЗаполнения = Новый Структура;
ПараметрыЗаполнения.Вставить("ВариантОформления", ВариантОформленияПродажи);
ПараметрыЗаполнения.Вставить("ПараметрыОформления", ПараметрыОформления);
ПараметрыЗаполнения.Вставить("ИспользоватьРасширенныеВозможностиЗаказаКлиента", Не РеквизитыЗаказа.ЭтоЗаказКакСчет);
Если ПараметрыОформления <> Неопределено
И ПараметрыОформления.Свойство("ПроверитьСклады") Тогда
ПараметрыЗаполнения.Вставить("ПроверитьСклады", ПараметрыОформления.ПроверитьСклады);
КонецЕсли;
РеализацияТоваровУслугЛокализация.ДополнитьПараметрыЗаполнения(ПараметрыЗаполнения, РеквизитыЗаказа);
Документы.РеализацияТоваровУслуг.ЗаполнитьПоОстаткамЗаказов(
ЭтотОбъект,
Товары,
СкидкиНаценки,
НачислениеБонусныхБаллов,
?(СкладОтгрузки=Неопределено, Справочники.Склады.ПустаяСсылка(), СкладОтгрузки),
МассивЗаказов,
ПараметрыЗаполнения,
ШтрихкодыУпаковок);
Штрихкоды = ШтрихкодыУпаковок.Выгрузить();
Штрихкоды.Свернуть("ШтрихкодУпаковки");
ШтрихкодыУпаковок.Загрузить(Штрихкоды);
ЗаказыСервер.ЗаполнитьЗаказВШапкеПоЗаказамВТабличнойЧасти(ЗаказКлиента, Товары, "ЗаказКлиента");
Если НЕ ЗначениеЗаполнено(ЗаказКлиента)
И МассивЗаказов.Количество() = 1
И ТипЗнч(МассивЗаказов[0]) = Тип("ДокументСсылка.ЗаказКлиента") Тогда
ЗаказКлиента = МассивЗаказов[0];
КонецЕсли;
СкидкиРассчитаны = Истина;
ПараметрыУказанияСерий = НоменклатураСервер.ПараметрыУказанияСерий(ЭтотОбъект, Документы.РеализацияТоваровУслуг);
НоменклатураСервер.ЗаполнитьСерииПоFEFO(ЭтотОбъект,ПараметрыУказанияСерий, Ложь);
КонецЕсли;
СтруктураОснование = Документы.РеализацияТоваровУслуг.СтруктураОснованияДляПечати(ЭтотОбъект);
ЗаполнитьЗначенияСвойств(ЭтотОбъект, СтруктураОснование);
КонецПроцедуры
Процедура ЗаполнитьДокументНаОснованииСделкиПоПродаже(Знач ДокументОснование)
Запрос = Новый Запрос(
"ВЫБРАТЬ
| СделкиСКлиентами.Ссылка КАК Сделка,
| СделкиСКлиентами.Партнер КАК Партнер,
| СделкиСКлиентами.СоглашениеСКлиентом КАК Соглашение,
| ЕСТЬNULL(СоглашенияСКлиентами.ХозяйственнаяОперация,
| ЗНАЧЕНИЕ(Перечисление.ХозяйственныеОперации.ПустаяСсылка)) КАК ОперацияСоглашения,
| СделкиСКлиентамиПартнерыИКонтактныеЛица.КонтактноеЛицо КАК КонтактноеЛицо
|ИЗ
| Справочник.СделкиСКлиентами КАК СделкиСКлиентами
| ЛЕВОЕ СОЕДИНЕНИЕ Справочник.СделкиСКлиентами.ПартнерыИКонтактныеЛица КАК СделкиСКлиентамиПартнерыИКонтактныеЛица
| ПО (СделкиСКлиентамиПартнерыИКонтактныеЛица.Ссылка = СделкиСКлиентами.Ссылка)
| И (СделкиСКлиентамиПартнерыИКонтактныеЛица.Партнер = СделкиСКлиентами.Партнер)
| И (СделкиСКлиентамиПартнерыИКонтактныеЛица.КонтактноеЛицо <> ЗНАЧЕНИЕ(Справочник.КонтактныеЛицаПартнеров.ПустаяСсылка))
|
| ЛЕВОЕ СОЕДИНЕНИЕ Справочник.СоглашенияСКлиентами КАК СоглашенияСКлиентами
| ПО СделкиСКлиентами.СоглашениеСКлиентом = СоглашенияСКлиентами.Ссылка
|ГДЕ
| СделкиСКлиентами.Ссылка = &ДокументОснование");
Запрос.УстановитьПараметр("ДокументОснование",ДокументОснование);
Выборка = Запрос.Выполнить().Выбрать();
Выборка.Следующий();
ОбщегоНазначенияУТ.ПроверитьВозможностьВводаНаОснованииСделкиПоПродаже(Выборка.Партнер);
ЗаполнитьЗначенияСвойств(ЭтотОбъект, Выборка);
Если ПолучитьФункциональнуюОпцию("ИспользоватьСоглашенияСКлиентами") Тогда
Если ЗначениеЗаполнено(Соглашение) Тогда
ОперацииДокумента = ОбщегоНазначенияУТ.ДопустимыеХозяйственныеОперацииДокумента("РеализацияТоваровУслуг");
Если ОперацииДокумента.Найти(Выборка.ОперацияСоглашения) <> Неопределено Тогда
ЗаполнитьУсловияПродажПоСоглашению();
КонецЕсли;
Иначе
ЗаполнитьУсловияПродажПоУмолчанию();
КонецЕсли;
КонецЕсли;
КонецПроцедуры
Процедура ЗаполнитьДокументНаОснованииИндивидуальногоСоглашенияСКлиентом(Знач ДокументОснование)
Запрос = Новый Запрос(
"ВЫБРАТЬ
| СоглашениеСКлиентом.Ссылка КАК Соглашение,
| СоглашениеСКлиентом.Партнер КАК Партнер,
| СоглашениеСКлиентом.ХозяйственнаяОперация КАК ХозяйственнаяОперация,
| СоглашениеСКлиентом.КонтактноеЛицо КАК КонтактноеЛицо,
|
| СоглашениеСКлиентом.Статус КАК СтатусДокумента,
| ВЫБОР
| КОГДА
| СоглашениеСКлиентом.Статус = ЗНАЧЕНИЕ(Перечисление.СтатусыСоглашенийСКлиентами.Действует)
| ТОГДА
| ЛОЖЬ
| ИНАЧЕ
| ИСТИНА
| КОНЕЦ КАК ЕстьОшибкиСтатус,
| СоглашениеСКлиентом.Типовое КАК ЕстьОшибкиТиповое
|
|ИЗ
| Справочник.СоглашенияСКлиентами КАК СоглашениеСКлиентом
|ГДЕ
| СоглашениеСКлиентом.Ссылка = &ДокументОснование
|");
Запрос.УстановитьПараметр("ДокументОснование", ДокументОснование);
РезультатЗапроса = Запрос.ВыполнитьПакет();
МассивРезультатовЗапроса = Запрос.ВыполнитьПакет();
РезультатЗапроса = МассивРезультатовЗапроса[0];
Выборка = РезультатЗапроса.Выбрать();
Выборка.Следующий();
ПродажиСервер.ПроверитьВозможностьВводаНаОснованииСоглашения("РеализацияТоваровУслуг", Выборка.ХозяйственнаяОперация);
МассивДопустимыхСтатусов = Новый Массив();
МассивДопустимыхСтатусов.Добавить(Перечисления.СтатусыСоглашенийСКлиентами.Действует);
ОбщегоНазначенияУТ.ПроверитьВозможностьВводаНаОснованииСоглашения(Выборка.ЕстьОшибкиТиповое);
ОбщегоНазначенияУТ.ПроверитьВозможностьВводаНаОсновании(
Выборка.Соглашение,
Выборка.СтатусДокумента,
,
Выборка.ЕстьОшибкиСтатус,
МассивДопустимыхСтатусов);
ЗаполнитьЗначенияСвойств(ЭтотОбъект, Выборка);
ЗаполнитьУсловияПродажПоСоглашению();
КонецПроцедуры
Процедура ЗаполнитьДокументНаОснованииВозвратаТоваровОтКлиента(Знач ДокументОснование)
Запрос = Новый Запрос;
Запрос.УстановитьПараметр("ДокументОснование",ДокументОснование);
Запрос.Текст =
"ВЫБРАТЬ
| ВозвратТоваровОтКлиента.Ссылка КАК Ссылка,
| ВозвратТоваровОтКлиента.Организация КАК Организация,
| ВозвратТоваровОтКлиента.Партнер КАК Партнер,
| ВозвратТоваровОтКлиента.Контрагент КАК Контрагент,
| ВозвратТоваровОтКлиента.Сделка КАК Сделка,
| ВозвратТоваровОтКлиента.Соглашение КАК Соглашение,
| ВозвратТоваровОтКлиента.Валюта КАК Валюта,
| ВозвратТоваровОтКлиента.Валюта КАК ВалютаВзаиморасчетов,
| ВозвратТоваровОтКлиента.СуммаДокумента КАК СуммаДокумента,
| ВозвратТоваровОтКлиента.СуммаДокумента КАК СуммаВзаиморасчетов,
| ВозвратТоваровОтКлиента.Склад КАК Склад,
| ВозвратТоваровОтКлиента.ЦенаВключаетНДС КАК ЦенаВключаетНДС,
| ВозвратТоваровОтКлиента.НалогообложениеНДС КАК НалогообложениеНДС,
| ВозвратТоваровОтКлиента.Договор КАК Договор,
| ВозвратТоваровОтКлиента.ВозвратПереданнойМногооборотнойТары КАК ВернутьМногооборотнуюТару,
| ВозвратТоваровОтКлиента.ПредусмотренЗалогЗаТару КАК ТребуетсяЗалогЗаТару,
| ВозвратТоваровОтКлиента.НаправлениеДеятельности КАК НаправлениеДеятельности,
| ВозвратТоваровОтКлиента.ОплатаВВалюте КАК ОплатаВВалюте,
|
| ВЫБОР КОГДА ВозвратТоваровОтКлиента.ХозяйственнаяОперация = ЗНАЧЕНИЕ(Перечисление.ХозяйственныеОперации.ВозвратОтКомиссионера) ТОГДА
| ЗНАЧЕНИЕ(Перечисление.ХозяйственныеОперации.ПередачаНаКомиссию)
| ИНАЧЕ
| ЗНАЧЕНИЕ(Перечисление.ХозяйственныеОперации.РеализацияКлиенту)
| КОНЕЦ КАК ХозяйственнаяОперация,
|
| НЕ ВозвратТоваровОтКлиента.Проведен КАК ЕстьОшибкиПроведен,
|
| ВозвратТоваровОтКлиента.Товары.(
| Номенклатура КАК Номенклатура,
| Характеристика КАК Характеристика,
| Упаковка КАК Упаковка,
| Назначение КАК Назначение,
| КоличествоУпаковок КАК КоличествоУпаковок,
| Количество КАК Количество,
| Цена КАК Цена,
| Сумма КАК Сумма,
| СтавкаНДС КАК СтавкаНДС,
| СуммаНДС КАК СуммаНДС,
| СуммаСНДС КАК СуммаСНДС,
| Склад КАК Склад
| ) КАК Товары,
|
| ВозвратТоваровОтКлиента.Серии.(
| Номенклатура КАК Номенклатура,
| Характеристика КАК Характеристика,
| Назначение КАК Назначение,
| Серия КАК Серия,
| Количество КАК Количество,
| Склад КАК Склад
| ) КАК Серии
|
|ИЗ
| Документ.ВозвратТоваровОтКлиента КАК ВозвратТоваровОтКлиента
|ГДЕ
| ВозвратТоваровОтКлиента.Ссылка = &ДокументОснование";
Выборка = Запрос.Выполнить().Выбрать();
Выборка.Следующий();
ОбщегоНазначенияУТ.ПроверитьВозможностьВводаНаОсновании(
Выборка.Ссылка,
,
Выборка.ЕстьОшибкиПроведен,);
ЗаполнитьЗначенияСвойств(ЭтотОбъект, Выборка);
Товары.Загрузить(Выборка.Товары.Выгрузить());
Серии.Загрузить(Выборка.Серии.Выгрузить());
НазначениеДляЗаполнения = НаправленияДеятельностиСервер.ТолкающееНазначение(НаправлениеДеятельности);
Для Каждого Строка Из Товары Цикл
Если Строка.Назначение <> НазначениеДляЗаполнения Тогда
Строка.Назначение = Справочники.Назначения.ПустаяСсылка();
КонецЕсли;
КонецЦикла;
Для Каждого Строка Из Серии Цикл
Если Строка.Назначение <> НазначениеДляЗаполнения Тогда
Строка.Назначение = Справочники.Назначения.ПустаяСсылка();
КонецЕсли;
КонецЦикла;
ПараметрыУказанияСерий = НоменклатураСервер.ПараметрыУказанияСерий(ЭтотОбъект, Документы.РеализацияТоваровУслуг);
НоменклатураСервер.ЗаполнитьСтатусыУказанияСерий(ЭтотОбъект, ПараметрыУказанияСерий);
КонецПроцедуры
Процедура ЗаполнитьДокументПоОтбору(Знач ДанныеЗаполнения)
Если ДанныеЗаполнения.Свойство("РеквизитыШапки") Тогда
ЗаполнитьЗначенияСвойств(ЭтотОбъект, ДанныеЗаполнения.РеквизитыШапки);
КонецЕсли;
Если ДанныеЗаполнения.Свойство("Партнер") Тогда
Партнер = ДанныеЗаполнения.Партнер;
Если ПолучитьФункциональнуюОпцию("ИспользоватьСоглашенияСКлиентами") Тогда
ЗаполнитьУсловияПродажПоУмолчанию();
КонецЕсли;
КонецЕсли;
Если ДанныеЗаполнения.Свойство("ВариантОформленияПродажи") Тогда
ВариантОформленияПродажи = ДанныеЗаполнения.ВариантОформленияПродажи;
КонецЕсли;
Если ДанныеЗаполнения.Свойство("Товары") Тогда
Для Каждого ТекСтрока Из ДанныеЗаполнения.Товары Цикл
ЗаполнитьЗначенияСвойств(Товары.Добавить(), ТекСтрока);
КонецЦикла;
КонецЕсли;
КонецПроцедуры
Процедура ЗаполнитьДокументНаОснованииПриобретенияТоваровУслуг(ПриобретениеТоваровУслуг)
Запрос = Новый Запрос;
Запрос.УстановитьПараметр("ДокументОснование",ПриобретениеТоваровУслуг);
Запрос.Текст =
"ВЫБРАТЬ
| ПриобретениеТоваровУслуг.Ссылка КАК Ссылка,
| ПриобретениеТоваровУслуг.Организация КАК Организация,
| ПриобретениеТоваровУслуг.Сделка КАК Сделка,
| ПриобретениеТоваровУслуг.Склад КАК Склад,
| ПриобретениеТоваровУслуг.Подразделение КАК Подразделение,
| ВЫБОР
| КОГДА ПриобретениеТоваровУслуг.НаправлениеДеятельности.УчетДоходов
| ТОГДА ПриобретениеТоваровУслуг.НаправлениеДеятельности
| ИНАЧЕ Значение(Справочник.НаправленияДеятельности.ПустаяСсылка)
| КОНЕЦ КАК НаправлениеДеятельности,
|
| НЕ ПриобретениеТоваровУслуг.Проведен КАК ЕстьОшибкиПроведен
|
|ИЗ
| Документ.ПриобретениеТоваровУслуг КАК ПриобретениеТоваровУслуг
|ГДЕ
| ПриобретениеТоваровУслуг.Ссылка = &ДокументОснование
|
|
|;
|ВЫБРАТЬ
| Товары.Номенклатура КАК Номенклатура,
| Товары.Характеристика КАК Характеристика,
| Товары.Назначение КАК Назначение,
| Товары.Склад КАК Склад,
| Товары.Серия КАК Серия,
| Товары.СтатусУказанияСерий КАК СтатусУказанияСерий,
| Товары.Количество КАК Количество,
| Товары.КоличествоУпаковок КАК КоличествоУпаковок,
| Товары.Упаковка КАК Упаковка,
| Товары.Подразделение КАК Подразделение,
| Товары.СтавкаНДС КАК СтавкаНДС
|
|ИЗ
| Документ.ПриобретениеТоваровУслуг.Товары КАК Товары
|ГДЕ
| Товары.Ссылка = &ДокументОснование
|;
|
|
|ВЫБРАТЬ
| Серии.Номенклатура КАК Номенклатура,
| Серии.Характеристика КАК Характеристика,
| Серии.Назначение КАК Назначение,
| Серии.Склад КАК Склад,
| Серии.Серия КАК Серия,
| Серии.Количество КАК Количество
|ИЗ
| Документ.ПриобретениеТоваровУслуг.Серии КАК Серии
|ГДЕ
| Серии.Ссылка = &ДокументОснование";
ПакетРезультатов = Запрос.ВыполнитьПакет();
Шапка = ПакетРезультатов[0].Выбрать();
Если Не Шапка.Следующий() Тогда
ТекстОшибки = НСтр("ru='Документ %Документ% не содержит товаров. Ввод на основании документа запрещен.'");
ТекстОшибки = СтрЗаменить(ТекстОшибки, "%Документ%", ПриобретениеТоваровУслуг);
ВызватьИсключение ТекстОшибки;
КонецЕсли;
ОбщегоНазначенияУТ.ПроверитьВозможностьВводаНаОсновании(
Шапка.Ссылка,
,
Шапка.ЕстьОшибкиПроведен,);
ЗаполнитьЗначенияСвойств(ЭтотОбъект, Шапка);
ДокументОснование = ПриобретениеТоваровУслуг;
ТоварыОснования = ПакетРезультатов[1].Выгрузить();
ИндексыСтрок = Новый Массив();
Для Каждого СтрокаТовары Из ТоварыОснования Цикл
Если СтрокаТовары.СтатусУказанияСерий = 10 Тогда
ИндексыСтрок.Вставить(0, ТоварыОснования.Индекс(СтрокаТовары));
КонецЕсли;
КонецЦикла;
СерииОснования = ПакетРезультатов[2].Выгрузить();
Если ИндексыСтрок.Количество() > 0 Тогда
КлючСерии = "Номенклатура, Характеристика, Склад, Назначение";
НакладныеСервер.ПеренестиСерииИзТаблицыВСтроки(ТоварыОснования, ИндексыСтрок, СерииОснования, КлючСерии);
КонецЕсли;
Товары.Загрузить(ТоварыОснования);
Для Каждого СтрокаСерии Из СерииОснования Цикл
Если СтрокаСерии.Количество > 0 Тогда
НоваяСтрока = Серии.Добавить();
ЗаполнитьЗначенияСвойств(НоваяСтрока, СтрокаСерии);
КонецЕсли;
КонецЦикла;
ИспользованиеСкладов = Новый Структура("ИспользуютсяСкладыЗакупки, ИспользуютсяСкладыПродажи",
ПолучитьФункциональнуюОпцию("ИспользоватьСкладыВТабличнойЧастиДокументовЗакупки"),
ПолучитьФункциональнуюОпцию("ИспользоватьСкладыВТабличнойЧастиДокументовПродажи"));
Если ИспользованиеСкладов.ИспользуютсяСкладыЗакупки И Не ИспользованиеСкладов.ИспользуютсяСкладыПродажи Тогда
МассивСкладов = ОбщегоНазначенияУТ.УдалитьПовторяющиесяЭлементыМассива(Товары.ВыгрузитьКолонку("Склад"));
Если МассивСкладов.Количество() = 1 Тогда
Склад = МассивСкладов[0];
Иначе
Склад = Справочники.Склады.ПустаяСсылка();
КонецЕсли;
КонецЕсли;
НазначениеДляЗаполнения = НаправленияДеятельностиСервер.ТолкающееНазначение(НаправлениеДеятельности);
Для Каждого Строка Из Товары Цикл
Если Строка.Назначение <> НазначениеДляЗаполнения Тогда
Строка.Назначение = Справочники.Назначения.ПустаяСсылка();
КонецЕсли;
КонецЦикла;
Для Каждого Строка Из Серии Цикл
Если Строка.Назначение <> НазначениеДляЗаполнения Тогда
Строка.Назначение = Справочники.Назначения.ПустаяСсылка();
КонецЕсли;
КонецЦикла;
ПараметрыУказанияСерий = НоменклатураСервер.ПараметрыУказанияСерий(ЭтотОбъект, Документы.РеализацияТоваровУслуг);
НоменклатураСервер.ЗаполнитьСтатусыУказанияСерий(ЭтотОбъект, ПараметрыУказанияСерий);
КонецПроцедуры
Процедура ЗаполнитьДокументНаОснованииАктаОРасхожденияхПослеОтгрузки(Знач ДанныеЗаполнения)
УстановитьПривилегированныйРежим(Истина);
ТекстЗапроса =
"ВЫБРАТЬ
| Реализация.АдресДоставки,
| Реализация.БанковскийСчетОрганизации,
| Реализация.БанковскийСчетКонтрагента,
| Реализация.БанковскийСчетГрузоотправителя,
| Реализация.БанковскийСчетГрузополучателя,
| Реализация.Валюта,
| Реализация.ВалютаВзаиморасчетов,
| Реализация.Грузоотправитель,
| Реализация.Грузополучатель,
| Реализация.Дата КАК ДатаРаспоряжения,
| Реализация.ДоверенностьВыдана,
| Реализация.ДоверенностьДата,
| Реализация.ДоверенностьЛицо,
| Реализация.ДоверенностьНомер,
| Реализация.ЗаказКлиента,
| Реализация.Организация,
| Реализация.Контрагент,
| Реализация.НалогообложениеНДС,
| Реализация.Партнер,
| Реализация.Подразделение,
| Реализация.Сделка,
| Реализация.СкидкиРассчитаны,
| Реализация.Склад,
| Реализация.Соглашение,
| Реализация.СуммаВзаиморасчетов,
| Реализация.ФормаОплаты,
| Реализация.ХозяйственнаяОперация,
| Реализация.ЦенаВключаетНДС,
| Реализация.Касса,
| Реализация.Отпустил,
| Реализация.ОтпустилДолжность,
| Реализация.РеализацияПоЗаказам,
| Реализация.ГруппаФинансовогоУчета,
| Реализация.КартаЛояльности,
| Реализация.Договор,
| Реализация.Основание,
| Реализация.СпособДоставки,
| Реализация.ЗонаДоставки,
| Реализация.АдресДоставкиЗначенияПолей,
| Реализация.ПеревозчикПартнер,
| Реализация.ВремяДоставкиС,
| Реализация.ВремяДоставкиПо,
| Реализация.АдресДоставкиПеревозчика,
| Реализация.АдресДоставкиПеревозчикаЗначенияПолей,
| Реализация.ДополнительнаяИнформацияПоДоставке,
| Реализация.КонтактноеЛицо,
| Реализация.Руководитель,
| Реализация.ГлавныйБухгалтер,
| Реализация.ПорядокРасчетов,
| Реализация.ВернутьМногооборотнуюТару,
| Реализация.ДатаВозвратаМногооборотнойТары,
| Реализация.СостояниеЗаполненияМногооборотнойТары,
| Реализация.ТребуетсяЗалогЗаТару,
| Реализация.ОснованиеДата,
| Реализация.ОснованиеНомер,
| Реализация.НаправлениеДеятельности КАК НаправлениеДеятельности
|ИЗ
| Документ.РеализацияТоваровУслуг КАК Реализация
|ГДЕ
| Реализация.Ссылка = &ДокументОснование
|;
|
|
|ВЫБРАТЬ
| АктОРасхожденияхПослеОтгрузкиТовары.Номенклатура КАК Номенклатура,
| АктОРасхожденияхПослеОтгрузкиТовары.Характеристика КАК Характеристика,
| АктОРасхожденияхПослеОтгрузкиТовары.Назначение КАК Назначение,
| АктОРасхожденияхПослеОтгрузкиТовары.Серия КАК Серия,
| АктОРасхожденияхПослеОтгрузкиТовары.Упаковка КАК Упаковка,
| АктОРасхожденияхПослеОтгрузкиТовары.Цена КАК Цена,
| АктОРасхожденияхПослеОтгрузкиТовары.СтавкаНДС КАК СтавкаНДС,
| АктОРасхожденияхПослеОтгрузкиТовары.Склад КАК Склад,
| АктОРасхожденияхПослеОтгрузкиТовары.КоличествоПоДокументу - АктОРасхожденияхПослеОтгрузкиТовары.Количество КАК Количество,
| АктОРасхожденияхПослеОтгрузкиТовары.КоличествоУпаковокПоДокументу - АктОРасхожденияхПослеОтгрузкиТовары.КоличествоУпаковок КАК КоличествоУпаковок,
| АктОРасхожденияхПослеОтгрузкиТовары.СуммаПоДокументу - АктОРасхожденияхПослеОтгрузкиТовары.Сумма КАК Сумма,
| АктОРасхожденияхПослеОтгрузкиТовары.СуммаНДСПоДокументу - АктОРасхожденияхПослеОтгрузкиТовары.СуммаНДС КАК СуммаНДС,
| АктОРасхожденияхПослеОтгрузкиТовары.СуммаСНДСПоДокументу - АктОРасхожденияхПослеОтгрузкиТовары.СуммаСНДС КАК СуммаСНДС,
| АктОРасхожденияхПослеОтгрузкиТовары.ЗаказКлиента,
| АктОРасхожденияхПослеОтгрузкиТовары.Действие,
| АктОРасхожденияхПослеОтгрузкиТовары.Ссылка.СпособОтраженияРасхождений КАК СпособОтраженияРасхождений,
| АктОРасхожденияхПослеОтгрузкиТовары.КодСтроки
|ПОМЕСТИТЬ ТоварыРеализации
|ИЗ
| Документ.АктОРасхожденияхПослеОтгрузки.Товары КАК АктОРасхожденияхПослеОтгрузкиТовары
|ГДЕ
| АктОРасхожденияхПослеОтгрузкиТовары.Ссылка = &АктОРасхождениях
| И АктОРасхожденияхПослеОтгрузкиТовары.Действие = ЗНАЧЕНИЕ(Перечисление.ВариантыДействийПоРасхождениямВАктеПослеОтгрузки.ТребуетсяДопоставка)
| И АктОРасхожденияхПослеОтгрузкиТовары.Реализация = &ДокументОснование
|;
|
|
|ВЫБРАТЬ
| ТоварыРеализации.Номенклатура,
| ТоварыРеализации.Характеристика,
| ТоварыРеализации.Назначение,
| ТоварыРеализации.Серия,
| ТоварыРеализации.Упаковка,
| ТоварыРеализации.Цена,
| ТоварыРеализации.СтавкаНДС,
| ТоварыРеализации.Склад,
| ТоварыРеализации.Количество,
| ТоварыРеализации.КоличествоУпаковок,
| ТоварыРеализации.Сумма,
| ТоварыРеализации.СуммаНДС,
| ТоварыРеализации.СуммаСНДС,
| ТоварыРеализации.ЗаказКлиента,
| ТоварыРеализации.Действие КАК ТоварыДействие,
| ТоварыРеализации.СпособОтраженияРасхождений,
| ТоварыРеализации.КодСтроки
|ИЗ
| ТоварыРеализации КАК ТоварыРеализации
|;
|
|
|ВЫБРАТЬ РАЗЛИЧНЫЕ
| ТоварыРеализации.ЗаказКлиента
|ИЗ
| ТоварыРеализации КАК ТоварыРеализации
|ГДЕ
| ТоварыРеализации.ЗаказКлиента <> НЕОПРЕДЕЛЕНО";
Запрос = Новый Запрос(ТекстЗапроса);
Запрос.УстановитьПараметр("ДокументОснование", ДанныеЗаполнения.ОснованиеАкта);
Запрос.УстановитьПараметр("АктОРасхождениях", ДанныеЗаполнения.АктОРасхождениях);
ПакетЗапросов = Запрос.ВыполнитьПакет();
ВыборкаШапка = ПакетЗапросов[0].Выбрать();
ВыборкаШапка.Следующий();
ЗаполнитьЗначенияСвойств(ЭтотОбъект, ВыборкаШапка);
ДопоставкаПоРеализации = ДанныеЗаполнения.ОснованиеАкта;
ТаблицаТоваров = ПакетЗапросов[2].Выгрузить();
Для Каждого ТекСтрока из ТаблицаТоваров Цикл
Если (ТекСтрока.СпособОтраженияРасхождений = Перечисления.СпособыОтраженияРасхожденийАктПриемкиКлиента.ОформлениеКорректировкиКакИсправлениеПервичныхДокументов
ИЛИ ТекСтрока.СпособОтраженияРасхождений = Перечисления.СпособыОтраженияРасхожденийАктПриемкиКлиента.ОформлениеКорректировокКакНовыеПервичныеДокументы)
И ТекСтрока.ТоварыДействие = Перечисления.ВариантыДействийПоРасхождениямВАктеПослеОтгрузки.ТребуетсяДопоставка Тогда
ТекСтрока.КодСтроки = 0;
КонецЕсли;
КонецЦикла;
Товары.Загрузить(ТаблицаТоваров);
ВыборкаЗаказы = ПакетЗапросов[3].Выбрать();
ЭлементовВВыборкеЗаказы = ВыборкаЗаказы.Количество();
Если ЭлементовВВыборкеЗаказы > 0 Тогда
РеализацияПоЗаказам = Истина;
Если ЭлементовВВыборкеЗаказы = 1 Тогда
ВыборкаЗаказы.Следующий();
ЗаказКлиента = ВыборкаЗаказы.ЗаказКлиента;
КонецЕсли;
КонецЕсли;
Если НЕ ЗначениеЗаполнено(Статус) Тогда
Статус = Перечисления.СтатусыРеализацийТоваровУслуг.Отгружено;
КонецЕсли;
КонецПроцедуры
Процедура ЗаполнитьДокументНаОснованииАктаОРасхожденияхПослеПриемки(Знач ДанныеЗаполнения)
Запрос = Новый Запрос;
Запрос.Текст = "
|ВЫБРАТЬ
| АктОРасхожденияхПослеПриемки.Ссылка КАК АктОРасхождениях,
| ВозвратТоваровОтКлиента.Ссылка КАК ДопоставкаПоРеализации,
| ВозвратТоваровОтКлиента.Валюта КАК Валюта,
| ВозвратТоваровОтКлиента.Организация КАК Организация,
| ВозвратТоваровОтКлиента.Контрагент КАК Контрагент,
| ВозвратТоваровОтКлиента.НалогообложениеНДС КАК НалогообложениеНДС,
| ВозвратТоваровОтКлиента.Подразделение КАК Подразделение,
| ВозвратТоваровОтКлиента.Склад КАК Склад,
| ВозвратТоваровОтКлиента.Партнер КАК Партнер,
| ВозвратТоваровОтКлиента.Соглашение КАК Соглашение,
|
| ВЫБОР
| КОГДА
| ВозвратТоваровОтКлиента.ХозяйственнаяОперация = ЗНАЧЕНИЕ(Перечисление.ХозяйственныеОперации.ВозвратТоваровОтКлиента)
| ИЛИ ВозвратТоваровОтКлиента.ХозяйственнаяОперация = ЗНАЧЕНИЕ(Перечисление.ХозяйственныеОперации.ВозвратОтРозничногоПокупателя)
| ТОГДА
| ЗНАЧЕНИЕ(Перечисление.ХозяйственныеОперации.РеализацияКлиенту)
| ИНАЧЕ
| ЗНАЧЕНИЕ(Перечисление.ХозяйственныеОперации.ПередачаНаКомиссию)
| КОНЕЦ КАК ХозяйственнаяОперация,
|
| ВозвратТоваровОтКлиента.ЦенаВключаетНДС КАК ЦенаВключаетНДС,
| ВозвратТоваровОтКлиента.Договор КАК Договор,
| ВозвратТоваровОтКлиента.КонтактноеЛицо КАК КонтактноеЛицо,
| ВозвратТоваровОтКлиента.ВозвратПереданнойМногооборотнойТары КАК ВернутьМногооборотнуюТару,
| ВозвратТоваровОтКлиента.ПредусмотренЗалогЗаТару КАК ТребуетсяЗалогЗаТару,
| НЕ АктОРасхожденияхПослеПриемки.Проведен КАК ЕстьОшибкиПроведенАктОРасхождениях,
| АктОРасхожденияхПослеПриемки.Статус КАК СтатусАктаОРасхождениях,
| НЕ АктОРасхожденияхПослеПриемки.Статус В (ЗНАЧЕНИЕ(Перечисление.СтатусыАктаОРасхождениях.КВыполнению), ЗНАЧЕНИЕ(Перечисление.СтатусыАктаОРасхождениях.Отработано)) КАК ЕстьОшибкиСтатусАкт,
| НЕ ВозвратТоваровОтКлиента.Проведен КАК ЕстьОшибкиПроведенДокументВозврата
|ИЗ
| Документ.АктОРасхожденияхПослеПриемки КАК АктОРасхожденияхПослеПриемки
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ Документ.ВозвратТоваровОтКлиента КАК ВозвратТоваровОтКлиента
| ПО (ИСТИНА)
|ГДЕ
| ВозвратТоваровОтКлиента.Ссылка = &ДокументОснование
| И АктОРасхожденияхПослеПриемки.Ссылка = &АктОРасхождениях
|
|;
|
|
|ВЫБРАТЬ
| АктОРасхожденияхПослеПриемки.Номенклатура КАК Номенклатура,
| АктОРасхожденияхПослеПриемки.Характеристика КАК Характеристика,
| АктОРасхожденияхПослеПриемки.Серия КАК Серия,
| АктОРасхожденияхПослеПриемки.СтатусУказанияСерий КАК СтатусУказанияСерий,
| АктОРасхожденияхПослеПриемки.Упаковка КАК Упаковка,
| АктОРасхожденияхПослеПриемки.Цена КАК Цена,
| АктОРасхожденияхПослеПриемки.СтавкаНДС КАК СтавкаНДС,
| АктОРасхожденияхПослеПриемки.КодСтроки КАК КодСтроки,
|
| СУММА(АктОРасхожденияхПослеПриемки.Количество - АктОРасхожденияхПослеПриемки.КоличествоПоДокументу) КАК Количество,
| СУММА(АктОРасхожденияхПослеПриемки.КоличествоУпаковок - АктОРасхожденияхПослеПриемки.КоличествоУпаковокПоДокументу) КАК КоличествоУпаковок,
| СУММА(АктОРасхожденияхПослеПриемки.Сумма - АктОРасхожденияхПослеПриемки.СуммаПоДокументу) КАК Сумма,
| СУММА(АктОРасхожденияхПослеПриемки.СуммаНДС - АктОРасхожденияхПослеПриемки.СуммаНДСПоДокументу) КАК СуммаНДС,
| СУММА(АктОРасхожденияхПослеПриемки.СуммаСНДС - АктОРасхожденияхПослеПриемки.СуммаСНДСПоДокументу) КАК СуммаСНДС
|ИЗ
| Документ.АктОРасхожденияхПослеПриемки.Товары КАК АктОРасхожденияхПослеПриемки
|ГДЕ
| АктОРасхожденияхПослеПриемки.Ссылка = &АктОРасхождениях
| И АктОРасхожденияхПослеПриемки.Действие = ЗНАЧЕНИЕ(Перечисление.ВариантыДействийПоРасхождениямВАктеПослеПриемки.ОформитьПерепоставленноеИВернуть)
| И АктОРасхожденияхПослеПриемки.ДокументОснование = &ДокументОснование
| И АктОРасхожденияхПослеПриемки.КоличествоУпаковок - АктОРасхожденияхПослеПриемки.КоличествоУпаковокПоДокументу > 0
|
|СГРУППИРОВАТЬ ПО
| Номенклатура,
| Характеристика,
| Серия,
| СтатусУказанияСерий,
| Упаковка,
| Цена,
| СтавкаНДС,
| КодСтроки
|
|;
|
|
|ВЫБРАТЬ
| АктОРасхожденияхПослеПриемкиСерии.Номенклатура КАК Номенклатура,
| АктОРасхожденияхПослеПриемкиСерии.Характеристика КАК Характеристика,
| АктОРасхожденияхПослеПриемкиСерии.Серия КАК Серия,
| СУММА(АктОРасхожденияхПослеПриемкиСерии.Количество - АктОРасхожденияхПослеПриемкиСерии.КоличествоПоДокументу) КАК Количество
|ИЗ
| Документ.АктОРасхожденияхПослеПриемки.Серии КАК АктОРасхожденияхПослеПриемкиСерии
|ГДЕ
| АктОРасхожденияхПослеПриемкиСерии.Ссылка = &АктОРасхождениях
| И АктОРасхожденияхПослеПриемкиСерии.Действие = ЗНАЧЕНИЕ(Перечисление.ВариантыДействийПоРасхождениямВАктеПослеПриемки.ОформитьПерепоставленноеИВернуть)
| И АктОРасхожденияхПослеПриемкиСерии.ДокументОснование = &ДокументОснование
| И АктОРасхожденияхПослеПриемкиСерии.Количество - АктОРасхожденияхПослеПриемкиСерии.КоличествоПоДокументу > 0
|
|СГРУППИРОВАТЬ ПО
| АктОРасхожденияхПослеПриемкиСерии.Номенклатура,
| АктОРасхожденияхПослеПриемкиСерии.Характеристика,
| АктОРасхожденияхПослеПриемкиСерии.Серия
|
|";
Запрос.УстановитьПараметр("ДокументОснование", ДанныеЗаполнения.ОснованиеАкта);
Запрос.УстановитьПараметр("АктОРасхождениях", ДанныеЗаполнения.АктОРасхождениях);
УстановитьПривилегированныйРежим(Истина);
ПакетЗапросов = Запрос.ВыполнитьПакет();
ВыборкаШапка = ПакетЗапросов[0].Выбрать();
ВыборкаШапка.Следующий();
ОбщегоНазначенияУТ.ПроверитьВозможностьВводаНаОсновании(
ВыборкаШапка.ДопоставкаПоРеализации,
,
ВыборкаШапка.ЕстьОшибкиПроведенДокументВозврата,
,
);
ОбщегоНазначенияУТ.ПроверитьВозможностьВводаНаОсновании(
ВыборкаШапка.АктОРасхождениях,
ВыборкаШапка.СтатусАктаОРасхождениях,
ВыборкаШапка.ЕстьОшибкиПроведенАктОРасхождениях,
ВыборкаШапка.ЕстьОшибкиСтатусАкт,
РасхожденияСервер.МассивДопустимыхСтатусовАктовОРасхожденияхПриСозданииНаОсновании());
ЗаполнитьЗначенияСвойств(ЭтотОбъект, ВыборкаШапка);
Если НЕ ПолучитьФункциональнуюОпцию("ИспользоватьРасширенныеВозможностиЗаказаКлиента") Тогда
Если НЕ ЗначениеЗаполнено(Дата) Тогда
Дата = ТекущаяДатаСеанса();
КонецЕсли;
КонецЕсли;
Товары.Загрузить(ПакетЗапросов[1].Выгрузить());
Серии.Загрузить(ПакетЗапросов[2].Выгрузить());
КонецПроцедуры
Процедура ЗаполнитьДаннымиПоПереданнымНаКомиссиюТоварам(Знач ДанныеЗаполнения)
ХозяйственнаяОперация = ДанныеЗаполнения.ХозяйственнаяОперация;
Если ДанныеЗаполнения.Свойство("РеквизитыШапки") Тогда
ЗаполнитьЗначенияСвойств(ЭтотОбъект, ДанныеЗаполнения.РеквизитыШапки);
КонецЕсли;
Если ЗначениеЗаполнено(Соглашение) Тогда
ЗаполнитьУсловияПродажПоСоглашению();
КонецЕсли;
Если ЗначениеЗаполнено(Договор) Тогда
ДоговорВалютаВзаиморасчетов = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Договор, "ВалютаВзаиморасчетов");
ВалютаВзаиморасчетов = ДоговорВалютаВзаиморасчетов;
Валюта = ДоговорВалютаВзаиморасчетов;
КонецЕсли;
Если ЗначениеЗаполнено(Партнер) И Не ЗначениеЗаполнено(Договор) Тогда
ЗаполнитьУсловияПродажПоУмолчанию();
КонецЕсли;
ПараметрыЗаполнения = Документы.РеализацияТоваровУслуг.ПараметрыЗаполненияНалогообложенияНДСПродажи(ЭтотОбъект);
УчетНДСУП.ЗаполнитьНалогообложениеНДСПродажи(НалогообложениеНДС, ПараметрыЗаполнения);
КомиссионнаяТорговляСервер.ЗаполнитьТоварыПоОстаткамПереданныхНаКомиссиюПоНовойСхеме(ЭтотОбъект, Ложь);
КонецПроцедуры
Процедура ИнициализироватьДокумент(ДанныеЗаполнения = Неопределено, ПерезаполнятьСтавкуНДС = Ложь)
Если Не ЗначениеЗаполнено(Менеджер) Тогда
Менеджер = Пользователи.ТекущийПользователь();
КонецЕсли;
Организация = ЗначениеНастроекПовтИсп.ПолучитьОрганизациюПоУмолчанию(Организация);
Если Не ЗначениеЗаполнено(Валюта) Тогда
Валюта = ЗначениеНастроекПовтИсп.ВалютаРегламентированногоУчетаОрганизации(Организация);
КонецЕсли;
Если Не ЗначениеЗаполнено(ВалютаВзаиморасчетов) Тогда
ВалютаВзаиморасчетов = ЗначениеНастроекПовтИсп.ВалютаРегламентированногоУчетаОрганизации(Организация);
КонецЕсли;
Если ЗначениеЗаполнено(Договор) Тогда
ВариантВыбытияМаркируемойПродукции = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Договор, "ВариантВыбытияМаркируемойПродукции");
КонецЕсли;
Подразделение = ЗначениеНастроекПовтИсп.ПодразделениеПользователя(Менеджер, Подразделение);
СтруктураПараметров = ДенежныеСредстваСервер.ПараметрыЗаполненияБанковскогоСчетаОрганизацииПоУмолчанию();
СтруктураПараметров.Организация = Организация;
СтруктураПараметров.БанковскийСчет = БанковскийСчетОрганизации;
БанковскийСчетОрганизации = ЗначениеНастроекПовтИсп.ПолучитьБанковскийСчетОрганизацииПоУмолчанию(СтруктураПараметров);
БанковскийСчетКонтрагента = ЗначениеНастроекПовтИсп.ПолучитьБанковскийСчетКонтрагентаПоУмолчанию(Контрагент, , БанковскийСчетКонтрагента);
СтруктураПараметров = ДенежныеСредстваСервер.ПараметрыЗаполненияКассыОрганизацииПоУмолчанию();
СтруктураПараметров.Организация = Организация;
СтруктураПараметров.Касса = Касса;
СтруктураПараметров.ФизическоеЛицо = Курьер;
Касса = ЗначениеНастроекПовтИсп.ПолучитьКассуОрганизацииПоУмолчанию(СтруктураПараметров);
Склад = ЗначениеНастроекПовтИсп.ПолучитьСкладПоУмолчанию(Склад, ПолучитьФункциональнуюОпцию("ИспользоватьСкладыВТабличнойЧастиДокументовПродажи"), Истина);
Если Не ПолучитьФункциональнуюОпцию("ИспользоватьАктыНаПередачуПрав") Тогда
ВариантОформленияПродажи = Перечисления.ВариантыОформленияПродажи.РеализацияТоваровУслуг;
КонецЕсли;
СтруктураОтветственного = ПродажиСервер.ПолучитьОтветственногоПоСкладу(Склад);
Если СтруктураОтветственного <> Неопределено Тогда
Отпустил = СтруктураОтветственного.Ответственный;
ОтпустилДолжность = СтруктураОтветственного.ОтветственныйДолжность;
КонецЕсли;
Если ХозяйственнаяОперация = Перечисления.ХозяйственныеОперации.РеализацияКлиентуРеглУчет
Или ХозяйственнаяОперация = Перечисления.ХозяйственныеОперации.ПередачаНаКомиссию
Или ХозяйственнаяОперация = Перечисления.ХозяйственныеОперации.РеализацияЧерезКомиссионера
Или ХозяйственнаяОперация = Перечисления.ХозяйственныеОперации.ПереходПраваСобственности
Или НЕ ПолучитьФункциональнуюОпцию("ИспользоватьСтатусыРеализацийТоваровУслуг") Тогда
Статус = Перечисления.СтатусыРеализацийТоваровУслуг.Отгружено;
ИначеЕсли ХозяйственнаяОперация = Перечисления.ХозяйственныеОперации.РеализацияЧерезКомиссионераБезПереходаПраваСобственности
И ПолучитьФункциональнуюОпцию("ИспользоватьСтатусыРеализацийТоваровУслуг") Тогда
Статус = Перечисления.СтатусыРеализацийТоваровУслуг.ВПути;
КонецЕсли;
Если Не РеализацияПоЗаказам
Или ХозяйственнаяОперация <> Перечисления.ХозяйственныеОперации.ПереходПраваСобственности Тогда
ПараметрыЗаполнения = Документы.РеализацияТоваровУслуг.ПараметрыЗаполненияНалогообложенияНДСПродажи(ЭтотОбъект);
УчетНДСУП.ЗаполнитьНалогообложениеНДСПродажи(НалогообложениеНДС, ПараметрыЗаполнения);
КонецЕсли;
СтруктураПересчетаСуммы = ПакетнаяОбработкаТабличнойЧастиКлиентСервер.ПараметрыПересчетаСуммыНДСВТЧ(ЭтотОбъект);
СтруктураДействий = Новый Структура;
КэшированныеЗначения = ПакетнаяОбработкаТабличнойЧастиКлиентСервер.ПолучитьСтруктуруКэшируемыеЗначения();
СтруктураЗаполненияСтавкиНДС = ПакетнаяОбработкаТабличнойЧастиКлиентСервер.ПараметрыЗаполненияСтавкиНДС(ЭтотОбъект);
СтруктураЗаполненияСтавкиНДС.ЗаполнениеНаОснованииКопирование = ЗначениеЗаполнено(ДанныеЗаполнения);
Если ПерезаполнятьСтавкуНДС Тогда
СтруктураДействий.Вставить("ЗаполнитьСтавкуНДС", СтруктураЗаполненияСтавкиНДС);
Иначе
СтруктураДействий.Вставить("СкорректироватьСтавкуНДС", СтруктураЗаполненияСтавкиНДС);
КонецЕсли;
ПакетнаяОбработкаТабличнойЧастиСервер.ОбработатьТЧ(Товары, СтруктураДействий, КэшированныеЗначения);
СтруктураДействий = Новый Структура;
СтруктураДействий.Вставить("ПересчитатьСуммуНДС", СтруктураПересчетаСуммы);
СтруктураДействий.Вставить("ПересчитатьСуммуСНДС", СтруктураПересчетаСуммы);
СтруктураДействий.Вставить("ПересчитатьСумму");
СтруктураДействий.Вставить("ПересчитатьСуммуСУчетомРучнойСкидки", Новый Структура("Очищать, ПересчитыватьСуммуРучнойСкидки", Ложь, Ложь));
СтруктураДействий.Вставить("ПересчитатьСуммуСУчетомАвтоматическойСкидки", Новый Структура("Очищать", Ложь));
СтруктураДействий.Вставить("ПересчитатьСуммуСУчетомСкидкиБонуснымиБаллами");
ПакетнаяОбработкаТабличнойЧастиСервер.ОбработатьСтрокиТЧ(
КэшированныеЗначения.ОбработанныеСтроки,
СтруктураДействий,
Товары,
КэшированныеЗначения);
КонецПроцедуры
Процедура ИнициализироватьУсловияПродаж()
Если Не ПолучитьФункциональнуюОпцию("ИспользоватьСоглашенияСКлиентами") И Не РеализацияПоЗаказам Тогда
ЗаполнитьУсловияПродажПоУмолчанию();
КонецЕсли;
КонецПроцедуры
#КонецОбласти
#Область ВидыЗапасов
Процедура ПроверитьИзменениеХозяйственнойОперации(Отказ)
РеализацияНеОплачивается = (ХозяйственнаяОперация = Перечисления.ХозяйственныеОперации.ПередачаНаКомиссию);
Если Не ЭтоНовый()
И РеализацияНеОплачивается Тогда
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| РасчетыСКлиентами.СуммаРасход КАК СуммаОплаты
|ИЗ
| РегистрНакопления.РасчетыСКлиентами.Обороты(,,Период,
| ОбъектРасчетов.Объект = &ЗаказКлиента
| ) КАК РасчетыСКлиентами
|
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ
| Документ.РеализацияТоваровУслуг КАК ДанныеДокумента
| ПО
| ДанныеДокумента.Ссылка = &Ссылка
| И ДанныеДокумента.ХозяйственнаяОперация <> &ХозяйственнаяОперация
|ГДЕ
| РасчетыСКлиентами.СуммаРасход > 0";
Запрос.УстановитьПараметр("Ссылка", Ссылка);
Запрос.УстановитьПараметр("ЗаказКлиента", ?(ЗначениеЗаполнено(ЗаказКлиента), ЗаказКлиента, Ссылка));
Запрос.УстановитьПараметр("ХозяйственнаяОперация", ХозяйственнаяОперация);
Выборка = Запрос.Выполнить().Выбрать();
Если Выборка.Следующий() Тогда
Текст = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = 'Реализация оплачена. Нельзя устанавливать операцию %1'"),
ХозяйственнаяОперация);
ОбщегоНазначения.СообщитьПользователю(Текст, ЭтотОбъект, "ХозяйственнаяОперация", , Отказ);
КонецЕсли;
КонецЕсли;
КонецПроцедуры
Процедура ЗаполнитьСтрокуВидовЗапасов(СтрокаТоваров, СтруктураПоиска, Параметры, СоответствиеВидовЗапасов)
РеквизитыВидаЗапасов = Новый Структура;
РеквизитыВидаЗапасов.Вставить("Организация", Справочники.Организации.УправленческаяОрганизация);
РеквизитыВидаЗапасов.Вставить("НалогообложениеОрганизации", Неопределено);
РеквизитыВидаЗапасов.Вставить("ГруппаФинансовогоУчета", Неопределено);
РеквизитыВидаЗапасов.Вставить("ХозяйственнаяОперация", ХозяйственнаяОперация);
Для Каждого СтрокаЗапасов Из ВидыЗапасов.НайтиСтроки(СтруктураПоиска) Цикл
Если СтрокаЗапасов.Количество = 0 Тогда
Продолжить;
КонецЕсли;
КоличествоПоСтроке = Мин(Параметры.Количество, СтрокаЗапасов.Количество);
НоваяСтрока = ВидыЗапасов.Добавить();
ЗаполнитьЗначенияСвойств(НоваяСтрока, СтрокаЗапасов);
ЗаполняемыеСвойства = "Упаковка, Цена, СтавкаНДС, АналитикаУчетаНаборов, КодТНВЭД, ОбъектРасчетов";
ЗаполнитьЗначенияСвойств(НоваяСтрока, СтрокаТоваров, ЗаполняемыеСвойства);
НоваяСтрока.Количество = КоличествоПоСтроке;
НоваяСтрока.КоличествоПоРНПТ = КоличествоПоСтроке * СтрокаЗапасов.КоличествоПоРНПТ / СтрокаЗапасов.Количество;
НоваяСтрока.ЗаказКлиента = ?(ЗначениеЗаполнено(СтрокаТоваров.ЗаказКлиента),
СтрокаТоваров.ЗаказКлиента,
Неопределено);
Если Параметры.Количество <> 0 Тогда
НоваяСтрока.КоличествоУпаковок = КоличествоПоСтроке * Параметры.КоличествоУпаковок
/ Параметры.Количество;
НоваяСтрока.СуммаВзаиморасчетов = КоличествоПоСтроке * Параметры.СуммаВзаиморасчетов
/ Параметры.Количество;
НоваяСтрока.СуммаРучнойСкидки = КоличествоПоСтроке * Параметры.СуммаРучнойСкидки
/ Параметры.Количество;
НоваяСтрока.СуммаАвтоматическойСкидки = КоличествоПоСтроке * Параметры.СуммаАвтоматическойСкидки
/ Параметры.Количество;
КонецЕсли;
Если СтрокаЗапасов.Количество <> 0 Тогда
НоваяСтрока.СуммаСНДС = КоличествоПоСтроке * Параметры.СуммаСНДС / Параметры.Количество;
НоваяСтрока.СуммаНДС = КоличествоПоСтроке * Параметры.СуммаНДС / Параметры.Количество;
НоваяСтрока.СуммаНДСРегл = КоличествоПоСтроке * Параметры.СуммаНДСРегл / Параметры.Количество;
НоваяСтрока.СуммаНДСУпр = КоличествоПоСтроке * Параметры.СуммаНДСУпр / Параметры.Количество;
КонецЕсли;
СтрокаЗапасов.Количество = СтрокаЗапасов.Количество - НоваяСтрока.Количество;
СтрокаЗапасов.КоличествоПоРНПТ = СтрокаЗапасов.КоличествоПоРНПТ - НоваяСтрока.КоличествоПоРНПТ;
СтрокаЗапасов.СуммаСНДС = СтрокаЗапасов.СуммаСНДС - НоваяСтрока.СуммаСНДС;
СтрокаЗапасов.СуммаНДС = СтрокаЗапасов.СуммаНДС - НоваяСтрока.СуммаНДС;
СтрокаЗапасов.СуммаНДСРегл = СтрокаЗапасов.СуммаНДСРегл - НоваяСтрока.СуммаНДСРегл;
СтрокаЗапасов.СуммаНДСУпр = СтрокаЗапасов.СуммаНДСУпр - НоваяСтрока.СуммаНДСУпр;
Для Каждого КлючИЗначение Из Параметры Цикл
Параметры[КлючИЗначение.Ключ] = Параметры[КлючИЗначение.Ключ] - НоваяСтрока[КлючИЗначение.Ключ];
КонецЦикла;
Если ХозяйственнаяОперация = Перечисления.ХозяйственныеОперации.РеализацияКлиентуРеглУчет Тогда
ВидЗапасовПолучателя = СоответствиеВидовЗапасов.Получить(СтрокаЗапасов.ВидЗапасов);
Если ВидЗапасовПолучателя = Неопределено Тогда
РеквизитыВидаЗапасов.ГруппаФинансовогоУчета = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(
СтрокаЗапасов.ВидЗапасов,
"ГруппаФинансовогоУчета");
ВидЗапасовПолучателя = Справочники.ВидыЗапасов.ВидЗапасовДокумента(Справочники.Организации.УправленческаяОрганизация,
ХозяйственнаяОперация,
РеквизитыВидаЗапасов);
СоответствиеВидовЗапасов.Вставить(СтрокаЗапасов.ВидЗапасов, ВидЗапасовПолучателя);
КонецЕсли;
НоваяСтрока.ВидЗапасовПолучателя = ВидЗапасовПолучателя;
Иначе
НоваяСтрока.ВидЗапасовПолучателя = Неопределено;
КонецЕсли;
Если Параметры.Количество = 0 Тогда
Прервать;
КонецЕсли;
КонецЦикла;
КонецПроцедуры
Процедура ЗаполнитьДопКолонкиВидовЗапасов() Экспорт
ИменаКолонокГруппировки = "АналитикаУчетаНоменклатуры, АналитикаУчетаНаборов, НоменклатураНабора,
|ХарактеристикаНабора, Упаковка, ЗаказКлиента, КодТНВЭД, СтавкаНДС, Цена,
|ОбъектРасчетов";
ИменаКолонокСуммирования = "Количество, КоличествоУпаковок, СуммаВзаиморасчетов, СуммаРучнойСкидки,
|СуммаАвтоматическойСкидки, СуммаСНДС, СуммаНДС,
|СуммаНДСРегл, СуммаНДСУпр";
ВыгружаемыеКолонки = ИменаКолонокГруппировки + ", " + ИменаКолонокСуммирования;
ТаблицаТовары = Товары.Выгрузить(, ВыгружаемыеКолонки);
ТаблицаТовары.Свернуть(ИменаКолонокГруппировки, ИменаКолонокСуммирования);
Параметры = Новый Структура(ИменаКолонокСуммирования);
СтруктураПоиска = Новый Структура("АналитикаУчетаНоменклатуры, ЗаказКлиента, КоличествоУпаковок");
СоответствиеВидовЗапасов = Новый Соответствие;
Для Каждого СтрокаТоваров Из ТаблицаТовары Цикл
ЗаполнитьЗначенияСвойств(Параметры, СтрокаТоваров);
ЗаполнитьЗначенияСвойств(СтруктураПоиска, СтрокаТоваров);
СтруктураПоиска.КоличествоУпаковок = 0;
ЗаполнитьСтрокуВидовЗапасов(СтрокаТоваров, СтруктураПоиска, Параметры, СоответствиеВидовЗапасов);
Если ЗначениеЗаполнено(СтрокаТоваров.ЗаказКлиента)
И Параметры.Количество <> 0 Тогда
СтруктураПоиска.ЗаказКлиента = Неопределено;
ЗаполнитьСтрокуВидовЗапасов(СтрокаТоваров, СтруктураПоиска, Параметры, СоответствиеВидовЗапасов);
КонецЕсли;
КонецЦикла;
ПараметрыПоиска = Новый Структура("Количество", 0);
МассивУдаляемыхСтрок = ВидыЗапасов.НайтиСтроки(ПараметрыПоиска);
Для Каждого СтрокаТаблицы Из МассивУдаляемыхСтрок Цикл
ВидыЗапасов.Удалить(СтрокаТаблицы);
КонецЦикла;
КонецПроцедуры
Процедура ЗаполнитьВидыЗапасов(Отказ)
УстановитьПривилегированныйРежим(Истина);
МенеджерВременныхТаблиц = ВременныеТаблицыДанныхДокумента();
ПерезаполнитьВидыЗапасов = ЗапасыСервер.ПроверитьНеобходимостьПерезаполненияВидовЗапасовДокумента(ЭтотОбъект);
Если (Статус <> Перечисления.СтатусыРеализацийТоваровУслуг.КПредоплате
Или ХозяйственнаяОперация = Перечисления.ХозяйственныеОперации.ПередачаНаКомиссию)
И (Не Проведен
Или ПерезаполнитьВидыЗапасов
Или ПроверитьИзменениеРеквизитовДокумента(МенеджерВременныхТаблиц)
Или ПроверитьИзменениеТоваров(МенеджерВременныхТаблиц))Тогда
ПараметрыЗаполнения = ПараметрыЗаполненияВидовЗапасов(Ложь);
ЗапасыСервер.ЗаполнитьВидыЗапасовПоТоварамОрганизаций(ЭтотОбъект,
МенеджерВременныхТаблиц,
Отказ,
ПараметрыЗаполнения);
ИменаКолонокГруппировки = "АналитикаУчетаНоменклатуры, АналитикаУчетаНаборов, ВидЗапасов, НомерГТД,
|СтавкаНДС, ЗаказКлиента, КодТНВЭД";
ИменаКолонокСуммирования = "Количество, КоличествоПоРНПТ, КоличествоУпаковок, СуммаСНДС, СуммаНДС";
ВидыЗапасов.Свернуть(ИменаКолонокГруппировки, ИменаКолонокСуммирования);
ЗаполнитьДопКолонкиВидовЗапасов();
ИначеЕсли Статус = Перечисления.СтатусыРеализацийТоваровУслуг.КПредоплате Тогда
ВидыЗапасов.Очистить();
КонецЕсли;
КонецПроцедуры
Процедура ЗаполнитьАналитикиУчетаНоменклатурыВТабличныхЧастяхТоваров(ТаблицыДокумента = Неопределено)
Если ТаблицыДокумента = Неопределено Тогда
ТаблицыДокумента = Документы.РеализацияТоваровУслуг.КоллекцияТабличныхЧастейТоваров();
ЗаполнитьЗначенияСвойств(ТаблицыДокумента, ЭтотОбъект);
КонецЕсли;
ТаблицаТовары = ТаблицыДокумента.Товары;
МестаУчета = РегистрыСведений.АналитикаУчетаНоменклатуры.МестаУчета(ХозяйственнаяОперация,
Склад,
Подразделение,
Партнер,
Договор);
ИменаПолей = РегистрыСведений.АналитикаУчетаНоменклатуры.ИменаПолейКоллекцииПоУмолчанию();
Если Не ХозяйственнаяОперация = Перечисления.ХозяйственныеОперации.ПереходПраваСобственности Тогда
ИменаПолей.Вставить("Работа", "Подразделение");
РеквизитыСклада = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(Склад, "ЭтоГруппа, ВыборГруппы");
Если ЗначениеЗаполнено(Склад)
И РеквизитыСклада.ЭтоГруппа
И РеквизитыСклада.ВыборГруппы = Перечисления.ВыборГруппыСкладов.РазрешитьВЗаказахИНакладных Тогда
ИменаПолей.Вставить("Произвольный", "Склад");
КонецЕсли;
КонецЕсли;
РегистрыСведений.АналитикаУчетаНоменклатуры.ЗаполнитьВКоллекции(ТаблицаТовары, МестаУчета, ИменаПолей);
КонецПроцедуры
#КонецОбласти
#Область Прочее
Процедура СформироватьВременнуюТаблицуТоваровИАналитики(МенеджерВременныхТаблиц) Экспорт
Запрос = Новый Запрос("
|ВЫБРАТЬ
| ТаблицаТоваров.АналитикаУчетаНоменклатуры,
| ТаблицаТоваров.Номенклатура,
| ТаблицаТоваров.Характеристика,
| ВЫБОР
| КОГДА ТаблицаТоваров.СтатусУказанияСерий = 14
| ТОГДА ТаблицаТоваров.Серия
| ИНАЧЕ ЗНАЧЕНИЕ(Справочник.СерииНоменклатуры.ПустаяСсылка)
| КОНЕЦ КАК Серия,
| ТаблицаТоваров.Склад,
|
| ТаблицаДанныхДокумента.Подразделение,
| ТаблицаДанныхДокумента.Менеджер,
| ТаблицаДанныхДокумента.Сделка КАК Сделка,
| ТаблицаТоваров.Назначение КАК Назначение,
|
| ЗНАЧЕНИЕ(Справочник.Партнеры.ПустаяСсылка) КАК Партнер,
| ЗНАЧЕНИЕ(Справочник.СоглашенияСПоставщиками.ПустаяСсылка) КАК Соглашение,
| &НалогообложениеНДС КАК НалогообложениеНДС,
|
| ТаблицаТоваров.Количество КАК Количество
|
|ПОМЕСТИТЬ ТаблицаТоваровИАналитики
|ИЗ
| ТаблицаТоваров КАК ТаблицаТоваров
|
| ЛЕВОЕ СОЕДИНЕНИЕ
| ТаблицаДанныхДокумента КАК ТаблицаДанныхДокумента
| ПО
| ИСТИНА
|ГДЕ
| ТаблицаТоваров.Номенклатура.ТипНоменклатуры В (ЗНАЧЕНИЕ(Перечисление.ТипыНоменклатуры.Товар),ЗНАЧЕНИЕ(Перечисление.ТипыНоменклатуры.МногооборотнаяТара))
|;
|");
Запрос.УстановитьПараметр("НалогообложениеНДС", НалогообложениеНДС);
Запрос.МенеджерВременныхТаблиц = МенеджерВременныхТаблиц;
Запрос.Выполнить();
КонецПроцедуры
Функция ПолучитьСуммуДокумента() Экспорт
Запрос = Новый Запрос("
|ВЫБРАТЬ
| Товары.Номенклатура КАК Номенклатура,
| Товары.СуммаСНДС КАК СуммаСНДС
|ПОМЕСТИТЬ
| Товары
|ИЗ
| &Товары КАК Товары
|;
|ВЫБРАТЬ
| ЕСТЬNULL(СУММА(Товары.СуммаСНДС),0) КАК СуммаСНДС
|ИЗ
| Товары КАК Товары
|ГДЕ
| Товары.Номенклатура.ТипНоменклатуры <> ЗНАЧЕНИЕ(Перечисление.ТипыНоменклатуры.МногооборотнаяТара)
| ИЛИ НЕ &ВернутьМногооборотнуюТару
| ИЛИ &ТребуетсяЗалогЗаТару
|");
Запрос.УстановитьПараметр("Товары", Товары.Выгрузить(,"Номенклатура,СуммаСНДС"));
Запрос.УстановитьПараметр("ВернутьМногооборотнуюТару", ВернутьМногооборотнуюТару);
Запрос.УстановитьПараметр("ТребуетсяЗалогЗаТару", ТребуетсяЗалогЗаТару);
Выгрузка = Запрос.Выполнить().Выгрузить();
СуммаИтого = Выгрузка[0].СуммаСНДС;
Возврат СуммаИтого;
КонецФункции
Функция ПолучитьСуммуДокументаПоТаре() Экспорт
Запрос = Новый Запрос("
|ВЫБРАТЬ
| Товары.Номенклатура КАК Номенклатура,
| Товары.СуммаСНДС КАК СуммаСНДС
|ПОМЕСТИТЬ
| Товары
|ИЗ
| &Товары КАК Товары
|;
|ВЫБРАТЬ
| ЕСТЬNULL(СУММА(Товары.СуммаСНДС),0) КАК СуммаСНДС
|ИЗ
| Товары КАК Товары
|ГДЕ
| Товары.Номенклатура.ТипНоменклатуры = ЗНАЧЕНИЕ(Перечисление.ТипыНоменклатуры.МногооборотнаяТара)
| И &ТребуетсяЗалогЗаТару
|");
Запрос.УстановитьПараметр("Товары", Товары.Выгрузить(,"Номенклатура,СуммаСНДС"));
Запрос.УстановитьПараметр("ТребуетсяЗалогЗаТару", ТребуетсяЗалогЗаТару);
Выгрузка = Запрос.Выполнить().Выгрузить();
СуммаИтого = Выгрузка[0].СуммаСНДС;
Возврат СуммаИтого;
КонецФункции
Функция ПолучитьСуммуВзаиморасчетовПоТЧ() Экспорт
Запрос = Новый Запрос("
|ВЫБРАТЬ
| Товары.Номенклатура КАК Номенклатура,
| Товары.СуммаВзаиморасчетов КАК СуммаВзаиморасчетов
|ПОМЕСТИТЬ
| Товары
|ИЗ
| &Товары КАК Товары
|;
|ВЫБРАТЬ
| ЕСТЬNULL(СУММА(Товары.СуммаВзаиморасчетов),0) КАК СуммаВзаиморасчетов
|ИЗ
| Товары КАК Товары
|ГДЕ
| Товары.Номенклатура.ТипНоменклатуры <> ЗНАЧЕНИЕ(Перечисление.ТипыНоменклатуры.МногооборотнаяТара)
| ИЛИ НЕ &ВернутьМногооборотнуюТару
| ИЛИ &ТребуетсяЗалогЗаТару
|");
Запрос.УстановитьПараметр("Товары", Товары.Выгрузить(,"Номенклатура,СуммаВзаиморасчетов"));
Запрос.УстановитьПараметр("ВернутьМногооборотнуюТару", ВернутьМногооборотнуюТару);
Запрос.УстановитьПараметр("ТребуетсяЗалогЗаТару", ТребуетсяЗалогЗаТару);
Выгрузка = Запрос.Выполнить().Выгрузить();
СуммаИтого = Выгрузка[0].СуммаВзаиморасчетов;
Возврат СуммаИтого;
КонецФункции
Функция ПолучитьСуммуВзаиморасчетовПоТаре() Экспорт
Запрос = Новый Запрос("
|ВЫБРАТЬ
| Товары.Номенклатура КАК Номенклатура,
| Товары.СуммаВзаиморасчетов КАК СуммаВзаиморасчетов
|ПОМЕСТИТЬ
| Товары
|ИЗ
| &Товары КАК Товары
|;
|ВЫБРАТЬ
| ЕСТЬNULL(СУММА(Товары.СуммаВзаиморасчетов),0) КАК СуммаВзаиморасчетов
|ИЗ
| Товары КАК Товары
|ГДЕ
| Товары.Номенклатура.ТипНоменклатуры = ЗНАЧЕНИЕ(Перечисление.ТипыНоменклатуры.МногооборотнаяТара)
| И &ТребуетсяЗалогЗаТару
|");
Запрос.УстановитьПараметр("Товары", Товары.Выгрузить(,"Номенклатура,СуммаВзаиморасчетов"));
Запрос.УстановитьПараметр("ТребуетсяЗалогЗаТару", ТребуетсяЗалогЗаТару);
Выгрузка = Запрос.Выполнить().Выгрузить();
СуммаИтого = Выгрузка[0].СуммаВзаиморасчетов;
Возврат СуммаИтого;
КонецФункции
Процедура ПроверитьВариантОформленияПродажи(МассивНепроверяемыхРеквизитов)
Если НЕ ЗначениеЗаполнено(ВариантОформленияПродажи) Тогда
ЗаполняемыйВариантОформленияПродажи = Перечисления.ВариантыОформленияПродажи.РеализацияТоваровУслуг;
Если ПолучитьФункциональнуюОпцию("ИспользоватьАктыНаПередачуПрав") Тогда
Запрос = Новый Запрос(
"ВЫБРАТЬ
| Товары.Номенклатура КАК Номенклатура
|ПОМЕСТИТЬ
| ВтТовары
|ИЗ
| &Товары КАК Товары
|;
|ВЫБРАТЬ
| Товары.Номенклатура.Ссылка
|ИЗ
| ВтТовары КАК Товары
|ГДЕ
| Товары.Номенклатура.ВариантОформленияПродажи = ЗНАЧЕНИЕ(Перечисление.ВариантыОформленияПродажи.АктНаПередачуПрав)");
Запрос.УстановитьПараметр("Товары", Товары.Выгрузить(,"Номенклатура"));
РезультатЗапроса = Запрос.Выполнить();
Если РезультатЗапроса.Пустой() Тогда
ЗаполняемыйВариантОформленияПродажи = Перечисления.ВариантыОформленияПродажи.РеализацияТоваровУслуг;
ИначеЕсли РезультатЗапроса.Выгрузить().Количество() = Товары.Количество() Тогда
ЗаполняемыйВариантОформленияПродажи = Перечисления.ВариантыОформленияПродажи.АктНаПередачуПрав;
КонецЕсли;
КонецЕсли;
Если ЗначениеЗаполнено(ЗаполняемыйВариантОформленияПродажи) Тогда
ЭтотОбъект.ДополнительныеСвойства.Вставить("ЗаполняемыйВариантОформленияПродажи", ЗаполняемыйВариантОформленияПродажи);
МассивНепроверяемыхРеквизитов.Добавить("ВариантОформленияПродажи");
КонецЕсли;
КонецЕсли;
КонецПроцедуры
Функция ПроверитьИзменениеРеквизитовДокумента(МенеджерВременныхТаблиц)
ИменаРеквизитов = "Организация, Дата, НалогообложениеНДС";
Возврат ЗапасыСервер.ПроверитьИзменениеРеквизитовДокумента(МенеджерВременныхТаблиц, Ссылка, ИменаРеквизитов);
КонецФункции
Функция ПроверитьИзменениеТоваров(МенеджерВременныхТаблиц)
Запрос = Новый Запрос("
|ВЫБРАТЬ
| ТаблицаТоваров.АналитикаУчетаНоменклатуры КАК АналитикаУчетаНоменклатуры
|ИЗ (
| ВЫБРАТЬ
| ТаблицаТоваров.ЗаказКлиента КАК ЗаказКлиента,
| ТаблицаТоваров.ОбъектРасчетов КАК ОбъектРасчетов,
| ТаблицаТоваров.АналитикаУчетаНоменклатуры КАК АналитикаУчетаНоменклатуры,
| ТаблицаТоваров.СтавкаНДС КАК СтавкаНДС,
| ТаблицаТоваров.КодТНВЭД КАК КодТНВЭД,
| ТаблицаТоваров.Упаковка КАК Упаковка,
| ТаблицаТоваров.Цена КАК Цена,
| ТаблицаТоваров.Количество КАК Количество,
| ТаблицаТоваров.КоличествоУпаковок КАК КоличествоУпаковок,
| ТаблицаТоваров.СуммаСНДС КАК СуммаСНДС,
| ТаблицаТоваров.СуммаНДС КАК СуммаНДС,
| ТаблицаТоваров.СуммаНДСРегл КАК СуммаНДСРегл,
| ТаблицаТоваров.СуммаНДСУпр КАК СуммаНДСУпр,
| ТаблицаТоваров.СуммаВзаиморасчетов КАК СуммаВзаиморасчетов,
| ТаблицаТоваров.СуммаРучнойСкидки КАК СуммаРучнойСкидки,
| ТаблицаТоваров.СуммаАвтоматическойСкидки КАК СуммаАвтоматическойСкидки
| ИЗ
| ТаблицаТоваров КАК ТаблицаТоваров
|
| ОБЪЕДИНИТЬ ВСЕ
|
| ВЫБРАТЬ
| ТаблицаВидыЗапасов.ЗаказКлиента КАК ЗаказКлиента,
| ТаблицаВидыЗапасов.ОбъектРасчетов КАК ОбъектРасчетов,
| ТаблицаВидыЗапасов.АналитикаУчетаНоменклатуры КАК АналитикаУчетаНоменклатуры,
| ТаблицаВидыЗапасов.СтавкаНДС КАК СтавкаНДС,
| ТаблицаВидыЗапасов.КодТНВЭД КАК КодТНВЭД,
| ТаблицаВидыЗапасов.Упаковка КАК Упаковка,
| ТаблицаВидыЗапасов.Цена КАК Цена,
| -ТаблицаВидыЗапасов.Количество КАК Количество,
| -ТаблицаВидыЗапасов.КоличествоУпаковок КАК КоличествоУпаковок,
| -ТаблицаВидыЗапасов.СуммаСНДС КАК СуммаСНДС,
| -ТаблицаВидыЗапасов.СуммаНДС КАК СуммаНДС,
| -ТаблицаВидыЗапасов.СуммаНДСРегл КАК СуммаНДСРегл,
| -ТаблицаВидыЗапасов.СуммаНДСУпр КАК СуммаНДСУпр,
| -ТаблицаВидыЗапасов.СуммаВзаиморасчетов КАК СуммаВзаиморасчетов,
| -ТаблицаВидыЗапасов.СуммаРучнойСкидки КАК СуммаРучнойСкидки,
| -ТаблицаВидыЗапасов.СуммаАвтоматическойСкидки КАК СуммаАвтоматическойСкидки
| ИЗ
| ТаблицаВидыЗапасов КАК ТаблицаВидыЗапасов
| ) КАК ТаблицаТоваров
|
|СГРУППИРОВАТЬ ПО
| ТаблицаТоваров.ЗаказКлиента,
| ТаблицаТоваров.ОбъектРасчетов,
| ТаблицаТоваров.АналитикаУчетаНоменклатуры,
| ТаблицаТоваров.СтавкаНДС,
| ТаблицаТоваров.КодТНВЭД,
| ТаблицаТоваров.Упаковка,
| ТаблицаТоваров.Цена
|
|ИМЕЮЩИЕ
| СУММА(ТаблицаТоваров.Количество) <> 0
| ИЛИ СУММА(ТаблицаТоваров.КоличествоУпаковок) <> 0
| ИЛИ СУММА(ТаблицаТоваров.СуммаСНДС) <> 0
| ИЛИ СУММА(ТаблицаТоваров.СуммаНДС) <> 0
| ИЛИ СУММА(ТаблицаТоваров.СуммаНДСРегл) <> 0
| ИЛИ СУММА(ТаблицаТоваров.СуммаНДСУпр) <> 0
| ИЛИ СУММА(ТаблицаТоваров.СуммаВзаиморасчетов) <> 0
| ИЛИ СУММА(ТаблицаТоваров.СуммаРучнойСкидки) <> 0
| ИЛИ СУММА(ТаблицаТоваров.СуммаАвтоматическойСкидки) <> 0
|");
Запрос.МенеджерВременныхТаблиц = МенеджерВременныхТаблиц;
РезультатЗапрос = Запрос.Выполнить();
Возврат (Не РезультатЗапрос.Пустой());
КонецФункции
Функция ПараметрыЗаполненияВидовЗапасов(ЭтоПроведение)
ПараметрыЗаполнения = ЗапасыСервер.ПараметрыЗаполненияВидовЗапасов();
ПараметрыЗаполнения.ПодбиратьВТЧТоварыПринятыеНаОтветственноеХранение.Вставить(Перечисления.ТипыЗапасов.ТоварНаХраненииСПравомПродажи, "Никогда");
ОтборыВидовЗапасов = ПараметрыЗаполнения.ОтборыВидовЗапасов;
Если ХозяйственнаяОперация = Перечисления.ХозяйственныеОперации.ПередачаНаКомиссию Тогда
ДоступныеТипыЗапасов = Новый Массив;
ДоступныеТипыЗапасов.Добавить(Перечисления.ТипыЗапасов.Товар);
ДоступныеТипыЗапасов.Добавить(Перечисления.ТипыЗапасов.КомиссионныйТовар);
ОтборыВидовЗапасов.ТипЗапасов = ДоступныеТипыЗапасов;
Иначе
НалогообложениеНДСПродажи = НалогообложениеНДС;
Если ХозяйственнаяОперация = Перечисления.ХозяйственныеОперации.ПереходПраваСобственности Тогда
НалогообложениеНДСПродажи =
УчетНДСУП.ПараметрыУчетаПоОрганизации(Организация, Дата).ОсновноеНалогообложениеНДСПродажи;
Иначе
ОтборыВидовЗапасов.НалогообложениеНДС = НалогообложениеНДС;
КонецЕсли;
УчетНДСУП.ПараметрыЗаполненияВидовЗапасовПоНалогообложению(ОтборыВидовЗапасов,
Организация,
Дата,
НалогообложениеНДСПродажи);
Если ХозяйственнаяОперация = Перечисления.ХозяйственныеОперации.РеализацияКлиентуРеглУчет Тогда
Если Не ЭтоПроведение Тогда
ПараметрыЗаполнения.ДокументДелаетИПриходИРасход = Истина;
ПараметрыЗаполнения.ПриНехваткеТоваровОрганизацииЗаполнятьВидамиЗапасовПоУмолчанию = Ложь;
КонецЕсли;
ИначеЕсли ХозяйственнаяОперация = Перечисления.ХозяйственныеОперации.РеализацияЧерезКомиссионера
Или ХозяйственнаяОперация = Перечисления.ХозяйственныеОперации.РеализацияЧерезКомиссионераБезПереходаПраваСобственности Тогда
ДоступныеТипыЗапасов = Новый Массив;
ДоступныеТипыЗапасов.Добавить(Перечисления.ТипыЗапасов.Товар);
ДоступныеТипыЗапасов.Добавить(Перечисления.ТипыЗапасов.КомиссионныйТовар);
ОтборыВидовЗапасов.ТипЗапасов = ДоступныеТипыЗапасов;
КонецЕсли;
ЗапасыСервер.ДополнитьОтборВидовЗапасовПоТипуЗапасов(ПараметрыЗаполнения.ОтборыВидовЗапасов,
Перечисления.ТипыЗапасов.Работа);
КонецЕсли;
Возврат ПараметрыЗаполнения;
КонецФункции
Процедура УстановитьСвойстваИзмененияРеквизитов(Объект, ДополнительныеСвойства)
ИзменилосьТолькоСостояниеПереходаПраваСобственности = Ложь;
Если (Объект.ХозяйственнаяОперация = Перечисления.ХозяйственныеОперации.РеализацияБезПереходаПраваСобственности
Или Объект.ХозяйственнаяОперация = Перечисления.ХозяйственныеОперации.РеализацияЧерезКомиссионераБезПереходаПраваСобственности)
И Объект.Проведен Тогда
НепроверяемыеРеквизиты = Новый Структура;
НепроверяемыеРеквизиты.Вставить("Комментарий");
НепроверяемыеРеквизиты.Вставить("ДатаВозвратаМногооборотнойТары");
НепроверяемыеРеквизиты.Вставить("ДатаПлатежа");
НепроверяемыеРеквизиты.Вставить("ДатаПереходаПраваСобственности");
НепроверяемыеРеквизиты.Вставить("Согласован");
НепроверяемыеТабличныеЧасти = Новый Структура;
НепроверяемыеТабличныеЧасти.Вставить("ШтрихкодыУпаковок");
НепроверяемыеРеквизиты.Вставить("ДополнительныеРеквизиты");
ИзмененияДокумента = ОбщегоНазначенияУТ.ИзмененияДокумента(Объект, НепроверяемыеРеквизиты, НепроверяемыеТабличныеЧасти);
ИзменилосьТолькоСостояниеПереходаПраваСобственности = ИзмененияДокумента.Свойство("Реквизиты")
Или ИзмененияДокумента.Свойство("ТабличныеЧасти");
Если ИзмененияДокумента.Свойство("ТабличныеЧасти") Тогда
Для Каждого ТабличнаяЧасть Из ИзмененияДокумента.ТабличныеЧасти Цикл
Если ТабличнаяЧасть.Ключ <> "РасшифровкаПлатежа"
И ТабличнаяЧасть.Ключ <> "ЭтапыГрафикаОплаты" Тогда
ИзменилосьТолькоСостояниеПереходаПраваСобственности = Ложь;
КонецЕсли;
КонецЦикла;
КонецЕсли;
Если ИзмененияДокумента.Свойство("Реквизиты") Тогда
Для каждого Реквизит Из ИзмененияДокумента.Реквизиты Цикл
Если Реквизит.Имя <> "Статус" Тогда
ИзменилосьТолькоСостояниеПереходаПраваСобственности = Ложь;
Прервать;
ИначеЕсли Реквизит.Имя = "Статус"
И (Реквизит.НовоеЗначение = Перечисления.СтатусыРеализацийТоваровУслуг.КПредоплате
ИЛИ Реквизит.СтароеЗначение = Перечисления.СтатусыРеализацийТоваровУслуг.КПредоплате) Тогда
ИзменилосьТолькоСостояниеПереходаПраваСобственности = Ложь;
Прервать;
КонецЕсли;
КонецЦикла;
КонецЕсли;
КонецЕсли;
ДополнительныеСвойства.Вставить("ИзменилосьТолькоСостояниеПереходаПраваСобственности",
ИзменилосьТолькоСостояниеПереходаПраваСобственности);
КонецПроцедуры
Процедура ПропуститьПроверкуЗапретаИзмененияРегистров(Движения)
Для Каждого ТекНаборЗаписей Из Движения Цикл
ОбъектМетаданных = ТекНаборЗаписей.ЭтотОбъект.Метаданные();
ТекНаборЗаписей.ДополнительныеСвойства.Вставить("ИзменилосьТолькоСостояниеПереходаПраваСобственности", Истина);
Если Не ПолучитьФункциональнуюОпцию("НоваяАрхитектураВзаиморасчетов")
И (ОбъектМетаданных.Имя = "РасчетыСКлиентами"
ИЛИ ОбъектМетаданных.Имя = "РасчетыСПоставщиками") Тогда
Продолжить;
КонецЕсли;
ТекНаборЗаписей.ДополнительныеСвойства.Вставить("ПропуститьПроверкуЗапретаИзменения", Истина);
КонецЦикла;
КонецПроцедуры
Процедура ЗаполнитьСуммыНДСРеглУпр() Экспорт
Запрос = Новый Запрос;
Запрос.УстановитьПараметр("Регистратор", Ссылка);
Запрос.УстановитьПараметр("ТаблицаТовары", Товары.Выгрузить(, "ЗаказКлиента, КодСтроки, СуммаНДСРегл, СуммаНДСУпр"));
Запрос.Текст =
"ВЫБРАТЬ
| ТаблицаТовары.ЗаказКлиента КАК ЗаказКлиента,
| ТаблицаТовары.КодСтроки КАК КодСтроки,
| ТаблицаТовары.СуммаНДСРегл КАК СуммаНДСРегл,
| ТаблицаТовары.СуммаНДСУпр КАК СуммаНДСУпр
|ПОМЕСТИТЬ ТаблицаТовары
|ИЗ
| &ТаблицаТовары КАК ТаблицаТовары
|ГДЕ
| ТаблицаТовары.СуммаНДСРегл = 0
| ИЛИ ТаблицаТовары.СуммаНДСУпр = 0
|;
|
|
|ВЫБРАТЬ
| ВложенныйЗапрос.Распоряжение КАК Распоряжение,
| ВложенныйЗапрос.КодСтроки КАК КодСтроки,
| СУММА(ВложенныйЗапрос.Количество) КАК Количество,
| СУММА(ВложенныйЗапрос.СуммаНДСРегл) КАК СуммаНДСРегл,
| СУММА(ВложенныйЗапрос.СуммаНДСУпр) КАК СуммаНДСУпр
|ПОМЕСТИТЬ ТаблицаОстатков
|ИЗ
| (ВЫБРАТЬ
| РаспоряженияНаОтгрузкуОбороты.Распоряжение КАК Распоряжение,
| РаспоряженияНаОтгрузкуОбороты.КодСтроки КАК КодСтроки,
| РаспоряженияНаОтгрузкуОбороты.ОформленоСчетовФактурКоличествоОборот -
| РаспоряженияНаОтгрузкуОбороты.ОформленоКоличествоОборот КАК Количество,
| РаспоряженияНаОтгрузкуОбороты.ОформленоСчетовФактурСуммаНДСРеглОборот -
| РаспоряженияНаОтгрузкуОбороты.ОформленоСуммаНДСРеглОборот КАК СуммаНДСРегл,
| РаспоряженияНаОтгрузкуОбороты.ОформленоСчетовФактурСуммаНДСУпрОборот -
| РаспоряженияНаОтгрузкуОбороты.ОформленоСуммаНДСУпрОборот КАК СуммаНДСУпр
| ИЗ
| #РаспоряженияНаОтгрузкуОборотыРазвернутая КАК РаспоряженияНаОтгрузкуОбороты
|
| ОБЪЕДИНИТЬ ВСЕ
|
| ВЫБРАТЬ
| РаспоряженияНаОтгрузкуДвижения.Распоряжение КАК Распоряжение,
| РаспоряженияНаОтгрузкуДвижения.КодСтроки КАК КодСтроки,
| РаспоряженияНаОтгрузкуДвижения.ОформленоКоличество КАК Количество,
| РаспоряженияНаОтгрузкуДвижения.ОформленоСуммаНДСРегл КАК СуммаНДСРегл,
| РаспоряженияНаОтгрузкуДвижения.ОформленоСуммаНДСУпр КАК СуммаНДСУпр
| ИЗ
| #РаспоряженияНаОтгрузкуДвиженияРазвернутая КАК РаспоряженияНаОтгрузкуДвижения) КАК ВложенныйЗапрос
|СГРУППИРОВАТЬ ПО
| ВложенныйЗапрос.Распоряжение,
| ВложенныйЗапрос.КодСтроки
|;
|
|
|ВЫБРАТЬ
| ТаблицаТовары.ЗаказКлиента КАК ЗаказКлиента,
| ТаблицаТовары.КодСтроки КАК КодСтроки,
| ЕСТЬNULL(ВЫБОР
| КОГДА ТаблицаОстатков.Количество = 0
| ТОГДА 1
| ИНАЧЕ ТаблицаОстатков.Количество
| КОНЕЦ, 1) КАК Количество,
| ЕСТЬNULL(ВЫБОР
| КОГДА ТаблицаТовары.СуммаНДСРегл = 0
| ТОГДА ЕСТЬNULL(ТаблицаОстатков.СуммаНДСРегл, 0)
| ИНАЧЕ ТаблицаТовары.СуммаНДСРегл
| КОНЕЦ, 0) КАК СуммаНДСРегл,
| ЕСТЬNULL(ВЫБОР
| КОГДА ТаблицаТовары.СуммаНДСУпр = 0
| ТОГДА ЕСТЬNULL(ТаблицаОстатков.СуммаНДСУпр, 0)
| ИНАЧЕ ТаблицаТовары.СуммаНДСУпр
| КОНЕЦ, 0) КАК СуммаНДСУпр
|ИЗ
| ТаблицаТовары КАК ТаблицаТовары
| ЛЕВОЕ СОЕДИНЕНИЕ ТаблицаОстатков КАК ТаблицаОстатков
| ПО ТаблицаТовары.ЗаказКлиента = ТаблицаОстатков.Распоряжение
| И ТаблицаТовары.КодСтроки = ТаблицаОстатков.КодСтроки";
ПараметрыФормированияТаблицы = РегистрыНакопления.РаспоряженияНаОтгрузкуИВозврат.НовыйПараметрыФормированияРазвернутойТаблицы();
ПараметрыФормированияТаблицы.ТекстУсловия =
"(Распоряжение, КодСтроки) В
| (ВЫБРАТЬ
| ЗаказКлиента,
| КодСтроки
| ИЗ
| ТаблицаТовары)";
ПараметрыФормированияТаблицы.Группировка = "Распоряжение, КодСтроки";
ПараметрыФормированияТаблицы.Показатели = "Оформлено, ОформленоСчетовФактур";
ПараметрыФормированияТаблицы.Ресурсы = "Количество, СуммаНДСРегл, СуммаНДСУпр";
РаспоряженияНаОтгрузкуОборотыРазвернутая =
РегистрыНакопления.РаспоряженияНаОтгрузкуИВозврат.ТекстЗапросаРазвернутаяТаблица(
ПараметрыФормированияТаблицы);
Запрос.Текст = СтрЗаменить(Запрос.Текст,
"#РаспоряженияНаОтгрузкуОборотыРазвернутая",
РаспоряженияНаОтгрузкуОборотыРазвернутая);
ПараметрыФормированияТаблицы = РегистрыНакопления.РаспоряженияНаОтгрузкуИВозврат.НовыйПараметрыФормированияРазвернутойТаблицы();
ПараметрыФормированияТаблицы.ТекстУсловия =
"(Регистратор, Распоряжение, КодСтроки) В
| (ВЫБРАТЬ
| &Регистратор,
| ЗаказКлиента,
| КодСтроки
| ИЗ
| ТаблицаТовары)";
ПараметрыФормированияТаблицы.Группировка = "Распоряжение, КодСтроки";
ПараметрыФормированияТаблицы.Показатели = "Оформлено";
ПараметрыФормированияТаблицы.Ресурсы = "Количество, СуммаНДСРегл, СуммаНДСУпр";
ПараметрыФормированияТаблицы.ФизическаяТаблица = Истина;
РаспоряженияНаОтгрузкуДвиженияРазвернутая =
РегистрыНакопления.РаспоряженияНаОтгрузкуИВозврат.ТекстЗапросаРазвернутаяТаблица(
ПараметрыФормированияТаблицы);
Запрос.Текст = СтрЗаменить(Запрос.Текст,
"#РаспоряженияНаОтгрузкуДвиженияРазвернутая",
РаспоряженияНаОтгрузкуДвиженияРазвернутая);
СтруктураПоиска = Новый Структура("ЗаказКлиента, КодСтроки");
Выборка = Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл
ЗаполнитьЗначенияСвойств(СтруктураПоиска, Выборка);
ПоискСтрок = Товары.НайтиСтроки(СтруктураПоиска);
Если ПоискСтрок.Количество() Тогда
СтрокаТовары = ПоискСтрок.Получить(0);
Если Не ЗначениеЗаполнено(СтрокаТовары.СуммаНДСРегл) Тогда
СтрокаТовары.СуммаНДСРегл = Выборка.СуммаНДСРегл / Выборка.Количество * СтрокаТовары.Количество;
КонецЕсли;
Если Не ЗначениеЗаполнено(СтрокаТовары.СуммаНДСУпр) Тогда
СтрокаТовары.СуммаНДСУпр = Выборка.СуммаНДСУпр / Выборка.Количество * СтрокаТовары.Количество;
КонецЕсли;
КонецЕсли;
КонецЦикла;
КонецПроцедуры
#КонецОбласти
#КонецОбласти
#КонецЕсли