#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда
#Область ПрограммныйИнтерфейс
#Область Проведение
Процедура ЗарегистрироватьУчетныеМеханизмы(МеханизмыДокумента) Экспорт
МеханизмыДокумента.Добавить("Обеспечение");
МеханизмыДокумента.Добавить("ОперативныйУчетТоваровОрганизаций");
МеханизмыДокумента.Добавить("РеестрДокументов");
МеханизмыДокумента.Добавить("СебестоимостьИПартионныйУчет");
МеханизмыДокумента.Добавить("СерийныйУчет");
МеханизмыДокумента.Добавить("СуммыДокументовВВалютахУчета");
МеханизмыДокумента.Добавить("АдресныйСклад");
МеханизмыДокумента.Добавить("УчетПрочихАктивовПассивов");
МеханизмыДокумента.Добавить("Продажи");
МеханизмыДокумента.Добавить("ИсправлениеДокументов");
ОтгрузкаТоваровСХраненияЛокализация.ЗарегистрироватьУчетныеМеханизмы(МеханизмыДокумента);
КонецПроцедуры
Функция ДанныеДокументаДляПроведения(Документ, Регистры, ДопПараметры = Неопределено) Экспорт
Если ДопПараметры = Неопределено Тогда
ДопПараметры = ПроведениеДокументов.ДопПараметрыИнициализироватьДанныеДокументаДляПроведения();
КонецЕсли;
Если ТипЗнч(Документ) = Тип("ДокументОбъект.ОтгрузкаТоваровСХранения") Тогда
ДокументСсылка = Документ.Ссылка;
Иначе
ДокументСсылка = Документ;
КонецЕсли;
Запрос = Новый Запрос;
ТекстыЗапроса = Новый СписокЗначений;
Если Не ДопПараметры.ПолучитьТекстыЗапроса Тогда
ЗаполнитьПараметрыИнициализации(Запрос, ДокументСсылка);
СформироватьСуммыДокументаВВалютахУчета(Запрос, ТекстыЗапроса, Регистры);
ТекстЗапросаТаблицаДвиженияСерийТоваров(Запрос, ТекстыЗапроса, Регистры);
ТекстЗапросаТаблицаРеестрДокументов(Запрос, ТекстыЗапроса, Регистры);
ТекстЗапросаТаблицаТоварыОрганизаций(Запрос, ТекстыЗапроса, Регистры);
ТекстЗапросаТаблицаРаспоряженияНаОтгрузку(Запрос, ТекстыЗапроса, Регистры);
ОтгрузкаТоваровСХраненияЛокализация.ДополнитьТекстыЗапросовПроведения(Запрос, ТекстыЗапроса, Регистры);
КонецЕсли;
ОтразитьРаспределениеЗапасовДвижения(Запрос, ТекстыЗапроса, Регистры);
ЗапланироватьОтгрузкуТоваров(Запрос, ТекстыЗапроса, Регистры);
ОформитьОтгрузкуТоваров(Запрос, ТекстыЗапроса, Регистры);
ПроведениеДокументов.ДобавитьЗапросыСторноДвижений(Запрос, ТекстыЗапроса, Регистры, ПустаяСсылка().Метаданные());
РасчетСебестоимостиПроведениеДокументов.ОтразитьВМеханизмеУчетаЗатратИСебестоимости(ДокументСсылка, Запрос, ТекстыЗапроса, Регистры);
Возврат ПроведениеДокументов.ИнициализироватьДанныеДокументаДляПроведения(Запрос, ТекстыЗапроса, ДопПараметры);
КонецФункции
#КонецОбласти
Процедура ПриОпределенииНастроекВерсионированияОбъектов(Настройки) Экспорт
КонецПроцедуры
#Область СозданиеНаОсновании
Функция ДобавитьКомандуСоздатьНаОсновании(КомандыСозданияНаОсновании) Экспорт
Если ПравоДоступа("Добавление", Метаданные.Документы.ОтгрузкаТоваровСХранения) Тогда
КомандаСоздатьНаОсновании = КомандыСозданияНаОсновании.Добавить();
КомандаСоздатьНаОсновании.Менеджер = Метаданные.Документы.ОтгрузкаТоваровСХранения.ПолноеИмя();
КомандаСоздатьНаОсновании.Представление = ОбщегоНазначенияУТ.ПредставлениеОбъекта(
Метаданные.Документы.ОтгрузкаТоваровСХранения);
КомандаСоздатьНаОсновании.РежимЗаписи = "Проводить";
Возврат КомандаСоздатьНаОсновании;
КонецЕсли;
Возврат Неопределено;
КонецФункции
Процедура ДобавитьКомандыСозданияНаОсновании(КомандыСозданияНаОсновании, Параметры) Экспорт
Если ПолучитьФункциональнуюОпцию("ИспользоватьАктыРасхожденийПослеОтгрузки") Тогда
КомандаСоздания = Документы.АктОРасхожденияхПослеОтгрузки.ДобавитьКомандуСоздатьНаОсновании(
КомандыСозданияНаОсновании);
Если КомандаСоздания <> Неопределено Тогда
КомандаСоздания.Представление = НСтр("ru = 'Акт о расхождениях после отгрузки с хранения'");
КонецЕсли;
КонецЕсли;
Документы.ПоручениеЭкспедитору.ДобавитьКомандуСоздатьНаОсновании(КомандыСозданияНаОсновании);
Документы.РасходныйОрдерНаТовары.ДобавитьКомандуСоздатьНаОснованииРасходныйОрдерНаТовары(КомандыСозданияНаОсновании);
БизнесПроцессы.Задание.ДобавитьКомандуСоздатьНаОсновании(КомандыСозданияНаОсновании);
ИсправлениеДокументов.ДобавитьКомандуИсправление(КомандыСозданияНаОсновании, ПустаяСсылка().Метаданные());
ИсправлениеДокументов.ДобавитьКомандуСторно(КомандыСозданияНаОсновании, ПустаяСсылка().Метаданные());
ОтгрузкаТоваровСХраненияЛокализация.ДобавитьКомандыСозданияНаОсновании(КомандыСозданияНаОсновании, Параметры);
КонецПроцедуры
#КонецОбласти
#Область Отчеты
Процедура ДобавитьКомандыОтчетов(КомандыОтчетов, Параметры) Экспорт
Отчеты.ОстаткиТоваровОрганизаций.ДобавитьКомандуОтчета(КомандыОтчетов);
ОтгрузкаТоваровСХраненияЛокализация.ДобавитьКомандыОтчетов(КомандыОтчетов, Параметры);
КонецПроцедуры
#КонецОбласти
#Область Серии
Функция ИменаРеквизитовДляЗаполненияПараметровУказанияСерий() Экспорт
ИменаРеквизитов = "Склад,Дата";
Возврат ИменаРеквизитов;
КонецФункции
Функция ПараметрыУказанияСерий(Объект) Экспорт
ПараметрыУказанияСерий = НоменклатураКлиентСервер.ПараметрыУказанияСерий();
ПараметрыУказанияСерий.ПолноеИмяОбъекта = ПолноеИмяОбъекта();
ПараметрыСерийСклада = СкладыСервер.ИспользованиеСерийНаСкладе(Объект.Склад, Истина);
ПараметрыУказанияСерий.ИспользоватьСерииНоменклатуры = ПараметрыСерийСклада.ИспользоватьСерииНоменклатуры;
ПараметрыУказанияСерий.УчитыватьСебестоимостьПоСериям = ПараметрыСерийСклада.УчитыватьСебестоимостьПоСериям;
ПараметрыУказанияСерий.СкладскиеОперации.Добавить(Перечисления.СкладскиеОперации.ОтгрузкаПоВозвратуПоставщику);
ПараметрыУказанияСерий.ПоляСвязи.Добавить("Склад");
ПараметрыУказанияСерий.ПоляСвязи.Добавить("Назначение");
ПараметрыУказанияСерий.ЭтоНакладная = Истина;
ПараметрыУказанияСерий.ПланированиеОтгрузки = Ложь;
ПараметрыУказанияСерий.ПланированиеОтбора = Ложь;
ПараметрыУказанияСерий.ФактОтбора = Истина;
ПараметрыУказанияСерий.Дата = Объект.Дата;
ПараметрыУказанияСерий.РегистрироватьСерии = НоменклатураКлиентСервер.НеобходимоРегистрироватьСерии(
ПараметрыУказанияСерий);
ПараметрыУказанияСерий.ИменаПолейДляОпределенияРаспоряжения.Добавить("Товары_ЗаказКлиента");
ПараметрыУказанияСерий.ИменаПолейДляОпределенияРаспоряжения.Добавить("Товары_КодСтроки");
Возврат ПараметрыУказанияСерий;
КонецФункции
Функция РаспоряжениеНаВыполнениеСкладскойОперации(ЗначенияПолейДляОпределенияРаспоряжения) Экспорт
Если ЗначенияПолейДляОпределенияРаспоряжения.Товары_КодСтроки <> 0 Тогда
Возврат ЗначенияПолейДляОпределенияРаспоряжения.Товары_ЗаказКлиента;
Иначе
Возврат Неопределено;
КонецЕсли;
КонецФункции
Функция ТекстЗапросаЗаполненияСтатусовУказанияСерий(ПараметрыУказанияСерий) Экспорт
ТекстЗапроса =
"ВЫБРАТЬ
| Товары.НомерСтроки КАК НомерСтроки,
| Товары.Номенклатура КАК Номенклатура,
| Товары.Характеристика КАК Характеристика,
| Товары.Назначение КАК Назначение,
| Товары.Серия КАК Серия,
| Товары.Склад КАК Склад,
| Товары.Количество КАК Количество,
| Товары.СтатусУказанияСерий КАК СтатусУказанияСерий
|
|ПОМЕСТИТЬ Товары
|ИЗ
| &Товары КАК Товары
|;
|
|
|ВЫБРАТЬ
| Товары.Номенклатура КАК Номенклатура,
| Товары.Характеристика КАК Характеристика,
| Товары.Назначение КАК Назначение,
| Товары.Серия КАК Серия,
| Товары.Склад КАК Склад,
| ВЫРАЗИТЬ(Товары.Номенклатура КАК Справочник.Номенклатура).ВидНоменклатуры КАК ВидНоменклатуры,
| СУММА(Товары.Количество) КАК Количество
|
|ПОМЕСТИТЬ ТоварыДляЗапроса
|ИЗ
| Товары КАК Товары
|
|СГРУППИРОВАТЬ ПО
| Товары.Номенклатура,
| Товары.Характеристика,
| Товары.Назначение,
| Товары.Серия,
| Товары.Склад,
| ВЫРАЗИТЬ(Товары.Номенклатура КАК Справочник.Номенклатура).ВидНоменклатуры
|;
|
|
|ВЫБРАТЬ
| Серии.Номенклатура КАК Номенклатура,
| Серии.Характеристика КАК Характеристика,
| Серии.Назначение КАК Назначение,
| Серии.Склад КАК Склад,
| Серии.Количество КАК Количество
|
|ПОМЕСТИТЬ Серии
|ИЗ
| &Серии КАК Серии
|;
|
|
|ВЫБРАТЬ
| Серии.Номенклатура КАК Номенклатура,
| Серии.Характеристика КАК Характеристика,
| Серии.Назначение КАК Назначение,
| Серии.Склад КАК Склад,
| СУММА(Серии.Количество) КАК Количество
|
|ПОМЕСТИТЬ СерииДляЗапроса
|ИЗ
| Серии КАК Серии
|
|СГРУППИРОВАТЬ ПО
| Серии.Номенклатура,
| Серии.Характеристика,
| Серии.Назначение,
| Серии.Склад
|;
|
|
|ВЫБРАТЬ
| Товары.НомерСтроки КАК НомерСтроки,
| Товары.СтатусУказанияСерий КАК СтарыйСтатусУказанияСерий,
| ВЫБОР
| КОГДА ПолитикиУчетаСерий.ПолитикаУчетаСерий ЕСТЬ NULL
| ТОГДА 0
| КОГДА ПолитикиУчетаСерий.ПолитикаУчетаСерий.УчитыватьСебестоимостьПоСериям
| ТОГДА
| ВЫБОР
| КОГДА Товары.Серия <> ЗНАЧЕНИЕ(Справочник.СерииНоменклатуры.ПустаяСсылка)
| ТОГДА 14
| ИНАЧЕ 13
| КОНЕЦ
| КОГДА ПолитикиУчетаСерий.ПолитикаУчетаСерий.УказыватьПриПланированииОтгрузки
| ТОГДА
| ВЫБОР
| КОГДА Товары.Серия <> ЗНАЧЕНИЕ(Справочник.СерииНоменклатуры.ПустаяСсылка)
| ТОГДА 10
| ИНАЧЕ 9
| КОНЕЦ
| КОГДА Склады.ИспользоватьОрдернуюСхемуПриОтгрузке
| И &Дата >= Склады.ДатаНачалаОрдернойСхемыПриОтгрузке
| ТОГДА 0
| КОГДА ПолитикиУчетаСерий.ПолитикаУчетаСерий.УказыватьПриПланированииОтбора
| ТОГДА
| ВЫБОР
| КОГДА ПолитикиУчетаСерий.ПолитикаУчетаСерий.УчетСерийПоFEFO
| ТОГДА
| ВЫБОР
| КОГДА ТоварыДляЗапроса.Количество = ЕСТЬNULL(СерииДляЗапроса.Количество, 0)
| И ТоварыДляЗапроса.Количество > 0
| ТОГДА 6
| ИНАЧЕ 5
| КОНЕЦ
| ИНАЧЕ
| ВЫБОР
| КОГДА ТоварыДляЗапроса.Количество = ЕСТЬNULL(СерииДляЗапроса.Количество, 0)
| И ТоварыДляЗапроса.Количество > 0
| ТОГДА 8
| ИНАЧЕ 7
| КОНЕЦ
| КОНЕЦ
| КОГДА ПолитикиУчетаСерий.ПолитикаУчетаСерий.УказыватьПоФактуОтбора
| И &ФактОтбора
| И ПолитикиУчетаСерий.ПолитикаУчетаСерий.УказыватьПриОтгрузкеПоВозвратуПоставщику
| ТОГДА
| ВЫБОР
| КОГДА ПолитикиУчетаСерий.ПолитикаУчетаСерий.УчитыватьОстаткиСерий
| ТОГДА
| ВЫБОР
| КОГДА ТоварыДляЗапроса.Количество = ЕСТЬNULL(СерииДляЗапроса.Количество, 0)
| И ТоварыДляЗапроса.Количество > 0
| ТОГДА 4
| ИНАЧЕ 3
| КОНЕЦ
| ИНАЧЕ
| ВЫБОР
| КОГДА ТоварыДляЗапроса.Количество = ЕСТЬNULL(СерииДляЗапроса.Количество, 0)
| И ТоварыДляЗапроса.Количество > 0
| ТОГДА 2
| ИНАЧЕ 1
| КОНЕЦ
| КОНЕЦ
| ИНАЧЕ 0
| КОНЕЦ КАК СтатусУказанияСерий
|
|ПОМЕСТИТЬ Статусы
|ИЗ
| Товары КАК Товары
| ЛЕВОЕ СОЕДИНЕНИЕ ТоварыДляЗапроса КАК ТоварыДляЗапроса
| ЛЕВОЕ СОЕДИНЕНИЕ СерииДляЗапроса КАК СерииДляЗапроса
| ПО ТоварыДляЗапроса.Номенклатура = СерииДляЗапроса.Номенклатура
| И ТоварыДляЗапроса.Характеристика = СерииДляЗапроса.Характеристика
| И ТоварыДляЗапроса.Назначение = СерииДляЗапроса.Назначение
| И ТоварыДляЗапроса.Склад = СерииДляЗапроса.Склад
| ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ВидыНоменклатуры.ПолитикиУчетаСерий КАК ПолитикиУчетаСерий
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.Склады КАК Склады
| ПО (Склады.Ссылка = ПолитикиУчетаСерий.Склад)
| ПО (ПолитикиУчетаСерий.Склад = ТоварыДляЗапроса.Склад)
| И ТоварыДляЗапроса.ВидНоменклатуры = ПолитикиУчетаСерий.Ссылка
| ПО Товары.Номенклатура = ТоварыДляЗапроса.Номенклатура
| И Товары.Характеристика = ТоварыДляЗапроса.Характеристика
| И Товары.Назначение = ТоварыДляЗапроса.Назначение
| И Товары.Склад = ТоварыДляЗапроса.Склад
|;
|
|
|ВЫБРАТЬ
| Статусы.НомерСтроки КАК НомерСтроки,
| Статусы.СтатусУказанияСерий КАК СтатусУказанияСерий
|ИЗ
| Статусы КАК Статусы
|ГДЕ
| Статусы.СтатусУказанияСерий <> Статусы.СтарыйСтатусУказанияСерий
|
|УПОРЯДОЧИТЬ ПО
| НомерСтроки";
Возврат ТекстЗапроса;
КонецФункции
#КонецОбласти
#Область Назначения
Функция МакетФормыВыбораНазначений() Экспорт
МакетФормы = Справочники.Назначения.МакетФормыВыбораНазначений();
ШаблонНазначенияАгентскойЗакупки = Справочники.Назначения.ДобавитьШаблонНазначений(МакетФормы);
ШаблонНазначенияАгентскойЗакупки.НаправлениеДеятельности = "Объект.НаправлениеДеятельности";
ШаблонНазначенияАгентскойЗакупки.ДвиженияПоСкладскимРегистрам = "ИСТИНА";
ШаблонНазначенияАгентскойЗакупки.ТипыНазначений.Очистить();
ШаблонНазначенияАгентскойЗакупки.ТипыНазначений.Добавить(Перечисления.ТипыНазначений.ПоставкаПодПринципала);
ШаблонНазначенияАгентскойЗакупки.УсловиеИспользования = "Объект.ХозяйственнаяОперация = ЗНАЧЕНИЕ(Перечисление.ХозяйственныеОперации.ПоставкаПодПринципала)";
ШаблонНазначенияБезАгентскойЗакупки = Справочники.Назначения.ДобавитьШаблонНазначений(МакетФормы);
ШаблонНазначенияБезАгентскойЗакупки.НаправлениеДеятельности = "Объект.НаправлениеДеятельности";
ШаблонНазначенияБезАгентскойЗакупки.ДвиженияПоСкладскимРегистрам = "ИСТИНА";
ШаблонНазначенияБезАгентскойЗакупки.ТипыНазначений.Удалить(ШаблонНазначенияБезАгентскойЗакупки.ТипыНазначений.Найти(Перечисления.ТипыНазначений.ПоставкаПодПринципала));
ШаблонНазначенияБезАгентскойЗакупки.УсловиеИспользования =
"Объект.ХозяйственнаяОперация НЕ В (
| ЗНАЧЕНИЕ(Перечисление.ХозяйственныеОперации.ПоставкаПодПринципала))";
ОписаниеКолонок = Справочники.Назначения.ДобавитьОписаниеКолонок(МакетФормы, "ОбеспечениеЗаказов", Истина,
"Объект.Товары.Назначение");
ОписаниеКолонок.Колонки.НайтиПоЗначению("ВНаличии").Пометка = Истина;
ОписаниеКолонок.КолонкиПоУмолчанию.Добавить("ВНаличии");
ОписаниеКолонок.ПутиКДанным.Номенклатура = "Объект.Товары.Номенклатура";
ОписаниеКолонок.ПутиКДанным.Характеристика = "Объект.Товары.Характеристика";
ОписаниеКолонок.ПутиКДанным.Склад = "Объект.Товары.Склад";
Возврат МакетФормы;
КонецФункции
Функция ШаблонНазначения(Объект) Экспорт
ШаблонНазначения = Справочники.Назначения.ШаблонНового();
Если Объект.ХозяйственнаяОперация = Перечисления.ХозяйственныеОперации.ПоставкаПодПринципала Тогда
Если НаправленияДеятельностиСервер.ЭтоНаправлениеДеятельностиСОбособлениемТоваровИРабот(
Объект.НаправлениеДеятельности) Тогда
ШаблонНазначения.НаправлениеДеятельности = Объект.НаправлениеДеятельности;
КонецЕсли;
ШаблонНазначения.Партнер = Объект.Партнер;
ШаблонНазначения.Договор = Объект.Договор;
ШаблонНазначения.ТипНазначения = Перечисления.ТипыНазначений.ПоставкаПодПринципала;
Если ЗначениеЗаполнено(Объект.Основание)
И Константы.ВариантОбособленияТоваровВПродажах.Получить() =
Перечисления.ВариантыОбособленияТоваровВПродажах.ЗаказКлиента Тогда
ШаблонНазначения.Заказ = Объект.Основание;
КонецЕсли;
КонецЕсли;
Возврат ШаблонНазначения;
КонецФункции
#КонецОбласти
#Область Доставка
Функция ТекстЗапросаРеквизитыДоставки() Экспорт
ТекстЗапроса =
"ВЫБРАТЬ
| Шапка.Ссылка КАК Ссылка,
| Шапка.Номер КАК Номер,
| Шапка.Дата КАК Дата,
| Шапка.Проведен КАК Проведен,
| Шапка.Партнер КАК ПолучательОтправитель,
| Шапка.ПеревозчикПартнер КАК Перевозчик,
| Шапка.СпособДоставки КАК СпособДоставки,
| Шапка.ЗонаДоставки КАК Зона,
| ВЫБОР
| КОГДА СпособДоставки = ЗНАЧЕНИЕ(Перечисление.СпособыДоставки.СиламиПеревозчикаПоАдресу)
| ТОГДА Шапка.АдресДоставкиПеревозчика
| ИНАЧЕ Шапка.АдресДоставки
| КОНЕЦ КАК Адрес,
| ВЫБОР
| КОГДА СпособДоставки = ЗНАЧЕНИЕ(Перечисление.СпособыДоставки.СиламиПеревозчикаПоАдресу)
| ТОГДА Шапка.АдресДоставкиПеревозчикаЗначенияПолей
| ИНАЧЕ Шапка.АдресДоставкиЗначенияПолей
| КОНЕЦ КАК АдресЗначенияПолей,
| Шапка.ВремяДоставкиС КАК ВремяС,
| Шапка.ВремяДоставкиПо КАК ВремяПо,
| Шапка.ДополнительнаяИнформацияПоДоставке КАК ДополнительнаяИнформация,
| Т.Склад КАК Склад,
| ИСТИНА КАК ДоставитьПолностью,
| Шапка.ОсобыеУсловияПеревозки КАК ОсобыеУсловияПеревозки,
| Шапка.ОсобыеУсловияПеревозкиОписание КАК ОсобыеУсловияПеревозкиОписание,
| ЛОЖЬ КАК РазбиватьРасходныеОрдераПоРаспоряжениям
|ИЗ
| (ВЫБРАТЬ РАЗЛИЧНЫЕ
| Т.Ссылка КАК Ссылка,
| Т.Склад КАК Склад
| ИЗ
| Документ.ОтгрузкаТоваровСХранения.Товары КАК Т
| ГДЕ
| Т.Ссылка В (&Ссылки)
| ) КАК Т
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ Документ.ОтгрузкаТоваровСХранения КАК Шапка
| ПО Шапка.Ссылка = Т.Ссылка";
Возврат ТекстЗапроса;
КонецФункции
#КонецОбласти
#Область ПроводкиРеглУчета
Функция ТекстОтраженияВРеглУчете() Экспорт
Возврат ОтгрузкаТоваровСХраненияЛокализация.ТекстОтраженияВРеглУчете();
КонецФункции
Функция ТекстЗапросаВТОтраженияВРеглУчете() Экспорт
Возврат ОтгрузкаТоваровСХраненияЛокализация.ТекстЗапросаВТОтраженияВРеглУчете();
КонецФункции
#КонецОбласти
Функция ВыполнитьПроверкиРаспоряжения(Распоряжение, Склад) Экспорт
СтруктураВозврата = Новый Структура;
СтруктураВозврата.Вставить("Операция", "");
СтруктураВозврата.Вставить("ТекстОшибки", "");
СтруктураВозврата.Вставить("ГруппаСкладовВРаспоряжении", Ложь);
СтруктураВозврата.Вставить("ДатаОтгрузки");
СтруктураВозврата.Вставить("ИспользоватьОрдернуюСхему");
Если Не ЗначениеЗаполнено(ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Распоряжение, "Склад")) Тогда
ТекстОшибки = НСтр("ru = 'Не заполнено поле ""Склад"" в документе ""%Распоряжение%"". Невозможно создать ордер.'");
ТекстОшибки = СтрЗаменить(ТекстОшибки, "%Распоряжение%", Строка(Распоряжение));
СтруктураВозврата.ТекстОшибки = ТекстОшибки;
СтруктураВозврата.Операция = "Отказ";
Возврат СтруктураВозврата;
КонецЕсли;
СтруктураГруппыСкладов = Новый Структура("ЭтоГруппа", "Склад.ЭтоГруппа");
ЗначениеГруппыСкладов = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(Распоряжение, СтруктураГруппыСкладов);
ГруппаСкладовВРаспоряжении = ЗначениеГруппыСкладов.ЭтоГруппа;
СтруктураВозврата.ГруппаСкладовВРаспоряжении = ГруппаСкладовВРаспоряжении;
Реквизиты = Новый Структура("ДатаОтгрузки, Склад, ИспользоватьОрдернуюСхему", "Дата");
Если Не ГруппаСкладовВРаспоряжении Тогда
Реквизиты.Склад = "Склад";
Реквизиты.ИспользоватьОрдернуюСхему = "
|ВЫБОР
| КОГДА ЕстьNULL(Склад.ИспользоватьОрдернуюСхемуПриОтгрузке, Ложь)
| И Дата >= ЕстьNULL(Склад.ДатаНачалаОрдернойСхемыПриОтгрузке, ДАТАВРЕМЯ(1,1,1))
| ТОГДА ИСТИНА
| ИНАЧЕ ЛОЖЬ
|КОНЕЦ";
ЗначенияРеквизитов = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(Распоряжение, Реквизиты);
ИспользоватьОрдернуюСхему = ЗначенияРеквизитов.ИспользоватьОрдернуюСхему;
СтруктураВозврата.ИспользоватьОрдернуюСхему = ИспользоватьОрдернуюСхему;
Если ИспользоватьОрдернуюСхему Тогда
Склад = ЗначенияРеквизитов.Склад;
ЗаполнитьЗначенияСвойств(СтруктураВозврата, ЗначенияРеквизитов, "ДатаОтгрузки");
Иначе
ТекстОшибки = НСтр("ru = 'Для склада ""%Склад%"" оформление расходных ордеров не требуется.
|Заполнение документа не выполнено.'");
СтруктураВозврата.ТекстОшибки = СтрЗаменить(ТекстОшибки, "%Склад%", Строка(ЗначенияРеквизитов.Склад));
СтруктураВозврата.Операция = "Отказ";
Возврат СтруктураВозврата;
КонецЕсли;
КонецЕсли;
Если ГруппаСкладовВРаспоряжении Тогда
Если Не ЗначениеЗаполнено(Склад) Тогда
МассивСкладов = Документы.РасходныйОрдерНаТовары.ОрдерныеСкладыПриОтгрузке(Распоряжение, Неопределено);
Если МассивСкладов.Количество() = 0 Тогда
ТекстОшибки = НСтр("ru = 'Для складов документа ""%Распоряжение%"" оформление расходных ордеров не требуется.
|Заполнение документа не выполнено.'");
ТекстОшибки = СтрЗаменить(ТекстОшибки, "%Распоряжение%", Строка(Распоряжение));
СтруктураВозврата.ТекстОшибки = ТекстОшибки;
СтруктураВозврата.Операция = "Отказ";
Возврат СтруктураВозврата;
ИначеЕсли МассивСкладов.Количество() = 1 Тогда
Склад = МассивСкладов[0];
Иначе
СтруктураВозврата.Операция = "Возврат";
Возврат СтруктураВозврата;
КонецЕсли;
Иначе
СтруктураВозврата.Операция = "Возврат";
Возврат СтруктураВозврата;
КонецЕсли;
КонецЕсли;
Возврат СтруктураВозврата;
КонецФункции
Функция ПорядокЗаполненияНазначенийВДокументе(Форма) Экспорт
ПорядокОбработкиДокумента = НазначенияСервер.ПорядокЗаполненияНазначенийВДокументе();
ПорядокОбработкиДокумента.ВДокументеОпределенаФункцияШаблонНазначения = Истина;
ПорядокОбработкиДокумента.ИменаТабличныхЧастейДляОчисткиНекорректныхНазначений = "Товары";
ТаблицаУсловий = НаправленияДеятельностиСервер.УсловияОбработкиНазначенийВСтроках("ТипНоменклатуры");
ПорядокОбработкиДокумента.УсловияОбработкиСтрок.Вставить("Товары", ТаблицаУсловий);
Возврат ПорядокОбработкиДокумента;
КонецФункции
#Область ДляВызоваИзДругихПодсистем
Процедура ПриЗаполненииОграниченияДоступа(Ограничение) Экспорт
Ограничение.Текст =
"РазрешитьЧтениеИзменение
|ГДЕ
| ЗначениеРазрешено(Организация)
| И ЗначениеРазрешено(Склад)
| И ЗначениеРазрешено(Партнер)
| И ЗначениеРазрешено(Подразделение)
| И ЗначениеРазрешено(ХозяйственнаяОперация)";
КонецПроцедуры
#КонецОбласти
Функция КоллекцияТабличныхЧастейТоваров() Экспорт
ТаблицыДокумента = Новый Структура("Товары");
Возврат ТаблицыДокумента;
КонецФункции
Процедура ЗадатьОписаниеЗаполняемыхРеквизитовПоСтатистике(ОписаниеРеквизитов) Экспорт
Параметры = ЗаполнениеОбъектовПоСтатистике.ПараметрыЗаполняемыхРеквизитов();
Параметры.РазрезыСбораСтатистики.ИспользоватьВсегда = "Автор";
Параметры.РазрезыСбораСтатистики.ИспользоватьТолькоЗаполненные = "Партнер, Соглашение";
Параметры.ЗаполнятьПриУсловии.ПоляОбъектаЗаполнены = "Автор";
ЗаполнениеОбъектовПоСтатистике.ДобавитьОписаниеЗаполняемыхРеквизитов(ОписаниеРеквизитов, "Организация", Параметры);
Параметры = ЗаполнениеОбъектовПоСтатистике.ПараметрыЗаполняемыхРеквизитов();
Параметры.РазрезыСбораСтатистики.ИспользоватьТолькоЗаполненные = "Партнер, Соглашение, Организация";
ЗаполнениеОбъектовПоСтатистике.ДобавитьОписаниеЗаполняемыхРеквизитов(ОписаниеРеквизитов, "Менеджер", Параметры);
Параметры = ЗаполнениеОбъектовПоСтатистике.ПараметрыЗаполняемыхРеквизитов();
Параметры.РазрезыСбораСтатистики.ИспользоватьВсегда = "Автор, Основание, Менеджер";
Параметры.РазрезыСбораСтатистики.ИспользоватьТолькоЗаполненные = "Партнер, Соглашение";
Параметры.ЗаполнятьПриУсловии.ПоляОбъектаЗаполнены = "Автор";
ЗаполнениеОбъектовПоСтатистике.ДобавитьОписаниеЗаполняемыхРеквизитов(ОписаниеРеквизитов, "Подразделение", Параметры);
Параметры = ЗаполнениеОбъектовПоСтатистике.ПараметрыЗаполняемыхРеквизитов();
Параметры.РазрезыСбораСтатистики.ИспользоватьВсегда = "Автор";
Параметры.РазрезыСбораСтатистики.ИспользоватьТолькоЗаполненные = "Партнер, Соглашение";
Параметры.ЗаполнятьПриУсловии.ПоляОбъектаЗаполнены = "Автор";
Параметры.ЗаполнятьПриУсловии.ПоляОбъектаПусты = "Основание";
ЗаполнениеОбъектовПоСтатистике.ДобавитьОписаниеЗаполняемыхРеквизитов(ОписаниеРеквизитов, "Склад", Параметры);
Параметры = ЗаполнениеОбъектовПоСтатистике.ПараметрыЗаполняемыхРеквизитов();
Параметры.РазрезыСбораСтатистики.ИспользоватьВсегда = "Организация";
Параметры.РазрезыСбораСтатистики.ИспользоватьТолькоЗаполненные = "Договор, Валюта";
Параметры.ЗаполнятьПриУсловии.ПоляОбъектаЗаполнены = "Организация";
ЗаполнениеОбъектовПоСтатистике.ДобавитьОписаниеЗаполняемыхРеквизитов(ОписаниеРеквизитов, "БанковскийСчетОрганизации", Параметры);
Параметры = ЗаполнениеОбъектовПоСтатистике.ПараметрыЗаполняемыхРеквизитов();
Параметры.РазрезыСбораСтатистики.ИспользоватьВсегда = "Контрагент";
Параметры.РазрезыСбораСтатистики.ИспользоватьТолькоЗаполненные = "Договор, Валюта";
Параметры.ЗаполнятьПриУсловии.ПоляОбъектаЗаполнены = "Контрагент";
ЗаполнениеОбъектовПоСтатистике.ДобавитьОписаниеЗаполняемыхРеквизитов(ОписаниеРеквизитов, "БанковскийСчетКонтрагента", Параметры);
Параметры = ЗаполнениеОбъектовПоСтатистике.ПараметрыЗаполняемыхРеквизитов();
Параметры.РазрезыСбораСтатистики.ИспользоватьВсегда = "Склад, Менеджер";
Параметры.ЗаполнятьПриУсловии.ПоляОбъектаЗаполнены = "Склад";
ЗаполнениеОбъектовПоСтатистике.ДобавитьОписаниеЗаполняемыхРеквизитов(ОписаниеРеквизитов, "Отпустил", Параметры);
Параметры = ЗаполнениеОбъектовПоСтатистике.ПараметрыЗаполняемыхРеквизитов();
Параметры.РазрезыСбораСтатистики.ИспользоватьВсегда = "Склад, Менеджер";
Параметры.РазрезыСбораСтатистики.ИспользоватьТолькоЗаполненные = "Отпустил";
Параметры.ЗаполнятьПриУсловии.ПоляОбъектаЗаполнены = "Склад";
ЗаполнениеОбъектовПоСтатистике.ДобавитьОписаниеЗаполняемыхРеквизитов(ОписаниеРеквизитов, "ОтпустилДолжность", Параметры);
КонецПроцедуры
#Область ОснованиеДляПечати
Функция ТаблицаОснованийДляПечати(Объект) Экспорт
ТаблицаОснований = Новый ТаблицаЗначений;
ТаблицаОснований.Колонки.Добавить("Основание", Новый ОписаниеТипов("Строка",,,,Новый КвалификаторыСтроки(300)));
ТаблицаОснований.Колонки.Добавить("ОснованиеДата", Новый ОписаниеТипов("Дата",,,,,Новый КвалификаторыДаты(ЧастиДаты.Дата)));
ТаблицаОснований.Колонки.Добавить("ОснованиеНомер", Новый ОписаниеТипов("Строка",,,,Новый КвалификаторыСтроки(128)));
СтруктураОснования = СтруктураОснования(Объект);
Если ЗначениеЗаполнено(СтруктураОснования.ОснованиеДляПечати) Тогда
ДобавленнаяСтрока = ТаблицаОснований.Добавить();
ЗаполнитьЗначенияСвойств(ДобавленнаяСтрока, СтруктураОснования);
ДобавленнаяСтрока.Основание = СтруктураОснования.ОснованиеДляПечати;
КонецЕсли;
Возврат ТаблицаОснований;
КонецФункции
#КонецОбласти
#КонецОбласти
#КонецЕсли
#Область ОбработчикиСобытий
Процедура ОбработкаПолученияПолейПредставления(Поля, СтандартнаяОбработка)
Возврат;
КонецПроцедуры
Процедура ОбработкаПолученияПредставления(Данные, Представление, СтандартнаяОбработка)
Возврат;
КонецПроцедуры
#КонецОбласти
#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда
#Область СлужебныеПроцедурыИФункции
#Область Проведение
Функция ДополнительныеИсточникиДанныхДляДвижений(ИмяРегистра) Экспорт
ИсточникиДанных = Новый Соответствие;
Возврат ИсточникиДанных;
КонецФункции
Процедура ЗаполнитьПараметрыИнициализации(Запрос, ДокументСсылка)
Запрос.МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц;
Запрос.УстановитьПараметр("Ссылка", ДокументСсылка);
Запрос.Текст =
"ВЫБРАТЬ
| ДанныеДокумента.Ссылка КАК Ссылка,
| ДанныеДокумента.Номер КАК Номер,
| ДанныеДокумента.Дата КАК Период,
| ДанныеДокумента.ПоЗаказу КАК ПоЗаказу,
| ДанныеДокумента.Партнер КАК Партнер,
| ДанныеДокумента.Контрагент КАК Контрагент,
| ДанныеДокумента.Договор КАК Договор,
| ДанныеДокумента.Соглашение КАК Соглашение,
| ДанныеДокумента.Организация КАК Организация,
| ДанныеДокумента.Подразделение КАК Подразделение,
| ДанныеДокумента.Склад КАК Склад,
| ДанныеДокумента.ХозяйственнаяОперация КАК ХозяйственнаяОперация,
| ДанныеДокумента.Валюта КАК Валюта,
| ДанныеДокумента.Менеджер КАК Менеджер,
| ДанныеДокумента.Автор КАК Автор,
| ДанныеДокумента.НаправлениеДеятельности КАК НаправлениеДеятельности,
| ДанныеДокумента.Комментарий КАК Комментарий,
| ДанныеДокумента.СуммаДокумента КАК СуммаДокумента,
| ДанныеДокумента.Проведен КАК Проведен,
| ДанныеДокумента.Исправление КАК Исправление,
| ДанныеДокумента.СторнируемыйДокумент КАК СторнируемыйДокумент,
| ДанныеДокумента.ИсправляемыйДокумент КАК ИсправляемыйДокумент,
| ДанныеДокумента.ПометкаУдаления КАК ПометкаУдаления,
| ДанныеДокумента.Организация.ВалютаРегламентированногоУчета КАК ВалютаРегламентированногоУчета,
| НастройкиХозяйственныхОпераций.Ссылка КАК НастройкаХозяйственнойОперации
|ИЗ
| Документ.ОтгрузкаТоваровСХранения КАК ДанныеДокумента
| ЛЕВОЕ СОЕДИНЕНИЕ Справочник.НастройкиХозяйственныхОпераций КАК НастройкиХозяйственныхОпераций
| ПО ДанныеДокумента.ХозяйственнаяОперация = НастройкиХозяйственныхОпераций.ХозяйственнаяОперация
|ГДЕ
| ДанныеДокумента.Ссылка = &Ссылка";
Результат = Запрос.Выполнить();
Реквизиты = Результат.Выбрать();
Реквизиты.Следующий();
НомерНаПечать = ПрефиксацияОбъектовКлиентСервер.НомерНаПечать(Реквизиты.Номер);
ИдентификаторМетаданных = ОбщегоНазначения.ИдентификаторОбъектаМетаданных(ПолноеИмяОбъекта());
Для Каждого Колонка Из Результат.Колонки Цикл
Запрос.УстановитьПараметр(Колонка.Имя, Реквизиты[Колонка.Имя]);
КонецЦикла;
Если ЗначениеЗаполнено(Реквизиты.Договор) Тогда
ШаблонСтроки = "ru = 'По договору ""%1""'";
ИнформацияПоДоговору = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонСтроки, Реквизиты.Договор);
КонецЕсли;
Запрос.УстановитьПараметр("ИдентификаторМетаданных", ИдентификаторМетаданных);
Запрос.УстановитьПараметр("ИнформацияПоДоговору", ИнформацияПоДоговору);
Запрос.УстановитьПараметр("НомерНаПечать", НомерНаПечать);
Запрос.УстановитьПараметр("Исправление", Реквизиты.Исправление);
Запрос.УстановитьПараметр("СторнируемыйДокумент", Реквизиты.СторнируемыйДокумент);
Запрос.УстановитьПараметр("ИсправляемыйДокумент", Реквизиты.ИсправляемыйДокумент);
Запрос.УстановитьПараметр("ПоставкаПодПринципала", Реквизиты.ХозяйственнаяОперация = Перечисления.ХозяйственныеОперации.ПоставкаПодПринципала);
Запрос.УстановитьПараметр("ИспользоватьРасширенныеВозможностиЗаказаКлиента",
ПолучитьФункциональнуюОпцию("ИспользоватьРасширенныеВозможностиЗаказаКлиента"));
РасчетСебестоимостиПрикладныеАлгоритмы.ЗаполнитьПараметрыИнициализации(Запрос, Реквизиты);
КонецПроцедуры
Функция ТекстЗапросаТаблицаДвиженияСерийТоваров(Запрос, ТекстыЗапроса, Регистры)
ИмяРегистра = "ДвиженияСерийТоваров";
Если Не ПроведениеДокументов.ТребуетсяТаблицаДляДвижений(ИмяРегистра, Регистры) Тогда
Возврат "";
КонецЕсли;
ТекстЗапроса =
"ВЫБРАТЬ
| &Ссылка КАК Документ,
| &Период КАК Период,
| &Ссылка КАК Регистратор,
| ТаблицаСерии.Номенклатура КАК Номенклатура,
| ТаблицаСерии.Характеристика КАК Характеристика,
| ВЫБОР
| КОГДА ЕСТЬNULL(ТаблицаСерии.Назначение.ДвиженияПоСкладскимРегистрам, ЛОЖЬ)
| ТОГДА ТаблицаСерии.Назначение
| ИНАЧЕ
| ЗНАЧЕНИЕ(Справочник.Назначения.ПустаяСсылка)
| КОНЕЦ КАК Назначение,
| ТаблицаСерии.Серия КАК Серия,
| ТаблицаСерии.Количество КАК Количество,
| ТаблицаСерии.Склад КАК Отправитель,
| &Партнер КАК Получатель,
| ЗНАЧЕНИЕ(Перечисление.СкладскиеОперации.ОтгрузкаПоВозвратуПоставщику) КАК СкладскаяОперация,
| ВЫБОР
| КОГДА НЕ ТаблицаСерии.Склад.ИспользоватьОрдернуюСхемуПриОтгрузке
| ИЛИ &Период < ТаблицаСерии.Склад.ДатаНачалаОрдернойСхемыПриОтгрузке
| ТОГДА ИСТИНА
| ИНАЧЕ ЛОЖЬ
| КОНЕЦ КАК ЭтоСкладскоеДвижение
|ИЗ
| Документ.ОтгрузкаТоваровСХранения.Серии КАК ТаблицаСерии
|ГДЕ
| ТаблицаСерии.Ссылка = &Ссылка
| И ТаблицаСерии.Количество <> 0
|
|ОБЪЕДИНИТЬ ВСЕ
|
|ВЫБРАТЬ
| &Ссылка,
| &Период,
| &Ссылка,
| ТаблицаСерии.Номенклатура,
| ТаблицаСерии.Характеристика,
| ВЫБОР
| КОГДА ЕСТЬNULL(ТаблицаСерии.Назначение.ДвиженияПоСкладскимРегистрам, ЛОЖЬ)
| ТОГДА ТаблицаСерии.Назначение
| ИНАЧЕ
| ЗНАЧЕНИЕ(Справочник.Назначения.ПустаяСсылка)
| КОНЕЦ,
| ТаблицаСерии.Серия,
| ТаблицаСерии.Количество,
| &Склад,
| &Партнер,
| ЗНАЧЕНИЕ(Перечисление.СкладскиеОперации.ОтгрузкаПоВозвратуПоставщику),
| ВЫБОР
| КОГДА НЕ ТаблицаСерии.Склад.ИспользоватьОрдернуюСхемуПриОтгрузке
| ИЛИ &Период < ТаблицаСерии.Склад.ДатаНачалаОрдернойСхемыПриОтгрузке
| ТОГДА ИСТИНА
| ИНАЧЕ ЛОЖЬ
| КОНЕЦ
|ИЗ
| Документ.ОтгрузкаТоваровСХранения.Товары КАК ТаблицаСерии
|ГДЕ
| ТаблицаСерии.Ссылка = &Ссылка
| И ТаблицаСерии.Серия <> ЗНАЧЕНИЕ(Справочник.СерииНоменклатуры.ПустаяСсылка)";
ТекстыЗапроса.Добавить(ТекстЗапроса, ИмяРегистра);
Возврат ТекстЗапроса;
КонецФункции
Функция ТекстЗапросаТаблицаРеестрДокументов(Запрос, ТекстыЗапроса, Регистры)
ИмяРегистра = "РеестрДокументов";
Если НЕ ПроведениеДокументов.ТребуетсяТаблицаДляДвижений(ИмяРегистра, Регистры) Тогда
Возврат "";
КонецЕсли;
ТекстЗапроса =
"ВЫБРАТЬ
| &Ссылка КАК Ссылка,
| &Период КАК ДатаДокументаИБ,
| &Номер КАК НомерДокументаИБ,
| &ИдентификаторМетаданных КАК ТипСсылки,
| &Организация КАК Организация,
| &ХозяйственнаяОперация КАК ХозяйственнаяОперация,
| &Партнер КАК Партнер,
| &Контрагент КАК Контрагент,
| &Договор КАК Договор,
| &НаправлениеДеятельности КАК НаправлениеДеятельности,
| &Склад КАК МестоХранения,
| &Подразделение КАК Подразделение,
| &Менеджер КАК Ответственный,
| &Автор КАК Автор,
| &Комментарий КАК Комментарий,
| &Валюта КАК Валюта,
| &СуммаДокумента КАК Сумма,
| НЕОПРЕДЕЛЕНО КАК Статус,
| &Проведен КАК Проведен,
| &ПометкаУдаления КАК ПометкаУдаления,
| ЛОЖЬ КАК ДополнительнаяЗапись,
| &ИнформацияПоДоговору КАК Дополнительно,
| &Период КАК ДатаПервичногоДокумента,
| &НомерНаПечать КАК НомерПервичногоДокумента,
| &Исправление КАК СторноИсправление,
| &СторнируемыйДокумент КАК СторнируемыйДокумент,
| &ИсправляемыйДокумент КАК ИсправляемыйДокумент,
| &Период КАК ДатаОтраженияВУчете,
| НЕОПРЕДЕЛЕНО КАК Приоритет";
ТекстыЗапроса.Добавить(ТекстЗапроса, ИмяРегистра);
Возврат ТекстЗапроса;
КонецФункции
Процедура СформироватьСуммыДокументаВВалютахУчета(Запрос, ТекстыЗапроса, Регистры = Неопределено) Экспорт
ТекстЗапросаДанных =
"ВЫБРАТЬ
| ""ВидыЗапасов"" КАК ИсточникДанных,
| ИСТИНА КАК РаспределятьОбщуюСумму,
| ТаблицаДокумента.Ссылка КАК Ссылка,
| ТаблицаДокумента.Ссылка.Дата КАК Дата,
| ТаблицаДокумента.Ссылка.Организация КАК Организация,
| ТаблицаДокумента.Ссылка.Валюта КАК ВалютаДокумента,
| НЕОПРЕДЕЛЕНО КАК ВалютаВзаиморасчетов,
| ТаблицаДокумента.Ссылка.Дата КАК ПериодБазыНДС,
| ТаблицаДокумента.Ссылка.Дата КАК ДатаКурса,
|
| ТаблицаДокумента.НомерСтроки КАК НомерСтроки,
| ТаблицаДокумента.ИдентификаторСтроки КАК ИдентификаторСтроки,
| ТаблицаДокумента.Сумма КАК СуммаБезНДС,
| ЗНАЧЕНИЕ(Справочник.СтавкиНДС.ПустаяСсылка) КАК СтавкаНДС,
| 0 КАК СуммаНДС,
| 0 КАК СуммаВзаиморасчетов,
| 0 КАК СуммаНДСВзаиморасчетов,
| 0 КАК СуммаБезНДСРегл,
| 0 КАК СуммаБезНДСУпр,
|
| ЛОЖЬ КАК ОтражаетсяВРасчетах,
| НЕОПРЕДЕЛЕНО КАК ОбъектРасчетов,
| ЛОЖЬ КАК ПересчитыватьПоДаннымРасчетов
|ИЗ
| Документ.ОтгрузкаТоваровСХранения.ВидыЗапасов КАК ТаблицаДокумента
|
|ГДЕ
| ТаблицаДокумента.Ссылка В (&Ссылка)
|";
РегистрыСведений.СуммыДокументовВВалютахУчета.СформироватьПоДаннымДокумента(
Запрос, ТекстыЗапроса, Регистры, ТекстЗапросаДанных);
КонецПроцедуры
Функция ТекстЗапросаТаблицаТоварыОрганизаций(Запрос, ТекстыЗапроса, Регистры)
ИмяРегистра = "ТоварыОрганизаций";
Если Не ПроведениеДокументов.ТребуетсяТаблицаДляДвижений(ИмяРегистра, Регистры) Тогда
Возврат "";
КонецЕсли;
Если Не ПроведениеДокументов.ЕстьТаблицаЗапроса("ВтВидыЗапасов", ТекстыЗапроса) Тогда
ТекстЗапросаВтВидыЗапасов(Запрос, ТекстыЗапроса);
КонецЕсли;
ТекстЗапроса = "
|ВЫБРАТЬ
| ТаблицаВидыЗапасов.НомерСтроки КАК НомерСтроки,
| ЗНАЧЕНИЕ(ВидДвиженияНакопления.Расход) КАК ВидДвижения,
| &Период КАК Период,
| ТаблицаВидыЗапасов.АналитикаУчетаНоменклатуры КАК АналитикаУчетаНоменклатуры,
| &Организация КАК Организация,
| ТаблицаВидыЗапасов.ВидЗапасов КАК ВидЗапасов,
| ТаблицаВидыЗапасов.НомерГТД КАК НомерГТД,
| ТаблицаВидыЗапасов.Количество КАК Количество,
| ТаблицаВидыЗапасов.КоличествоПоРНПТ КАК КоличествоПоРНПТ,
| ВЫБОР
| КОГДА ИСТИНА
| ТОГДА ЗНАЧЕНИЕ(Перечисление.ХозяйственныеОперации.ОтгрузкаПринятыхСПравомПродажиТоваровСХранения)
| КОНЕЦ КАК ХозяйственнаяОперация,
| ТаблицаВидыЗапасов.Номенклатура КАК Номенклатура,
| ТаблицаВидыЗапасов.Характеристика КАК Характеристика,
| ЗНАЧЕНИЕ (Перечисление.ТипыНалогообложенияНДС.ПродажаНеОблагаетсяНДС) КАК НалогообложениеНДС,
| ТаблицаВидыЗапасов.ДокументПоступления КАК ДокументРеализации
|ИЗ
| ВтВидыЗапасов КАК ТаблицаВидыЗапасов
|
|УПОРЯДОЧИТЬ ПО
| НомерСтроки";
ТекстыЗапроса.Добавить(ТекстЗапроса, ИмяРегистра);
Возврат ТекстЗапроса;
КонецФункции
Функция ТекстЗапросаВтВидыЗапасов(Запрос, ТекстыЗапроса)
ИмяВременнойТаблицы = "ВтВидыЗапасов";
ИнициализироватьКлючиАналитикиУчетаНоменклатуры(Запрос);
ТекстЗапроса = "
|ВЫБРАТЬ
| ТаблицаВидыЗапасов.НомерСтроки КАК НомерСтроки,
| ТаблицаВидыЗапасов.АналитикаУчетаНоменклатуры.Номенклатура КАК Номенклатура,
| ТаблицаВидыЗапасов.АналитикаУчетаНоменклатуры.Характеристика КАК Характеристика,
| ТаблицаВидыЗапасов.АналитикаУчетаНоменклатуры.Назначение КАК Назначение,
| ТаблицаВидыЗапасов.АналитикаУчетаНоменклатуры.Серия КАК Серия,
| ТаблицаВидыЗапасов.АналитикаУчетаНоменклатуры.МестоХранения КАК Склад,
| ТаблицаВидыЗапасов.АналитикаУчетаНоменклатуры КАК АналитикаУчетаНоменклатуры,
| КлючиБезНазначения.КлючАналитики КАК АналитикаУчетаНоменклатурыБезНазначения,
| ТаблицаВидыЗапасов.ВидЗапасов КАК ВидЗапасов,
| ТаблицаВидыЗапасов.ВидЗапасов.ТипЗапасов КАК ТипЗапасов,
| ТаблицаВидыЗапасов.НомерГТД КАК НомерГТД,
| ТаблицаВидыЗапасов.Количество КАК Количество,
| ТаблицаВидыЗапасов.КоличествоПоРНПТ КАК КоличествоПоРНПТ,
| ТаблицаВидыЗапасов.ИдентификаторСтроки КАК ИдентификаторСтроки,
| ТаблицаВидыЗапасов.ДокументПоступления КАК ДокументПоступления
|
|ПОМЕСТИТЬ ВтВидыЗапасов
|ИЗ
| Документ.ОтгрузкаТоваровСХранения.ВидыЗапасов КАК ТаблицаВидыЗапасов
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.АналитикаУчетаНоменклатуры КАК КлючиБезНазначения
| ПО ТаблицаВидыЗапасов.АналитикаУчетаНоменклатуры.Номенклатура = КлючиБезНазначения.Номенклатура
| И ТаблицаВидыЗапасов.АналитикаУчетаНоменклатуры.Характеристика = КлючиБезНазначения.Характеристика
| И ТаблицаВидыЗапасов.АналитикаУчетаНоменклатуры.Серия = КлючиБезНазначения.Серия
| И ТаблицаВидыЗапасов.АналитикаУчетаНоменклатуры.МестоХранения = КлючиБезНазначения.МестоХранения
| И ЗНАЧЕНИЕ(Справочник.Назначения.ПустаяСсылка) = КлючиБезНазначения.Назначение
|ГДЕ
| ТаблицаВидыЗапасов.Ссылка = &Ссылка";
ТекстыЗапроса.Добавить(ТекстЗапроса, ИмяВременнойТаблицы);
Возврат ТекстЗапроса;
КонецФункции
Процедура ЗапланироватьОтгрузкуТоваров(Запрос, ТекстыЗапроса, Регистры)
ТекстЗапросаДанныхДокумента =
"ВЫБРАТЬ
| ТоварыДокумента.Ссылка КАК Ссылка,
| ДанныеШапки.Дата КАК Период,
| ВЫБОР
| КОГДА &ИспользоватьРасширенныеВозможностиЗаказа
| И НЕ ТоварыДокумента.ЗаказКлиента В (
| НЕОПРЕДЕЛЕНО,
| ЗНАЧЕНИЕ(Документ.ЗаказКлиента.ПустаяСсылка))
| ТОГДА ТоварыДокумента.ЗаказКлиента
| ИНАЧЕ НЕОПРЕДЕЛЕНО
| КОНЕЦ КАК Заказ,
| ТоварыДокумента.Ссылка КАК Накладная,
| ДанныеШапки.Исправление КАК Исправление,
| ДанныеШапки.ИсправляемыйДокумент КАК ИсправляемыйДокумент,
| ДанныеШапки.Партнер КАК Получатель,
| ТоварыДокумента.Склад КАК Склад,
| ТоварыДокумента.Номенклатура КАК Номенклатура,
| ТоварыДокумента.Характеристика КАК Характеристика,
| ТоварыДокумента.Назначение КАК Назначение,
| ТоварыДокумента.Серия КАК Серия,
| ТоварыДокумента.СтатусУказанияСерий КАК СтатусУказанияСерий,
| ТоварыДокумента.Количество КАК Количество,
| ВЫБОР
| КОГДА ИСТИНА
| ТОГДА ЛОЖЬ
| КОНЕЦ КАК СверхЗаказа,
| ЛОЖЬ КАК Отменено,
| ИСТИНА КАК ЭтоНакладная,
| ВЫБОР
| КОГДА &ИспользоватьРасширенныеВозможностиЗаказа
| И НЕ ТоварыДокумента.ЗаказКлиента В (
| НЕОПРЕДЕЛЕНО,
| ЗНАЧЕНИЕ(Документ.ЗаказКлиента.ПустаяСсылка))
| ТОГДА ИСТИНА
| ИНАЧЕ ЛОЖЬ
| КОНЕЦ КАК ОтгрузкаПоЗаказу
|ИЗ
| Документ.ОтгрузкаТоваровСХранения.Товары КАК ТоварыДокумента
| ЛЕВОЕ СОЕДИНЕНИЕ Документ.ОтгрузкаТоваровСХранения КАК ДанныеШапки
| ПО ТоварыДокумента.Ссылка = ДанныеШапки.Ссылка
|
|ГДЕ
| ТоварыДокумента.Ссылка В(&Ссылка)
| И ТоварыДокумента.Количество <> 0";
ИспользоватьРасширенныеВозможностиЗаказа = ?(ПолучитьФункциональнуюОпцию("ИспользоватьРасширенныеВозможностиЗаказаКлиента"),
"ИСТИНА",
"ЛОЖЬ");
ТекстЗапросаДанныхДокумента = СтрЗаменить(ТекстЗапросаДанныхДокумента,
"&ИспользоватьРасширенныеВозможностиЗаказа",
ИспользоватьРасширенныеВозможностиЗаказа);
СкладыСервер.ЗапланироватьОтгрузкуТоваров(Запрос, ТекстыЗапроса, Регистры, ТекстЗапросаДанныхДокумента);
КонецПроцедуры
Процедура ОформитьОтгрузкуТоваров(Запрос, ТекстыЗапроса, Регистры)
ТекстЗапросаДанныхДокумента =
"ВЫБРАТЬ
| ТоварыДокумента.Ссылка КАК Ссылка,
| ДанныеШапки.Дата КАК Период,
| ВЫБОР
| КОГДА &ИспользоватьРасширенныеВозможностиЗаказа
| И НЕ ТоварыДокумента.ЗаказКлиента В (
| НЕОПРЕДЕЛЕНО,
| ЗНАЧЕНИЕ(Документ.ЗаказКлиента.ПустаяСсылка))
| ТОГДА ТоварыДокумента.ЗаказКлиента
| ИНАЧЕ НЕОПРЕДЕЛЕНО
| КОНЕЦ КАК Заказ,
| ТоварыДокумента.Ссылка КАК Накладная,
| ДанныеШапки.Исправление КАК Исправление,
| ДанныеШапки.ИсправляемыйДокумент КАК ИсправляемыйДокумент,
| ДанныеШапки.Партнер КАК Получатель,
| ТоварыДокумента.Склад КАК Склад,
| ТоварыДокумента.Номенклатура КАК Номенклатура,
| ТоварыДокумента.Характеристика КАК Характеристика,
| ТоварыДокумента.Назначение КАК Назначение,
| ТоварыДокумента.Серия КАК Серия,
| ТоварыДокумента.СтатусУказанияСерий КАК СтатусУказанияСерий,
| ТоварыДокумента.Количество КАК Количество,
| ВЫБОР
| КОГДА ИСТИНА
| ТОГДА ЛОЖЬ
| КОНЕЦ КАК СверхЗаказа,
| ВЫБОР
| КОГДА &ИспользоватьРасширенныеВозможностиЗаказа
| И НЕ ТоварыДокумента.ЗаказКлиента В (
| НЕОПРЕДЕЛЕНО,
| ЗНАЧЕНИЕ(Документ.ЗаказКлиента.ПустаяСсылка))
| ТОГДА ИСТИНА
| ИНАЧЕ ЛОЖЬ
| КОНЕЦ КАК ОтгрузкаПоЗаказу,
| ВЫБОР
| КОГДА ДанныеШапки.ХозяйственнаяОперация = ЗНАЧЕНИЕ(Перечисление.ХозяйственныеОперации.ПоставкаПодПринципала)
| ТОГДА ЛОЖЬ
| ИНАЧЕ ИСТИНА
| КОНЕЦ КАК ВозвратТовара
|ИЗ
| Документ.ОтгрузкаТоваровСХранения.Товары КАК ТоварыДокумента
| ЛЕВОЕ СОЕДИНЕНИЕ Документ.ОтгрузкаТоваровСХранения КАК ДанныеШапки
| ПО ТоварыДокумента.Ссылка = ДанныеШапки.Ссылка
|
|ГДЕ
| ТоварыДокумента.Ссылка В(&Ссылка)
| И ТоварыДокумента.Количество <> 0";
ИспользоватьРасширенныеВозможностиЗаказа = ?(ПолучитьФункциональнуюОпцию("ИспользоватьРасширенныеВозможностиЗаказаКлиента"),
"ИСТИНА",
"ЛОЖЬ");
ТекстЗапросаДанныхДокумента = СтрЗаменить(ТекстЗапросаДанныхДокумента,
"&ИспользоватьРасширенныеВозможностиЗаказа",
ИспользоватьРасширенныеВозможностиЗаказа);
ОбъектМетаданных = Метаданные.Документы.ОтгрузкаТоваровСХранения;
ИмяТЧСерии = "Серии";
СкладыСервер.ОформитьОтгрузкуТоваров(Запрос,
ТекстыЗапроса,
Регистры,
ТекстЗапросаДанныхДокумента,
ОбъектМетаданных,
ИмяТЧСерии);
КонецПроцедуры
Процедура ИнициализироватьКлючиАналитикиУчетаНоменклатуры(Запрос)
Если Запрос.Параметры.Свойство("КлючиАналитикиУчетаНоменклатурыИнициализированы") Тогда
Возврат;
КонецЕсли;
ЗапросАналитик = Новый Запрос;
ЗапросАналитик.Текст =
"ВЫБРАТЬ РАЗЛИЧНЫЕ
| Товары.АналитикаУчетаНоменклатуры.Номенклатура КАК Номенклатура,
| Товары.АналитикаУчетаНоменклатуры.Характеристика КАК Характеристика,
| &ПустоеНазначение КАК Назначение,
| Товары.АналитикаУчетаНоменклатуры.Серия КАК Серия,
| Товары.АналитикаУчетаНоменклатуры.МестоХранения КАК Склад
|ИЗ
| Документ.ОтгрузкаТоваровСХранения.ВидыЗапасов КАК Товары
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.АналитикаУчетаНоменклатуры КАК Аналитика
| ПО (Товары.АналитикаУчетаНоменклатуры.Номенклатура = Аналитика.Номенклатура)
| И (Товары.АналитикаУчетаНоменклатуры.Характеристика = Аналитика.Характеристика)
| И (Товары.АналитикаУчетаНоменклатуры.Серия = Аналитика.Серия)
| И (Товары.АналитикаУчетаНоменклатуры.МестоХранения = Аналитика.МестоХранения)
| И (&ПустоеНазначение = Аналитика.Назначение)
|ГДЕ
| Товары.Ссылка = &Ссылка
| И Аналитика.Номенклатура ЕСТЬ NULL
| И НЕ &УчитыватьСебестоимостьТоваровПоНазначениям";
ЗапросАналитик.УстановитьПараметр("Ссылка", Запрос.Параметры.Ссылка);
ЗапросАналитик.УстановитьПараметр("ПустоеНазначение", Справочники.Назначения.ПустаяСсылка());
ЗапросАналитик.УстановитьПараметр("УчитыватьСебестоимостьТоваровПоНазначениям", Запрос.Параметры.УчитыватьСебестоимостьТоваровПоНазначениям);
Выборка = ЗапросАналитик.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл
РегистрыСведений.АналитикаУчетаНоменклатуры.СоздатьКлючАналитики(Выборка);
КонецЦикла;
Запрос.УстановитьПараметр("КлючиАналитикиУчетаНоменклатурыИнициализированы", Истина);
КонецПроцедуры
Процедура УстановитьПараметрЗапросаАналитикаУчетаПоПартнерам(Запрос)
Если Запрос.Параметры.Свойство("АналитикаУчетаПоПартнерам") Тогда
Возврат;
КонецЕсли;
ПараметрыАналитики = Новый Структура;
ПараметрыАналитики.Вставить("Партнер", Запрос.Параметры.Партнер);
ПараметрыАналитики.Вставить("Контрагент", Запрос.Параметры.Контрагент);
ПараметрыАналитики.Вставить("Организация", Запрос.Параметры.Организация);
ПараметрыАналитики.Вставить("Договор", Запрос.Параметры.Договор);
ПараметрыАналитики.Вставить("НаправлениеДеятельности", Запрос.Параметры.НаправлениеДеятельности);
Запрос.УстановитьПараметр("АналитикаУчетаПоПартнерам",
РегистрыСведений.АналитикаУчетаПоПартнерам.ЗначениеКлючаАналитики(ПараметрыАналитики));
КонецПроцедуры
Функция АдаптированныйТекстЗапросаДвиженийПоРегистру(ИмяРегистра) Экспорт
Запрос = Новый Запрос;
ТекстыЗапроса = Новый СписокЗначений;
ПолноеИмяДокумента = "Документ.ОтгрузкаТоваровСХранения";
СинонимТаблицыДокумента = "";
ВЗапросеЕстьИсточник = Истина;
ПереопределениеРасчетаПараметров = Новый Структура;
ПереопределениеРасчетаПараметров.Вставить("НомерНаПечать", """""");
ПереопределениеРасчетаПараметров.Вставить("ИнформацияПоДоговору", """""");
ЗначенияПараметров = Новый Структура;
ЗначенияПараметров.Вставить("ИдентификаторМетаданных",
ОбщегоНазначения.ИдентификаторОбъектаМетаданных(ПолноеИмяДокумента));
Если ИмяРегистра = "РеестрДокументов" Тогда
ТекстЗапроса = ТекстЗапросаТаблицаРеестрДокументов(Запрос, ТекстыЗапроса, ИмяРегистра);
ВЗапросеЕстьИсточник = Ложь;
Иначе
ТекстИсключения = НСтр("ru = 'В документе %ПолноеИмяДокумента% не реализована адаптация текста запроса формирования движений по регистру %ИмяРегистра%.'");
ТекстИсключения = СтрЗаменить(ТекстИсключения, "%ПолноеИмяДокумента%", ПолноеИмяДокумента);
ТекстИсключения = СтрЗаменить(ТекстИсключения, "%ИмяРегистра%", ИмяРегистра);
ВызватьИсключение ТекстИсключения;
КонецЕсли;
ТекстЗапроса = ОбновлениеИнформационнойБазыУТ.АдаптироватьЗапросПроведенияПоНезависимомуРегистру(
ТекстЗапроса,
ПолноеИмяДокумента,
СинонимТаблицыДокумента,
ВЗапросеЕстьИсточник,
ПереопределениеРасчетаПараметров);
Результат = ОбновлениеИнформационнойБазыУТ.РезультатАдаптацииЗапроса();
Результат.ЗначенияПараметров = ЗначенияПараметров;
Результат.ТекстЗапроса = ТекстЗапроса;
Возврат Результат;
КонецФункции
Функция ТекстЗапросаТаблицаРаспоряженияНаОтгрузку(Запрос, ТекстыЗапроса, Регистры)
ИмяРегистра = "РаспоряженияНаОтгрузкуИВозврат";
Если Не ПроведениеДокументов.ТребуетсяТаблицаДляДвижений(ИмяРегистра, Регистры) Тогда
Возврат "";
КонецЕсли;
ТекстЗапроса =
"ВЫБРАТЬ
| ТаблицаТовары.НомерСтроки КАК НомерСтроки,
| &Период КАК Период,
| ТаблицаТовары.ЗаказКлиента КАК Распоряжение,
| ТаблицаТовары.Номенклатура КАК Номенклатура,
| ТаблицаТовары.Характеристика КАК Характеристика,
| 0 КАК КодСтроки,
| ВЫБОР
| КОГДА ТаблицаТовары.Номенклатура.ТипНоменклатуры В (ЗНАЧЕНИЕ(Перечисление.ТипыНоменклатуры.Товар),
| ЗНАЧЕНИЕ(Перечисление.ТипыНоменклатуры.МногооборотнаяТара))
| ТОГДА ТаблицаТовары.Склад
| ИНАЧЕ ЗНАЧЕНИЕ(Справочник.Склады.ПустаяСсылка)
| КОНЕЦ КАК Склад,
| ВЫБОР
| КОГДА ТаблицаТовары.СтатусУказанияСерий В (10, 14)
| ТОГДА ТаблицаТовары.Серия
| ИНАЧЕ ЗНАЧЕНИЕ(Справочник.СерииНоменклатуры.ПустаяСсылка)
| КОНЕЦ КАК Серия,
| ТаблицаПоказателей.Ссылка КАК Показатель,
| ТаблицаТовары.Количество КАК Количество,
| ТаблицаТовары.Сумма КАК Сумма,
| ЗНАЧЕНИЕ(Справочник.ПричиныОтменыЗаказовКлиентов.ПустаяСсылка) КАК ПричинаОтмены
|ИЗ
| Документ.ОтгрузкаТоваровСХранения.Товары КАК ТаблицаТовары
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ Перечисление.ПоказателиРаспоряженийНаОтгрузкуИВозврат КАК ТаблицаПоказателей
| ПО ТаблицаПоказателей.Ссылка В (ЗНАЧЕНИЕ(Перечисление.ПоказателиРаспоряженийНаОтгрузкуИВозврат.Оформлено),
| ЗНАЧЕНИЕ(Перечисление.ПоказателиРаспоряженийНаОтгрузкуИВозврат.Отгружено))
|ГДЕ
| ТаблицаТовары.Ссылка = &Ссылка
| И &ПоставкаПодПринципала
| И &ИспользоватьРасширенныеВозможностиЗаказаКлиента
| И НЕ ТаблицаТовары.ЗаказКлиента В (
| ЗНАЧЕНИЕ(Документ.ЗаказКлиента.ПустаяСсылка))
|УПОРЯДОЧИТЬ ПО
| НомерСтроки,
| Показатель";
ТекстыЗапроса.Добавить(ТекстЗапроса, ИмяРегистра);
Возврат ТекстЗапроса;
КонецФункции
Процедура ОтразитьРаспределениеЗапасовДвижения(Запрос, ТекстыЗапроса, Регистры)
ТекстЗапросаТабЧасть =
"ВЫБРАТЬ
| ТабЧасть.Ссылка КАК Ссылка,
| ТабЧасть.Ссылка.Дата КАК Период,
| ТабЧасть.Номенклатура КАК Номенклатура,
| ТабЧасть.Характеристика КАК Характеристика,
| ТабЧасть.Склад КАК Склад,
| ТабЧасть.Назначение КАК Назначение,
| ТабЧасть.Количество КАК Количество,
| НЕОПРЕДЕЛЕНО КАК ЗапланированныйРасходРаспределенногоЗапаса,
| ИСТИНА КАК КонтрольСвободногоОстатка
|ИЗ
| Документ.ОтгрузкаТоваровСХранения.Товары КАК ТабЧасть
|ГДЕ
| ТабЧасть.ЗаказКлиента В (
| ЗНАЧЕНИЕ(Документ.ЗаказКлиента.ПустаяСсылка))
|";
РаспределениеЗапасовДвижения.РасходЗапаса(Запрос, ТекстыЗапроса, Регистры, ТекстЗапросаТабЧасть);
КонецПроцедуры
#Область ПартионныйУчет
Функция ОписаниеРегистровУчетаЗатратИСебестоимости(Документ) Экспорт
ОписаниеРегистров = Новый Массив;
ОписаниеРегистров.Добавить(Метаданные.РегистрыНакопления.СебестоимостьТоваров);
Возврат ОписаниеРегистров;
КонецФункции
Функция УстановитьДополнительныеПараметрыОперацийУчетаЗатратИСебестоимости(Документ, Запрос = Неопределено) Экспорт
ДополнительныеПараметры = Новый Массив;
ДополнительныеПараметры.Добавить("АналитикаУчетаПоПартнерам");
Если Запрос <> Неопределено Тогда
УстановитьПараметрЗапросаАналитикаУчетаПоПартнерам(Запрос);
КонецЕсли;
Возврат ДополнительныеПараметры;
КонецФункции
Функция СформироватьДополнительныеТаблицыОперацийУчетаЗатратИСебестоимости(Документ, Запрос = Неопределено, ТекстыЗапроса = Неопределено) Экспорт
ДополнительныеТаблицы = Новый Массив;
ДополнительныеТаблицы.Добавить("ВтВидыЗапасов");
Если Запрос <> Неопределено Тогда
Если НЕ ПроведениеДокументов.ЕстьТаблицаЗапроса(ДополнительныеТаблицы[0], ТекстыЗапроса) Тогда
ТекстЗапросаВтВидыЗапасов(Запрос, ТекстыЗапроса);
КонецЕсли;
КонецЕсли;
Возврат ДополнительныеТаблицы;
КонецФункции
Функция ОписаниеОперацийУчетаСебестоимости(Документ) Экспорт
ОписаниеОпераций = Новый Массив;
#Область Реализация_Товар
ТекстЗапроса =
"ВЫБРАТЬ
| ТаблицаДокумента.Дата КАК Период,
| ТаблицаДокумента.Ссылка КАК Ссылка,
| НЕОПРЕДЕЛЕНО КАК ДокументИсточник,
| НЕОПРЕДЕЛЕНО КАК ПериодДокументаИсточника,
| НЕОПРЕДЕЛЕНО КАК КорректируемыйДокумент,
|
| ТаблицаДокумента.Организация КАК Организация,
| ТаблицаВидыЗапасов.АналитикаУчетаНоменклатуры КАК АналитикаУчетаНоменклатуры,
| ТаблицаВидыЗапасов.ВидЗапасов КАК ВидЗапасов,
| НЕОПРЕДЕЛЕНО КАК ВидДеятельностиНДС,
| НЕОПРЕДЕЛЕНО КАК ВидДеятельностиНДСДокумента,
|
| НЕОПРЕДЕЛЕНО КАК КорОрганизация,
| НЕОПРЕДЕЛЕНО КАК КорАналитикаУчетаНоменклатуры,
| НЕОПРЕДЕЛЕНО КАК КорВидЗапасов,
| НЕОПРЕДЕЛЕНО КАК КорПартия,
| НЕОПРЕДЕЛЕНО КАК КорАналитикаУчетаПартий,
| &АналитикаУчетаПоПартнерам КАК АналитикаУчетаПоПартнерам,
| НЕОПРЕДЕЛЕНО КАК ЗаказКлиента,
|
| ТаблицаДокумента.Сделка КАК Сделка,
| ТаблицаДокумента.Подразделение КАК Подразделение,
| ТаблицаДокумента.Менеджер КАК Менеджер,
| НЕОПРЕДЕЛЕНО КАК ГруппаПродукции,
|
| ТаблицаВидыЗапасов.Количество КАК Количество,
| ТаблицаВидыЗапасов.ИдентификаторСтроки КАК ИдентификаторСтроки,
|
| &ХозяйственнаяОперация КАК ХозяйственнаяОперация,
| ТаблицаВидыЗапасов.ИдентификаторСтроки КАК ИдентификаторФинЗаписи,
| &НастройкаХозяйственнойОперации КАК НастройкаХозяйственнойОперации
|
|ИЗ
| Документ.ОтгрузкаТоваровСХранения КАК ТаблицаДокумента
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВтВидыЗапасов КАК ТаблицаВидыЗапасов
| ПО ИСТИНА
|ГДЕ
| ТаблицаДокумента.Ссылка В (&Ссылка)";
РасчетСебестоимостиПроведениеДокументов.ДобавитьОписаниеОперацииДляОтраженияВУчетеСебестоимости(
ОписаниеОпераций,
Перечисления.ОперацииУчетаСебестоимости.Реализация,
ТекстЗапроса);
#КонецОбласти
Возврат ОписаниеОпераций;
КонецФункции
#КонецОбласти
#КонецОбласти
#Область Печать
Функция ПравилаПечатиЗаданияНаОтборРазмещение() Экспорт
ПравилаПечатиЗадания = Обработки.ПечатьЗаданияНаОтборРазмещениеТоваров.ПравилаПечатиЗаданияНаОтборРазмещение();
ПравилаПечатиЗадания.СкладыВТЧ = Истина;
ПравилаПечатиЗадания.ИспользуютсяИсправленияДокумента = Истина;
Возврат ПравилаПечатиЗадания;
КонецФункции
Процедура ДобавитьКомандыПечати(КомандыПечати) Экспорт
ЭтоПартнер = ПраваПользователяПовтИсп.ЭтоПартнер();
КомандаПечати = КомандыПечати.Добавить();
КомандаПечати.Идентификатор = "ОтгрузкаТоваровСХранения";
КомандаПечати.Представление = НСтр("ru = 'Отгрузка товаров с хранения'");
КомандаПечати.ПроверкаПроведенияПередПечатью = Истина;
КомандаПечати.Порядок = 10;
Если НЕ ЭтоПартнер Тогда
Обработки.ПечатьЗаданияНаОтборРазмещениеТоваров.ДобавитьКомандуПечати(КомандыПечати, "ЗаданиеНаОтбор");
КонецЕсли;
ОтгрузкаТоваровСХраненияЛокализация.ДобавитьКомандыПечати(КомандыПечати);
КонецПроцедуры
Процедура Печать(МассивОбъектов, ПараметрыПечати, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода) Экспорт
ИмяМакета = "ОтгрузкаТоваровСХранения";
Если УправлениеПечатью.НужноПечататьМакет(КоллекцияПечатныхФорм, ИмяМакета) Тогда
СинонимМакета = НСтр("ru = 'Отгрузка товаров с хранения'");
УправлениеПечатью.ВывестиТабличныйДокументВКоллекцию(КоллекцияПечатныхФорм, ИмяМакета, СинонимМакета,
СформироватьПечатнуюФормуОтгрузкаТоваровСХранения(МассивОбъектов, ОбъектыПечати));
КонецЕсли;
Если УправлениеПечатью.НужноПечататьМакет(КоллекцияПечатныхФорм, "КомплектДокументов") Тогда
КоллекцияПечатныхФорм.Очистить();
СформироватьКомплектПечатныхФорм(МассивОбъектов, ПараметрыПечати, КоллекцияПечатныхФорм, ОбъектыПечати);
КонецЕсли;
ОтгрузкаТоваровСХраненияЛокализация.Печать(МассивОбъектов, ПараметрыПечати, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода);
ФормированиеПечатныхФорм.ЗаполнитьПараметрыОтправки(ПараметрыВывода.ПараметрыОтправки, МассивОбъектов, КоллекцияПечатныхФорм);
КонецПроцедуры
Функция СформироватьКомплектПечатныхФорм(МассивОбъектов, ПараметрыПечати, КоллекцияПечатныхФорм, ОбъектыПечати) Экспорт
Перем АдресКомплектаПечатныхФорм;
Если ТипЗнч(ПараметрыПечати) = Тип("Структура")
И ПараметрыПечати.Свойство("АдресКомплектаПечатныхФорм", АдресКомплектаПечатныхФорм) Тогда
КомплектПечатныхФорм = ПолучитьИзВременногоХранилища(АдресКомплектаПечатныхФорм);
Иначе
КомплектПечатныхФорм = РегистрыСведений.НастройкиПечатиОбъектов.КомплектПечатныхФорм(
Метаданные.Документы.ОтгрузкаТоваровСХранения.ПолноеИмя(),
МассивОбъектов,
Неопределено);
КонецЕсли;
Если КомплектПечатныхФорм = Неопределено Тогда
Возврат Неопределено;
КонецЕсли;
КомплектыПечатиПоОбъектам = РегистрыСведений.НастройкиПечатиОбъектов.КомплектыПечатиПоОбъектам(КоллекцияПечатныхФорм,
КомплектПечатныхФорм,
МассивОбъектов,
"ОтгрузкаТоваровСХранения");
Для Каждого КомплектПечати Из КомплектыПечатиПоОбъектам Цикл
УправлениеПечатью.ВывестиТабличныйДокументВКоллекцию(
КоллекцияПечатныхФорм,
КомплектПечати.Имя,
КомплектПечати.Представление,
СформироватьПечатнуюФормуОтгрузкаТоваровСХранения(КомплектПечати.Объекты, ОбъектыПечати));
КонецЦикла;
КомплектыПечатиПоОбъектам = РегистрыСведений.НастройкиПечатиОбъектов.КомплектыПечатиПоОбъектам(КоллекцияПечатныхФорм,
КомплектПечатныхФорм,
МассивОбъектов,
"ЗаданиеНаОтборРазмещениеТовара");
ПараметрыПечати.Вставить("ТипЗадания", "ЗаданиеНаОтбор");
Для Каждого КомплектПечати Из КомплектыПечатиПоОбъектам Цикл
СтруктураТипов = Новый Соответствие;
СтруктураТипов.Вставить("Документ.ОтгрузкаТоваровСХранения", КомплектПечати.Объекты);
УправлениеПечатью.ВывестиТабличныйДокументВКоллекцию(
КоллекцияПечатныхФорм,
КомплектПечати.Имя,
КомплектПечати.Представление,
Обработки.ПечатьЗаданияНаОтборРазмещениеТоваров.СформироватьЗаданиеНаОтборРазмещениеТовара(СтруктураТипов,
ОбъектыПечати,
ПараметрыПечати));
КонецЦикла;
ОтгрузкаТоваровСХраненияЛокализация.СформироватьКомплектПечатныхФорм(МассивОбъектов,
ПараметрыПечати,
КоллекцияПечатныхФорм,
ОбъектыПечати,
КомплектПечатныхФорм);
КонецФункции
Функция КомплектПечатныхФорм() Экспорт
КомплектПечатныхФорм = РегистрыСведений.НастройкиПечатиОбъектов.ПодготовитьКомплектПечатныхФорм();
РегистрыСведений.НастройкиПечатиОбъектов.ДобавитьПечатнуюФормуВКомплект(КомплектПечатныхФорм,
"ОтгрузкаТоваровСХранения",
НСтр("ru = 'Отгрузка товаров с хранения'"),
1);
РегистрыСведений.НастройкиПечатиОбъектов.ДобавитьПечатнуюФормуВКомплект(КомплектПечатныхФорм,
"ЗаданиеНаОтборРазмещениеТовара",
НСтр("ru = 'Задание на отбор товаров'"),
0);
ОтгрузкаТоваровСХраненияЛокализация.КомплектПечатныхФорм(КомплектПечатныхФорм);
Возврат КомплектПечатныхФорм;
КонецФункции
Функция СформироватьПечатнуюФормуОтгрузкаТоваровСХранения(МассивОбъектов, ОбъектыПечати)
УстановитьПривилегированныйРежим(Истина);
КолонкаКодов = ФормированиеПечатныхФорм.ДополнительнаяКолонкаПечатныхФормДокументов();
ИмяКолонкиКодов = КолонкаКодов.ИмяКолонки;
ПредставлениеКолонкиКодов = КолонкаКодов.ПредставлениеКолонки;
ВыводитьКоды = ЗначениеЗаполнено(ИмяКолонкиКодов);
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ОтгрузкаТоваровСХранения.Ссылка КАК Ссылка,
| ОтгрузкаТоваровСХранения.Номер КАК Номер,
| ОтгрузкаТоваровСХранения.Дата КАК Дата,
| ОтгрузкаТоваровСХранения.ИсправляемыйДокумент.Номер КАК НомерИсправляемогоДокумента,
| ОтгрузкаТоваровСХранения.ИсправляемыйДокумент.Дата КАК ДатаИсправляемогоДокумента,
| ОтгрузкаТоваровСХранения.Партнер КАК Партнер,
| ОтгрузкаТоваровСХранения.Контрагент КАК Получатель,
| ОтгрузкаТоваровСХранения.Организация КАК Организация,
| ОтгрузкаТоваровСХранения.Организация.Префикс КАК Префикс,
| ОтгрузкаТоваровСХранения.ХозяйственнаяОперация КАК ХозяйственнаяОперация,
| ОтгрузкаТоваровСХранения.Валюта КАК Валюта,
| ОтгрузкаТоваровСХранения.Отпустил КАК ОтпускПроизвел
|ИЗ
| Документ.ОтгрузкаТоваровСХранения КАК ОтгрузкаТоваровСХранения
|ГДЕ
| ОтгрузкаТоваровСХранения.Ссылка В(&МассивДокументов)
| И ОтгрузкаТоваровСХранения.Проведен
|
|УПОРЯДОЧИТЬ ПО
| Ссылка
|;
|
|
|ВЫБРАТЬ
| ВложенныйЗапрос.Ссылка КАК Ссылка,
| ВложенныйЗапрос.НомерСтроки КАК НомерСтроки,
| ВложенныйЗапрос.Номенклатура.Код КАК Код,
| ВложенныйЗапрос.Номенклатура.Артикул КАК Артикул,
| ВложенныйЗапрос.Номенклатура.НаименованиеПолное КАК ТоварНаименованиеПолное,
| ВложенныйЗапрос.Номенклатура КАК Номенклатура,
| ВложенныйЗапрос.Характеристика.НаименованиеПолное КАК Характеристика,
| ВЫБОР
| КОГДА ЕСТЬNULL(&ТекстЗапросаКоэффициентУпаковки1, 1) = 1
| ТОГДА НЕОПРЕДЕЛЕНО
| ИНАЧЕ ВложенныйЗапрос.Упаковка.Наименование
| КОНЕЦ КАК Упаковка,
| ВложенныйЗапрос.Количество КАК Количество,
| ВложенныйЗапрос.ЕдиницаИзмерения.Наименование КАК ЕдиницаЦены,
| ВложенныйЗапрос.ЕдиницаИзмерения КАК ЕдиницаИзмерения,
| ВложенныйЗапрос.Цена КАК Цена,
| ВложенныйЗапрос.Сумма КАК Сумма
|ИЗ
| (ВЫБРАТЬ
| ОтгрузкаТоваровСХранения.Ссылка КАК Ссылка,
| ОтгрузкаТоваровСХранения.НомерСтроки КАК НомерСтроки,
| ОтгрузкаТоваровСХранения.Номенклатура КАК Номенклатура,
| ОтгрузкаТоваровСХранения.Характеристика КАК Характеристика,
| ОтгрузкаТоваровСХранения.Упаковка КАК Упаковка,
| ВЫБОР
| КОГДА ОтгрузкаТоваровСХранения.Упаковка = ЗНАЧЕНИЕ(Справочник.УпаковкиЕдиницыИзмерения.ПустаяСсылка)
| ТОГДА ОтгрузкаТоваровСХранения.Номенклатура.ЕдиницаИзмерения
| ИНАЧЕ ОтгрузкаТоваровСХранения.Упаковка
| КОНЕЦ КАК ЕдиницаИзмерения,
| ВЫБОР
| КОГДА ОтгрузкаТоваровСХранения.Упаковка = ЗНАЧЕНИЕ(Справочник.УпаковкиЕдиницыИзмерения.ПустаяСсылка)
| ТОГДА 1
| ИНАЧЕ &ТекстЗапросаКоэффициентУпаковки2
| КОНЕЦ КАК Коэффициент,
| ОтгрузкаТоваровСХранения.КоличествоУпаковок КАК Количество,
| ОтгрузкаТоваровСХранения.Цена КАК Цена,
| ОтгрузкаТоваровСХранения.Сумма КАК Сумма
| ИЗ
| Документ.ОтгрузкаТоваровСХранения.Товары КАК ОтгрузкаТоваровСХранения
| ГДЕ
| ОтгрузкаТоваровСХранения.Ссылка В(&МассивДокументов)
| И ОтгрузкаТоваровСХранения.Ссылка.Проведен) КАК ВложенныйЗапрос
|
|УПОРЯДОЧИТЬ ПО
| ВложенныйЗапрос.Ссылка,
| НомерСтроки
|ИТОГИ ПО
| Ссылка";
Запрос.Текст = СтрЗаменить(Запрос.Текст, "&ТекстЗапросаКоэффициентУпаковки1",
Справочники.УпаковкиЕдиницыИзмерения.ТекстЗапросаКоэффициентаУпаковки("ВложенныйЗапрос.Упаковка",
"ВложенныйЗапрос.Номенклатура"));
Запрос.Текст = СтрЗаменить(Запрос.Текст, "&ТекстЗапросаКоэффициентУпаковки2",
Справочники.УпаковкиЕдиницыИзмерения.ТекстЗапросаКоэффициентаУпаковки("ОтгрузкаТоваровСХранения.Упаковка",
"ОтгрузкаТоваровСХранения.Номенклатура"));
Запрос.УстановитьПараметр("МассивДокументов", МассивОбъектов);
ТабличныйДокумент = Новый ТабличныйДокумент;
ТабличныйДокумент.ИмяПараметровПечати = "ПАРАМЕТРЫ_ПЕЧАТИ_ОтгрузкаТоваровСХранения_Накладная";
МассивРезультатов = Запрос.ВыполнитьПакет();
РезультатДанныеПечати = МассивРезультатов[0];
РезультатВыборкаПоДокументам = МассивРезультатов[1];
ДанныеПечати = РезультатДанныеПечати.Выбрать();
ВыборкаПоДокументам = РезультатВыборкаПоДокументам.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
ПервыйДокумент = Истина;
Пока ДанныеПечати.Следующий() Цикл
СтруктураПоиска = Новый Структура("Ссылка", ДанныеПечати.Ссылка);
НайденСледующий = ВыборкаПоДокументам.НайтиСледующий(СтруктураПоиска);
Макет = УправлениеПечатью.МакетПечатнойФормы("Документ.ОтгрузкаТоваровСХранения.ПФ_MXL_ОтгрузкаТоваровСХранения");
ВыборкаПоТоварам = ВыборкаПоДокументам.Выбрать();
Если Не ПервыйДокумент Тогда
ТабличныйДокумент.ВывестиГоризонтальныйРазделительСтраниц();
КонецЕсли;
ПервыйДокумент = Ложь;
НомерСтрокиНачало = ТабличныйДокумент.ВысотаТаблицы + 1;
ОбластьМакета = Макет.ПолучитьОбласть("Заголовок");
СтруктураДанныхШапки = Новый Структура;
СинонимДокумента = НСтр("ru='Отгрузка товаров с хранения'", ОбщегоНазначения.КодОсновногоЯзыка());
СтруктураДанныхШапки.Вставить("ТекстЗаголовка",
ОбщегоНазначенияУТКлиентСервер.СформироватьЗаголовокДокумента(
ДанныеПечати,
СинонимДокумента));
ОбластьМакета.Параметры.Заполнить(СтруктураДанныхШапки);
ШтрихкодированиеПечатныхФорм.ВывестиШтрихкодВТабличныйДокумент(ТабличныйДокумент,
Макет,
ОбластьМакета,
ДанныеПечати.Ссылка);
ТабличныйДокумент.Вывести(ОбластьМакета);
ОбластьМакета = Макет.ПолучитьОбласть("Поставщик");
ПредставлениеПоставщика = ФормированиеПечатныхФорм.ОписаниеОрганизации(
ФормированиеПечатныхФорм.СведенияОЮрФизЛице(ДанныеПечати.Организация, ДанныеПечати.Дата),
"ПолноеНаименование");
СтруктураДанныхПоставщик = Новый Структура;
СтруктураДанныхПоставщик.Вставить("Поставщик", ДанныеПечати.Организация);
СтруктураДанныхПоставщик.Вставить("ПредставлениеПоставщика", ПредставлениеПоставщика);
ОбластьМакета.Параметры.Заполнить(СтруктураДанныхПоставщик);
ТабличныйДокумент.Вывести(ОбластьМакета);
ОбластьМакета = Макет.ПолучитьОбласть("Покупатель");
ПредставлениеПолучателя = ФормированиеПечатныхФорм.ОписаниеОрганизации(
ФормированиеПечатныхФорм.СведенияОЮрФизЛице(ДанныеПечати.Получатель, ДанныеПечати.Дата),
"ПолноеНаименование");
СтруктураДанныхПокупатель = Новый Структура;
СтруктураДанныхПокупатель.Вставить("Получатель", ДанныеПечати.Получатель);
СтруктураДанныхПокупатель.Вставить("ПредставлениеПолучателя", ПредставлениеПолучателя);
ОбластьМакета.Параметры.Заполнить(СтруктураДанныхПокупатель);
ТабличныйДокумент.Вывести(ОбластьМакета);
ОбластьКолонкаТовар = Макет.Область("Товар");
Если Не ВыводитьКоды Тогда
ОбластьКолонкаТовар.ШиринаКолонки = ОбластьКолонкаТовар.ШиринаКолонки * 1.2;
КонецЕсли;
ОбластьНомера = Макет.ПолучитьОбласть("ШапкаТаблицы|НомерСтроки");
ОбластьКодов = Макет.ПолучитьОбласть("ШапкаТаблицы|КолонкаКодов");
ОбластьТовар = Макет.ПолучитьОбласть("ШапкаТаблицы|Товар");
ОбластьДанных = Макет.ПолучитьОбласть("ШапкаТаблицы|Данные");
ТабличныйДокумент.Вывести(ОбластьНомера);
Если ВыводитьКоды Тогда
СтруктураДанныхКоды = Новый Структура("ИмяКолонкиКодов", ПредставлениеКолонкиКодов);
ОбластьКодов.Параметры.Заполнить(СтруктураДанныхКоды);
ТабличныйДокумент.Присоединить(ОбластьКодов);
КонецЕсли;
ТабличныйДокумент.Присоединить(ОбластьТовар);
ТабличныйДокумент.Присоединить(ОбластьДанных);
ОбластьНомера = Макет.ПолучитьОбласть("СтрокаТаблицы|НомерСтроки");
ОбластьКодов = Макет.ПолучитьОбласть("СтрокаТаблицы|КолонкаКодов");
ОбластьТовар = Макет.ПолучитьОбласть("СтрокаТаблицы|Товар");
ОбластьДанных = Макет.ПолучитьОбласть("СтрокаТаблицы|Данные");
Сумма = 0;
НомерСтроки = 0;
Пока ВыборкаПоТоварам.Следующий() Цикл
НомерСтроки = НомерСтроки + 1;
СтруктураДанныхНомерСтроки = Новый Структура("НомерСтроки", НомерСтроки);
ОбластьНомера.Параметры.Заполнить(СтруктураДанныхНомерСтроки);
ТабличныйДокумент.Вывести(ОбластьНомера);
Если ВыводитьКоды Тогда
СтруктураДанныхКоды = Новый Структура("Артикул", ВыборкаПоТоварам[ИмяКолонкиКодов]);
ОбластьКодов.Параметры.Заполнить(СтруктураДанныхКоды);
ТабличныйДокумент.Присоединить(ОбластьКодов);
КонецЕсли;
ОбластьТовар.Параметры.Заполнить(ВыборкаПоТоварам);
ДопПараметрыПредставлениеНоменклатуры = НоменклатураКлиентСервер.ДополнительныеПараметрыПредставлениеНоменклатурыДляПечати();
ДопПараметрыПредставлениеНоменклатуры.КодОсновногоЯзыка = ОбщегоНазначения.КодОсновногоЯзыка();
Товар = НоменклатураКлиентСервер.ПредставлениеНоменклатурыДляПечати(ВыборкаПоТоварам.ТоварНаименованиеПолное,
ВыборкаПоТоварам.Характеристика,
,
,
ДопПараметрыПредставлениеНоменклатуры);
СтруктураДанныхТовар = Новый Структура("Товар", Товар);
ОбластьТовар.Параметры.Заполнить(СтруктураДанныхТовар);
ТабличныйДокумент.Присоединить(ОбластьТовар);
ОбластьДанных.Параметры.Заполнить(ВыборкаПоТоварам);
ТабличныйДокумент.Присоединить(ОбластьДанных);
Если ДанныеПечати.ХозяйственнаяОперация <> Перечисления.ХозяйственныеОперации.ВозвратТоваровКомитенту Тогда
Сумма = Сумма + ВыборкаПоТоварам.Сумма;
КонецЕсли;
КонецЦикла;
ОбластьНомера = Макет.ПолучитьОбласть("ПодвалТаблицы|НомерСтроки");
ОбластьКодов = Макет.ПолучитьОбласть("ПодвалТаблицы|КолонкаКодов");
ОбластьТовар = Макет.ПолучитьОбласть("ПодвалТаблицы|Товар");
ОбластьДанных = Макет.ПолучитьОбласть("ПодвалТаблицы|Данные");
ТабличныйДокумент.Вывести(ОбластьНомера);
Если ВыводитьКоды Тогда
ТабличныйДокумент.Присоединить(ОбластьКодов);
КонецЕсли;
ТабличныйДокумент.Присоединить(ОбластьТовар);
СтруктураДанныхВсего = Новый Структура("Всего", ФормированиеПечатныхФорм.ФорматСумм(Сумма));
ОбластьДанных.Параметры.Заполнить(СтруктураДанныхВсего);
ТабличныйДокумент.Присоединить(ОбластьДанных);
ОбластьМакета = Макет.ПолучитьОбласть("СуммаПрописью");
ИтоговаяСтрока = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru='Всего наименований %1, на сумму %2'", ОбщегоНазначения.КодОсновногоЯзыка()),
ВыборкаПоТоварам.Количество(),
ФормированиеПечатныхФорм.ФорматСумм(Сумма, ДанныеПечати.Валюта));
СтруктураДанныхИтоговаяСтрока = Новый Структура;
СтруктураДанныхИтоговаяСтрока.Вставить("ИтоговаяСтрока", ИтоговаяСтрока);
СтруктураДанныхИтоговаяСтрока.Вставить(
"СуммаПрописью", РаботаСКурсамиВалютУТ.СформироватьСуммуПрописью(Сумма, ДанныеПечати.Валюта));
ОбластьМакета.Параметры.Заполнить(СтруктураДанныхИтоговаяСтрока);
ТабличныйДокумент.Вывести(ОбластьМакета);
ОбластьМакета = Макет.ПолучитьОбласть("Подписи");
Если ЗначениеЗаполнено(ДанныеПечати.ОтпускПроизвел) Тогда
СтруктураДанныхОтпускПроизвел = Новый Структура;
СтруктураДанныхОтпускПроизвел.Вставить("ОтпускПроизвел",
ФизическиеЛицаУТ.ФамилияИнициалыФизЛица(ДанныеПечати.ОтпускПроизвел, ДанныеПечати.Дата));
ОбластьМакета.Параметры.Заполнить(СтруктураДанныхОтпускПроизвел);
КонецЕсли;
ТабличныйДокумент.Вывести(ОбластьМакета);
УправлениеПечатью.ЗадатьОбластьПечатиДокумента(ТабличныйДокумент, НомерСтрокиНачало, ОбъектыПечати,
ДанныеПечати.Ссылка);
КонецЦикла;
ТабличныйДокумент.АвтоМасштаб = Истина;
Если ПривилегированныйРежим() Тогда
УстановитьПривилегированныйРежим(Ложь);
КонецЕсли;
Возврат ТабличныйДокумент;
КонецФункции
Процедура ЗаполнитьСтруктуруПолучателейПечатныхФорм(СтруктураДанныхОбъектаПечати) Экспорт
СтруктураДанныхОбъектаПечати.ОсновнойПолучатель = "Партнер";
СтруктураДанныхОбъектаПечати.МассивРеквизитовПолучателей.Добавить("Партнер");
СтруктураДанныхОбъектаПечати.МассивРеквизитовПолучателей.Добавить("КонтактноеЛицо");
Если ПолучитьФункциональнуюОпцию("ИспользоватьПартнеровИКонтрагентов") Тогда
СтруктураДанныхОбъектаПечати.МассивРеквизитовПолучателей.Добавить("Контрагент");
КонецЕсли;
КонецПроцедуры
Функция ДобавлятьКомандыПечатиКомплектаДокументов() Экспорт
Возврат НЕ ПраваПользователяПовтИсп.ЭтоПартнер();
КонецФункции
#КонецОбласти
#Область Прочее
Функция СтруктураОснования(Объект)
СтруктураОснование = Новый Структура;
СтруктураОснование.Вставить("ОснованиеДляПечати");
СтруктураОснование.Вставить("ОснованиеНомер");
СтруктураОснование.Вставить("ОснованиеДата");
Если ЗначениеЗаполнено(Объект.Основание)
И Документы.ТипВсеСсылки().Типы().Найти(ТипЗнч(Объект.Основание)) <> Неопределено Тогда
СтруктураРеквизитов = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(Объект.Основание, "Номер, Дата");
СтруктураОснование.ОснованиеНомер = ПрефиксацияОбъектовКлиентСервер.НомерНаПечать(СтруктураРеквизитов.Номер);
СтруктураОснование.ОснованиеДата = СтруктураРеквизитов.Дата;
СтруктураОснование.ОснованиеДляПечати = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = '%1 № %2 от %3'"),
Объект.Основание.Метаданные().Синоним,
СтруктураОснование.ОснованиеНомер,
Формат(СтруктураОснование.ОснованиеДата, "ДЛФ=DD"));
ИначеЕсли Объект.ХозяйственнаяОперация = Перечисления.ХозяйственныеОперации.ОтгрузкаПринятыхСПравомПродажиТоваровСХранения Тогда
ДокументыПоступления = Объект.Товары.Выгрузить(, "ДокументПоступления").ВыгрузитьКолонку("ДокументПоступления");
ДокументыПоступления.Добавить(Объект.ДокументОснование);
Запрос = Новый Запрос(
"ВЫБРАТЬ РАЗРЕШЕННЫЕ
| ПриемкаТоваровНаХранение.НомерВходящегоДокумента КАК НомерВходящегоДокумента,
| ПриемкаТоваровНаХранение.ДатаВходящегоДокумента КАК ДатаВходящегоДокумента,
| ПриемкаТоваровНаХранение.Номер КАК Номер,
| ПриемкаТоваровНаХранение.Дата КАК Дата,
| &Синоним КАК Синоним
|ИЗ
| Документ.ПриемкаТоваровНаХранение КАК ПриемкаТоваровНаХранение
|ГДЕ
| ПриемкаТоваровНаХранение.Ссылка В (&ДокументыПоступления)");
Запрос.УстановитьПараметр("ДокументыПоступления", ДокументыПоступления);
Запрос.УстановитьПараметр("Синоним", НСтр("ru='Приемка товаров на хранение'"));
Выборка = Запрос.Выполнить().Выбрать();
ТекстПоПоступлениям = "";
ОдноОснование = Выборка.Количество() = 1;
Пока Выборка.Следующий() Цикл
Если ЗначениеЗаполнено(Выборка.НомерВходящегоДокумента) И ЗначениеЗаполнено(Выборка.ДатаВходящегоДокумента) Тогда
ИнформацияОПоступлении =
СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = '%1 № %2 от %3'"),
Выборка.Синоним,
Выборка.НомерВходящегоДокумента,
Формат(Выборка.ДатаВходящегоДокумента, "ДЛФ=ДД"));
ДатаОснования = Выборка.ДатаВходящегоДокумента;
НомерОснования = Выборка.НомерВходящегоДокумента;
Иначе
ИнформацияОПоступлении = ОбщегоНазначенияУТКлиентСервер.СформироватьЗаголовокДокумента(Выборка, Выборка.Синоним);
ДатаОснования = Выборка.Дата;
НомерОснования = Выборка.Номер;
КонецЕсли;
ТекстПоПоступлениям = ТекстПоПоступлениям + ", " + ИнформацияОПоступлении;
КонецЦикла;
СтруктураОснование.ОснованиеДляПечати = СокрЛП(Сред(ТекстПоПоступлениям, 3));
СтруктураОснование.ОснованиеДата = ?(ОдноОснование, ДатаОснования, "");
СтруктураОснование.ОснованиеНомер = ?(ОдноОснование, ПрефиксацияОбъектовКлиентСервер.НомерНаПечать(НомерОснования), "");
КонецЕсли;
Возврат СтруктураОснование;
КонецФункции
Функция СтруктураОснованияДляПечати(Объект) Экспорт
СтруктураОснования = СтруктураОснования(Объект);
Возврат СтруктураОснования;
КонецФункции
Функция ПолноеИмяОбъекта()
Возврат "Документ.ОтгрузкаТоваровСХранения";
КонецФункции
Функция СформироватьТаблицуОтгрузки()
ТоварыДляОтгрузки = Новый ТаблицаЗначений;
ТоварыДляОтгрузки.Колонки.Добавить("ЗаказКлиента", Новый ОписаниеТипов("ДокументСсылка.ЗаказКлиента"));
ТоварыДляОтгрузки.Колонки.Добавить("Номенклатура", Новый ОписаниеТипов("СправочникСсылка.Номенклатура"));
ТоварыДляОтгрузки.Колонки.Добавить("Характеристика", Новый ОписаниеТипов("СправочникСсылка.ХарактеристикиНоменклатуры"));
ТоварыДляОтгрузки.Колонки.Добавить("Назначение", Новый ОписаниеТипов("СправочникСсылка.Назначения"));
ТоварыДляОтгрузки.Колонки.Добавить("Количество", ОбщегоНазначенияУТ.ОписаниеТипаКоличественногоПоля());
ТоварыДляОтгрузки.Колонки.Добавить("Склад", Новый ОписаниеТипов("СправочникСсылка.Склады"));
ТоварыДляОтгрузки.Колонки.Добавить("НомерСтрокиВДокументе", Новый ОписаниеТипов("Число", Новый КвалификаторыЧисла(10, 0)));
ТоварыДляОтгрузки.Колонки.Добавить("Упаковка", Новый ОписаниеТипов("СправочникСсылка.УпаковкиЕдиницыИзмерения"));
ТоварыДляОтгрузки.Колонки.Добавить("Серия", Новый ОписаниеТипов("СправочникСсылка.СерииНоменклатуры"));
ТоварыДляОтгрузки.Колонки.Добавить("КоличествоВЗаказе", ОбщегоНазначенияУТ.ОписаниеТипаКоличественногоПоля());
ТоварыДляОтгрузки.Колонки.Добавить("Цена", ОбщегоНазначенияУТ.ОписаниеТипаДенежногоПоля());
ТоварыДляОтгрузки.Колонки.Добавить("Сумма", ОбщегоНазначенияУТ.ОписаниеТипаДенежногоПоля());
ТоварыДляОтгрузки.Колонки.Добавить("КоличествоДокумента", ОбщегоНазначенияУТ.ОписаниеТипаКоличественногоПоля());
ТоварыДляОтгрузки.Колонки.Добавить("СуммаДокумента", ОбщегоНазначенияУТ.ОписаниеТипаДенежногоПоля());
ТоварыДляОтгрузки.Колонки.Добавить("Коэффициент", Новый ОписаниеТипов("Число", Новый КвалификаторыЧисла(15, 3)));
ТоварыДляОтгрузки.Колонки.Добавить("КоличествоУпаковок", ОбщегоНазначенияУТ.ОписаниеТипаКоличественногоПоля());
ТоварыДляОтгрузки.Колонки.Добавить("КоличествоВОтчете", ОбщегоНазначенияУТ.ОписаниеТипаКоличественногоПоля());
ТоварыДляОтгрузки.Колонки.Добавить("КоличествоОстаток", ОбщегоНазначенияУТ.ОписаниеТипаКоличественногоПоля());
ТоварыДляОтгрузки.Колонки.Добавить("КоличествоСобирается", ОбщегоНазначенияУТ.ОписаниеТипаКоличественногоПоля());
ТоварыДляОтгрузки.Колонки.Добавить("КоличествоСобрано", ОбщегоНазначенияУТ.ОписаниеТипаКоличественногоПоля());
ТоварыДляОтгрузки.Колонки.Добавить("КоличествоВНакладной", ОбщегоНазначенияУТ.ОписаниеТипаКоличественногоПоля());
ТоварыДляОтгрузки.Колонки.Добавить("КоличествоПодобрано", ОбщегоНазначенияУТ.ОписаниеТипаКоличественногоПоля());
ТоварыДляОтгрузки.Колонки.Добавить("Пометка", Новый ОписаниеТипов("Булево"));
ТоварыДляОтгрузки.Колонки.Добавить("ОрдернаяСхемаПриОтгрузке", Новый ОписаниеТипов("Булево"));
Возврат ТоварыДляОтгрузки;
КонецФункции
Функция ПолучитьТаблицуОстатковПоОтгрузке(ПараметрыДанных) Экспорт
Запрос = Новый Запрос;
Запрос.УстановитьПараметр("ВидДвижения", ВидДвиженияНакопления.Расход);
Запрос.УстановитьПараметр("ПустоеНазначение", Справочники.Назначения.ПустаяСсылка());
Запрос.УстановитьПараметр("Договор", ПараметрыДанных.Договор);
Запрос.УстановитьПараметр("Контрагент", ПараметрыДанных.Контрагент);
Запрос.УстановитьПараметр("Организация", ПараметрыДанных.Организация);
Запрос.УстановитьПараметр("Партнер", ПараметрыДанных.Партнер);
Запрос.УстановитьПараметр("Регистратор", ПараметрыДанных.ДокументОтгрузки);
Запрос.УстановитьПараметр("СкладРеализации", ПараметрыДанных.Склад);
Запрос.УстановитьПараметр("ТипНоменклатуры", Перечисления.ТипыНоменклатуры.Товар);
Если ЗначениеЗаполнено(ПараметрыДанных.ТоварыОтгрузки) Тогда
Запрос.УстановитьПараметр("ТоварыОтгрузки", ПараметрыДанных.ТоварыОтгрузки);
Иначе
ТоварыРеализации = Новый ТаблицаЗначений;
ТоварыРеализации.Колонки.Добавить("ЗаказКлиента", Новый ОписаниеТипов("ДокументСсылка.ЗаказКлиента"));
ТоварыРеализации.Колонки.Добавить("Номенклатура", Новый ОписаниеТипов("СправочникСсылка.Номенклатура"));
ТоварыРеализации.Колонки.Добавить("Характеристика", Новый ОписаниеТипов("СправочникСсылка.ХарактеристикиНоменклатуры"));
ТоварыРеализации.Колонки.Добавить("КодСтроки", Новый ОписаниеТипов("Число", Новый КвалификаторыЧисла(10, 0)));
ТоварыРеализации.Колонки.Добавить("Количество", ОбщегоНазначенияУТ.ОписаниеТипаКоличественногоПоля());
ТоварыРеализации.Колонки.Добавить("Склад", Новый ОписаниеТипов("СправочникСсылка.Склады"));
ТоварыРеализации.Колонки.Добавить("Упаковка", Новый ОписаниеТипов("СправочникСсылка.УпаковкиЕдиницыИзмерения"));
ТоварыРеализации.Колонки.Добавить("Серия", Новый ОписаниеТипов("СправочникСсылка.СерииНоменклатуры"));
ТоварыРеализации.Колонки.Добавить("ВидЦены", Новый ОписаниеТипов("СправочникСсылка.ВидыЦен"));
ТоварыРеализации.Колонки.Добавить("КоличествоВЗаказе", ОбщегоНазначенияУТ.ОписаниеТипаКоличественногоПоля());
ТоварыРеализации.Колонки.Добавить("Цена", ОбщегоНазначенияУТ.ОписаниеТипаДенежногоПоля());
ТоварыРеализации.Колонки.Добавить("Сумма", ОбщегоНазначенияУТ.ОписаниеТипаДенежногоПоля());
ТоварыРеализации.Колонки.Добавить("Назначение", Новый ОписаниеТипов("СправочникСсылка.Назначения"));
ТоварыРеализации.Колонки.Добавить("КлючСвязи", Новый ОписаниеТипов("Число", Новый КвалификаторыЧисла(10, 0)));
Запрос.УстановитьПараметр("ТоварыОтгрузки", ТоварыРеализации);
КонецЕсли;
ТоварыДляОтгрузки = СформироватьТаблицуОтгрузки();
Если ПараметрыДанных.ПоЗаказу Тогда
Запрос.УстановитьПараметр("ОтобратьПоЗаказу", ПараметрыДанных.ЗаказыКлиентов.Количество() > 0);
Запрос.УстановитьПараметр("МассивЗаказов", ПараметрыДанных.ЗаказыКлиентов);
Иначе
Запрос.УстановитьПараметр("ОтобратьПоЗаказу", Ложь);
Запрос.УстановитьПараметр("МассивЗаказов", Новый Массив());
КонецЕсли;
Запрос.УстановитьПараметр("ТекущаяДата", НачалоДня(ТекущаяДатаСеанса()));
Запрос.УстановитьПараметр("ТребуетсяЗалогЗаТару", Ложь);
Запрос.УстановитьПараметр("ИспользоватьРасширенныеВозможностиЗаказаКлиента",
ПолучитьФункциональнуюОпцию("ИспользоватьРасширенныеВозможностиЗаказаКлиента"));
ЗаполнитьТекстЗапросаПоЗаказу(Запрос);
РезультатЗапроса = Запрос.ВыполнитьПакет();
ДанныеПоОстаткам = РезультатЗапроса[6].Выгрузить();
ДанныеПоЗаказуИОтгрузке = РезультатЗапроса[7].Выгрузить();
ДанныеПоОстаткамОрганизации = РезультатЗапроса[14].Выгрузить();
ДанныеПоОтчету = РезультатЗапроса[13].Выгрузить();
ДанныеПоЦенам = РезультатЗапроса[15].Выгрузить();
ДанныеПоОрдерам = РезультатЗапроса[18].Выгрузить();
КэшированныеЗначения = ПакетнаяОбработкаТабличнойЧастиКлиентСервер.ПолучитьСтруктуруКэшируемыеЗначения();
СтруктураДействий = Новый Структура("ПересчитатьКоличествоУпаковок");
Для каждого СтрокаЦена Из ДанныеПоЦенам Цикл
ОтборПоТовару = Новый Структура();
ОтборПоТовару.Вставить("Номенклатура", СтрокаЦена.Номенклатура);
ОтборПоТовару.Вставить("Характеристика", СтрокаЦена.Характеристика);
ОтборПоТовару.Вставить("Назначение", СтрокаЦена.Назначение);
ОтборПоТовару.Вставить("Цена", 0);
СтрокиПоОстаткам = ДанныеПоОстаткамОрганизации.НайтиСтроки(ОтборПоТовару);
Для каждого СтрокаОстаток Из СтрокиПоОстаткам Цикл
Если СтрокаОстаток.КоличествоОстаток > СтрокаЦена.КоличествоОстаток
И СтрокаЦена.КоличествоОстаток > 0 Тогда
НоваяСтрокаОстатков = ДанныеПоОстаткам.Добавить();
ЗаполнитьЗначенияСвойств(НоваяСтрокаОстатков, СтрокаОстаток);
НоваяСтрокаОстатков.КоличествоОстаток = СтрокаОстаток.КоличествоОстаток - СтрокаЦена.КоличествоОстаток;
СтрокаОстаток.Цена = СтрокаЦена.Цена;
СтрокаОстаток.Сумма = СтрокаОстаток.Цена * СтрокаЦена.КоличествоОстаток;
СтрокаЦена.КоличествоОстаток = 0;
Иначе
СтрокаОстаток.Цена = СтрокаЦена.Цена;
СтрокаОстаток.Сумма = СтрокаОстаток.Цена * СтрокаЦена.КоличествоОстаток;
СтрокаЦена.КоличествоОстаток = СтрокаЦена.КоличествоОстаток-СтрокаОстаток.КоличествоОстаток;
КонецЕсли;
КонецЦикла;
КонецЦикла;
ОбрабатываемыеСтроки = Новый Массив;
Для каждого СтрокаПоЗаказуИОтгрузки Из ДанныеПоЗаказуИОтгрузке Цикл
ОтборПоТовару = ПолучитьСтруктуруПоиска();
ОтборПоТовару.Вставить("Номенклатура", СтрокаПоЗаказуИОтгрузки.Номенклатура);
ОтборПоТовару.Вставить("Характеристика", СтрокаПоЗаказуИОтгрузки.Характеристика);
ОтборПоТовару.Вставить("Назначение", СтрокаПоЗаказуИОтгрузки.Назначение);
ОтборПоТовару.Вставить("Серия", СтрокаПоЗаказуИОтгрузки.Серия);
ОтборПоТовару.Вставить("Склад", СтрокаПоЗаказуИОтгрузки.Склад);
ОтборПоТоваруБезСерии = ПолучитьСтруктуруПоиска(Ложь);
ЗаполнитьЗначенияСвойств(ОтборПоТоваруБезСерии, ОтборПоТовару);
СтрокиОстатка = ДанныеПоОстаткам.НайтиСтроки(ОтборПоТовару);
НоваяСтрокаОтгрузки = ТоварыДляОтгрузки.Добавить();
ЗаполнитьЗначенияСвойств(НоваяСтрокаОтгрузки, СтрокаПоЗаказуИОтгрузки, "Номенклатура, Характеристика, Серия, Назначение, ЗаказКлиента, Цена,
|Упаковка, Коэффициент, КоличествоВНакладной, Склад, ОрдернаяСхемаПриОтгрузке, Сумма");
НоваяСтрокаОтгрузки.КоличествоВЗаказе = 0;
Для каждого СтрокаОстатка Из СтрокиОстатка Цикл
Если СтрокаОстатка.КоличествоОстаток = 0 Тогда
Продолжить;
КонецЕсли;
КоличествоОстаток = Мин(СтрокаОстатка.КоличествоОстаток, СтрокаПоЗаказуИОтгрузки.КоличествоВЗаказе);
Если КоличествоОстаток > 0 Тогда
НоваяСтрокаОтгрузки.КоличествоВЗаказе = КоличествоОстаток;
СтрокаОстатка.КоличествоОстаток = СтрокаОстатка.КоличествоОстаток - КоличествоОстаток;
КонецЕсли;
КонецЦикла;
СтрокиСОстаткамиПоОрганизации = ДанныеПоОстаткамОрганизации.НайтиСтроки(ОтборПоТовару);
Если СтрокиСОстаткамиПоОрганизации.Количество() = 0 Тогда
СтрокиСОстаткамиПоОрганизации = ДанныеПоОстаткамОрганизации.НайтиСтроки(ОтборПоТоваруБезСерии);
КонецЕсли;
Для каждого СтрокаОстаткаПоОрганизации Из СтрокиСОстаткамиПоОрганизации Цикл
Если СтрокаОстаткаПоОрганизации.КоличествоОстаток = 0 Тогда
Продолжить;
КонецЕсли;
Если ЗначениеЗаполнено(СтрокаПоЗаказуИОтгрузки.ЗаказКлиента) Тогда
КоличествоОстаток = Мин(СтрокаОстаткаПоОрганизации.КоличествоОстаток, НоваяСтрокаОтгрузки.КоличествоВЗаказе);
Иначе
КоличествоОстаток = СтрокаОстаткаПоОрганизации.КоличествоОстаток;
КонецЕсли;
НоваяСтрокаОтгрузки.КоличествоОстаток = КоличествоОстаток;
НоваяСтрокаОтгрузки.Количество = КоличествоОстаток;
ОбрабатываемыеСтроки.Добавить(НоваяСтрокаОтгрузки);
Если СтрокаОстаткаПоОрганизации.КоличествоОстаток = СтрокаПоЗаказуИОтгрузки.КоличествоВЗаказе Тогда
НоваяСтрокаОтгрузки.Сумма = НоваяСтрокаОтгрузки.Сумма;
Иначе
КоэффициентПересчета = ?(СтрокаПоЗаказуИОтгрузки.Коэффициент > 0, СтрокаПоЗаказуИОтгрузки.Коэффициент, 1);
НоваяСтрокаОтгрузки.Цена = ?(ЗначениеЗаполнено(НоваяСтрокаОтгрузки.Цена), НоваяСтрокаОтгрузки.Цена, СтрокаОстаткаПоОрганизации.Цена * КоэффициентПересчета);
НоваяСтрокаОтгрузки.Сумма = НоваяСтрокаОтгрузки.Цена * (КоличествоОстаток / КоэффициентПересчета);
КонецЕсли;
СтрокаОстаткаПоОрганизации.КоличествоОстаток = СтрокаОстаткаПоОрганизации.КоличествоОстаток - КоличествоОстаток;
КонецЦикла;
Если НоваяСтрокаОтгрузки.КоличествоВНакладной = 0
И НоваяСтрокаОтгрузки.КоличествоВЗаказе = 0 Тогда
ТоварыДляОтгрузки.Удалить(НоваяСтрокаОтгрузки);
Продолжить;
КонецЕсли;
Если НоваяСтрокаОтгрузки.ОрдернаяСхемаПриОтгрузке Тогда
СтрокиОрдеров = ДанныеПоОрдерам.НайтиСтроки(ОтборПоТовару);
Для каждого СтрокаОрдера Из СтрокиОрдеров Цикл
Если СтрокаОрдера.КоличествоСобирается <> 0 Тогда
КоличествоСобирается = Мин((СтрокаОрдера.КоличествоСобирается/СтрокаПоЗаказуИОтгрузки.Коэффициент)*СтрокаПоЗаказуИОтгрузки.Коэффициент, НоваяСтрокаОтгрузки.КоличествоОстаток, НоваяСтрокаОтгрузки.КоличествоВЗаказе);
НоваяСтрокаОтгрузки.КоличествоСобирается = КоличествоСобирается;
СтрокаОрдера.КоличествоСобирается = СтрокаОрдера.КоличествоСобирается - КоличествоСобирается;
КонецЕсли;
Если СтрокаОрдера.Количество <> 0 Тогда
КоличествоСобрано = Мин((СтрокаОрдера.Количество/СтрокаПоЗаказуИОтгрузки.Коэффициент)*СтрокаПоЗаказуИОтгрузки.Коэффициент, НоваяСтрокаОтгрузки.КоличествоОстаток, НоваяСтрокаОтгрузки.КоличествоВЗаказе);
НоваяСтрокаОтгрузки.КоличествоСобрано = КоличествоСобрано;
СтрокаОрдера.Количество = СтрокаОрдера.Количество - КоличествоСобрано;
КонецЕсли;
КонецЦикла;
КонецЕсли;
ОтборПоТовару = Новый Структура();
ОтборПоТовару.Вставить("Номенклатура", СтрокаПоЗаказуИОтгрузки.Номенклатура);
ОтборПоТовару.Вставить("Характеристика", СтрокаПоЗаказуИОтгрузки.Характеристика);
ОтборПоТовару.Вставить("Назначение", СтрокаПоЗаказуИОтгрузки.Назначение);
СтрокиОтчета = ДанныеПоОтчету.НайтиСтроки(ОтборПоТовару);
Для каждого СтрокаОтчета Из СтрокиОтчета Цикл
Если СтрокаОтчета.КоличествоВОтчете <= 0
ИЛИ НоваяСтрокаОтгрузки.КоличествоВОтчете > 0 Тогда
Продолжить;
КонецЕсли;
КоличествоВОтчете = Мин(НоваяСтрокаОтгрузки.КоличествоОстаток, НоваяСтрокаОтгрузки.КоличествоВЗаказе, Цел(СтрокаОтчета.КоличествоВОтчете/СтрокаПоЗаказуИОтгрузки.Коэффициент)*СтрокаПоЗаказуИОтгрузки.Коэффициент);
НоваяСтрокаОтгрузки.КоличествоВОтчете = КоличествоВОтчете;
СтрокаОтчета.КоличествоВОтчете = СтрокаОтчета.КоличествоВОтчете - КоличествоВОтчете;
КонецЦикла;
КонецЦикла;
ПакетнаяОбработкаТабличнойЧастиСервер.ОбработатьСтрокиТЧ(
ОбрабатываемыеСтроки,
СтруктураДействий,
ТоварыДляОтгрузки,
КэшированныеЗначения);
Для каждого СтрокаОстаток Из ДанныеПоОстаткамОрганизации Цикл
Если СтрокаОстаток.КоличествоОстаток = 0 Тогда
Продолжить;
КонецЕсли;
ОтборПоТовару = Новый Структура();
ОтборПоТовару.Вставить("Номенклатура", СтрокаОстаток.Номенклатура);
ОтборПоТовару.Вставить("Характеристика", СтрокаОстаток.Характеристика);
ОтборПоТовару.Вставить("Назначение", СтрокаОстаток.Назначение);
ОтборПоТовару.Вставить("Склад", СтрокаОстаток.Склад);
Если ЗначениеЗаполнено(СтрокаОстаток.Серия) Тогда
ОтборПоТовару.Вставить("Серия", СтрокаОстаток.Серия);
КонецЕсли;
СтрокиТоваров = ТоварыДляОтгрузки.НайтиСтроки(ОтборПоТовару);
ОтборПоТовару = Новый Структура();
ОтборПоТовару.Вставить("Номенклатура", СтрокаОстаток.Номенклатура);
ОтборПоТовару.Вставить("Характеристика", СтрокаОстаток.Характеристика);
ОтборПоТовару.Вставить("Назначение", СтрокаОстаток.Назначение);
СтрокиОтчета = ДанныеПоОтчету.НайтиСтроки(ОтборПоТовару);
КоличествоВОтчете = 0;
СтрокаОтчета = ?(СтрокиОтчета.Количество() = 1, СтрокиОтчета[0], Неопределено);
ОтгрузитьПоОтчету = ?(Не СтрокаОтчета = Неопределено, СтрокаОтчета.КоличествоВОтчете, 0);
Если СтрокиТоваров.Количество() = 0
И НЕ ПараметрыДанных.ПоЗаказу Тогда
СтрокаТовара = ТоварыДляОтгрузки.Добавить();
ЗаполнитьЗначенияСвойств(СтрокаТовара, СтрокаОстаток);
СтрокаТовара.КоличествоВОтчете = ОтгрузитьПоОтчету;
СтрокаТовара.Коэффициент = 1;
Иначе
ТекущийНомерСтроки = 1;
Для каждого СтрокаТовара Из СтрокиТоваров Цикл
Если ТекущийНомерСтроки < СтрокиТоваров.Количество()
И СтрокаТовара.КоличествоВЗаказе < СтрокаОстаток.КоличествоОстаток Тогда
СтрокаТовара.КоличествоОстаток = СтрокаТовара.КоличествоВЗаказе;
СтрокаОстаток.КоличествоОстаток = СтрокаОстаток.КоличествоОстаток - СтрокаТовара.КоличествоВЗаказе;
Иначе
СтрокаТовара.КоличествоОстаток = СтрокаОстаток.КоличествоОстаток;
КонецЕсли;
Если ОтгрузитьПоОтчету > 0 Тогда
Если ТекущийНомерСтроки < СтрокиТоваров.Количество()
И СтрокаТовара.КоличествоОстаток < ОтгрузитьПоОтчету Тогда
СтрокаТовара.КоличествоВОтчете = СтрокаТовара.КоличествоОстаток;
ОтгрузитьПоОтчету = ОтгрузитьПоОтчету - СтрокаТовара.КоличествоОстаток;
Иначе
СтрокаТовара.КоличествоВОтчете = ОтгрузитьПоОтчету;
ОтгрузитьПоОтчету = 0;
КонецЕсли;
КонецЕсли;
ТекущийНомерСтроки = ТекущийНомерСтроки + 1;
КонецЦикла;
КонецЕсли;
КонецЦикла;
Возврат ТоварыДляОтгрузки;
КонецФункции
Процедура ЗаполнитьТекстЗапросаПоЗаказу(Запрос)
Запрос.Текст =
"ВЫБРАТЬ
| ОтгрузкаТоваровСХраненияТовары.КодСтроки КАК КодСтроки,
| ВЫРАЗИТЬ(ОтгрузкаТоваровСХраненияТовары.Номенклатура КАК Справочник.Номенклатура) КАК Номенклатура,
| ОтгрузкаТоваровСХраненияТовары.Характеристика КАК Характеристика,
| ОтгрузкаТоваровСХраненияТовары.Количество КАК Количество,
| ОтгрузкаТоваровСХраненияТовары.Серия КАК Серия,
| ВЫРАЗИТЬ(ОтгрузкаТоваровСХраненияТовары.Упаковка КАК Справочник.УпаковкиЕдиницыИзмерения) КАК Упаковка,
| ВЫРАЗИТЬ(ОтгрузкаТоваровСХраненияТовары.Назначение КАК Справочник.Назначения) КАК Назначение,
| ОтгрузкаТоваровСХраненияТовары.ЗаказКлиента КАК ЗаказКлиента,
| ОтгрузкаТоваровСХраненияТовары.Цена КАК Цена,
| ОтгрузкаТоваровСХраненияТовары.Склад КАК Склад,
| ОтгрузкаТоваровСХраненияТовары.Сумма КАК Сумма
|ПОМЕСТИТЬ ВтТоварыРеализации
|ИЗ
| &ТоварыОтгрузки КАК ОтгрузкаТоваровСХраненияТовары
|;
|
|
|ВЫБРАТЬ
| ВтТоварыРеализации.Номенклатура КАК Номенклатура,
| ВтТоварыРеализации.Характеристика КАК Характеристика,
| СУММА(ВтТоварыРеализации.Количество) КАК Количество,
| ВтТоварыРеализации.Серия КАК Серия,
| ВтТоварыРеализации.Упаковка КАК Упаковка,
| ВтТоварыРеализации.ЗаказКлиента КАК ЗаказКлиента,
| &ТекстЗапросаКоэффициентУпаковки4 КАК Коэффициент,
| ВтТоварыРеализации.Назначение КАК Назначение,
| ВтТоварыРеализации.Цена КАК Цена,
| ВтТоварыРеализации.Склад КАК Склад,
| ВтТоварыРеализации.Сумма КАК Сумма
|ПОМЕСТИТЬ ВтТоварыРеализацииПоЗаказуУпаковка
|ИЗ
| ВтТоварыРеализации КАК ВтТоварыРеализации
|ГДЕ
| ВтТоварыРеализации.Номенклатура.ТипНоменклатуры = &ТипНоменклатуры
|
|СГРУППИРОВАТЬ ПО
| ВтТоварыРеализации.Характеристика,
| ВтТоварыРеализации.Серия,
| ВтТоварыРеализации.Упаковка,
| ВтТоварыРеализации.ЗаказКлиента,
| ВтТоварыРеализации.Назначение,
| ВтТоварыРеализации.Номенклатура,
| ВтТоварыРеализации.Цена,
| ВтТоварыРеализации.Склад,
| ВтТоварыРеализации.Сумма
|;
|
|
|ВЫБРАТЬ
| ЗаказТовары.Ссылка КАК Ссылка,
| ЗаказТовары.Склад КАК Склад,
| ЗаказТовары.Серия КАК Серия,
| СУММА(ЗаказТовары.Количество) КАК КоличествоВЗаказе,
| СРЕДНЕЕ(ЗаказТовары.Цена) КАК Цена,
| СУММА(ЗаказТовары.Сумма) КАК Сумма,
| ЗаказТовары.Номенклатура.ТипНоменклатуры КАК ТипНоменклатуры,
| ЗаказТовары.Характеристика КАК Характеристика,
| ЗаказТовары.Номенклатура КАК Номенклатура,
| &ТекстЗапросаКоэффициентУпаковки2 КАК Коэффициент,
| ЗаказТовары.Упаковка КАК Упаковка
|ПОМЕСТИТЬ ТоварыЗаказаУпаковка
|ИЗ
| Документ.ЗаказКлиента.Товары КАК ЗаказТовары
|ГДЕ
| (&ОтобратьПоЗаказу
| И ЗаказТовары.Ссылка В (&МассивЗаказов)
| ИЛИ НЕ &ОтобратьПоЗаказу
| И (ЗаказТовары.Ссылка.Партнер = &Партнер
| И ЗаказТовары.Ссылка.Контрагент = &Контрагент
| И ЗаказТовары.Ссылка.Договор = &Договор
| И ЗаказТовары.Ссылка.Организация = &Организация
| И ВЫБОР
| КОГДА ВЫРАЗИТЬ(&СкладРеализации КАК Справочник.Склады).ЭтоГруппа
| ТОГДА ЗаказТовары.Ссылка.Склад В ИЕРАРХИИ (&СкладРеализации)
| ИЛИ ЗаказТовары.Склад = ЗНАЧЕНИЕ(Справочник.Склады.ПустаяСсылка)
| ИНАЧЕ ЗаказТовары.Ссылка.Склад В (ЗНАЧЕНИЕ(Справочник.Склады.ПустаяСсылка), &СкладРеализации)
| КОНЕЦ
| И &ИспользоватьРасширенныеВозможностиЗаказаКлиента))
|
|СГРУППИРОВАТЬ ПО
| ЗаказТовары.Ссылка,
| ЗаказТовары.Серия,
| ЗаказТовары.Номенклатура.ТипНоменклатуры,
| ЗаказТовары.Характеристика,
| ЗаказТовары.Номенклатура,
| ЗаказТовары.Упаковка,
| ЗаказТовары.Склад
|;
|
|
|ВЫБРАТЬ
| ЗаказТовары.Ссылка КАК Ссылка,
| ЗаказТовары.Ссылка.Склад КАК Склад,
| ЗаказТовары.Серия КАК Серия,
| СУММА(ЗаказТовары.КоличествоВЗаказе) КАК КоличествоВЗаказе,
| СРЕДНЕЕ(ЗаказТовары.Цена / ЗаказТовары.Коэффициент) КАК Цена,
| СУММА(ЗаказТовары.Сумма) КАК Сумма,
| ЗаказТовары.Номенклатура.ТипНоменклатуры КАК ТипНоменклатуры,
| ЗаказТовары.Характеристика КАК Характеристика,
| ЗаказТовары.Номенклатура КАК Номенклатура
|ПОМЕСТИТЬ ТоварыЗаказа
|ИЗ
| ТоварыЗаказаУпаковка КАК ЗаказТовары
|
|СГРУППИРОВАТЬ ПО
| ЗаказТовары.Ссылка,
| ЗаказТовары.Ссылка.Склад,
| ЗаказТовары.Серия,
| ЗаказТовары.Номенклатура.ТипНоменклатуры,
| ЗаказТовары.Характеристика,
| ЗаказТовары.Номенклатура
|;
|
|
|ВЫБРАТЬ
| ВтТоварыРеализации.Номенклатура КАК Номенклатура,
| ВтТоварыРеализации.Характеристика КАК Характеристика,
| СУММА(ВтТоварыРеализации.Количество) КАК Количество,
| ВтТоварыРеализации.Серия КАК Серия,
| ВтТоварыРеализации.ЗаказКлиента КАК ЗаказКлиента,
| ВтТоварыРеализации.Назначение КАК Назначение
|ПОМЕСТИТЬ ВтТоварыРеализацииПоЗаказу
|ИЗ
| ВтТоварыРеализации КАК ВтТоварыРеализации
|
|СГРУППИРОВАТЬ ПО
| ВтТоварыРеализации.Номенклатура,
| ВтТоварыРеализации.Характеристика,
| ВтТоварыРеализации.Серия,
| ВтТоварыРеализации.ЗаказКлиента,
| ВтТоварыРеализации.Назначение
|;
|
|
|ВЫБРАТЬ
| ТаблицаЗаказы.ЗаказКлиента КАК ЗаказКлиента,
| ТаблицаЗаказы.Номенклатура КАК Номенклатура,
| ТаблицаЗаказы.Характеристика КАК Характеристика,
| ТаблицаЗаказы.Склад КАК Склад,
| ТаблицаЗаказы.Серия КАК Серия,
| СУММА(ТаблицаЗаказы.КОформлению) КАК Количество,
| СУММА(ТаблицаЗаказы.Сумма) КАК Сумма
|ПОМЕСТИТЬ ТаблицаОстатки
|ИЗ
| (ВЫБРАТЬ
| ВЫРАЗИТЬ(РаспоряженияНаОтгрузкуОбороты.Распоряжение КАК Документ.ЗаказКлиента) КАК ЗаказКлиента,
| РаспоряженияНаОтгрузкуОбороты.Номенклатура КАК Номенклатура,
| РаспоряженияНаОтгрузкуОбороты.Характеристика КАК Характеристика,
| РаспоряженияНаОтгрузкуОбороты.Склад КАК Склад,
| РаспоряженияНаОтгрузкуОбороты.Серия КАК Серия,
| (РаспоряженияНаОтгрузкуОбороты.КОформлениюКоличествоОборот
| - РаспоряженияНаОтгрузкуОбороты.ОформленоКоличествоОборот) КАК КОформлению,
| (РаспоряженияНаОтгрузкуОбороты.КОформлениюСуммаОборот
| - РаспоряженияНаОтгрузкуОбороты.ОформленоСуммаОборот) КАК Сумма
| ИЗ
| #РаспоряженияНаОтгрузкуОборотыРазвернутая1 КАК РаспоряженияНаОтгрузкуОбороты
| ГДЕ
| (РаспоряженияНаОтгрузкуОбороты.КОформлениюКоличествоОборот
| - РаспоряженияНаОтгрузкуОбороты.ОформленоКоличествоОборот) <> 0
| ИЛИ (РаспоряженияНаОтгрузкуОбороты.КОформлениюСуммаОборот
| - РаспоряженияНаОтгрузкуОбороты.ОформленоСуммаОборот) <> 0
|
| ОБЪЕДИНИТЬ ВСЕ
|
| ВЫБРАТЬ
| ВЫРАЗИТЬ(РаспоряженияДвижения.Распоряжение КАК Документ.ЗаказКлиента),
| РаспоряженияДвижения.Номенклатура,
| РаспоряженияДвижения.Характеристика,
| РаспоряженияДвижения.Склад,
| РаспоряженияДвижения.Серия,
| -РаспоряженияДвижения.Количество,
| -РаспоряженияДвижения.Сумма
| ИЗ
| РегистрНакопления.РаспоряженияНаОтгрузкуИВозврат КАК РаспоряженияДвижения
| ГДЕ
| РаспоряженияДвижения.Регистратор = &Регистратор
| И РаспоряженияДвижения.Показатель В
| (ЗНАЧЕНИЕ(Перечисление.ПоказателиРаспоряженийНаОтгрузкуИВозврат.КОформлению),
| ЗНАЧЕНИЕ(Перечисление.ПоказателиРаспоряженийНаОтгрузкуИВозврат.Оформлено))
| И РаспоряженияДвижения.Активность
| И РаспоряженияДвижения.Распоряжение Ссылка Документ.ЗаказКлиента
|
| ОБЪЕДИНИТЬ ВСЕ
|
| ВЫБРАТЬ
| ЗаказКлиентаТовары.Ссылка,
| ЗаказКлиентаТовары.Номенклатура,
| ЗаказКлиентаТовары.Характеристика,
| ЗаказКлиентаТовары.Склад,
| ЗаказКлиентаТовары.Серия,
| ЗаказКлиентаТовары.Количество,
| ЗаказКлиентаТовары.Сумма
| ИЗ
| Документ.ЗаказКлиента.Товары КАК ЗаказКлиентаТовары
| ГДЕ
| ВЫБОР
| КОГДА &ОтобратьПоЗаказу
| ТОГДА ЗаказКлиентаТовары.Ссылка В (&МассивЗаказов)
| ИНАЧЕ ЗаказКлиентаТовары.Ссылка.Партнер = &Партнер
| И ЗаказКлиентаТовары.Ссылка.Контрагент = &Контрагент
| И ЗаказКлиентаТовары.Ссылка.Договор = &Договор
| И ЗаказКлиентаТовары.Ссылка.Организация = &Организация
| КОНЕЦ
| И НЕ ЗаказКлиентаТовары.Отменено
| И НЕ ЗаказКлиентаТовары.Ссылка.ПометкаУдаления
| И ВЫБОР
| КОГДА ВЫРАЗИТЬ(&СкладРеализации КАК Справочник.Склады).ЭтоГруппа
| ТОГДА ЗаказКлиентаТовары.Склад В ИЕРАРХИИ (&СкладРеализации)
| ИЛИ ЗаказКлиентаТовары.Склад = ЗНАЧЕНИЕ(Справочник.Склады.ПустаяСсылка)
| ИНАЧЕ ЗаказКлиентаТовары.Склад В (ЗНАЧЕНИЕ(Справочник.Склады.ПустаяСсылка), &СкладРеализации)
| КОНЕЦ
| И НЕ &ИспользоватьРасширенныеВозможностиЗаказаКлиента) КАК ТаблицаЗаказы
|ГДЕ
| ТаблицаЗаказы.Номенклатура.ТипНоменклатуры = &ТипНоменклатуры
|
|СГРУППИРОВАТЬ ПО
| ТаблицаЗаказы.ЗаказКлиента,
| ТаблицаЗаказы.Номенклатура,
| ТаблицаЗаказы.Характеристика,
| ТаблицаЗаказы.Склад,
| ТаблицаЗаказы.Серия
|
|ИМЕЮЩИЕ
| СУММА(ТаблицаЗаказы.КОформлению) > 0
|;
|
|
|ВЫБРАТЬ
| ТаблицаОстатки.ЗаказКлиента КАК ЗаказКлиента,
| ТаблицаОстатки.Номенклатура КАК Номенклатура,
| ТаблицаОстатки.ЗаказКлиента.Назначение КАК Назначение,
| СУММА(ТаблицаОстатки.Количество) КАК КоличествоОстаток,
| ТаблицаОстатки.Характеристика КАК Характеристика,
| ТаблицаОстатки.Склад КАК Склад,
| ТаблицаОстатки.Серия КАК Серия,
| СУММА(ТаблицаОстатки.Сумма) КАК Сумма
|
|ИЗ
| ТаблицаОстатки КАК ТаблицаОстатки
|
|СГРУППИРОВАТЬ ПО
| ТаблицаОстатки.ЗаказКлиента,
| ТаблицаОстатки.Номенклатура,
| ТаблицаОстатки.ЗаказКлиента.Назначение,
| ТаблицаОстатки.Характеристика,
| ТаблицаОстатки.Склад,
| ТаблицаОстатки.Серия
|;
|
|
|ВЫБРАТЬ
| ВложенныйЗапрос.Номенклатура КАК Номенклатура,
| ВложенныйЗапрос.Характеристика КАК Характеристика,
| ВложенныйЗапрос.Серия КАК Серия,
| ВложенныйЗапрос.Упаковка КАК Упаковка,
| ВложенныйЗапрос.ЗаказКлиента КАК ЗаказКлиента,
| ЕСТЬNULL(ВложенныйЗапрос.Коэффициент, 1) КАК Коэффициент,
| ВложенныйЗапрос.Назначение КАК Назначение,
| СУММА(ВложенныйЗапрос.КоличествоВЗаказе) КАК КоличествоВЗаказе,
| МАКСИМУМ(ВложенныйЗапрос.Цена) КАК Цена,
| СУММА(ВложенныйЗапрос.КоличествоВНакладной) КАК КоличествоВНакладной,
| ВложенныйЗапрос.Склад КАК Склад,
| ВЫБОР
| КОГДА ВложенныйЗапрос.Склад.ИспользоватьОрдернуюСхемуПриОтгрузке = ИСТИНА
| И ВложенныйЗапрос.Склад.ДатаНачалаОрдернойСхемыПриОтгрузке <= &ТекущаяДата
| ТОГДА ИСТИНА
| ИНАЧЕ ЛОЖЬ
| КОНЕЦ КАК ОрдернаяСхемаПриОтгрузке,
| СУММА(ВложенныйЗапрос.Сумма) КАК Сумма
|ИЗ
| (ВЫБРАТЬ
| ВтТоварыРеализацииПоЗаказуУпаковка.Номенклатура КАК Номенклатура,
| ВтТоварыРеализацииПоЗаказуУпаковка.Характеристика КАК Характеристика,
| ВтТоварыРеализацииПоЗаказуУпаковка.Количество КАК КоличествоВНакладной,
| ВтТоварыРеализацииПоЗаказуУпаковка.Серия КАК Серия,
| ВЫБОР
| КОГДА ВтТоварыРеализацииПоЗаказуУпаковка.Упаковка = ЗНАЧЕНИЕ(Справочник.УпаковкиЕдиницыИзмерения.ПустаяСсылка)
| ТОГДА ВтТоварыРеализацииПоЗаказуУпаковка.Номенклатура.ЕдиницаИзмерения
| ИНАЧЕ ВтТоварыРеализацииПоЗаказуУпаковка.Упаковка
| КОНЕЦ КАК Упаковка,
| ВтТоварыРеализацииПоЗаказуУпаковка.ЗаказКлиента КАК ЗаказКлиента,
| ВтТоварыРеализацииПоЗаказуУпаковка.Коэффициент КАК Коэффициент,
| ВтТоварыРеализацииПоЗаказуУпаковка.Назначение КАК Назначение,
| 0 КАК КоличествоВЗаказе,
| 0 КАК Цена,
| ВтТоварыРеализацииПоЗаказуУпаковка.Склад КАК Склад,
| 0 КАК Сумма
| ИЗ
| ВтТоварыРеализацииПоЗаказуУпаковка КАК ВтТоварыРеализацииПоЗаказуУпаковка
|
| ОБЪЕДИНИТЬ ВСЕ
|
| ВЫБРАТЬ
| ТоварыЗаказаУпаковка.Номенклатура,
| ТоварыЗаказаУпаковка.Характеристика,
| 0,
| ТоварыЗаказаУпаковка.Серия,
| ВЫБОР
| КОГДА ТоварыЗаказаУпаковка.Упаковка = ЗНАЧЕНИЕ(Справочник.УпаковкиЕдиницыИзмерения.ПустаяСсылка)
| ТОГДА ТоварыЗаказаУпаковка.Номенклатура.ЕдиницаИзмерения
| ИНАЧЕ ТоварыЗаказаУпаковка.Упаковка
| КОНЕЦ,
| ТоварыЗаказаУпаковка.Ссылка,
| ТоварыЗаказаУпаковка.Коэффициент,
| ТоварыЗаказаУпаковка.Ссылка.Назначение,
| ТоварыЗаказаУпаковка.КоличествоВЗаказе,
| ТоварыЗаказаУпаковка.Цена,
| ТоварыЗаказаУпаковка.Склад,
| ТоварыЗаказаУпаковка.Сумма
| ИЗ
| ТоварыЗаказаУпаковка КАК ТоварыЗаказаУпаковка) КАК ВложенныйЗапрос
|
|СГРУППИРОВАТЬ ПО
| ВложенныйЗапрос.Номенклатура,
| ВложенныйЗапрос.Характеристика,
| ВложенныйЗапрос.Серия,
| ВложенныйЗапрос.Упаковка,
| ВложенныйЗапрос.ЗаказКлиента,
| ВложенныйЗапрос.Назначение,
| ЕСТЬNULL(ВложенныйЗапрос.Коэффициент, 1),
| ВложенныйЗапрос.Склад,
| ВЫБОР
| КОГДА ВложенныйЗапрос.Склад.ИспользоватьОрдернуюСхемуПриОтгрузке = ИСТИНА
| И ВложенныйЗапрос.Склад.ДатаНачалаОрдернойСхемыПриОтгрузке <= &ТекущаяДата
| ТОГДА ИСТИНА
| ИНАЧЕ ЛОЖЬ
| КОНЕЦ
|;
|
|
|ВЫБРАТЬ
| КлючиАналитикиУчетаНоменклатуры.Ссылка КАК Ссылка,
| КлючиАналитикиУчетаНоменклатуры.Номенклатура КАК Номенклатура,
| КлючиАналитикиУчетаНоменклатуры.Характеристика КАК Характеристика,
| КлючиАналитикиУчетаНоменклатуры.Серия КАК Серия,
| КлючиАналитикиУчетаНоменклатуры.МестоХранения КАК МестоХранения,
| КлючиАналитикиУчетаНоменклатуры.Назначение КАК Назначение
|ПОМЕСТИТЬ ТаблицаАналитикНоменклатуры
|ИЗ
| Справочник.КлючиАналитикиУчетаНоменклатуры КАК КлючиАналитикиУчетаНоменклатуры
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.Назначения КАК Назначения
| ПО КлючиАналитикиУчетаНоменклатуры.Назначение = Назначения.Ссылка
|ГДЕ
| Назначения.Партнер = &Партнер
| И Назначения.Договор = &Договор
| И (Назначения.Заказ В (&МассивЗаказов)
| ИЛИ Назначения.Заказ = ЗНАЧЕНИЕ(Документ.ЗаказКлиента.ПустаяСсылка)
| ИЛИ НЕ &ОтобратьПоЗаказу)
| И Назначения.Ссылка <> &ПустоеНазначение
| И ВЫБОР
| КОГДА ВЫРАЗИТЬ(&СкладРеализации КАК Справочник.Склады).ЭтоГруппа
| ТОГДА КлючиАналитикиУчетаНоменклатуры.МестоХранения В ИЕРАРХИИ (&СкладРеализации)
| ИЛИ КлючиАналитикиУчетаНоменклатуры.МестоХранения = ЗНАЧЕНИЕ(Справочник.Склады.ПустаяСсылка)
| ИНАЧЕ КлючиАналитикиУчетаНоменклатуры.МестоХранения В (ЗНАЧЕНИЕ(Справочник.Склады.ПустаяСсылка), &СкладРеализации)
| КОНЕЦ
| И КлючиАналитикиУчетаНоменклатуры.Номенклатура.ТипНоменклатуры = &ТипНоменклатуры
|;
|
|
|ВЫБРАТЬ
| ТоварыУслугиКОформлениюОтчетовКомитентуОЗакупках.Номенклатура КАК Номенклатура,
| ТоварыУслугиКОформлениюОтчетовКомитентуОЗакупках.Характеристика КАК Характеристика,
| СУММА(ТоварыУслугиКОформлениюОтчетовКомитентуОЗакупках.Количество) КАК Количество,
| ТоварыУслугиКОформлениюОтчетовКомитентуОЗакупках.Назначение КАК Назначение,
| Назначения.Заказ КАК ЗаказКлиента
|ПОМЕСТИТЬ ДанныеПоОтчету
|ИЗ
| РегистрНакопления.ТоварыУслугиКОформлениюОтчетовКомитентуОЗакупках КАК ТоварыУслугиКОформлениюОтчетовКомитентуОЗакупках
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.Назначения КАК Назначения
| ПО ТоварыУслугиКОформлениюОтчетовКомитентуОЗакупках.Назначение = Назначения.Ссылка
|ГДЕ
| ТоварыУслугиКОформлениюОтчетовКомитентуОЗакупках.Назначение.Договор = &Договор
| И ТоварыУслугиКОформлениюОтчетовКомитентуОЗакупках.Назначение.Партнер = &Партнер
| И (Назначения.Заказ В (&МассивЗаказов)
| ИЛИ НЕ &ОтобратьПоЗаказу
| ИЛИ Назначения.Заказ = ЗНАЧЕНИЕ(Документ.ЗаказКлиента.ПустаяСсылка))
| И Назначения.Ссылка <> &ПустоеНазначение
| И ТоварыУслугиКОформлениюОтчетовКомитентуОЗакупках.Организация = &Организация
| И ТоварыУслугиКОформлениюОтчетовКомитентуОЗакупках.ВидДвижения = &ВидДвижения
| И ТоварыУслугиКОформлениюОтчетовКомитентуОЗакупках.Номенклатура.ТипНоменклатуры = &ТипНоменклатуры
|
|СГРУППИРОВАТЬ ПО
| ТоварыУслугиКОформлениюОтчетовКомитентуОЗакупках.Номенклатура,
| ТоварыУслугиКОформлениюОтчетовКомитентуОЗакупках.Характеристика,
| ТоварыУслугиКОформлениюОтчетовКомитентуОЗакупках.Назначение,
| Назначения.Заказ
|;
|
|
|ВЫБРАТЬ
| ВидыЗапасов.Ссылка КАК ВидЗапасов
|ПОМЕСТИТЬ ТаблицаЗапасов
|ИЗ
| Справочник.ВидыЗапасов КАК ВидыЗапасов
|ГДЕ
| ВидыЗапасов.ВладелецТовара = &Партнер
| И ВидыЗапасов.Организация = &Организация
| И ВидыЗапасов.Договор = &Договор
|;
|
|
|ВЫБРАТЬ
| СУММА(ВЫБОР
| КОГДА ТоварыОрганизаций.ВидДвижения = ЗНАЧЕНИЕ(ВидДвиженияНакопления.Приход)
| ТОГДА ТоварыОрганизаций.Количество
| ИНАЧЕ -ТоварыОрганизаций.Количество
| КОНЕЦ) КАК КоличествоОстаток,
| ТаблицаАналитикНоменклатуры.Номенклатура КАК Номенклатура,
| ТаблицаАналитикНоменклатуры.Характеристика КАК Характеристика,
| ТаблицаАналитикНоменклатуры.Серия КАК Серия,
| ТаблицаАналитикНоменклатуры.МестоХранения КАК Склад,
| ТаблицаАналитикНоменклатуры.Назначение КАК Назначение,
| ТаблицаАналитикНоменклатуры.Назначение.Заказ КАК ЗаказКлиента,
| СУММА(ВЫБОР
| КОГДА ТоварыОрганизаций.ВидДвижения = ЗНАЧЕНИЕ(ВидДвиженияНакопления.Приход)
| ТОГДА 0
| ИНАЧЕ ТоварыОрганизаций.Количество
| КОНЕЦ) КАК КоличествоРасход
|ПОМЕСТИТЬ ТоварыОрганизацииОстаткиРасход
|ИЗ
| РегистрНакопления.ТоварыОрганизаций КАК ТоварыОрганизаций
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ ТаблицаЗапасов КАК ТаблицаЗапасов
| ПО ТоварыОрганизаций.ВидЗапасов = ТаблицаЗапасов.ВидЗапасов
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ ТаблицаАналитикНоменклатуры КАК ТаблицаАналитикНоменклатуры
| ПО ТоварыОрганизаций.АналитикаУчетаНоменклатуры = ТаблицаАналитикНоменклатуры.Ссылка
|ГДЕ
| ТоварыОрганизаций.Регистратор <> &Регистратор
| И ТоварыОрганизаций.Активность
|
|СГРУППИРОВАТЬ ПО
| ТаблицаАналитикНоменклатуры.Номенклатура,
| ТаблицаАналитикНоменклатуры.Характеристика,
| ТаблицаАналитикНоменклатуры.Серия,
| ТаблицаАналитикНоменклатуры.МестоХранения,
| ТаблицаАналитикНоменклатуры.Назначение,
| ТаблицаАналитикНоменклатуры.Назначение.Заказ
|;
|
|
|ВЫБРАТЬ
| ТоварыОрганизацииОстаткиРасход.Номенклатура КАК Номенклатура,
| ТоварыОрганизацииОстаткиРасход.Характеристика КАК Характеристика,
| ТоварыОрганизацииОстаткиРасход.Назначение КАК Назначение,
| ТоварыОрганизацииОстаткиРасход.ЗаказКлиента КАК ЗаказКлиента,
| СУММА(ТоварыОрганизацииОстаткиРасход.КоличествоРасход) КАК КоличествоРасход
|ПОМЕСТИТЬ ТоварыОрганизацииБезСерийОстаткиРасход
|ИЗ
| ТоварыОрганизацииОстаткиРасход КАК ТоварыОрганизацииОстаткиРасход
|
|СГРУППИРОВАТЬ ПО
| ТоварыОрганизацииОстаткиРасход.Номенклатура,
| ТоварыОрганизацииОстаткиРасход.Характеристика,
| ТоварыОрганизацииОстаткиРасход.Назначение,
| ТоварыОрганизацииОстаткиРасход.ЗаказКлиента
|;
|
|
|ВЫБРАТЬ
| ДанныеПоОтчету.Номенклатура КАК Номенклатура,
| ДанныеПоОтчету.Характеристика КАК Характеристика,
| ДанныеПоОтчету.Назначение КАК Назначение,
| ДанныеПоОтчету.ЗаказКлиента КАК ЗаказКлиента,
| ДанныеПоОтчету.Количество - ТоварыОрганизацииБезСерийОстаткиРасход.КоличествоРасход КАК КоличествоВОтчете
|ИЗ
| ДанныеПоОтчету КАК ДанныеПоОтчету
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ ТоварыОрганизацииБезСерийОстаткиРасход КАК ТоварыОрганизацииБезСерийОстаткиРасход
| ПО ДанныеПоОтчету.Номенклатура = ТоварыОрганизацииБезСерийОстаткиРасход.Номенклатура
| И ДанныеПоОтчету.Характеристика = ТоварыОрганизацииБезСерийОстаткиРасход.Характеристика
| И ДанныеПоОтчету.Назначение = ТоварыОрганизацииБезСерийОстаткиРасход.Назначение
| И ДанныеПоОтчету.ЗаказКлиента = ТоварыОрганизацииБезСерийОстаткиРасход.ЗаказКлиента
|;
|
|
|ВЫБРАТЬ
| ТоварыОрганизацииОстаткиРасход.КоличествоОстаток КАК КоличествоОстаток,
| ТоварыОрганизацииОстаткиРасход.Номенклатура КАК Номенклатура,
| ТоварыОрганизацииОстаткиРасход.Характеристика КАК Характеристика,
| ТоварыОрганизацииОстаткиРасход.Серия КАК Серия,
| ТоварыОрганизацииОстаткиРасход.Склад КАК Склад,
| ТоварыОрганизацииОстаткиРасход.ЗаказКлиента КАК ЗаказКлиента,
| ТоварыОрганизацииОстаткиРасход.Назначение КАК Назначение,
| ТоварыОрганизацииОстаткиРасход.КоличествоРасход КАК КоличествоРасход,
| ВЫБОР
| КОГДА ТоварыОрганизацииОстаткиРасход.Склад.ИспользоватьОрдернуюСхемуПриОтгрузке = ИСТИНА
| И ТоварыОрганизацииОстаткиРасход.Склад.ДатаНачалаОрдернойСхемыПриОтгрузке <= &ТекущаяДата
| ТОГДА ИСТИНА
| ИНАЧЕ ЛОЖЬ
| КОНЕЦ КАК ОрдернаяСхемаПриОтгрузке,
| 0 КАК Цена,
| 0 КАК Сумма
|ИЗ
| ТоварыОрганизацииОстаткиРасход КАК ТоварыОрганизацииОстаткиРасход
|;
|
|
|ВЫБРАТЬ
| ЦеныПоЗакупки.Номенклатура КАК Номенклатура,
| ЦеныПоЗакупки.Характеристика КАК Характеристика,
| ЦеныПоЗакупки.Назначение КАК Назначение,
| ЦеныПоЗакупки.КоличествоОстаток КАК КоличествоОстаток,
| ЦеныПоЗакупки.Цена КАК Цена
|ИЗ
| (ВЫБРАТЬ
| ТоварыУслугиКОформлениюОтчетовКомитентуОЗакупкахОбороты.Номенклатура КАК Номенклатура,
| ТоварыУслугиКОформлениюОтчетовКомитентуОЗакупкахОбороты.Характеристика КАК Характеристика,
| ТоварыУслугиКОформлениюОтчетовКомитентуОЗакупкахОбороты.Назначение КАК Назначение,
| СУММА(ТоварыУслугиКОформлениюОтчетовКомитентуОЗакупкахОбороты.КоличествоПриход) КАК КоличествоОстаток,
| ВЫРАЗИТЬ(ТоварыУслугиКОформлениюОтчетовКомитентуОЗакупкахОбороты.СуммаСНДСПриход / ТоварыУслугиКОформлениюОтчетовКомитентуОЗакупкахОбороты.КоличествоПриход КАК ЧИСЛО(31, 2)) КАК Цена
| ИЗ
| РегистрНакопления.ТоварыУслугиКОформлениюОтчетовКомитентуОЗакупках.Обороты(
| ,
| ,
| ,
| (Назначение, Номенклатура, Характеристика) В
| (ВЫБРАТЬ
| ТаблицаАналитикНоменклатуры.Назначение,
| ТаблицаАналитикНоменклатуры.Номенклатура,
| ТаблицаАналитикНоменклатуры.Характеристика
| ИЗ
| ТаблицаАналитикНоменклатуры)) КАК ТоварыУслугиКОформлениюОтчетовКомитентуОЗакупкахОбороты
| ГДЕ
| ТоварыУслугиКОформлениюОтчетовКомитентуОЗакупкахОбороты.Организация = &Организация
|
| СГРУППИРОВАТЬ ПО
| ТоварыУслугиКОформлениюОтчетовКомитентуОЗакупкахОбороты.Номенклатура,
| ТоварыУслугиКОформлениюОтчетовКомитентуОЗакупкахОбороты.Характеристика,
| ТоварыУслугиКОформлениюОтчетовКомитентуОЗакупкахОбороты.Назначение,
| ВЫРАЗИТЬ(ТоварыУслугиКОформлениюОтчетовКомитентуОЗакупкахОбороты.СуммаСНДСПриход / ТоварыУслугиКОформлениюОтчетовКомитентуОЗакупкахОбороты.КоличествоПриход КАК ЧИСЛО(31, 2))
| ) КАК ЦеныПоЗакупки
|;
|
|
|ВЫБРАТЬ
| ЗаказКлиента.Ссылка КАК Ссылка
|ПОМЕСТИТЬ ДокументыОтгрузки
|ИЗ
| Документ.ЗаказКлиента КАК ЗаказКлиента
|ГДЕ
| ВЫБОР
| КОГДА &ОтобратьПоЗаказу
| ТОГДА ЗаказКлиента.Ссылка В (&МассивЗаказов)
| ИЛИ ЗаказКлиента.Ссылка = &Регистратор
| ИНАЧЕ ЗаказКлиента.Партнер = &Партнер
| И ЗаказКлиента.Контрагент = &Контрагент
| И ЗаказКлиента.Договор = &Договор
| И ЗаказКлиента.Организация = &Организация
| КОНЕЦ
| И ВЫБОР
| КОГДА ВЫРАЗИТЬ(&СкладРеализации КАК Справочник.Склады).ЭтоГруппа
| ТОГДА ЗаказКлиента.Склад В ИЕРАРХИИ (&СкладРеализации)
| ИЛИ ЗаказКлиента.Склад = ЗНАЧЕНИЕ(Справочник.Склады.ПустаяСсылка)
| ИНАЧЕ ЗаказКлиента.Склад В (ЗНАЧЕНИЕ(Справочник.Склады.ПустаяСсылка), &СкладРеализации)
| ИЛИ ВЫРАЗИТЬ(ЗаказКлиента.Склад КАК Справочник.Склады).ЭтоГруппа
| КОНЕЦ
|
|ОБЪЕДИНИТЬ ВСЕ
|
|ВЫБРАТЬ
| ЗаявкаНаВозвратТоваровОтКлиента.Ссылка
|ИЗ
| Документ.ЗаявкаНаВозвратТоваровОтКлиента КАК ЗаявкаНаВозвратТоваровОтКлиента
|ГДЕ
| ВЫБОР
| КОГДА &ОтобратьПоЗаказу
| ТОГДА ЗаявкаНаВозвратТоваровОтКлиента.Ссылка В (&МассивЗаказов)
| ИЛИ ЗаявкаНаВозвратТоваровОтКлиента.Ссылка = &Регистратор
| ИНАЧЕ ЗаявкаНаВозвратТоваровОтКлиента.Партнер = &Партнер
| И ЗаявкаНаВозвратТоваровОтКлиента.Контрагент = &Контрагент
| И ЗаявкаНаВозвратТоваровОтКлиента.Договор = &Договор
| И ЗаявкаНаВозвратТоваровОтКлиента.Организация = &Организация
| КОНЕЦ
| И ВЫБОР
| КОГДА ВЫРАЗИТЬ(&СкладРеализации КАК Справочник.Склады).ЭтоГруппа
| ТОГДА ЗаявкаНаВозвратТоваровОтКлиента.Склад В ИЕРАРХИИ (&СкладРеализации)
| ИЛИ ЗаявкаНаВозвратТоваровОтКлиента.Склад = ЗНАЧЕНИЕ(Справочник.Склады.ПустаяСсылка)
| ИНАЧЕ ЗаявкаНаВозвратТоваровОтКлиента.Склад В (ЗНАЧЕНИЕ(Справочник.Склады.ПустаяСсылка), &СкладРеализации)
| КОНЕЦ
|
|ОБЪЕДИНИТЬ ВСЕ
|
|ВЫБРАТЬ
| ОтгрузкаТоваровСХранения.Ссылка
|ИЗ
| Документ.ОтгрузкаТоваровСХранения КАК ОтгрузкаТоваровСХранения
|ГДЕ
| ВЫБОР
| КОГДА &ОтобратьПоЗаказу
| ТОГДА ОтгрузкаТоваровСХранения.Ссылка В (&МассивЗаказов)
| ИЛИ ОтгрузкаТоваровСХранения.Ссылка = &Регистратор
| ИНАЧЕ ОтгрузкаТоваровСХранения.Партнер = &Партнер
| И ОтгрузкаТоваровСХранения.Контрагент = &Контрагент
| И ОтгрузкаТоваровСХранения.Договор = &Договор
| И ОтгрузкаТоваровСХранения.Организация = &Организация
| КОНЕЦ
| И ОтгрузкаТоваровСХранения.Ссылка = &Регистратор
| И ВЫБОР
| КОГДА ВЫРАЗИТЬ(&СкладРеализации КАК Справочник.Склады).ЭтоГруппа
| ТОГДА ОтгрузкаТоваровСХранения.Склад В ИЕРАРХИИ (&СкладРеализации)
| ИЛИ ОтгрузкаТоваровСХранения.Склад = ЗНАЧЕНИЕ(Справочник.Склады.ПустаяСсылка)
| ИНАЧЕ ОтгрузкаТоваровСХранения.Склад В (ЗНАЧЕНИЕ(Справочник.Склады.ПустаяСсылка), &СкладРеализации)
| КОНЕЦ
|
|ИНДЕКСИРОВАТЬ ПО
| Ссылка
|;
|
|
|ВЫБРАТЬ
| ЗаказКлиента.Ссылка КАК Ссылка
|ПОМЕСТИТЬ ЗаказыКлиента
|ИЗ
| Документ.ЗаказКлиента КАК ЗаказКлиента
|ГДЕ
| ВЫБОР
| КОГДА &ОтобратьПоЗаказу
| ТОГДА ЗаказКлиента.Ссылка В (&МассивЗаказов)
| ИНАЧЕ ЗаказКлиента.Партнер = &Партнер
| И ЗаказКлиента.Контрагент = &Контрагент
| И ЗаказКлиента.Договор = &Договор
| И ЗаказКлиента.Организация = &Организация
| КОНЕЦ
| И ВЫБОР
| КОГДА ВЫРАЗИТЬ(&СкладРеализации КАК Справочник.Склады).ЭтоГруппа
| ТОГДА ЗаказКлиента.Склад В ИЕРАРХИИ (&СкладРеализации)
| ИЛИ ЗаказКлиента.Склад = ЗНАЧЕНИЕ(Справочник.Склады.ПустаяСсылка)
| ИНАЧЕ ЗаказКлиента.Склад В (ЗНАЧЕНИЕ(Справочник.Склады.ПустаяСсылка), &СкладРеализации)
| КОНЕЦ
|
|ИНДЕКСИРОВАТЬ ПО
| Ссылка
|;
|
|
|ВЫБРАТЬ
| ТаблицаЗаказы.ЗаказКлиента КАК ЗаказКлиента,
| ТаблицаЗаказы.Номенклатура КАК Номенклатура,
| ТаблицаЗаказы.Характеристика КАК Характеристика,
| ТаблицаЗаказы.Склад КАК Склад,
| ТаблицаЗаказы.ОрдернаяСхемаПриОтгрузке КАК ОрдернаяСхемаПриОтгрузке,
| ТаблицаЗаказы.Серия КАК Серия,
| СУММА(ТаблицаЗаказы.КоличествоСобирается) КАК КоличествоСобирается,
| СУММА(ТаблицаЗаказы.Количество) КАК Количество,
| ТаблицаЗаказы.Назначение КАК Назначение
|ИЗ
| (ВЫБРАТЬ
| ТоварыКОтгрузкеОстатки.ДокументОтгрузки КАК ЗаказКлиента,
| ТоварыКОтгрузкеОстатки.Номенклатура КАК Номенклатура,
| ТоварыКОтгрузкеОстатки.Характеристика КАК Характеристика,
| ТоварыКОтгрузкеОстатки.Склад КАК Склад,
| ВЫБОР
| КОГДА ТоварыКОтгрузкеОстатки.Склад.ИспользоватьОрдернуюСхемуПриОтгрузке = ИСТИНА
| И ТоварыКОтгрузкеОстатки.Склад.ДатаНачалаОрдернойСхемыПриОтгрузке <= &ТекущаяДата
| ТОГДА ИСТИНА
| ИНАЧЕ ЛОЖЬ
| КОНЕЦ КАК ОрдернаяСхемаПриОтгрузке,
| ТоварыКОтгрузкеОстатки.Серия КАК Серия,
| ТоварыКОтгрузкеОстатки.СобираетсяПриход КАК КоличествоСобирается,
| ТоварыКОтгрузкеОстатки.КОтгрузкеРасход + ТоварыКОтгрузкеОстатки.СобраноПриход КАК Количество,
| ТоварыКОтгрузкеОстатки.Назначение КАК Назначение
| ИЗ
| РегистрНакопления.ТоварыКОтгрузке.ОстаткиИОбороты(
| ,
| ,
| ,
| ,
| ДокументОтгрузки В
| (ВЫБРАТЬ
| ДокументыОтгрузки.Ссылка
| ИЗ
| ДокументыОтгрузки)
| И Номенклатура В
| (ВЫБРАТЬ
| ТаблицаАналитикНоменклатуры.Номенклатура
| ИЗ
| ТаблицаАналитикНоменклатуры)) КАК ТоварыКОтгрузкеОстатки
|
| ОБЪЕДИНИТЬ ВСЕ
|
| ВЫБРАТЬ
| ЗаказыОстатки.Распоряжение,
| ЗаказыОстатки.Номенклатура,
| ЗаказыОстатки.Характеристика,
| ЗаказыОстатки.Склад,
| ВЫБОР
| КОГДА ЗаказыОстатки.Склад.ИспользоватьОрдернуюСхемуПриОтгрузке = ИСТИНА
| И ЗаказыОстатки.Склад.ДатаНачалаОрдернойСхемыПриОтгрузке <= &ТекущаяДата
| ТОГДА ИСТИНА
| ИНАЧЕ ЛОЖЬ
| КОНЕЦ,
| ЗаказыОстатки.Серия,
| 0,
| ЗаказыОстатки.ОформленоКоличествоОборот,
| ВЫРАЗИТЬ(ЗаказыОстатки.Распоряжение КАК Документ.ЗаказКлиента).Назначение
| ИЗ
| #РаспоряженияНаОтгрузкуОборотыРазвернутая2 КАК ЗаказыОстатки
| ГДЕ
| ЗаказыОстатки.Регистратор <> &Регистратор) КАК ТаблицаЗаказы
|
|СГРУППИРОВАТЬ ПО
| ТаблицаЗаказы.ЗаказКлиента,
| ТаблицаЗаказы.Номенклатура,
| ТаблицаЗаказы.Характеристика,
| ТаблицаЗаказы.Склад,
| ТаблицаЗаказы.ОрдернаяСхемаПриОтгрузке,
| ТаблицаЗаказы.Серия,
| ТаблицаЗаказы.Назначение
|
|ИМЕЮЩИЕ
| (СУММА(ТаблицаЗаказы.Количество) > 0
| ИЛИ СУММА(ТаблицаЗаказы.КоличествоСобирается) > 0)
|;
|
|
|ВЫБРАТЬ
| ТаблицаАналитикНоменклатуры.Ссылка КАК Ссылка,
| ТаблицаАналитикНоменклатуры.Номенклатура КАК Номенклатура,
| ТаблицаАналитикНоменклатуры.Характеристика КАК Характеристика,
| ТаблицаАналитикНоменклатуры.Серия КАК Серия,
| ТаблицаАналитикНоменклатуры.МестоХранения КАК МестоХранения,
| ТаблицаАналитикНоменклатуры.Назначение КАК Назначение
|ИЗ
| ТаблицаАналитикНоменклатуры КАК ТаблицаАналитикНоменклатуры";
ПараметрыФормированияТаблицы = РегистрыНакопления.РаспоряженияНаОтгрузкуИВозврат.НовыйПараметрыФормированияРазвернутойТаблицы();
ПараметрыФормированияТаблицы.ТекстУсловия =
"ВЫБОР
| КОГДА &ОтобратьПоЗаказу
| ТОГДА Распоряжение В (&МассивЗаказов)
| ИНАЧЕ ВЫРАЗИТЬ(Распоряжение КАК Документ.ЗаказКлиента).Партнер = &Партнер
| И ВЫРАЗИТЬ(Распоряжение КАК Документ.ЗаказКлиента).Контрагент = &Контрагент
| И ВЫРАЗИТЬ(Распоряжение КАК Документ.ЗаказКлиента).Договор = &Договор
| И ВЫРАЗИТЬ(Распоряжение КАК Документ.ЗаказКлиента).Организация = &Организация
| КОНЕЦ
| И ВЫБОР
| КОГДА ВЫРАЗИТЬ(&СкладРеализации КАК Справочник.Склады).ЭтоГруппа
| ТОГДА Склад В ИЕРАРХИИ (&СкладРеализации)
| ИЛИ Склад = ЗНАЧЕНИЕ(Справочник.Склады.ПустаяСсылка)
| ИНАЧЕ Склад В (ЗНАЧЕНИЕ(Справочник.Склады.ПустаяСсылка), &СкладРеализации)
| КОНЕЦ
| И &ИспользоватьРасширенныеВозможностиЗаказаКлиента
| И ТИПЗНАЧЕНИЯ(Распоряжение) = ТИП(Документ.ЗаказКлиента)";
ПараметрыФормированияТаблицы.Группировка = "Распоряжение, Номенклатура, Характеристика, Склад, Серия";
ПараметрыФормированияТаблицы.Показатели = "КОформлению, Оформлено";
ПараметрыФормированияТаблицы.Ресурсы = "Количество, Сумма";
РаспоряженияНаОтгрузкуОборотыРазвернутая1 =
РегистрыНакопления.РаспоряженияНаОтгрузкуИВозврат.ТекстЗапросаРазвернутаяТаблица(
ПараметрыФормированияТаблицы);
Запрос.Текст = СтрЗаменить(Запрос.Текст,
"#РаспоряженияНаОтгрузкуОборотыРазвернутая1",
РаспоряженияНаОтгрузкуОборотыРазвернутая1);
ПараметрыФормированияТаблицы = РегистрыНакопления.РаспоряженияНаОтгрузкуИВозврат.НовыйПараметрыФормированияРазвернутойТаблицы();
ПараметрыФормированияТаблицы.Периодичность = "Регистратор";
ПараметрыФормированияТаблицы.ТекстУсловия =
"ТИПЗНАЧЕНИЯ(Распоряжение) = ТИП(Документ.ЗаказКлиента)
| И Распоряжение В
| (ВЫБРАТЬ
| ЗаказыКлиента.Ссылка
| ИЗ
| ЗаказыКлиента)
| И Номенклатура В
| (ВЫБРАТЬ
| ТаблицаАналитикНоменклатуры.Номенклатура
| ИЗ
| ТаблицаАналитикНоменклатуры)";
ПараметрыФормированияТаблицы.Группировка = "Регистратор, Распоряжение, Номенклатура, Характеристика, Склад, Серия";
ПараметрыФормированияТаблицы.Показатели = "Оформлено";
ПараметрыФормированияТаблицы.Ресурсы = "Количество";
РаспоряженияНаОтгрузкуОборотыРазвернутая2 =
РегистрыНакопления.РаспоряженияНаОтгрузкуИВозврат.ТекстЗапросаРазвернутаяТаблица(
ПараметрыФормированияТаблицы);
Запрос.Текст = СтрЗаменить(Запрос.Текст,
"#РаспоряженияНаОтгрузкуОборотыРазвернутая2",
РаспоряженияНаОтгрузкуОборотыРазвернутая2);
Запрос.Текст = СтрЗаменить(Запрос.Текст, "&ТекстЗапросаКоэффициентУпаковки2",
Справочники.УпаковкиЕдиницыИзмерения.ТекстЗапросаКоэффициентаУпаковки(
"ЗаказТовары.Упаковка",
"ЗаказТовары.Номенклатура"));
Запрос.Текст = СтрЗаменить(Запрос.Текст, "&ТекстЗапросаКоэффициентУпаковки4",
Справочники.УпаковкиЕдиницыИзмерения.ТекстЗапросаКоэффициентаУпаковки(
"ВтТоварыРеализации.Упаковка",
"ВтТоварыРеализации.Номенклатура"));
КонецПроцедуры
Функция ТекстЗапросаТаблицаЗаказы(ИмяВременнойТаблицы = "") Экспорт
ТекстЗапроса =
"ВЫБРАТЬ
| ТаблицаЗаказы.Заказ КАК Заказ
|ПОМЕСТИТЬ ТаблицаЗаказы
|ИЗ
| (ВЫБРАТЬ
| РаспоряженияОбороты.Распоряжение КАК Заказ,
| ВЫБОР
| КОГДА ИСТИНА
| ТОГДА (РаспоряженияОбороты.КОформлениюКоличествоОборот
| - РаспоряженияОбороты.ОформленоКоличествоОборот)
| КОНЕЦ КАК Количество
| ИЗ
| #РаспоряженияНаОтгрузкуОборотыРазвернутая КАК РаспоряженияОбороты
| ГДЕ
| (РаспоряженияОбороты.КОтгрузкеКоличествоОборот
| - РаспоряженияОбороты.ОтгруженоКоличествоОборот) <> 0
| ИЛИ (РаспоряженияОбороты.КОформлениюКоличествоОборот
| - РаспоряженияОбороты.ОформленоКоличествоОборот) <> 0
|
| ОБЪЕДИНИТЬ ВСЕ
|
| ВЫБРАТЬ
| ЗаказКлиента.Ссылка КАК Заказ,
| ЗаказКлиентаТовары.Количество КАК Количество
| ИЗ
| Документ.ЗаказКлиента КАК ЗаказКлиента
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ Документ.ЗаказКлиента.Товары КАК ЗаказКлиентаТовары
| ПО ЗаказКлиента.Ссылка = ЗаказКлиентаТовары.Ссылка
| ГДЕ
| ЗаказКлиента.Организация = &Организация
| И ЗаказКлиента.Валюта = &Валюта
| И ЗаказКлиента.Контрагент = &Контрагент
| И ЗаказКлиента.Договор = &Договор
| И ЗаказКлиента.Партнер = &Партнер
| И
| ЗаказКлиентаТовары.Номенклатура.ВариантОформленияПродажи = ЗНАЧЕНИЕ(Перечисление.ВариантыОформленияПродажи.РеализацияТоваровУслуг)
| И (ЗаказКлиента.Склад = &Склад
| ИЛИ ЗаказКлиента.Склад В ИЕРАРХИИ (&Склад)
| ИЛИ ЗаказКлиента.Склад = ЗНАЧЕНИЕ(Справочник.Склады.ПустаяСсылка))
| И ВЫБОР
| КОГДА НЕ &ИспользоватьНаправленияДеятельности
| ТОГДА ИСТИНА
| ИНАЧЕ ЗаказКлиента.НаправлениеДеятельности = &НаправлениеДеятельности
| КОНЕЦ
| И НЕ ЗаказКлиентаТовары.Отменено
| И НЕ &ИспользоватьРасширенныеВозможностиЗаказаКлиента
| И НЕ ЗаказКлиента.ПометкаУдаления
| ОБЪЕДИНИТЬ ВСЕ
|
| ВЫБРАТЬ
| РаспоряженияДвижения.Распоряжение КАК Заказ,
| ВЫБОР
| КОГДА РаспоряженияДвижения.Показатель = ЗНАЧЕНИЕ(Перечисление.ПоказателиРаспоряженийНаОтгрузкуИВозврат.КОформлению)
| ТОГДА -РаспоряженияДвижения.Количество
| КОГДА РаспоряженияДвижения.Показатель = ЗНАЧЕНИЕ(Перечисление.ПоказателиРаспоряженийНаОтгрузкуИВозврат.Оформлено)
| ТОГДА РаспоряженияДвижения.Количество
| КОНЕЦ КАК Количество
| ИЗ
| РегистрНакопления.РаспоряженияНаОтгрузкуИВозврат КАК РаспоряженияДвижения
| ГДЕ
| РаспоряженияДвижения.Регистратор = &Регистратор
| И РаспоряженияДвижения.Показатель В
| (ЗНАЧЕНИЕ(Перечисление.ПоказателиРаспоряженийНаОтгрузкуИВозврат.КОформлению),
| ЗНАЧЕНИЕ(Перечисление.ПоказателиРаспоряженийНаОтгрузкуИВозврат.Оформлено),
| ЗНАЧЕНИЕ(Перечисление.ПоказателиРаспоряженийНаОтгрузкуИВозврат.КОтгрузке),
| ЗНАЧЕНИЕ(Перечисление.ПоказателиРаспоряженийНаОтгрузкуИВозврат.Отгружено))
| И РаспоряженияДвижения.Активность
| И РаспоряженияДвижения.Распоряжение.Организация = &Организация
| И РаспоряженияДвижения.Распоряжение.Валюта = &Валюта
| И РаспоряженияДвижения.Распоряжение.Контрагент = &Контрагент
| И РаспоряженияДвижения.Распоряжение.Договор = &Договор
| И РаспоряженияДвижения.Распоряжение.Партнер = &Партнер
| И ВЫБОР
| КОГДА ИСТИНА
| ТОГДА РаспоряженияДвижения.Номенклатура.ВариантОформленияПродажи = ЗНАЧЕНИЕ(Перечисление.ВариантыОформленияПродажи.РеализацияТоваровУслуг)
| КОНЕЦ
| И ВЫБОР
| КОГДА НЕ &ИспользоватьНаправленияДеятельности
| ТОГДА ИСТИНА
| ИНАЧЕ РаспоряженияДвижения.Распоряжение.НаправлениеДеятельности = &НаправлениеДеятельности
| КОНЕЦ
| И (РаспоряженияДвижения.Склад = &Склад
| ИЛИ РаспоряженияДвижения.Склад В ИЕРАРХИИ (&Склад)
| ИЛИ РаспоряженияДвижения.Склад = ЗНАЧЕНИЕ(Справочник.Склады.ПустаяСсылка))) КАК ТаблицаЗаказы
|СГРУППИРОВАТЬ ПО
| ТаблицаЗаказы.Заказ
|ИМЕЮЩИЕ
| СУММА(ТаблицаЗаказы.Количество) > 0";
ПараметрыФормированияТаблицы = РегистрыНакопления.РаспоряженияНаОтгрузкуИВозврат.НовыйПараметрыФормированияРазвернутойТаблицы();
ПараметрыФормированияТаблицы.ТекстУсловия =
"Распоряжение.Организация = &Организация
| И Распоряжение.Валюта = &Валюта
| И Распоряжение.Контрагент = &Контрагент
| И Распоряжение.Договор = &Договор
| И Распоряжение.Партнер = &Партнер
| И ВЫБОР
| КОГДА ИСТИНА
| ТОГДА Номенклатура.ВариантОформленияПродажи = ЗНАЧЕНИЕ(Перечисление.ВариантыОформленияПродажи.РеализацияТоваровУслуг)
| КОНЕЦ
| И ВЫБОР
| КОГДА НЕ &ИспользоватьНаправленияДеятельности
| ТОГДА ИСТИНА
| ИНАЧЕ Распоряжение.НаправлениеДеятельности = &НаправлениеДеятельности
| КОНЕЦ
| И (Склад = &Склад
| ИЛИ Склад В ИЕРАРХИИ (&Склад)
| ИЛИ Склад = ЗНАЧЕНИЕ(Справочник.Склады.ПустаяСсылка))";
ПараметрыФормированияТаблицы.Группировка = "Распоряжение";
ПараметрыФормированияТаблицы.Показатели = "КОформлению, Оформлено, КОтгрузке, Отгружено";
ПараметрыФормированияТаблицы.Ресурсы = "Количество";
РаспоряженияНаОтгрузкуОборотыРазвернутая =
РегистрыНакопления.РаспоряженияНаОтгрузкуИВозврат.ТекстЗапросаРазвернутаяТаблица(
ПараметрыФормированияТаблицы);
ТекстЗапроса = СтрЗаменить(ТекстЗапроса,
"#РаспоряженияНаОтгрузкуОборотыРазвернутая",
РаспоряженияНаОтгрузкуОборотыРазвернутая);
Если ЗначениеЗаполнено(ИмяВременнойТаблицы) Тогда
ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "ТаблицаЗаказы", ИмяВременнойТаблицы);
КонецЕсли;
Возврат ТекстЗапроса;
КонецФункции
Функция ДобавитьКомандуСоздатьНаОснованииЗаказаКлиента(КомандыСозданияНаОсновании) Экспорт
Если ПравоДоступа("Добавление", Метаданные.Документы.ОтгрузкаТоваровСХранения) Тогда
КомандаСоздатьНаОсновании = КомандыСозданияНаОсновании.Добавить();
КомандаСоздатьНаОсновании.Менеджер = Метаданные.Документы.ОтгрузкаТоваровСХранения.ПолноеИмя();
КомандаСоздатьНаОсновании.Представление = ОбщегоНазначенияУТ.ПредставлениеОбъекта(Метаданные.Документы.ОтгрузкаТоваровСХранения);
КомандаСоздатьНаОсновании.РежимЗаписи = "Проводить";
КомандаСоздатьНаОсновании.ФункциональныеОпции = "ИспользоватьОбособленноеОбеспечениеЗаказов,ИспользоватьОказаниеАгентскихУслугПриЗакупке";
КомандаСоздатьНаОсновании.Обработчик = "СозданиеНаОснованииУТКлиент.СоздатьОтгрузкуТоваровСХраненияНаОснованииЗаказаКлиента";
Возврат КомандаСоздатьНаОсновании;
КонецЕсли;
Возврат Неопределено;
КонецФункции
Функция СоздатьОтгрузкуТоваровСХраненияНаОснованииЗаказаКлиентаПроверкаХозОперации(ОбъектОснование) Экспорт
РезультатПроверки = Новый Структура("ТекстОшибки", Неопределено);
Если ТипЗнч(ОбъектОснование) = Тип("ДокументСсылка.ЗаказКлиента") Тогда
ХозяйственнаяОперация = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(ОбъектОснование, "ХозяйственнаяОперация");
Если Не ЗначениеЗаполнено(ХозяйственнаяОперация)
Или Не ХозяйственнаяОперация = Перечисления.ХозяйственныеОперации.ПоставкаПодПринципала Тогда
РезультатПроверки.ТекстОшибки = НСтр("ru = 'Команда не может быть выполнена для данной хозяйственной операции'");
КонецЕсли;
КонецЕсли;
Возврат РезультатПроверки;
КонецФункции
Функция ПолучитьСтруктуруПоиска(ПоСериям = Истина)
СтруктураПоиска = Новый Структура;
СтруктураПоиска.Вставить("Номенклатура");
СтруктураПоиска.Вставить("Характеристика");
СтруктураПоиска.Вставить("Назначение");
СтруктураПоиска.Вставить("Склад");
Если ПоСериям Тогда
СтруктураПоиска.Вставить("Серия");
КонецЕсли;
Возврат СтруктураПоиска;
КонецФункции
#КонецОбласти
#Область ШаблоныСообщений
Процедура ПриПодготовкеШаблонаСообщения(Реквизиты, Вложения, ДополнительныеПараметры) Экспорт
КонецПроцедуры
Процедура ПриФормированииСообщения(Сообщение, ПредметСообщения, ДополнительныеПараметры) Экспорт
КонецПроцедуры
Процедура ПриЗаполненииТелефоновПолучателейВСообщении(ПолучателиSMS, ПредметСообщения) Экспорт
КонецПроцедуры
Процедура ПриЗаполненииПочтыПолучателейВСообщении(ПолучателиПисьма, ПредметСообщения) Экспорт
КонецПроцедуры
#КонецОбласти
#КонецОбласти
#КонецЕсли