#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда
#Область ПрограммныйИнтерфейс
Процедура ОбновитьРеквизитыТранспортныхНакладныхПриЗаписиДокументаОснования(ДокументОснованиеОбъект, Отказ) Экспорт
Если Отказ
Или Не ПолучитьФункциональнуюОпцию("ИспользоватьТТН") Тогда
Возврат;
КонецЕсли;
ПолноеИмяОснования = Метаданные.НайтиПоТипу(ТипЗнч(ДокументОснованиеОбъект.Ссылка)).ПолноеИмя();
МодульЛокализации = ОбщегоНазначенияУТ.ПолучитьМодульЛокализации(ПолноеИмяОснования);
Если МодульЛокализации = Неопределено Тогда
МодульЛокализации = ОбщегоНазначения.МенеджерОбъектаПоПолномуИмени(ПолноеИмяОснования);
КонецЕсли;
ПараметрыФормированияТранспортныхНакладных = МодульЛокализации.ПараметрыФормированияТранспортныхНакладных();
ЕстьСпособДоставки = ЕстьСпособДоставки(ТипЗнч(ДокументОснованиеОбъект.Ссылка));
ТекстЗапросаИОписанияСвойств = ТекстЗапросаВыборкиТранспортныхНакладныхПоДокументуОснованию(ПараметрыФормированияТранспортныхНакладных, ПолноеИмяОснования, Истина, ЕстьСпособДоставки);
СпособыДоставкиПоЗаданиюНаПеревозку = ДоставкаТоваровКлиентСервер.СпособыДоставкиДоКлиентаСНашимУчастием(
ПолучитьФункциональнуюОпцию("ИспользоватьЗаданияНаПеревозкуДляУчетаДоставкиПеревозчиками"));
Запрос = Новый Запрос;
Запрос.Текст = ТекстЗапросаИОписанияСвойств.ТекстЗапроса;
Запрос.УстановитьПараметр("ДокументОснование", ДокументОснованиеОбъект.Ссылка);
Запрос.УстановитьПараметр("СпособыДоставкиПоЗаданиюНаПеревозку", СпособыДоставкиПоЗаданиюНаПеревозку);
Запрос.УстановитьПараметр("ИспользоватьРасширенныеВозможностиЗаказа",
ПолучитьФункциональнуюОпцию("ИспользоватьРасширенныеВозможностиЗаказаКлиента"));
УстановитьПривилегированныйРежим(Истина);
РезультатыЗапроса = Запрос.ВыполнитьПакетСПромежуточнымиДанными();
РеквизитыДокументаОснования = РезультатыЗапроса[0].Выбрать();
РеквизитыДокументаОснования.Следующий();
ИменаРеквизитовДокументаОснования = Новый Массив;
ИменаРеквизитовДокументаОснования = СтрРазделить(ТекстЗапросаИОписанияСвойств.СвойстваКоторыеОбязательноДолжныСовпадать, ",");
ОбщегоНазначенияКлиентСервер.ДополнитьМассив(ИменаРеквизитовДокументаОснования, СтрРазделить(ТекстЗапросаИОписанияСвойств.СвойстваКоторыеМогутНеСовпадать, ","));
ТранспортныеНакладныеКИзменениюРезультатЗапроса = РезультатыЗапроса[РезультатыЗапроса.ВГраница()];
БлокировкаДанных = Новый БлокировкаДанных;
ЭлементБлокировки = БлокировкаДанных.Добавить("Документ.ТранспортнаяНакладная");
ЭлементБлокировки.ИсточникДанных = ТранспортныеНакладныеКИзменениюРезультатЗапроса;
ЭлементБлокировки.ИспользоватьИзИсточникаДанных("Ссылка", "Ссылка");
ЭлементБлокировки.Режим = РежимБлокировкиДанных.Исключительный;
БлокировкаДанных.Заблокировать();
ТранспортныеНакладныеКИзменению = ТранспортныеНакладныеКИзменениюРезультатЗапроса.Выбрать();
Пока ТранспортныеНакладныеКИзменению.Следующий() Цикл
ТранспортнаяНакладнаяОбъект = ТранспортныеНакладныеКИзменению.Ссылка.ПолучитьОбъект();
НесколькоДокументовОснований = ТранспортнаяНакладнаяОбъект.ДокументыОснования.Количество() > 1;
ОбъектИзменен = Ложь;
НужноУдалятьДокументОснованиеИзТранспортнойНакладной = Ложь;
Если ТранспортныеНакладныеКИзменению.ПроблемаСоСпособомДоставки Тогда
НужноУдалятьДокументОснованиеИзТранспортнойНакладной = Истина;
ИначеЕсли НесколькоДокументовОснований
И Не ОбщегоНазначенияУТКлиентСервер.СтруктурыРавны(ТранспортнаяНакладнаяОбъект,
РеквизитыДокументаОснования,
ТекстЗапросаИОписанияСвойств.СвойстваКоторыеОбязательноДолжныСовпадать)Тогда
НужноУдалятьДокументОснованиеИзТранспортнойНакладной = Истина;
КонецЕсли;
Если НужноУдалятьДокументОснованиеИзТранспортнойНакладной Тогда
СтрокаДокументаОснования = ТранспортнаяНакладнаяОбъект.ДокументыОснования.Найти(РеквизитыДокументаОснования.Ссылка, "ДокументОснование");
Если СтрокаДокументаОснования <> Неопределено Тогда
ТранспортнаяНакладнаяОбъект.ДокументыОснования.Удалить(СтрокаДокументаОснования);
КонецЕсли;
Если Не НесколькоДокументовОснований Тогда
ТранспортнаяНакладнаяОбъект.ПометкаУдаления = Истина;
КонецЕсли;
ОбъектИзменен = Истина;
ИначеЕсли Не НесколькоДокументовОснований Тогда
Для Каждого ИмяРеквизита Из ИменаРеквизитовДокументаОснования Цикл
Если ЗначениеЗаполнено(РеквизитыДокументаОснования[ИмяРеквизита])
И ТранспортнаяНакладнаяОбъект[ИмяРеквизита] <> РеквизитыДокументаОснования[ИмяРеквизита] Тогда
ТранспортнаяНакладнаяОбъект[ИмяРеквизита] = РеквизитыДокументаОснования[ИмяРеквизита];
ОбъектИзменен = Истина;
КонецЕсли;
КонецЦикла;
КонецЕсли;
Если ОбъектИзменен Тогда
Если ТранспортнаяНакладнаяОбъект.ПометкаУдаления
И ТранспортнаяНакладнаяОбъект.Проведен Тогда
ТранспортнаяНакладнаяОбъект.Записать(РежимЗаписиДокумента.ОтменаПроведения);
Иначе
ТранспортнаяНакладнаяОбъект.Записать();
КонецЕсли;
КонецЕсли;
КонецЦикла;
УстановитьПривилегированныйРежим(Ложь);
КонецПроцедуры
Процедура ОбновитьРеквизитыТранспортныхНакладныхПриЗаписиЗаданияНаПеревозку(ЗаданиеНаПеревозкуОбъект) Экспорт
Если Не ПолучитьФункциональнуюОпцию("ИспользоватьТТН") Тогда
Возврат;
КонецЕсли;
Если ЗаданиеНаПеревозкуОбъект.Распоряжения.Количество() = 0 Тогда
Возврат;
КонецЕсли;
УстановитьПривилегированныйРежим(Истина);
ПоляЗаполняемыеПоЗаданиямНаПеревозку = ПоляЗаполняемыеПоЗаданиямНаПеревозку();
ТекстЗапроса = Документы.ЗаданиеНаПеревозку.ТекстЗапросаПолученияСпискаНакладныхИзЗаданийНаПеревозку(Истина)
+ ОбщегоНазначенияУТ.РазделительЗапросовВПакете() +
"ВЫБРАТЬ РАЗЛИЧНЫЕ
| ТранспортнаяНакладнаяДокументыОснования.Ссылка КАК Ссылка,
| ТранспортнаяНакладнаяДокументыОснования.ДокументОснование КАК ДокументОснование
|ИЗ
| Документ.ТранспортнаяНакладная.ДокументыОснования КАК ТранспортнаяНакладнаяДокументыОснования
| ЛЕВОЕ СОЕДИНЕНИЕ НакладныеПоЗаданиямНаПеревозку КАК НакладныеПоЗаданиямНаПеревозку
| ПО ТранспортнаяНакладнаяДокументыОснования.ДокументОснование = НакладныеПоЗаданиямНаПеревозку.Накладная
|ГДЕ
| ТранспортнаяНакладнаяДокументыОснования.Ссылка.ЗаданиеНаПеревозку = &ЗаданияНаПеревозку
| И НакладныеПоЗаданиямНаПеревозку.Накладная ЕСТЬ NULL
|
|ОБЪЕДИНИТЬ ВСЕ
|
|ВЫБРАТЬ
| ТранспортнаяНакладная.Ссылка,
| НЕОПРЕДЕЛЕНО
|ИЗ
| Документ.ТранспортнаяНакладная КАК ТранспортнаяНакладная
| ЛЕВОЕ СОЕДИНЕНИЕ Документ.ЗаданиеНаПеревозку КАК ЗаписываемоеЗаданиеНаПеревозку
| ПО ЗаписываемоеЗаданиеНаПеревозку.Ссылка = &ЗаданияНаПеревозку
| И (&ТекстСоединенияСЗаданиеНаПеревозку)
|ГДЕ
| ЗаписываемоеЗаданиеНаПеревозку.Ссылка ЕСТЬ NULL
| И ТранспортнаяНакладная.ЗаданиеНаПеревозку = &ЗаданияНаПеревозку
|
|УПОРЯДОЧИТЬ ПО
| Ссылка";
ТекстСоединенияСЗаданиеНаПеревозку = ТекстСоединенияПоРеквизитам("ТранспортнаяНакладная", "ЗаписываемоеЗаданиеНаПеревозку", ПоляЗаполняемыеПоЗаданиямНаПеревозку);
ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ТекстСоединенияСЗаданиеНаПеревозку", ТекстСоединенияСЗаданиеНаПеревозку);
Запрос = Новый Запрос;
Запрос.Текст = ТекстЗапроса;
Запрос.УстановитьПараметр("ЗаданияНаПеревозку", ЗаданиеНаПеревозкуОбъект.Ссылка);
Запрос.УстановитьПараметр("ВсеСтрокиАдресов", Истина);
Запрос.УстановитьПараметр("ВыделенныеСтрокиАдресов", Новый Массив);
РезультатЗапроса = Запрос.Выполнить();
БлокировкаДанных = Новый БлокировкаДанных;
ЭлементБлокировки = БлокировкаДанных.Добавить("Документ.ТранспортнаяНакладная");
ЭлементБлокировки.ИсточникДанных = РезультатЗапроса;
ЭлементБлокировки.ИспользоватьИзИсточникаДанных("Ссылка", "Ссылка");
ЭлементБлокировки.Режим = РежимБлокировкиДанных.Исключительный;
БлокировкаДанных.Заблокировать();
Выборка = РезультатЗапроса.Выбрать();
ТекущаяТранспортнаяНакладная = Неопределено;
ТранспортнаяНакладнаяИзменена = Ложь;
Пока Выборка.Следующий() Цикл
Если ТекущаяТранспортнаяНакладная <> Выборка.Ссылка Тогда
Если ТекущаяТранспортнаяНакладная <> Неопределено
И ТранспортнаяНакладнаяИзменена Тогда
Если ТекущаяТранспортнаяНакладная.ДокументыОснования.Количество() = 0 Тогда
ТекущаяТранспортнаяНакладная.ПометкаУдаления = Истина;
КонецЕсли;
Если ТекущаяТранспортнаяНакладная.ПометкаУдаления
И ТекущаяТранспортнаяНакладная.Проведен Тогда
ТекущаяТранспортнаяНакладная.Записать(РежимЗаписиДокумента.ОтменаПроведения);
Иначе
ТекущаяТранспортнаяНакладная.Записать();
КонецЕсли;
КонецЕсли;
ТекущаяТранспортнаяНакладная = Выборка.Ссылка.ПолучитьОбъект();
ТранспортнаяНакладнаяИзменена = Ложь;
КонецЕсли;
Если ЗначениеЗаполнено(Выборка.ДокументОснование) Тогда
СтрокаДокументаОснования = ТекущаяТранспортнаяНакладная.ДокументыОснования.Найти(Выборка.ДокументОснование, "ДокументОснование");
Если СтрокаДокументаОснования <> Неопределено Тогда
ТекущаяТранспортнаяНакладная.ДокументыОснования.Удалить(СтрокаДокументаОснования);
ТранспортнаяНакладнаяИзменена = Истина;
КонецЕсли;
Иначе
Если Не ОбщегоНазначенияУТКлиентСервер.СтруктурыРавны(ТекущаяТранспортнаяНакладная, ЗаданиеНаПеревозкуОбъект, ПоляЗаполняемыеПоЗаданиямНаПеревозку) Тогда
Для Каждого КлючЗначение Из ПоляЗаполняемыеПоЗаданиямНаПеревозку Цикл
ТекущаяТранспортнаяНакладная[КлючЗначение.Ключ] = ЗаданиеНаПеревозкуОбъект[КлючЗначение.Значение];
КонецЦикла;
ТранспортнаяНакладнаяИзменена = Истина;
КонецЕсли;
КонецЕсли;
КонецЦикла;
Если ТекущаяТранспортнаяНакладная <> Неопределено
И ТранспортнаяНакладнаяИзменена Тогда
Если ТекущаяТранспортнаяНакладная.ДокументыОснования.Количество() = 0 Тогда
ТекущаяТранспортнаяНакладная.ПометкаУдаления = Истина;
КонецЕсли;
Если ТекущаяТранспортнаяНакладная.ПометкаУдаления
И ТекущаяТранспортнаяНакладная.Проведен Тогда
ТекущаяТранспортнаяНакладная.Записать(РежимЗаписиДокумента.ОтменаПроведения);
Иначе
ТекущаяТранспортнаяНакладная.Записать();
КонецЕсли;
КонецЕсли;
КонецПроцедуры
Функция ПараметрыФормированияТранспортныхНакладных() Экспорт
ПараметрыФормированияТранспортныхНакладных = Новый Структура;
Реквизиты = Новый Структура;
Реквизиты.Вставить("Организация", "ОснованиеТранспортнойНакладной.Организация");
Реквизиты.Вставить("Дата", "ОснованиеТранспортнойНакладной.Дата");
Реквизиты.Вставить("Грузополучатель", "ОснованиеТранспортнойНакладной.Грузополучатель");
Реквизиты.Вставить("Грузоотправитель", "ОснованиеТранспортнойНакладной.Грузоотправитель");
Реквизиты.Вставить("ДоверенностьНомер", "ОснованиеТранспортнойНакладной.ДоверенностьНомер");
Реквизиты.Вставить("ДоверенностьДата", "ОснованиеТранспортнойНакладной.ДоверенностьДата");
Реквизиты.Вставить("ДоверенностьВыдана", "ОснованиеТранспортнойНакладной.ДоверенностьВыдана");
Реквизиты.Вставить("ДоверенностьЛицо", "ОснованиеТранспортнойНакладной.ДоверенностьЛицо");
Реквизиты.Вставить("Руководитель", "ОснованиеТранспортнойНакладной.Руководитель");
Реквизиты.Вставить("ГлавныйБухгалтер", "ОснованиеТранспортнойНакладной.ГлавныйБухгалтер");
Реквизиты.Вставить("Отпустил", "ОснованиеТранспортнойНакладной.Отпустил");
Реквизиты.Вставить("ОтпустилДолжность", "ОснованиеТранспортнойНакладной.ОтпустилДолжность");
Реквизиты.Вставить("АдресДоставки", "ОснованиеТранспортнойНакладной.АдресДоставки");
Реквизиты.Вставить("АдресДоставкиЗначение", "ОснованиеТранспортнойНакладной.АдресДоставкиЗначение");
Реквизиты.Вставить("АдресДоставкиЗначенияПолей", "ОснованиеТранспортнойНакладной.АдресДоставкиЗначенияПолей");
Реквизиты.Вставить("ПометкаУдаления", "ОснованиеТранспортнойНакладной.ПометкаУдаления");
Реквизиты.Вставить("Проведен", "ОснованиеТранспортнойНакладной.Проведен");
Реквизиты.Вставить("ПеревозчикПартнер", "ОснованиеТранспортнойНакладной.ПеревозчикПартнер");
Реквизиты.Вставить("Плательщик", "ОснованиеТранспортнойНакладной.Плательщик");
Реквизиты.Вставить("БанковскийСчетПлательщика", "ОснованиеТранспортнойНакладной.БанковскийСчетПлательщика");
Реквизиты.Вставить("ЗаказчикПеревозки", "ОснованиеТранспортнойНакладной.ЗаказчикПеревозки");
Реквизиты.Вставить("БанковскийСчетЗаказчикаПеревозки", "ОснованиеТранспортнойНакладной.БанковскийСчетЗаказчикаПеревозки");
ПараметрыФормированияТранспортныхНакладных.Вставить("Реквизиты", Реквизиты);
ПараметрыФормированияТранспортныхНакладных.Вставить("ЕстьЗаказы", Ложь);
ПараметрыФормированияТранспортныхНакладных.Вставить("ИмяПоляЗаказВТЧТовары", "");
ПараметрыФормированияТранспортныхНакладных.Вставить("ИмяПоляНакладнаяПоЗаказу", "");
ПараметрыФормированияТранспортныхНакладных.Вставить("ИмяТЧТовары", "Товары");
ПараметрыФормированияТранспортныхНакладных.Вставить("ИмяПоляСклад", "Склад");
ПараметрыФормированияТранспортныхНакладных.Вставить("ИспользоватьРасширенныеВозможностиЗаказа", Ложь);
ПараметрыФормированияТранспортныхНакладных.Вставить("ТекстУсловияИспользоватьРасширенныеВозможностиЗаказа", "");
ПараметрыФормированияТранспортныхНакладных.Вставить("ЕстьДополнительнаяПроверкаВозможностиСозданияНакладной", Ложь);
ПараметрыФормированияТранспортныхНакладных.Вставить("ИменаРеквизитовДляДополнительнойПроверки", Новый Массив);
РеквизитыШапкиДляПечати = Новый Структура;
РеквизитыШапкиДляПечати.Вставить("ХозяйственнаяОперация", "ОснованиеТранспортнойНакладной.ХозяйственнаяОперация");
РеквизитыШапкиДляПечати.Вставить("Валюта", "ОснованиеТранспортнойНакладной.Валюта");
РеквизитыШапкиДляПечати.Вставить("ТипКорректировки", "ЗНАЧЕНИЕ(Перечисление.ТипыКорректировки.ПустаяСсылка)");
ПараметрыФормированияТранспортныхНакладных.Вставить("РеквизитыШапкиДляПечати", РеквизитыШапкиДляПечати);
Возврат ПараметрыФормированияТранспортныхНакладных;
КонецФункции
Функция ТекстТТН(Форма) Экспорт
ЧастиФорматированнойСтроки = Новый Массив;
Объект = Форма.Объект;
Если Не ПолучитьФункциональнуюОпцию("ИспользоватьТТН")
Или (Не ЗначениеЗаполнено(Объект.Ссылка)
И Не ПравоДоступа("Добавление", Метаданные.Документы.ТранспортнаяНакладная))
Или Не ПравоДоступа("Чтение", Метаданные.Документы.ТранспортнаяНакладная) Тогда
Возврат Новый ФорматированнаяСтрока(ЧастиФорматированнойСтроки)
КонецЕсли;
МетаданныеДокумента = Метаданные.НайтиПоТипу(ТипЗнч(Объект.Ссылка));
ПолноеИмяОснования = МетаданныеДокумента.ПолноеИмя();
МодульЛокализации = ОбщегоНазначенияУТ.ПолучитьМодульЛокализации(ПолноеИмяОснования);
Если МодульЛокализации = Неопределено Тогда
МодульЛокализации = ОбщегоНазначения.МенеджерОбъектаПоПолномуИмени(ПолноеИмяОснования);
КонецЕсли;
ПараметрыФормированияТранспортныхНакладных = МодульЛокализации.ПараметрыФормированияТранспортныхНакладных();
ЕстьСпособДоставки = ЕстьСпособДоставки(ТипЗнч(Объект.Ссылка));
Если ПараметрыФормированияТранспортныхНакладных.ЕстьЗаказы Тогда
Если Объект[ПараметрыФормированияТранспортныхНакладных.ИмяПоляНакладнаяПоЗаказу] Тогда
УстановитьПривилегированныйРежим(Истина);
Если Объект[ПараметрыФормированияТранспортныхНакладных.ИмяТЧТовары].Количество() > 0 Тогда
ЗаказСсылка = Объект[ПараметрыФормированияТранспортныхНакладных.ИмяТЧТовары][0][ПараметрыФормированияТранспортныхНакладных.ИмяПоляЗаказВТЧТовары];
Иначе
ЗаказСсылка = Объект[ПараметрыФормированияТранспортныхНакладных.ИмяПоляЗаказВТЧТовары];
КонецЕсли;
Если ЗаказСсылка = Неопределено Или ТипЗнч(ЗаказСсылка) = Тип("ДокументСсылка.ПервичныйДокумент") Тогда
СпособДоставки = Неопределено;
Иначе
СпособДоставки = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(ЗаказСсылка,"СпособДоставки");
КонецЕсли;
УстановитьПривилегированныйРежим(Ложь);
ИначеЕсли ЕстьСпособДоставки Тогда
СпособДоставки = Объект.СпособДоставки;
Иначе
СпособДоставки = Перечисления.СпособыДоставки.Самовывоз;
КонецЕсли;
ИначеЕсли ЕстьСпособДоставки Тогда
СпособДоставки = Объект.СпособДоставки;
Иначе
СпособДоставки = Перечисления.СпособыДоставки.Самовывоз;
КонецЕсли;
СпособыДоставкиПоЗаданиюНаПеревозку = ДоставкаТоваровКлиентСервер.СпособыДоставкиДоКлиентаСНашимУчастием(
ПолучитьФункциональнуюОпцию("ИспользоватьЗаданияНаПеревозкуДляУчетаДоставкиПеревозчиками"));
Если СпособыДоставкиПоЗаданиюНаПеревозку.Найти(СпособДоставки) = Неопределено
И ПравоДоступа("Добавление", Метаданные.Документы.ТранспортнаяНакладная) Тогда
Если ПараметрыФормированияТранспортныхНакладных.ЕстьДополнительнаяПроверкаВозможностиСозданияНакладной Тогда
ЗначенияРеквизитов = Новый Структура;
Для Каждого СтрМас Из ПараметрыФормированияТранспортныхНакладных.ИменаРеквизитовДляДополнительнойПроверки Цикл
ЗначенияРеквизитов.Вставить(СтрМас, Объект[СтрМас]);
КонецЦикла;
Если МодульЛокализации.МожноСоздаватьТранспортнуюНакладную(Объект.Ссылка, ЗначенияРеквизитов, Ложь) Тогда
ЧастиФорматированнойСтроки.Добавить(Новый ФорматированнаяСтрока(НСтр("ru = 'Оформить ТТН'"),,,,"ОформитьТТН"));
КонецЕсли;
Иначе
ЧастиФорматированнойСтроки.Добавить(Новый ФорматированнаяСтрока(НСтр("ru = 'Оформить ТТН'"),,,,"ОформитьТТН"));
КонецЕсли;
КонецЕсли;
Если Не ЗначениеЗаполнено(Объект.Ссылка) Тогда
Возврат Новый ФорматированнаяСтрока(ЧастиФорматированнойСтроки);
КонецЕсли;
Запрос = Новый Запрос;
ТекстыЗначениеРеквизита = Новый Массив;
МетаданныеДокументаРеквизиты = МетаданныеДокумента.Реквизиты;
Для Каждого Реквизит Из МетаданныеДокументаРеквизиты Цикл
ТекстыЗначениеРеквизита.Добавить("&" + Реквизит.Имя + " КАК " + Реквизит.Имя);
Запрос.УстановитьПараметр(Реквизит.Имя, Объект[Реквизит.Имя]);
КонецЦикла;
ТекстЗапроса =
"ВЫБРАТЬ
| &Ссылка КАК Ссылка,
| &ПометкаУдаления КАК ПометкаУдаления,
| &Проведен КАК Проведен,
| " + СтрСоединить(ТекстыЗначениеРеквизита, "," + Символы.ПС) + "
|ПОМЕСТИТЬ "+ СтрЗаменить(ПолноеИмяОснования, ".", "")
+ ОбщегоНазначения.РазделительПакетаЗапросов() + "
|ВЫБРАТЬ
| &Ссылка КАК Ссылка,
| &СпособДоставки КАК СпособДоставки
|ПОМЕСТИТЬ СпособДоставкиДокументаОснования"
+ ОбщегоНазначения.РазделительПакетаЗапросов()
+ ТекстЗапросаВыборкиТранспортныхНакладныхПоДокументуОснованию(
ПараметрыФормированияТранспортныхНакладных,
ПолноеИмяОснования,
Ложь,
ЕстьСпособДоставки,
Истина).ТекстЗапроса;
Запрос.Текст = ТекстЗапроса;
Запрос.УстановитьПараметр("Ссылка", Объект.Ссылка);
Запрос.УстановитьПараметр("ПометкаУдаления", Объект.ПометкаУдаления);
Запрос.УстановитьПараметр("Проведен", Объект.Проведен);
Запрос.УстановитьПараметр("ДокументОснование", Объект.Ссылка);
Запрос.УстановитьПараметр("СпособДоставки", СпособДоставки);
Запрос.УстановитьПараметр("СпособыДоставкиПоЗаданиюНаПеревозку", СпособыДоставкиПоЗаданиюНаПеревозку);
Запрос.УстановитьПараметр("ИспользоватьРасширенныеВозможностиЗаказа",
ПолучитьФункциональнуюОпцию("ИспользоватьРасширенныеВозможностиЗаказаКлиента"));
УстановитьПривилегированныйРежим(Истина);
РезультатыЗапроса = Запрос.ВыполнитьПакетСПромежуточнымиДанными();
УстановитьПривилегированныйРежим(Ложь);
ВсеТТНПоОснованию = РезультатыЗапроса[РезультатыЗапроса.ВГраница()-1].Выбрать();
НеКорректныеТТН = РезультатыЗапроса[РезультатыЗапроса.ВГраница()].Выгрузить();
КоличествоКорректныхНакладных = ВсеТТНПоОснованию.Количество();
Для Каждого СтрТабл Из НеКорректныеТТН Цикл
Если СтрТабл.ПроблемаСоСпособомДоставки
Или СтрТабл.ПроблемаРазличийВРеквизитах
И СтрТабл.КоличествоДокументовОснований > 1 Тогда
КоличествоКорректныхНакладных = КоличествоКорректныхНакладных - 1;
КонецЕсли;
КонецЦикла;
СокращенноеНазваниеНакладной = НСтр("ru = 'ТТН'");
Если КоличествоКорректныхНакладных = 1 Тогда
Пока ВсеТТНПоОснованию.Следующий() Цикл
Если НеКорректныеТТН.Найти(ВсеТТНПоОснованию.Ссылка, "Ссылка") = Неопределено Тогда
Прервать;
КонецЕсли;
КонецЦикла;
ШапкаНакладной = Новый Структура("Дата, Номер");
ЗаполнитьЗначенияСвойств(ШапкаНакладной, ВсеТТНПоОснованию);
ПредставлениеТТН = ОбщегоНазначенияУТКлиентСервер.СформироватьЗаголовокДокумента(ШапкаНакладной, СокращенноеНазваниеНакладной);
ЧастиФорматированнойСтроки.Вставить(0, Новый ФорматированнаяСтрока(ПредставлениеТТН,,,,"ОткрытьТТН_" + ПолучитьНавигационнуюСсылку(ВсеТТНПоОснованию.Ссылка)));
ИначеЕсли КоличествоКорректныхНакладных > 1 Тогда
ТекстГиперссылки = СокращенноеНазваниеНакладной + Символы.НПП + "(" + Строка(КоличествоКорректныхНакладных) + ")";
ЧастиФорматированнойСтроки.Вставить(0, Новый ФорматированнаяСтрока(ТекстГиперссылки,,,,"ОткрытьСписокТТН"));
КонецЕсли;
Если ЧастиФорматированнойСтроки.Количество() > 1 Тогда
ЧастиФорматированнойСтроки.Вставить(1, Новый ФорматированнаяСтрока(Символы.НПП));
КонецЕсли;
Возврат Новый ФорматированнаяСтрока(ЧастиФорматированнойСтроки);
КонецФункции
Функция СформироватьГиперссылкуСмТакжеВРаботе(Параметры) Экспорт
Если Не (ПравоДоступа("Изменение", Метаданные.Документы.ТранспортнаяНакладная)
И ПолучитьФункциональнуюОпцию("ИспользоватьТТН")) Тогда
Возврат Неопределено;
КонецЕсли;
ТекстГиперссылки = НСтр("ru = 'ТТН'");
Возврат Новый ФорматированнаяСтрока(ТекстГиперссылки,,,,"Документ.ТранспортнаяНакладная.Форма.ФормаСписка");
КонецФункции
Функция ПроверитьДокументыОснования(ПроверяемыеОбъекты, ВыделенныеСтрокиАдресов = Неопределено, ВыдаватьСообщения = Истина) Экспорт
Результат = Новый Структура;
Результат.Вставить("ОбъектыПоКоторымМожноИНужноСоздатьТранспортныеНакладные", Новый Массив);
Результат.Вставить("ОбъектыПоКоторымСоздаватьТранспортныеНакладныеНельзя", Новый Массив);
Результат.Вставить("ОбъектыПоКоторымНакладныеУжеСозданы", Новый Массив);
Результат.Вставить("ЗаданияНаПеревозкуДляСозданияТранспортныхНакладных", Новый Массив);
Результат.Вставить("ЗаданияНаПеревозкуПоКоторымНакладныеУжеСозданы", Новый Массив);
Если ТипЗнч(ПроверяемыеОбъекты) = Тип("Массив") Тогда
МассивОбъектов = ПроверяемыеОбъекты;
ПроверяемаяНакладная = Неопределено;
ИначеЕсли ТипЗнч(ПроверяемыеОбъекты) = Тип("ДокументОбъект.ТранспортнаяНакладная") Тогда
МассивОбъектов = ПроверяемыеОбъекты.ДокументыОснования.ВыгрузитьКолонку("ДокументОснование");
ПроверяемаяНакладная = ?(ПроверяемыеОбъекты.ЭтоНовый(), Неопределено, ПроверяемыеОбъекты);
Иначе
ТекстИсключения = НСтр("ru = 'Неподдерживаемый тип параметра ПроверяемыеОбъекты'");
ВызватьИсключение ТекстИсключения;
КонецЕсли;
Если Не ЗначениеЗаполнено(МассивОбъектов) Тогда
Возврат Результат;
КонецЕсли;
НакладныеПоЗаданиямНаПеревозку = Неопределено;
ТипыОбъектов = ОбщегоНазначенияУТ.РазложитьМассивСсылокПоТипам(МассивОбъектов);
ТранспортныеНакладные = ТипыОбъектов.Получить(Тип("ДокументСсылка.ТранспортнаяНакладная"));
Если ТранспортныеНакладные <> Неопределено Тогда
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ РАЗЛИЧНЫЕ
| ТранспортнаяНакладнаяДокументыОснования.ДокументОснование КАК ДокументОснование
|ИЗ
| Документ.ТранспортнаяНакладная.ДокументыОснования КАК ТранспортнаяНакладнаяДокументыОснования
|ГДЕ
| ТранспортнаяНакладнаяДокументыОснования.Ссылка В(&ТранспортныеНакладные)";
Запрос.УстановитьПараметр("ТранспортныеНакладные", ТранспортныеНакладные);
ТипыДокументовОснований = ОбщегоНазначенияУТ.РазложитьМассивСсылокПоТипам(Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("ДокументОснование"));
ТипыОбъектов.Удалить(Тип("ДокументСсылка.ТранспортнаяНакладная"));
Для Каждого ТипОснования Из ТипыДокументовОснований Цикл
Если ТипыОбъектов.Получить(ТипОснования.Ключ) <> Неопределено Тогда
ОбщегоНазначенияКлиентСервер.ДополнитьМассив(ТипыОбъектов.Получить(ТипОснования.Ключ), ТипОснования.Значение);
Иначе
ТипыОбъектов.Вставить(ТипОснования.Ключ, ТипОснования.Значение);
КонецЕсли;
КонецЦикла;
КонецЕсли;
ЗаданияНаПеревозку = ТипыОбъектов.Получить(Тип("ДокументСсылка.ЗаданиеНаПеревозку"));
Если ЗаданияНаПеревозку <> Неопределено Тогда
ТекстЗапроса = Документы.ЗаданиеНаПеревозку.ТекстЗапросаПолученияСпискаНакладныхИзЗаданийНаПеревозку(Истина)
+ ОбщегоНазначения.РазделительПакетаЗапросов() +
"ВЫБРАТЬ
| ЗаданияНаПеревозку.Ссылка КАК Ссылка,
| ВЫБОР
| КОГДА Накладные.Накладная ЕСТЬ NULL
| ТОГДА ЛОЖЬ
| ИНАЧЕ ИСТИНА
| КОНЕЦ КАК ЕстьНакладные,
| СУММА(ВЫБОР
| КОГДА ТранспортнаяНакладнаяДокументыОснованияОснования.ДокументОснование ЕСТЬ NULL
| ТОГДА 1
| ИНАЧЕ 0
| КОНЕЦ) КАК КоличествоНеоформленныхТранспортныхНакладных,
| ЗаданияНаПеревозку.Проведен КАК Проведен,
| ЗаданияНаПеревозку.ПометкаУдаления КАК ПометкаУдаления
|ИЗ
| Документ.ЗаданиеНаПеревозку КАК ЗаданияНаПеревозку
| ЛЕВОЕ СОЕДИНЕНИЕ НакладныеПоЗаданиямНаПеревозку КАК Накладные
| ЛЕВОЕ СОЕДИНЕНИЕ Документ.ТранспортнаяНакладная.ДокументыОснования КАК ТранспортнаяНакладнаяДокументыОснованияОснования
| ПО Накладные.ЗаданиеНаПеревозку = ТранспортнаяНакладнаяДокументыОснованияОснования.Ссылка.ЗаданиеНаПеревозку
| И Накладные.АдресДоставки = ТранспортнаяНакладнаяДокументыОснованияОснования.Ссылка.АдресДоставки
| И (ТранспортнаяНакладнаяДокументыОснованияОснования.ДокументОснование = Накладные.Накладная)
| И (ТранспортнаяНакладнаяДокументыОснованияОснования.Ссылка.Проведен)
| ПО ЗаданияНаПеревозку.Ссылка = Накладные.ЗаданиеНаПеревозку
|ГДЕ
| ЗаданияНаПеревозку.Ссылка В(&ЗаданияНаПеревозку)
|
|СГРУППИРОВАТЬ ПО
| ЗаданияНаПеревозку.Ссылка,
| ЗаданияНаПеревозку.Проведен,
| ЗаданияНаПеревозку.ПометкаУдаления,
| ВЫБОР
| КОГДА Накладные.Накладная ЕСТЬ NULL
| ТОГДА ЛОЖЬ
| ИНАЧЕ ИСТИНА
| КОНЕЦ";
Запрос = Новый Запрос;
Запрос.Текст = ТекстЗапроса;
Запрос.УстановитьПараметр("ЗаданияНаПеревозку", ЗаданияНаПеревозку);
Запрос.УстановитьПараметр("ВсеСтрокиАдресов", ВыделенныеСтрокиАдресов = Неопределено);
Если ВыделенныеСтрокиАдресов = Неопределено Тогда
Запрос.УстановитьПараметр("ВыделенныеСтрокиАдресов", Новый Массив);
Иначе
Запрос.УстановитьПараметр("ВыделенныеСтрокиАдресов", ВыделенныеСтрокиАдресов);
КонецЕсли;
УстановитьПривилегированныйРежим(Истина);
РезультатыЗапроса = Запрос.ВыполнитьПакетСПромежуточнымиДанными();
УстановитьПривилегированныйРежим(Ложь);
ШаблонОшибкиНеПроведен = НСтр("ru='Документ ""%Документ%"" не проведен. Невозможно оформить транспортные накладные.'");
ШаблонОшибкиПомеченНаУдаление = НСтр("ru='Документ ""%Документ%"" помечен на удаление. Невозможно оформить транспортные накладные.'");
Если ЗначениеЗаполнено(ВыделенныеСтрокиАдресов) Тогда
ШаблонОшибкиНетНакладных = НСтр("ru = 'По распоряжениям, относящимся к выделенным адресам, из документа ""%Документ%"" не оформленно ни одной накладной. Оформление транспортных накладных в таком случае невозможно.'");
Иначе
ШаблонОшибкиНетНакладных = НСтр("ru = 'По распоряжениям из документа ""%Документ%"" не оформленно ни одной накладной. Оформление транспортных накладных в таком случае невозможно.'");
КонецЕсли;
Выборка = РезультатыЗапроса[РезультатыЗапроса.ВГраница()].Выбрать();
Пока Выборка.Следующий() Цикл
Если Выборка.ПометкаУдаления Тогда
Если ВыдаватьСообщения Тогда
ТекстСообщения = СтрЗаменить(ШаблонОшибкиПомеченНаУдаление, "%Документ%", Выборка.Ссылка);
ОбщегоНазначения.СообщитьПользователю(ТекстСообщения, Выборка.Ссылка);
КонецЕсли;
Продолжить;
КонецЕсли;
Если Не Выборка.Проведен Тогда
Если ВыдаватьСообщения Тогда
ТекстСообщения = СтрЗаменить(ШаблонОшибкиНеПроведен, "%Документ%", Выборка.Ссылка);
ОбщегоНазначения.СообщитьПользователю(ТекстСообщения, Выборка.Ссылка);
КонецЕсли;
Продолжить;
КонецЕсли;
Если Не Выборка.ЕстьНакладные Тогда
Если ВыдаватьСообщения Тогда
ТекстСообщения = СтрЗаменить(ШаблонОшибкиНетНакладных, "%Документ%", Выборка.Ссылка);
ОбщегоНазначения.СообщитьПользователю(ТекстСообщения, Выборка.Ссылка);
КонецЕсли;
Продолжить;
КонецЕсли;
Если Выборка.КоличествоНеоформленныхТранспортныхНакладных = 0 Тогда
Результат.ЗаданияНаПеревозкуПоКоторымНакладныеУжеСозданы.Добавить(Выборка.Ссылка);
Продолжить;
КонецЕсли;
Результат.ЗаданияНаПеревозкуДляСозданияТранспортныхНакладных.Добавить(Выборка.Ссылка);
КонецЦикла;
НакладныеПоЗаданиямНаПеревозку = РезультатыЗапроса[РезультатыЗапроса.ВГраница() - 2].Выгрузить();
ТипыДокументовОснований = ОбщегоНазначенияУТ.РазложитьМассивСсылокПоТипам(НакладныеПоЗаданиямНаПеревозку.ВыгрузитьКолонку("Накладная"));
Для Каждого ТипОснования Из ТипыДокументовОснований Цикл
Если ТипыОбъектов.Получить(ТипОснования.Ключ) <> Неопределено Тогда
ОбщегоНазначенияКлиентСервер.ДополнитьМассив(ТипыОбъектов.Получить(ТипОснования.Ключ), ТипОснования.Значение);
Иначе
ТипыОбъектов.Вставить(ТипОснования.Ключ, ТипОснования.Значение);
КонецЕсли;
КонецЦикла;
ТипыОбъектов.Удалить(Тип("ДокументСсылка.ЗаданиеНаПеревозку"));
КонецЕсли;
ПроверкаСоставаТранспортнойНакладной = ПроверяемаяНакладная <> Неопределено;
Если ПроверкаСоставаТранспортнойНакладной Тогда
ШаблонСообщенияНакладнаяСпособДоставки = НСтр("ru = 'Документ ""%Документ%"" со способом доставки ""%СпособДоставки%"" может быть добавлен только в транспортную накладную по заданию на перевозку.'");
ШаблонСообщенияЗаказСпособДоставки = НСтр("ru = 'В заказе, по которому создан документ ""%Документ%"" указан способ доставки ""%СпособДоставки%"". Документ может быть добавлен только в транспортную накладную по заданию на перевозку.'");
Иначе
ШаблонСообщенияНакладнаяСпособДоставки = НСтр("ru = 'По документу ""%Документ%"" не сформированы транспортные накладные, при этом указан способ доставки ""%СпособДоставки%"". Транспортные накладные нужно сформировать из задания на перевозку.'");
ШаблонСообщенияЗаказСпособДоставки = НСтр("ru = 'По документу ""%Документ%"" не сформированы транспортные накладные, при этом в заказе, по которому создан этот документ указан способ доставки ""%СпособДоставки%"". Транспортные накладные нужно сформировать из задания на перевозку.'");
КонецЕсли;
ШаблонСообщенияНетТоваров = НСтр("ru = 'В документе ""%Документ%"" нет номенклатуры с типом ""Товар"" или ""Многооборотная тара"". Создание и печать транспортных накладных по этому документу не требуется.'");
ШаблонСообщенияОснованиеНеПроведен = НСтр("ru = 'Документ ""%Документ%"" не проведен. Создание и печать транспортных накладных по этому документу не возможна.'");
МассивОбъектов.Очистить();
Для Каждого КлючЗначение Из ТипыОбъектов Цикл
ТипОбъекта = КлючЗначение.Ключ;
МетаданныеОбъекта = Метаданные.НайтиПоТипу(ТипОбъекта);
Если МетаданныеОбъекта = Неопределено Тогда
Продолжить;
КонецЕсли;
СсылкиНаДокументы = КлючЗначение.Значение;
ОбщегоНазначенияКлиентСервер.ДополнитьМассив(МассивОбъектов, СсылкиНаДокументы, Истина);
ПолноеИмяОснования = МетаданныеОбъекта.ПолноеИмя();
МодульЛокализации = ОбщегоНазначенияУТ.ПолучитьМодульЛокализации(ПолноеИмяОснования);
Если МодульЛокализации = Неопределено Тогда
МодульЛокализации = ОбщегоНазначения.МенеджерОбъектаПоПолномуИмени(ПолноеИмяОснования);
КонецЕсли;
ПараметрыФормированияТранспортныхНакладных = МодульЛокализации.ПараметрыФормированияТранспортныхНакладных();
Если ПараметрыФормированияТранспортныхНакладных.ЕстьДополнительнаяПроверкаВозможностиСозданияНакладной Тогда
ТекстВыборкиРеквизитов = ТекстВыборкиРеквизитов("ДанныеДокументовОснований", ПараметрыФормированияТранспортныхНакладных.ИменаРеквизитовДляДополнительнойПроверки, Истина);
Иначе
ТекстВыборкиРеквизитов = "";
КонецЕсли;
ТекстЗапроса =
" ВЫБРАТЬ
| ДанныеДокументовОснований.Ссылка КАК Ссылка,
| ДанныеДокументовОснований.Проведен КАК Проведен,
| ЛОЖЬ КАК ПоЗаказу,
| "+ ?(ПустаяСтрока(ТекстВыборкиРеквизитов), "", ТекстВыборкиРеквизитов + ",") + "
| &ТекстПолученияСпособаДоставки В (&СпособыДоставкиПоЗаданиюНаПеревозку) КАК ПоЗаданиюНаПеревозку,
| &ТекстПолученияСпособаДоставки КАК СпособДоставки
| ПОМЕСТИТЬ ДанныеДокументовОснований
| ИЗ
| " + ПолноеИмяОснования + " КАК ДанныеДокументовОснований
| ГДЕ
| ДанныеДокументовОснований.Ссылка В(&МассивОбъектов)";
Если ЕстьСпособДоставки(ТипОбъекта) Тогда
ТекстПолученияСпособаДоставки = "ДанныеДокументовОснований.СпособДоставки";
Иначе
ТекстПолученияСпособаДоставки = "ЗНАЧЕНИЕ(Перечисление.СпособыДоставки.Самовывоз)";
КонецЕсли;
ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ТекстПолученияСпособаДоставки", ТекстПолученияСпособаДоставки);
Если ПараметрыФормированияТранспортныхНакладных.ЕстьЗаказы Тогда
ТекстЗапроса = ТекстЗапроса + "
| И НЕ ДанныеДокументовОснований." + ПараметрыФормированияТранспортныхНакладных.ИмяПоляНакладнаяПоЗаказу;
КонецЕсли;
Если ПараметрыФормированияТранспортныхНакладных.ЕстьЗаказы Тогда
ТекстЗапроса = ТекстЗапроса + ОбщегоНазначенияУТ.РазделительЗапросовВОбъединении() +
" ВЫБРАТЬ РАЗЛИЧНЫЕ
| ДокументТовары.Ссылка КАК Ссылка,
| ДанныеДокументовОснований.Проведен КАК Проведен,
| " + ПараметрыФормированияТранспортныхНакладных.ИмяПоляНакладнаяПоЗаказу + " КАК ПоЗаказу,
| "+ ?(ПустаяСтрока(ТекстВыборкиРеквизитов), "", ТекстВыборкиРеквизитов + ",") + "
| ДокументТовары." + ПараметрыФормированияТранспортныхНакладных.ИмяПоляЗаказВТЧТовары + ".СпособДоставки В (&СпособыДоставкиПоЗаданиюНаПеревозку) КАК ПоЗаданиюНаПеревозку,
| ДокументТовары." + ПараметрыФормированияТранспортныхНакладных.ИмяПоляЗаказВТЧТовары + ".СпособДоставки КАК СпособДоставки
| ИЗ
| " + ПолноеИмяОснования + " КАК ДанныеДокументовОснований
| ЛЕВОЕ СОЕДИНЕНИЕ " + ПолноеИмяОснования + "." + ПараметрыФормированияТранспортныхНакладных.ИмяТЧТовары + " КАК ДокументТовары
| ПО ДанныеДокументовОснований.Ссылка = ДокументТовары.Ссылка
| ГДЕ
| ДанныеДокументовОснований.Ссылка В(&МассивОбъектов)
| И ДанныеДокументовОснований." + ПараметрыФормированияТранспортныхНакладных.ИмяПоляНакладнаяПоЗаказу;
КонецЕсли;
ТекстЗапроса = ТекстЗапроса + ОбщегоНазначения.РазделительПакетаЗапросов() +
" ВЫБРАТЬ РАЗЛИЧНЫЕ
| ДокументТовары.Ссылка КАК Ссылка
| ПОМЕСТИТЬ ДокументыОснованияСТоварами
| ИЗ
| " + ПолноеИмяОснования + "." + ПараметрыФормированияТранспортныхНакладных.ИмяТЧТовары + " КАК ДокументТовары
| ГДЕ
| ДокументТовары.Ссылка В(&МассивОбъектов)
| И ДокументТовары.Номенклатура.ТипНоменклатуры В(ЗНАЧЕНИЕ(Перечисление.ТипыНоменклатуры.Товар), ЗНАЧЕНИЕ(Перечисление.ТипыНоменклатуры.МногооборотнаяТара))";
ТекстЗапроса = ТекстЗапроса + ОбщегоНазначения.РазделительПакетаЗапросов() +
"ВЫБРАТЬ РАЗЛИЧНЫЕ";
Если Не ПроверкаСоставаТранспортнойНакладной Тогда
ТекстЗапроса = ТекстЗапроса + "
| НЕ ТранспортнаяНакладнаяДокументыОснования.ДокументОснование ЕСТЬ NULL КАК ЕстьТранспортнаяНакладная,";
Иначе
ТекстЗапроса = ТекстЗапроса + "
| ИСТИНА КАК ЕстьТранспортнаяНакладная,";
КонецЕсли;
ТекстЗапроса = ТекстЗапроса + "
| ДанныеДокументовОснований.Ссылка КАК Ссылка,
| ДанныеДокументовОснований.ПоЗаказу КАК ПоЗаказу,
| ДанныеДокументовОснований.Проведен КАК Проведен,
| "+ ?(ПустаяСтрока(ТекстВыборкиРеквизитов), "", ТекстВыборкиРеквизитов + ",") + "
| ДанныеДокументовОснований.ПоЗаданиюНаПеревозку КАК ПоЗаданиюНаПеревозку,
| ДанныеДокументовОснований.СпособДоставки КАК СпособДоставки,
| ДокументыОснованияСТоварами.Ссылка ЕСТЬ NULL КАК НетТоваров
|ИЗ
| ДанныеДокументовОснований КАК ДанныеДокументовОснований
| ЛЕВОЕ СОЕДИНЕНИЕ ДокументыОснованияСТоварами КАК ДокументыОснованияСТоварами
| ПО ДанныеДокументовОснований.Ссылка = ДокументыОснованияСТоварами.Ссылка";
Если Не ПроверкаСоставаТранспортнойНакладной Тогда
ТекстЗапроса = ТекстЗапроса + "
| ЛЕВОЕ СОЕДИНЕНИЕ Документ.ТранспортнаяНакладная.ДокументыОснования КАК ТранспортнаяНакладнаяДокументыОснования
| ПО ДанныеДокументовОснований.Ссылка = ТранспортнаяНакладнаяДокументыОснования.ДокументОснование
| И (ТранспортнаяНакладнаяДокументыОснования.Ссылка.Проведен)
|ГДЕ
| ТранспортнаяНакладнаяДокументыОснования.ДокументОснование ЕСТЬ NULL
| ИЛИ НЕ ДанныеДокументовОснований.Проведен
| ИЛИ ДокументыОснованияСТоварами.Ссылка ЕСТЬ NULL";
КонецЕсли;
Запрос = Новый Запрос;
Запрос.Текст = ТекстЗапроса;
Запрос.УстановитьПараметр("МассивОбъектов", СсылкиНаДокументы);
Запрос.УстановитьПараметр("СпособыДоставкиПоЗаданиюНаПеревозку",
ДоставкаТоваровКлиентСервер.СпособыДоставкиДоКлиентаСНашимУчастием(
ПолучитьФункциональнуюОпцию("ИспользоватьЗаданияНаПеревозкуДляУчетаДоставкиПеревозчиками")));
УстановитьПривилегированныйРежим(Истина);
Выборка = Запрос.Выполнить().Выбрать();
УстановитьПривилегированныйРежим(Ложь);
Пока Выборка.Следующий() Цикл
МожноСоздатьТранспортнуюНакладную = Истина;
Если ПроверкаСоставаТранспортнойНакладной Тогда
НайденнаяСтрока = ПроверяемаяНакладная.ДокументыОснования.Найти(Выборка.Ссылка,"ДокументОснование");
ПутьКПолю = ОбщегоНазначенияКлиентСервер.ПутьКТабличнойЧасти("ДокументыОснования",
НайденнаяСтрока.НомерСтроки,
"ДокументОснование");
Иначе
ПутьКПолю = "";
КонецЕсли;
Если Выборка.ПоЗаданиюНаПеревозку
И (Не ПроверкаСоставаТранспортнойНакладной
И Не Выборка.ЕстьТранспортнаяНакладная
И НакладныеПоЗаданиямНаПеревозку = Неопределено
Или ПроверкаСоставаТранспортнойНакладной
И Не ЗначениеЗаполнено(ПроверяемаяНакладная.ЗаданиеНаПеревозку)) Тогда
Если ВыдаватьСообщения Тогда
Если Выборка.ПоЗаказу Тогда
ТекстСообщения = ШаблонСообщенияЗаказСпособДоставки;
Иначе
ТекстСообщения = ШаблонСообщенияНакладнаяСпособДоставки;
КонецЕсли;
ТекстСообщения = СтрЗаменить(ТекстСообщения, "%Документ%", Выборка.Ссылка);
ТекстСообщения = СтрЗаменить(ТекстСообщения, "%СпособДоставки%",
ПредставлениеСпособаДоставки(Выборка.СпособДоставки, Выборка.Ссылка));
Если ПустаяСтрока(ПутьКПолю) Тогда
ОбщегоНазначения.СообщитьПользователю(ТекстСообщения);
Иначе
ОбщегоНазначения.СообщитьПользователю(ТекстСообщения, ПроверяемаяНакладная, ПутьКПолю);
КонецЕсли;
КонецЕсли;
МожноСоздатьТранспортнуюНакладную = Ложь;
КонецЕсли;
Если ПараметрыФормированияТранспортныхНакладных.ЕстьДополнительнаяПроверкаВозможностиСозданияНакладной Тогда
Если Не МодульЛокализации.МожноСоздаватьТранспортнуюНакладную(Выборка.Ссылка, Выборка, ВыдаватьСообщения, ПутьКПолю) Тогда
МожноСоздатьТранспортнуюНакладную = Ложь;
КонецЕсли;
КонецЕсли;
Если Выборка.НетТоваров Тогда
Если ВыдаватьСообщения Тогда
ТекстСообщения = ШаблонСообщенияНетТоваров;
ТекстСообщения = СтрЗаменить(ТекстСообщения, "%Документ%", Выборка.Ссылка);
Если ПустаяСтрока(ПутьКПолю) Тогда
ОбщегоНазначения.СообщитьПользователю(ТекстСообщения);
Иначе
ОбщегоНазначения.СообщитьПользователю(ТекстСообщения,ПроверяемаяНакладная,ПутьКПолю);
КонецЕсли;
КонецЕсли;
МожноСоздатьТранспортнуюНакладную = Ложь;
КонецЕсли;
Если Не Выборка.Проведен Тогда
Если ВыдаватьСообщения Тогда
ТекстСообщения = ШаблонСообщенияОснованиеНеПроведен;
ТекстСообщения = СтрЗаменить(ТекстСообщения, "%Документ%", Выборка.Ссылка);
Если ПустаяСтрока(ПутьКПолю) Тогда
ОбщегоНазначения.СообщитьПользователю(ТекстСообщения);
Иначе
ОбщегоНазначения.СообщитьПользователю(ТекстСообщения,ПроверяемаяНакладная,ПутьКПолю);
КонецЕсли;
КонецЕсли;
МожноСоздатьТранспортнуюНакладную = Ложь;
КонецЕсли;
Если Не Выборка.ЕстьТранспортнаяНакладная Тогда
Если МожноСоздатьТранспортнуюНакладную Тогда
Результат.ОбъектыПоКоторымМожноИНужноСоздатьТранспортныеНакладные.Добавить(Выборка.Ссылка);
Иначе
Результат.ОбъектыПоКоторымСоздаватьТранспортныеНакладныеНельзя.Добавить(Выборка.Ссылка);
КонецЕсли;
КонецЕсли;
КонецЦикла;
КонецЦикла;
Если Результат.ОбъектыПоКоторымСоздаватьТранспортныеНакладныеНельзя.Количество() > 0
И Результат.ОбъектыПоКоторымМожноИНужноСоздатьТранспортныеНакладные.Количество() = 0
И НакладныеПоЗаданиямНаПеревозку <> Неопределено Тогда
НакладныеПоЗаданиямНаПеревозку.Индексы.Добавить("Накладная");
Для Каждого СтрМас Из Результат.ОбъектыПоКоторымСоздаватьТранспортныеНакладныеНельзя Цикл
НайденныеСтроки = НакладныеПоЗаданиямНаПеревозку.НайтиСтроки(Новый Структура("Накладная", СтрМас));
Для Каждого СтрМас Из НайденныеСтроки Цикл
ИндексЗадания = Результат.ЗаданияНаПеревозкуДляСозданияТранспортныхНакладных.Найти(СтрМас.ЗаданиеНаПеревозку);
Если ИндексЗадания <> Неопределено Тогда
Результат.ЗаданияНаПеревозкуДляСозданияТранспортныхНакладных.Удалить(ИндексЗадания);
Если ВыдаватьСообщения Тогда
ТекстСообщения = НСтр("ru = 'Из-за проблем в оформлении документов-оснований транспортные накладные по заданию на перевозку ""%ЗаданиеНаПеревозку%"" не формировались.'");
ТекстСообщения = СтрЗаменить(ТекстСообщения, "%ЗаданиеНаПеревозку%", СтрМас.ЗаданиеНаПеревозку);
ОбщегоНазначения.СообщитьПользователю(ТекстСообщения, СтрМас.ЗаданиеНаПеревозку);
КонецЕсли;
КонецЕсли;
КонецЦикла;
КонецЦикла;
КонецЕсли;
Результат.ОбъектыПоКоторымНакладныеУжеСозданы = ОбщегоНазначенияКлиентСервер.РазностьМассивов(
(ОбщегоНазначенияКлиентСервер.РазностьМассивов(
МассивОбъектов,
Результат.ОбъектыПоКоторымСоздаватьТранспортныеНакладныеНельзя)),
Результат.ОбъектыПоКоторымМожноИНужноСоздатьТранспортныеНакладные);
Возврат Результат;
КонецФункции
Функция СоздатьТранспортныеНакладные(МассивОбъектов,
ВыделенныеСтрокиАдресов = Неопределено,
ТранспортнаяНакладнаяОбъект = Неопределено,
ОбъектыПоКоторымНакладныеУжеСозданы = Неопределено) Экспорт
Если МассивОбъектов.Количество() = 0 Тогда
Возврат Новый Массив;
КонецЕсли;
Если Не ПолучитьФункциональнуюОпцию("ИспользоватьТТН") Тогда
Возврат Новый Массив;
КонецЕсли;
РежимЗаполненияОбъекта = МассивОбъектов.Количество() = 1
И ТранспортнаяНакладнаяОбъект <> Неопределено;
Если МассивОбъектов.Количество() > 1
И ТранспортнаяНакладнаяОбъект <> Неопределено Тогда
ТекстИсключения = НСтр("ru = 'В режиме, когда нужно заполнить переданный объект транспортной накладной, может быть передан только один документ-основание.'");
ВызватьИсключение ТекстИсключения;
КонецЕсли;
МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц;
Запрос = Новый Запрос;
Запрос.МенеджерВременныхТаблиц = МенеджерВременныхТаблиц;
Запрос.Текст = Документы.ЗаданиеНаПеревозку.ТекстЗапросаПолученияСпискаНакладныхИзЗаданийНаПеревозку(Истина);
ТипыОбъектов = ОбщегоНазначенияУТ.РазложитьМассивСсылокПоТипам(МассивОбъектов);
ЗаданияНаПеревозку = ТипыОбъектов.Получить(Тип("ДокументСсылка.ЗаданиеНаПеревозку"));
Если ЗаданияНаПеревозку <> Неопределено Тогда
Запрос.УстановитьПараметр("ЗаданияНаПеревозку", ЗаданияНаПеревозку);
Иначе
Запрос.УстановитьПараметр("ЗаданияНаПеревозку", Новый Массив);
КонецЕсли;
Запрос.УстановитьПараметр("ВыделенныеСтрокиАдресов", ВыделенныеСтрокиАдресов);
Запрос.УстановитьПараметр("ВсеСтрокиАдресов", НЕ ЗначениеЗаполнено(ВыделенныеСтрокиАдресов));
Если ЗаданияНаПеревозку <> Неопределено Тогда
УстановитьПривилегированныйРежим(Истина);
РезультатыЗапроса = Запрос.ВыполнитьПакетСПромежуточнымиДанными();
УстановитьПривилегированныйРежим(Ложь);
НакладныеПоЗаданиямНаПеревозку = РезультатыЗапроса[РезультатыЗапроса.ВГраница() - 1].Выгрузить().ВыгрузитьКолонку("Накладная");
Если ОбъектыПоКоторымНакладныеУжеСозданы <> Неопределено Тогда
НакладныеПоЗаданиямНаПеревозку = ОбщегоНазначенияКлиентСервер.РазностьМассивов(НакладныеПоЗаданиямНаПеревозку, ОбъектыПоКоторымНакладныеУжеСозданы);
КонецЕсли;
Если НакладныеПоЗаданиямНаПеревозку.Количество() = 0 Тогда
Возврат Новый Массив;
КонецЕсли;
ТипыОбъектов = ОбщегоНазначенияУТ.РазложитьМассивСсылокПоТипам(НакладныеПоЗаданиямНаПеревозку);
Иначе
УстановитьПривилегированныйРежим(Истина);
Запрос.Выполнить();
УстановитьПривилегированныйРежим(Ложь);
КонецЕсли;
ВыбираемыеРеквизитыОснований = Новый Массив;
РеквизитыОснований = ПараметрыФормированияТранспортныхНакладных().Реквизиты;
Для Каждого КлючЗначение Из РеквизитыОснований Цикл
ВыбираемыеРеквизитыОснований.Добавить(КлючЗначение.Ключ);
КонецЦикла;
ПоляЗаполняемыеПоЗаданиямНаПеревозку = ПоляЗаполняемыеПоЗаданиямНаПеревозку();
ТекстыВыборкиДанныхИзОснований = Новый Массив;
Запрос = Новый Запрос;
Запрос.МенеджерВременныхТаблиц = МенеджерВременныхТаблиц;
Для Каждого КлючЗначение Из ТипыОбъектов Цикл
ТипОбъекта = КлючЗначение.Ключ;
МетаданныеОбъекта = Метаданные.НайтиПоТипу(ТипОбъекта);
ПолноеИмяОснования = МетаданныеОбъекта.ПолноеИмя();
МодульЛокализации = ОбщегоНазначенияУТ.ПолучитьМодульЛокализации(ПолноеИмяОснования);
Если МодульЛокализации = Неопределено Тогда
МодульЛокализации = ОбщегоНазначения.МенеджерОбъектаПоПолномуИмени(ПолноеИмяОснования);
КонецЕсли;
ПараметрыФормированияТранспортныхНакладных = МодульЛокализации.ПараметрыФормированияТранспортныхНакладных();
ЕстьСпособДоставки = ЕстьСпособДоставки(ТипОбъекта);
ТекстВыборкиДанныхОснования =
" ВЫБРАТЬ
| ОснованиеТранспортнойНакладной.Ссылка КАК Ссылка,
| ЕСТЬNULL(СкладыКонтактнаяИнформация.Представление, """") КАК АдресПогрузки,
| ЕСТЬNULL(СкладыКонтактнаяИнформация.Значение, """") КАК АдресПогрузкиЗначение,
| ЕСТЬNULL(СкладыКонтактнаяИнформация.ЗначенияПолей, """") КАК АдресПогрузкиЗначенияПолей,
|" + ТекстВыборкиПолейДокументаОснования(ВыбираемыеРеквизитыОснований, ПараметрыФормированияТранспортныхНакладных, Ложь, Истина, ЕстьСпособДоставки) + "
| ИЗ
| " + ПолноеИмяОснования + " КАК ОснованиеТранспортнойНакладной
| ЛЕВОЕ СОЕДИНЕНИЕ НакладныеПоЗаданиямНаПеревозку КАК НакладныеПоЗаданиямНаПеревозку
| ПО ОснованиеТранспортнойНакладной.Ссылка = НакладныеПоЗаданиямНаПеревозку.Накладная
| ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Склады.КонтактнаяИнформация КАК СкладыКонтактнаяИнформация
| ПО ОснованиеТранспортнойНакладной." + ПараметрыФормированияТранспортныхНакладных.ИмяПоляСклад + " = СкладыКонтактнаяИнформация.Ссылка
| И СкладыКонтактнаяИнформация.Вид = ЗНАЧЕНИЕ(Справочник.ВидыКонтактнойИнформации.АдресСклада)
| ГДЕ
| ОснованиеТранспортнойНакладной.Ссылка В(&МассивОбъектов)
| И (НЕ &ТекстПолученияСпособаДоставки В (&СпособыДоставкиПоЗаданиюНаПеревозку)
| ИЛИ НЕ НакладныеПоЗаданиямНаПеревозку.Накладная ЕСТЬ NULL)";
Если ЕстьСпособДоставки Тогда
ТекстПолученияСпособаДоставки = "ОснованиеТранспортнойНакладной.СпособДоставки";
Иначе
ТекстПолученияСпособаДоставки = "ЗНАЧЕНИЕ(Перечисление.СпособыДоставки.Самовывоз)";
КонецЕсли;
ТекстВыборкиДанныхОснования = СтрЗаменить(ТекстВыборкиДанныхОснования, "&ТекстПолученияСпособаДоставки", ТекстПолученияСпособаДоставки);
Если ПараметрыФормированияТранспортныхНакладных.ЕстьЗаказы Тогда
ТекстВыборкиДанныхОснования = ТекстВыборкиДанныхОснования
+ Символы.ПС
+ СтрШаблон(
"И (НЕ &ИспользоватьРасширенныеВозможностиЗаказа
| ИЛИ НЕ ОснованиеТранспортнойНакладной.%1)",
ПараметрыФормированияТранспортныхНакладных.ИмяПоляНакладнаяПоЗаказу);
КонецЕсли;
ТекстВыборкиДанныхОснования = СтрЗаменить(ТекстВыборкиДанныхОснования, "&МассивОбъектов", "&МассивОбъектов" + МетаданныеОбъекта.Имя);
ТекстыВыборкиДанныхИзОснований.Добавить(ТекстВыборкиДанныхОснования);
Если ПараметрыФормированияТранспортныхНакладных.ЕстьЗаказы Тогда
ТекстВыборкиДанныхОснования =
" ВЫБРАТЬ
| ДокументТовары.Ссылка КАК Ссылка,
| ЕСТЬNULL(СкладыКонтактнаяИнформация.Представление, """") КАК АдресПогрузки,
| ЕСТЬNULL(СкладыКонтактнаяИнформация.Значение, """") КАК АдресПогрузкиЗначение,
| ЕСТЬNULL(СкладыКонтактнаяИнформация.ЗначенияПолей, """") КАК АдресПогрузкиЗначенияПолей,
|" + ТекстВыборкиПолейДокументаОснования(ВыбираемыеРеквизитыОснований, ПараметрыФормированияТранспортныхНакладных, Истина, Истина, ЕстьСпособДоставки) + "
| ИЗ
| " + ПолноеИмяОснования + " КАК ОснованиеТранспортнойНакладной
| ЛЕВОЕ СОЕДИНЕНИЕ " + ПолноеИмяОснования + "." + ПараметрыФормированияТранспортныхНакладных.ИмяТЧТовары + " КАК ДокументТовары
| ПО ОснованиеТранспортнойНакладной.Ссылка = ДокументТовары.Ссылка
| ЛЕВОЕ СОЕДИНЕНИЕ НакладныеПоЗаданиямНаПеревозку КАК НакладныеПоЗаданиямНаПеревозку
| ПО ДокументТовары.Ссылка = НакладныеПоЗаданиямНаПеревозку.Накладная
| И ДокументТовары." + ПараметрыФормированияТранспортныхНакладных.ИмяПоляЗаказВТЧТовары + " = НакладныеПоЗаданиямНаПеревозку.Распоряжение
| ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Склады.КонтактнаяИнформация КАК СкладыКонтактнаяИнформация
| ПО ОснованиеТранспортнойНакладной." + ПараметрыФормированияТранспортныхНакладных.ИмяПоляСклад + " = СкладыКонтактнаяИнформация.Ссылка
| И СкладыКонтактнаяИнформация.Вид = ЗНАЧЕНИЕ(Справочник.ВидыКонтактнойИнформации.АдресСклада)
| ГДЕ
| ОснованиеТранспортнойНакладной.Ссылка В(&МассивОбъектов)
| И &ИспользоватьРасширенныеВозможностиЗаказа
| И ОснованиеТранспортнойНакладной." + ПараметрыФормированияТранспортныхНакладных.ИмяПоляНакладнаяПоЗаказу + "
| И (НЕ ДокументТовары." + ПараметрыФормированияТранспортныхНакладных.ИмяПоляЗаказВТЧТовары + ".СпособДоставки В (&СпособыДоставкиПоЗаданиюНаПеревозку)
| ИЛИ НЕ НакладныеПоЗаданиямНаПеревозку.Накладная ЕСТЬ NULL)";
ТекстВыборкиДанныхОснования = СтрЗаменить(ТекстВыборкиДанныхОснования, "&МассивОбъектов", "&МассивОбъектов" + МетаданныеОбъекта.Имя);
ТекстыВыборкиДанныхИзОснований.Добавить(ТекстВыборкиДанныхОснования);
КонецЕсли;
Запрос.УстановитьПараметр("МассивОбъектов" + МетаданныеОбъекта.Имя, КлючЗначение.Значение);
КонецЦикла;
ТекстВыборкиДанныхИзОснований = СтрСоединить(ТекстыВыборкиДанныхИзОснований, ОбщегоНазначенияУТ.РазделительЗапросовВОбъединении());
ПоляГруппировкиПоНакладным = "АдресДоставки,Организация,Плательщик,Грузополучатель,ПеревозчикПартнер,ЗаданиеНаПеревозку";
ТекстВыборкиМассы = ТекстВТМассыИзОснований(ТипыОбъектов, Запрос);
ТекстЗапроса =
"ВЫБРАТЬ
| ВнутренныйЗапрос.Ссылка КАК Ссылка,
| ВнутренныйЗапрос.АдресПогрузки КАК АдресПогрузки,
| ВнутренныйЗапрос.АдресПогрузкиЗначение КАК АдресПогрузкиЗначение,
| ВнутренныйЗапрос.АдресПогрузкиЗначенияПолей КАК АдресПогрузкиЗначенияПолей,
|" + ТекстВыборкиРеквизитов("ВнутренныйЗапрос", ВыбираемыеРеквизитыОснований, Истина) + "
|ПОМЕСТИТЬ ПараметрыТТН
|ИЗ
| (" + ТекстВыборкиДанныхИзОснований + ") КАК ВнутренныйЗапрос
|;
|
|////////////////////////////////////////////////////////////////////////////////
|"
+ ТекстВыборкиМассы + "
|;
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
| ПараметрыТТН.Ссылка КАК Ссылка,
| ПараметрыТТН.АдресПогрузки КАК АдресПогрузки,
| ПараметрыТТН.АдресПогрузкиЗначение КАК АдресПогрузкиЗначение,
| ПараметрыТТН.АдресПогрузкиЗначенияПолей КАК АдресПогрузкиЗначенияПолей,
| ЗНАЧЕНИЕ(Перечисление.ВариантыВыводаДанныхОТоварномСоставе.НомераНакладных) КАК ВыводДанныхОТоварномСоставе,
| ЕСТЬNULL(НакладныеПоЗаданиямНаПеревозку.ЗаданиеНаПеревозку, ЗНАЧЕНИЕ(Документ.ЗаданиеНаПеревозку.ПустаяСсылка)) КАК ЗаданиеНаПеревозку,
| ЕСТЬNULL(МассыИзОснований.МассаБрутто, 0) КАК МассаБрутто,
| ЕСТЬNULL(МассыИзОснований.МассаНетто, 0) КАК МассаНетто,
|" + ТекстВыборкиРеквизитов("НакладныеПоЗаданиямНаПеревозку.ЗаданиеНаПеревозку", ПоляЗаполняемыеПоЗаданиямНаПеревозку, Истина) + ",
|" + ТекстВыборкиРеквизитов("ПараметрыТТН", ВыбираемыеРеквизитыОснований, Истина) + "
|ИЗ
| ПараметрыТТН КАК ПараметрыТТН
| ЛЕВОЕ СОЕДИНЕНИЕ МассыИзОснований КАК МассыИзОснований
| ПО ПараметрыТТН.Ссылка = МассыИзОснований.Ссылка
| ЛЕВОЕ СОЕДИНЕНИЕ НакладныеПоЗаданиямНаПеревозку КАК НакладныеПоЗаданиямНаПеревозку
| ПО ПараметрыТТН.Ссылка = НакладныеПоЗаданиямНаПеревозку.Накладная
|
|УПОРЯДОЧИТЬ ПО "
+ ПоляГруппировкиПоНакладным;
Запрос.Текст = ТекстЗапроса;
Запрос.УстановитьПараметр("МассивОбъектов", МассивОбъектов);
Запрос.УстановитьПараметр("СпособыДоставкиПоЗаданиюНаПеревозку",
ДоставкаТоваровКлиентСервер.СпособыДоставкиДоКлиентаСНашимУчастием(Ложь));
УстановитьПривилегированныйРежим(Истина);
Выборка = Запрос.Выполнить().Выбрать();
ТекущаяНакладная = Неопределено;
ТекущиеЗначения = Новый Структура(ПоляГруппировкиПоНакладным);
СозданныеТранспортныеНакладные = Новый Массив;
Если Не РежимЗаполненияОбъекта Тогда
ТранспортнаяНакладнаяОбъект = Неопределено;
КонецЕсли;
ПоляЗаполняемыеПоПервомуЗначению = ВыбираемыеРеквизитыОснований;
Для Каждого КлючЗначение Из ПоляЗаполняемыеПоЗаданиямНаПеревозку Цикл
ПоляЗаполняемыеПоПервомуЗначению.Добавить(КлючЗначение.Ключ);
КонецЦикла;
ПоляЗаполняемыеПоПервомуЗначению.Добавить("АдресПогрузки");
ПоляЗаполняемыеПоПервомуЗначению.Добавить("АдресПогрузкиЗначение");
ПоляЗаполняемыеПоПервомуЗначению.Добавить("АдресПогрузкиЗначенияПолей");
ПоляЗаполняемыеПоПервомуЗначению.Добавить("ВыводДанныхОТоварномСоставе");
Пока Выборка.Следующий() Цикл
Если Не ОбщегоНазначенияУТКлиентСервер.СтруктурыРавны(ТекущиеЗначения, Выборка) Тогда
Если Не РежимЗаполненияОбъекта Тогда
ЗаписатьТранспортнуюНакладнуюПриСоздании(СозданныеТранспортныеНакладные, ТранспортнаяНакладнаяОбъект);
ТранспортнаяНакладнаяОбъект = Документы.ТранспортнаяНакладная.СоздатьДокумент();
КонецЕсли;
ЗаполнитьЗначенияСвойств(ТранспортнаяНакладнаяОбъект, Выборка, ПоляГруппировкиПоНакладным);
ЗаполнитьЗначенияСвойств(ТекущиеЗначения, Выборка);
ИначеЕсли ТекущаяНакладная = Выборка.Ссылка Тогда
Продолжить;
КонецЕсли;
ТекущаяНакладная = Выборка.Ссылка;
ТранспортнаяНакладнаяОбъект.МассаБрутто = ТранспортнаяНакладнаяОбъект.МассаБрутто + Выборка.МассаБрутто;
ТранспортнаяНакладнаяОбъект.МассаНетто = ТранспортнаяНакладнаяОбъект.МассаНетто + Выборка.МассаНетто;
ОбщегоНазначенияУТКлиентСервер.ЗаполнитьЗначенияПустыхСвойств(ТранспортнаяНакладнаяОбъект,
Выборка,
ПоляЗаполняемыеПоПервомуЗначению,
ПоляГруппировкиПоНакладным);
НайденныйДокумент = ТранспортнаяНакладнаяОбъект.ДокументыОснования.Найти(Выборка.Ссылка, "ДокументОснование");
Если НайденныйДокумент = Неопределено Тогда
НоваяСтрокаОснований = ТранспортнаяНакладнаяОбъект.ДокументыОснования.Добавить();
НоваяСтрокаОснований.ДокументОснование = Выборка.Ссылка;
КонецЕсли;
КонецЦикла;
Если Не РежимЗаполненияОбъекта Тогда
ЗаписатьТранспортнуюНакладнуюПриСоздании(СозданныеТранспортныеНакладные, ТранспортнаяНакладнаяОбъект);
КонецЕсли;
УстановитьПривилегированныйРежим(Ложь);
Возврат СозданныеТранспортныеНакладные;
КонецФункции
Функция ТранспортныеНакладныеДокументовОснований(СсылкиНаДокументыОснования) Экспорт
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ РАЗЛИЧНЫЕ
| ТранспортнаяНакладнаяДокументыОснования.Ссылка КАК ТранспортнаяНакладная,
| ТранспортнаяНакладнаяДокументыОснования.Ссылка.Номер КАК Номер,
| ТранспортнаяНакладнаяДокументыОснования.Ссылка.Дата КАК Дата,
| ТранспортнаяНакладнаяДокументыОснования.ДокументОснование КАК ДокументОснование
|ИЗ
| Документ.ТранспортнаяНакладная.ДокументыОснования КАК ТранспортнаяНакладнаяДокументыОснования
|ГДЕ
| ТранспортнаяНакладнаяДокументыОснования.ДокументОснование В (&СсылкиНаДокументыОснования)
| И ТранспортнаяНакладнаяДокументыОснования.Ссылка.Проведен";
Если ТипЗнч(СсылкиНаДокументыОснования) <> Тип("Массив") Тогда
Запрос.УстановитьПараметр("СсылкиНаДокументыОснования", ОбщегоНазначенияКлиентСервер.ЗначениеВМассиве(СсылкиНаДокументыОснования));
Иначе
Запрос.УстановитьПараметр("СсылкиНаДокументыОснования", СсылкиНаДокументыОснования);
КонецЕсли;
УстановитьПривилегированныйРежим(Истина);
Результат = Запрос.Выполнить().Выгрузить();
УстановитьПривилегированныйРежим(Ложь);
Возврат Результат;
КонецФункции
Функция ОбъектыКоторыеМожноПечатать(МассивОбъектов) Экспорт
РезультатПроверки = ПроверитьДокументыОснования(МассивОбъектов,,Ложь);
Для Каждого СтрМас Из РезультатПроверки.ОбъектыПоКоторымМожноИНужноСоздатьТранспортныеНакладные Цикл
ТекстСообщения = НСтр("ru = 'По документу %Документ% транспортная накладная не напечатана: необходимо сначала создать документ ""Транспортная накладная"".'");
ТекстСообщения = СтрЗаменить(ТекстСообщения, "%Документ%", СтрМас);
ОбщегоНазначения.СообщитьПользователю(ТекстСообщения, СтрМас);
КонецЦикла;
Для Каждого СтрМас Из РезультатПроверки.ОбъектыПоКоторымСоздаватьТранспортныеНакладныеНельзя Цикл
ТекстСообщения = НСтр("ru = 'По документу %Документ% транспортная накладная не напечатана: не создан документ ""Транспортная накладная"" и его не возможно создать.'");
ТекстСообщения = СтрЗаменить(ТекстСообщения, "%Документ%", СтрМас);
ОбщегоНазначения.СообщитьПользователю(ТекстСообщения, СтрМас);
КонецЦикла;
ОбъектыКоторыеМожноПечатать = ОбщегоНазначенияКлиентСервер.РазностьМассивов(МассивОбъектов, РезультатПроверки.ОбъектыПоКоторымМожноИНужноСоздатьТранспортныеНакладные);
ОбъектыКоторыеМожноПечатать = ОбщегоНазначенияКлиентСервер.РазностьМассивов(ОбъектыКоторыеМожноПечатать, РезультатПроверки.ОбъектыПоКоторымСоздаватьТранспортныеНакладныеНельзя);
Возврат ОбъектыКоторыеМожноПечатать;
КонецФункции
Процедура ДобавитьКомандыСозданияНаОсновании(КомандыСозданияНаОсновании, Параметры) Экспорт
КонецПроцедуры
Функция ДобавитьКомандуСоздатьНаОсновании(КомандыСозданияНаОсновании) Экспорт
Если ПравоДоступа("Добавление", Метаданные.Документы.ТранспортнаяНакладная) Тогда
КомандаСоздатьНаОсновании = КомандыСозданияНаОсновании.Добавить();
КомандаСоздатьНаОсновании.Менеджер = Метаданные.Документы.ТранспортнаяНакладная.ПолноеИмя();
КомандаСоздатьНаОсновании.Представление = ОбщегоНазначенияУТ.ПредставлениеОбъекта(Метаданные.Документы.ТранспортнаяНакладная);
КомандаСоздатьНаОсновании.РежимЗаписи = "Проводить";
КомандаСоздатьНаОсновании.ФункциональныеОпции = "ИспользоватьТТН";
Возврат КомандаСоздатьНаОсновании;
КонецЕсли;
Возврат Неопределено;
КонецФункции
Процедура ДобавитьКомандыОтчетов(КомандыОтчетов, Параметры) Экспорт
КонецПроцедуры
Процедура ДобавитьКомандыПечати(КомандыПечати, Порядок = Неопределено, УсловиеВидимости = Неопределено) Экспорт
Если ПолучитьФункциональнуюОпцию("ИспользоватьТТН")
И ПравоДоступа("Просмотр", Метаданные.Документы.ТранспортнаяНакладная) Тогда
ИнтерактивноеДобавление = ПравоДоступа("ИнтерактивноеДобавление", Метаданные.Документы.ТранспортнаяНакладная);
КомандаПечати = КомандыПечати.Добавить();
КомандаПечати.МенеджерПечати = "Документ.ТранспортнаяНакладная.Печать";
КомандаПечати.Обработчик = "ТранспортнаяНакладнаяКлиент.ПечатьТТН";
КомандаПечати.Идентификатор = "ТТН";
КомандаПечати.Представление = НСтр("ru = 'Товарно-транспортная накладная (1-Т)'");
КомандаПечати.ПроверкаПроведенияПередПечатью = Истина;
КомандаПечати.ДополнительныеПараметры = Новый Структура();
КомандаПечати.ДополнительныеПараметры.Вставить("ИнтерактивноеДобавление", ИнтерактивноеДобавление);
КомандаПечати.ДополнительныеПараметры.Вставить("МенеджерПечати", "Документ.ТранспортнаяНакладная.Печать");
Если Порядок <> Неопределено Тогда
КомандаПечати.Порядок = Порядок;
КонецЕсли;
Если ТипЗнч(УсловиеВидимости) = Тип("Структура") Тогда
КомандаПечати.УсловияВидимости.Добавить(УсловиеВидимости);
ИначеЕсли ТипЗнч(УсловиеВидимости) = Тип("Массив") Тогда
ОбщегоНазначенияКлиентСервер.ДополнитьМассив(КомандаПечати.УсловияВидимости, УсловиеВидимости);
КонецЕсли;
КомандаПечати = КомандыПечати.Добавить();
КомандаПечати.МенеджерПечати = "Документ.ТранспортнаяНакладная.Печать";
КомандаПечати.Обработчик = "ТранспортнаяНакладнаяКлиент.ПечатьТТН";
КомандаПечати.Идентификатор = "ТранспортнаяНакладная";
КомандаПечати.Представление = НСтр("ru = 'Транспортная накладная'");
КомандаПечати.ПроверкаПроведенияПередПечатью = Истина;
КомандаПечати.ДополнительныеПараметры = Новый Структура();
КомандаПечати.ДополнительныеПараметры.Вставить("ИнтерактивноеДобавление", ИнтерактивноеДобавление);
КомандаПечати.ДополнительныеПараметры.Вставить("МенеджерПечати", "Документ.ТранспортнаяНакладная.Печать");
Если Порядок <> Неопределено Тогда
КомандаПечати.Порядок = Порядок + 1;
КонецЕсли;
Если ТипЗнч(УсловиеВидимости) = Тип("Структура") Тогда
КомандаПечати.УсловияВидимости.Добавить(УсловиеВидимости);
ИначеЕсли ТипЗнч(УсловиеВидимости) = Тип("Массив") Тогда
ОбщегоНазначенияКлиентСервер.ДополнитьМассив(КомандаПечати.УсловияВидимости, УсловиеВидимости);
КонецЕсли;
КонецЕсли;
КонецПроцедуры
Процедура ПриОпределенииНастроекВерсионированияОбъектов(Настройки) Экспорт
КонецПроцедуры
#КонецОбласти
#Область СлужебныеПроцедурыИФункции
Процедура ЗаписатьТранспортнуюНакладнуюПриСоздании(СозданныеТранспортныеНакладные, ТранспортнаяНакладнаяОбъект)
Если ТранспортнаяНакладнаяОбъект <> Неопределено Тогда
Если ТранспортнаяНакладнаяОбъект.ПометкаУдаления Тогда
ТекстИсключения = НСтр("ru = 'Документ, на основании которого создается транспортная накладная, помечен на удаление. Создание транспортных накладных по помеченным на удаление документам не поддерживается.'");
ВызватьИсключение ТекстИсключения;
КонецЕсли;
ТранспортнаяНакладнаяОбъект.Заполнить(Неопределено);
ТранспортнаяНакладнаяОбъект.Записать(РежимЗаписиДокумента.Проведение);
СозданныеТранспортныеНакладные.Добавить(ТранспортнаяНакладнаяОбъект.Ссылка);
КонецЕсли;
КонецПроцедуры
#Область Печать
Процедура Печать(МассивОбъектов, ПараметрыПечати, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода) Экспорт
Если УправлениеПечатью.НужноПечататьМакет(КоллекцияПечатныхФорм, "ТранспортнаяНакладная") Тогда
УправлениеПечатью.ВывестиТабличныйДокументВКоллекцию(
КоллекцияПечатныхФорм,
"ТранспортнаяНакладная", НСтр("ru = 'Транспортная накладная'"),
СформироватьПечатнуюФормуТранспортнойНакладной(МассивОбъектов, ОбъектыПечати));
КонецЕсли;
Если УправлениеПечатью.НужноПечататьМакет(КоллекцияПечатныхФорм, "ТТН") Тогда
УправлениеПечатью.ВывестиТабличныйДокументВКоллекцию(
КоллекцияПечатныхФорм,
"ТТН",
НСтр("ru = 'Товарно-транспортная накладная'"),
СформироватьПечатнуюФормуТТН(МассивОбъектов, ОбъектыПечати, ПараметрыПечати));
КонецЕсли;
ФормированиеПечатныхФорм.ЗаполнитьПараметрыОтправки(ПараметрыВывода.ПараметрыОтправки, МассивОбъектов, КоллекцияПечатныхФорм);
КонецПроцедуры
Функция СформироватьПечатнуюФормуТТН(МассивОбъектов, ОбъектыПечати, ПараметрыПечати) Экспорт
УстановитьПривилегированныйРежим(Истина);
ТабличныйДокумент = Новый ТабличныйДокумент;
ТабличныйДокумент.РазмерКолонтитулаСверху = 0;
ТабличныйДокумент.РазмерКолонтитулаСнизу = 0;
ТабличныйДокумент.АвтоМасштаб = Истина;
ТабличныйДокумент.ОриентацияСтраницы = ОриентацияСтраницы.Ландшафт;
ТабличныйДокумент.ИмяПараметровПечати = "ПАРАМЕТРЫ_ПЕЧАТИ_ТТН";
МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц;
ТипыОбъектов = ПодготовитьПечатьТТНиТН(МенеджерВременныхТаблиц, МассивОбъектов);
Если ТипыОбъектов.Количество() = 0 Тогда
Возврат ТабличныйДокумент;
КонецЕсли;
#Область ПолучитьДанныеДляПечатнойФормыТТН
Для Каждого КлючЗначение Из ТипыОбъектов Цикл
ТипОбъекта = КлючЗначение.Ключ;
МетаданныеОбъекта = Метаданные.НайтиПоТипу(ТипОбъекта);
ПолноеИмяОснования = МетаданныеОбъекта.ПолноеИмя();
МодульЛокализации = ОбщегоНазначенияУТ.ПолучитьМодульЛокализации(ПолноеИмяОснования);
Если МодульЛокализации = Неопределено Тогда
МодульЛокализации = ОбщегоНазначения.МенеджерОбъектаПоПолномуИмени(ПолноеИмяОснования);
КонецЕсли;
ПараметрыФормированияТранспортныхНакладных = МодульЛокализации.ПараметрыФормированияТранспортныхНакладных();
ТекстЗапроса =
"ВЫБРАТЬ РАЗЛИЧНЫЕ
| ДанныеДокументов.Ссылка КАК Ссылка,
| ДанныеДокументов.Проведен КАК Проведен,"
+ ТекстВыборкиРеквизитов("ДанныеДокументов", ПараметрыФормированияТранспортныхНакладных.РеквизитыШапкиДляПечати, Истина) + "
|ПОМЕСТИТЬ ТаблицаДанныхДокументов
|ИЗ
| &ПолноеИмяДокумента КАК ДанныеДокументов
|ГДЕ
| ДанныеДокументов.Ссылка В (&ДокументыОснования)";
ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ПолноеИмяДокумента", ПолноеИмяОснования);
Запрос = Новый Запрос;
Запрос.Текст = ТекстЗапроса;
Запрос.МенеджерВременныхТаблиц = МенеджерВременныхТаблиц;
Запрос.УстановитьПараметр("ДокументыОснования", КлючЗначение.Значение);
УстановитьПривилегированныйРежим(Истина);
Запрос.Выполнить();
УстановитьПривилегированныйРежим(Ложь);
ПараметрыЗаполнения = ПродажиСервер.ПараметрыЗаполненияВременнойТаблицыТоваров();
ПараметрыЗаполнения.ПересчитыватьВВалютуРегл = Истина;
ПараметрыЗаполнения.ОбработатьНастройкиПечатиНаборов = Истина;
МодульЛокализации.ПоместитьВременнуюТаблицуТоваров(МенеджерВременныхТаблиц, ПараметрыЗаполнения);
Запрос.Текст = "УНИЧТОЖИТЬ ТаблицаДанныхДокументов";
Запрос.Выполнить();
КонецЦикла;
ПоместитьВременнуюТаблицуТоваров(МенеджерВременныхТаблиц);
ПродажиСервер.ПоместитьВременнуюТаблицуКоэффициентыУпаковок(МенеджерВременныхТаблиц);
Запрос.Текст =
"ВЫБРАТЬ
| КОЛИЧЕСТВО(ТаблицаТоваров.Номенклатура) КАК Количество,
| ТаблицаТранспортныхНакладных.ТранспортнаяНакладная КАК ТранспортнаяНакладная
|ПОМЕСТИТЬ КоличествоТоваров
|ИЗ
| ТаблицаТоваров КАК ТаблицаТоваров
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ ТаблицаТранспортныхНакладных КАК ТаблицаТранспортныхНакладных
| ПО (ТаблицаТранспортныхНакладных.ДокументОснование = ТаблицаТоваров.Ссылка)
|
|СГРУППИРОВАТЬ ПО
| ТаблицаТранспортныхНакладных.ТранспортнаяНакладная
|;
|
|
|ВЫБРАТЬ
| ТаблицаТранспортныхНакладных.ТранспортнаяНакладная КАК Ссылка,
| ТаблицаТранспортныхНакладных.ПорядковыйНомер КАК ПорядковыйНомер,
| ТаблицаТранспортныхНакладных.ТранспортнаяНакладная.Номер КАК Номер,
| ТаблицаТранспортныхНакладных.ТранспортнаяНакладная.Дата КАК Дата,
| ТаблицаТранспортныхНакладных.ТранспортнаяНакладная.Организация КАК Организация,
| ТаблицаТранспортныхНакладных.ТранспортнаяНакладная.Грузополучатель КАК Грузополучатель,
| ТаблицаТранспортныхНакладных.ТранспортнаяНакладная.Грузоотправитель КАК Грузоотправитель,
| ТаблицаТранспортныхНакладных.ТранспортнаяНакладная.Плательщик КАК Плательщик,
| ТаблицаТранспортныхНакладных.ТранспортнаяНакладная.ЗаказчикПеревозки КАК ЗаказчикПеревозки,
| ТаблицаТранспортныхНакладных.ТранспортнаяНакладная.Организация.Префикс КАК Префикс,
| ТаблицаТранспортныхНакладных.ТранспортнаяНакладная.Отпустил КАК Кладовщик,
| ТаблицаТранспортныхНакладных.ТранспортнаяНакладная.ОтпустилДолжность КАК ДолжностьКладовщика,
| ВЫРАЗИТЬ(ЕСТЬNULL(ТаблицаОтветственныеЛица.РуководительНаименование, """") КАК СТРОКА(500)) КАК Руководитель,
| ВЫРАЗИТЬ(ЕСТЬNULL(ТаблицаОтветственныеЛица.РуководительДолжность, """") КАК СТРОКА(500)) КАК ДолжностьРуководителя,
| ВЫРАЗИТЬ(ЕСТЬNULL(ТаблицаОтветственныеЛица.ГлавныйБухгалтерНаименование, """") КАК СТРОКА(500)) КАК ГлавныйБухгалтер,
| ТаблицаТранспортныхНакладных.ТранспортнаяНакладная.БанковскийСчетПлательщика КАК БанковскийСчетПлательщика,
| ТаблицаТранспортныхНакладных.ТранспортнаяНакладная.БанковскийСчетЗаказчикаПеревозки КАК БанковскийСчетЗаказчикаПеревозки,
| ТаблицаТранспортныхНакладных.ТранспортнаяНакладная.БанковскийСчетПеревозчика КАК БанковскийСчетПеревозчика,
| ТаблицаТранспортныхНакладных.ТранспортнаяНакладная.Перевозчик КАК Перевозчик,
| ТаблицаТранспортныхНакладных.ТранспортнаяНакладная.Водитель КАК Водитель,
| ТаблицаТранспортныхНакладных.ТранспортнаяНакладная.ВидПеревозки КАК ВидПеревозки,
| ТаблицаТранспортныхНакладных.ТранспортнаяНакладная.ЛицензионнаяКарточкаРегистрационныйНомер КАК ЛицензионнаяКарточкаРегистрационныйНомер,
| ТаблицаТранспортныхНакладных.ТранспортнаяНакладная.ЛицензионнаяКарточкаСерия КАК ЛицензионнаяКарточкаСерия,
| ТаблицаТранспортныхНакладных.ТранспортнаяНакладная.ЛицензионнаяКарточкаНомер КАК ЛицензионнаяКарточкаНомер,
| ТаблицаТранспортныхНакладных.ТранспортнаяНакладная.ЛицензионнаяКарточкаВид КАК ЛицензионнаяКарточкаВид,
| ТаблицаТранспортныхНакладных.ТранспортнаяНакладная.АвтомобильМарка КАК МаркаАвтомобиля,
| ТаблицаТранспортныхНакладных.ТранспортнаяНакладная.АвтомобильГосударственныйНомер КАК ГосНомерАвтомобиля,
| ТаблицаТранспортныхНакладных.ТранспортнаяНакладная.Прицеп КАК Прицеп,
| ТаблицаТранспортныхНакладных.ТранспортнаяНакладная.ГосударственныйНомерПрицепа КАК ГосНомерПрицепа,
| ТаблицаТранспортныхНакладных.ТранспортнаяНакладная.ДоверенностьНомер КАК ДоверенностьНомер,
| ТаблицаТранспортныхНакладных.ТранспортнаяНакладная.ДоверенностьДата КАК ДоверенностьДата,
| ТаблицаТранспортныхНакладных.ТранспортнаяНакладная.ДоверенностьВыдана КАК ДоверенностьВыдана,
| ТаблицаТранспортныхНакладных.ТранспортнаяНакладная.ДоверенностьЛицо КАК ДоверенностьЛицо,
| ВЫБОР
| КОГДА ТаблицаТранспортныхНакладных.ТранспортнаяНакладная.ВыводДанныхОТоварномСоставе = ЗНАЧЕНИЕ(Перечисление.ВариантыВыводаДанныхОТоварномСоставе.ТоварныйСостав)
| ТОГДА ЕСТЬNULL(ТаблицаТранспортныхНакладных.ДокументОснование.Валюта, ЗНАЧЕНИЕ(Справочник.Валюты.ПустаяСсылка))
| ИНАЧЕ ЗНАЧЕНИЕ(Справочник.Валюты.ПустаяСсылка)
| КОНЕЦ КАК Валюта,
| ТаблицаТранспортныхНакладных.ТранспортнаяНакладная.АдресПогрузки КАК ПунктПогрузки,
| ТаблицаТранспортныхНакладных.ТранспортнаяНакладная.АдресДоставки КАК ПунктРазгрузки,
| ТаблицаТранспортныхНакладных.ТранспортнаяНакладная.СрокДоставки КАК СрокДоставки,
| ТаблицаТранспортныхНакладных.ТранспортнаяНакладная.МассаБрутто КАК МассаБрутто,
| ТаблицаТранспортныхНакладных.ТранспортнаяНакладная.МассаНетто КАК МассаНетто,
| ВЫБОР
| КОГДА ТаблицаТранспортныхНакладных.ТранспортнаяНакладная.ВыводДанныхОТоварномСоставе = ЗНАЧЕНИЕ(Перечисление.ВариантыВыводаДанныхОТоварномСоставе.ТоварныйСостав)
| ТОГДА ЕСТЬNULL(КоличествоТоваров.Количество, 0)
| ИНАЧЕ 0
| КОНЕЦ КАК КоличествоНаименований,
| ТаблицаТранспортныхНакладных.ТранспортнаяНакладная.ЗаданиеНаПеревозку КАК ЗаданиеНаПеревозку,
| ТаблицаТранспортныхНакладных.ТранспортнаяНакладная.ВыводДанныхОТоварномСоставе КАК ВыводДанныхОТоварномСоставе,
| ТаблицаТранспортныхНакладных.ТранспортнаяНакладная.УдостоверениеНомер КАК УдостоверениеНомер,
| ТаблицаТранспортныхНакладных.ТранспортнаяНакладная.УдостоверениеСерия КАК УдостоверениеСерия
|ИЗ
| ТаблицаТранспортныхНакладных КАК ТаблицаТранспортныхНакладных
| ЛЕВОЕ СОЕДИНЕНИЕ КоличествоТоваров КАК КоличествоТоваров
| ПО ТаблицаТранспортныхНакладных.ТранспортнаяНакладная = КоличествоТоваров.ТранспортнаяНакладная
| ЛЕВОЕ СОЕДИНЕНИЕ ТаблицаОтветственныеЛица КАК ТаблицаОтветственныеЛица
| ПО ТаблицаТранспортныхНакладных.ТранспортнаяНакладная = ТаблицаОтветственныеЛица.Ссылка
|
|СГРУППИРОВАТЬ ПО
| ТаблицаТранспортныхНакладных.ТранспортнаяНакладная,
| ТаблицаТранспортныхНакладных.ПорядковыйНомер,
| ТаблицаТранспортныхНакладных.ТранспортнаяНакладная.Номер,
| ТаблицаТранспортныхНакладных.ТранспортнаяНакладная.Дата,
| ТаблицаТранспортныхНакладных.ТранспортнаяНакладная.Организация,
| ТаблицаТранспортныхНакладных.ТранспортнаяНакладная.Грузополучатель,
| ТаблицаТранспортныхНакладных.ТранспортнаяНакладная.Грузоотправитель,
| ТаблицаТранспортныхНакладных.ТранспортнаяНакладная.Плательщик,
| ТаблицаТранспортныхНакладных.ТранспортнаяНакладная.ЗаказчикПеревозки,
| ТаблицаТранспортныхНакладных.ТранспортнаяНакладная.Организация.Префикс,
| ТаблицаТранспортныхНакладных.ТранспортнаяНакладная.Отпустил,
| ТаблицаТранспортныхНакладных.ТранспортнаяНакладная.ОтпустилДолжность,
| ВЫРАЗИТЬ(ЕСТЬNULL(ТаблицаОтветственныеЛица.РуководительНаименование, """") КАК СТРОКА(500)),
| ВЫРАЗИТЬ(ЕСТЬNULL(ТаблицаОтветственныеЛица.РуководительДолжность, """") КАК СТРОКА(500)),
| ВЫРАЗИТЬ(ЕСТЬNULL(ТаблицаОтветственныеЛица.ГлавныйБухгалтерНаименование, """") КАК СТРОКА(500)),
| ТаблицаТранспортныхНакладных.ТранспортнаяНакладная.БанковскийСчетПлательщика,
| ТаблицаТранспортныхНакладных.ТранспортнаяНакладная.БанковскийСчетЗаказчикаПеревозки,
| ТаблицаТранспортныхНакладных.ТранспортнаяНакладная.БанковскийСчетПеревозчика,
| ТаблицаТранспортныхНакладных.ТранспортнаяНакладная.Перевозчик,
| ТаблицаТранспортныхНакладных.ТранспортнаяНакладная.Водитель,
| ТаблицаТранспортныхНакладных.ТранспортнаяНакладная.ВидПеревозки,
| ТаблицаТранспортныхНакладных.ТранспортнаяНакладная.ЛицензионнаяКарточкаРегистрационныйНомер,
| ТаблицаТранспортныхНакладных.ТранспортнаяНакладная.ЛицензионнаяКарточкаСерия,
| ТаблицаТранспортныхНакладных.ТранспортнаяНакладная.ЛицензионнаяКарточкаНомер,
| ТаблицаТранспортныхНакладных.ТранспортнаяНакладная.ЛицензионнаяКарточкаВид,
| ТаблицаТранспортныхНакладных.ТранспортнаяНакладная.АвтомобильМарка,
| ТаблицаТранспортныхНакладных.ТранспортнаяНакладная.АвтомобильГосударственныйНомер,
| ТаблицаТранспортныхНакладных.ТранспортнаяНакладная.Прицеп,
| ТаблицаТранспортныхНакладных.ТранспортнаяНакладная.ГосударственныйНомерПрицепа,
| ТаблицаТранспортныхНакладных.ТранспортнаяНакладная.ДоверенностьНомер,
| ТаблицаТранспортныхНакладных.ТранспортнаяНакладная.ДоверенностьДата,
| ТаблицаТранспортныхНакладных.ТранспортнаяНакладная.ДоверенностьВыдана,
| ТаблицаТранспортныхНакладных.ТранспортнаяНакладная.ДоверенностьЛицо,
| ВЫБОР
| КОГДА ТаблицаТранспортныхНакладных.ТранспортнаяНакладная.ВыводДанныхОТоварномСоставе = ЗНАЧЕНИЕ(Перечисление.ВариантыВыводаДанныхОТоварномСоставе.ТоварныйСостав)
| ТОГДА ЕСТЬNULL(ТаблицаТранспортныхНакладных.ДокументОснование.Валюта, ЗНАЧЕНИЕ(Справочник.Валюты.ПустаяСсылка))
| ИНАЧЕ ЗНАЧЕНИЕ(Справочник.Валюты.ПустаяСсылка)
| КОНЕЦ,
| ТаблицаТранспортныхНакладных.ТранспортнаяНакладная.АдресПогрузки,
| ТаблицаТранспортныхНакладных.ТранспортнаяНакладная.АдресДоставки,
| ТаблицаТранспортныхНакладных.ТранспортнаяНакладная.СрокДоставки,
| ТаблицаТранспортныхНакладных.ТранспортнаяНакладная.МассаБрутто,
| ТаблицаТранспортныхНакладных.ТранспортнаяНакладная.МассаНетто,
| ВЫБОР
| КОГДА ТаблицаТранспортныхНакладных.ТранспортнаяНакладная.ВыводДанныхОТоварномСоставе = ЗНАЧЕНИЕ(Перечисление.ВариантыВыводаДанныхОТоварномСоставе.ТоварныйСостав)
| ТОГДА ЕСТЬNULL(КоличествоТоваров.Количество, 0)
| ИНАЧЕ 0
| КОНЕЦ,
| ТаблицаТранспортныхНакладных.ТранспортнаяНакладная.ЗаданиеНаПеревозку,
| ТаблицаТранспортныхНакладных.ТранспортнаяНакладная.ВыводДанныхОТоварномСоставе,
| ТаблицаТранспортныхНакладных.ТранспортнаяНакладная.УдостоверениеНомер,
| ТаблицаТранспортныхНакладных.ТранспортнаяНакладная.УдостоверениеСерия
|
|УПОРЯДОЧИТЬ ПО
| ПорядковыйНомер
|;
|
|
|ВЫБРАТЬ
| ТаблицаТранспортныхНакладных.ТранспортнаяНакладная КАК ТранспортнаяНакладная,
| ТаблицаТранспортныхНакладных.ПорядковыйНомер КАК ПорядковыйНомер,
| ТаблицаТранспортныхНакладных.НомерСтрокиВТранспортнойНакладной КАК НомерСтрокиВТранспортнойНакладной,
| ТаблицаТоваров.Ссылка КАК Ссылка,
| ТаблицаТоваров.Номенклатура КАК Номенклатура,
| ТаблицаТоваров.Номенклатура.Код КАК ТоварКод,
| ТаблицаТоваров.Номенклатура.Артикул КАК ТоварАртикул,
| ТаблицаТоваров.Номенклатура.НаименованиеПолное КАК ТоварНаименование,
| ТаблицаТоваров.Характеристика.НаименованиеПолное КАК Характеристика,
| ВЫБОР
| КОГДА ЕСТЬNULL(&ТекстЗапросаКоэффициентУпаковки1, 1) = 1
| ТОГДА НЕОПРЕДЕЛЕНО
| ИНАЧЕ ТаблицаТоваров.Упаковка.Наименование
| КОНЕЦ КАК Упаковка,
| ВЫБОР
| КОГДА НЕ &ВыводитьБазовыеЕдиницыИзмерения
| ТОГДА ТаблицаТоваров.КоличествоУпаковок
| ИНАЧЕ ТаблицаТоваров.Количество
| КОНЕЦ КАК Количество,
| ВЫБОР
| КОГДА &ВыводитьБазовыеЕдиницыИзмерения
| ТОГДА &ТекстЗапросаНаименованиеЕдиницыИзмерения1
| ИНАЧЕ &ТекстЗапросаНаименованиеЕдиницыИзмерения2
| КОНЕЦ КАК ВидУпаковки,
| ВЫБОР
| КОГДА &ВыводитьБазовыеЕдиницыИзмерения
| ТОГДА ТаблицаТоваров.Номенклатура.ЕдиницаИзмерения.Представление
| ИНАЧЕ &ТекстЗапросаНаименованиеЕдиницыИзмерения1
| КОНЕЦ КАК БазоваяЕдиницаНаименование,
| ВЫБОР
| КОГДА НЕ &ВыводитьБазовыеЕдиницыИзмерения
| ТОГДА ВЫБОР КОГДА НЕ ТаблицаТоваров.КоличествоУпаковок = 0 ТОГДА ТаблицаТоваров.СуммаБезНДС / ТаблицаТоваров.КоличествоУпаковок ИНАЧЕ 0 КОНЕЦ
| ИНАЧЕ ВЫБОР КОГДА НЕ ТаблицаТоваров.Количество = 0 ТОГДА ТаблицаТоваров.СуммаБезНДС / ТаблицаТоваров.Количество ИНАЧЕ 0 КОНЕЦ
| КОНЕЦ КАК Цена,
| ВЫБОР
| КОГДА ТаблицаТоваров.Упаковка.Вес ЕСТЬ NULL
| ТОГДА ТаблицаТоваров.Количество
| ИНАЧЕ ТаблицаТоваров.КоличествоУпаковок
| КОНЕЦ * &ТекстЗапросаВесУпаковки КАК МассаБрутто,
| ТаблицаТоваров.Количество * &ТекстЗапросаВесНоменклатуры1 КАК МассаНетто,
| ВЫБОР
| КОГДА &ВыводитьБазовыеЕдиницыИзмерения
| ТОГДА ТаблицаТоваров.КоличествоУпаковок
| ИНАЧЕ ТаблицаТоваров.Количество / КоэффициентыУпаковок.КоэффициентВложеннойУпаковки
| КОНЕЦ КАК КоличествоМест,
| ТаблицаТоваров.СуммаБезНДС КАК Сумма,
| ТаблицаТоваров.СуммаНДС КАК СуммаНДС,
| &ТекстЗапросаВесНоменклатуры2 / 1000 КАК КоэффициентПересчетаВТонны,
| ТаблицаТоваров.НомерСтроки КАК НомерСтроки,
| ВЫБОР
| КОГДА ТаблицаТоваров.Упаковка.ТипИзмеряемойВеличины = ЗНАЧЕНИЕ(Перечисление.ТипыИзмеряемыхВеличин.Вес)
| ИЛИ ТаблицаТоваров.Упаковка = ЗНАЧЕНИЕ(Справочник.УпаковкиЕдиницыИзмерения.ПустаяСсылка)
| И ТаблицаТоваров.Номенклатура.ЕдиницаИзмерения.ТипИзмеряемойВеличины = ЗНАЧЕНИЕ(Перечисление.ТипыИзмеряемыхВеличин.Вес)
| ТОГДА ИСТИНА
| ИНАЧЕ ЛОЖЬ
| КОНЕЦ КАК Весовой,
| ТаблицаТоваров.ЭтоВозвратнаяТара КАК ЭтоВозвратнаяТара,
| ТаблицаТоваров.ВариантПредставленияНабораВПечатныхФормах КАК ВариантПредставленияНабораВПечатныхФормах,
| ТаблицаТоваров.ВариантРасчетаЦеныНабора КАК ВариантРасчетаЦеныНабора,
| ТаблицаТоваров.ЭтоКомплектующие КАК ЭтоКомплектующие,
| ТаблицаТоваров.НомерСтрокиНаборы КАК НомерСтрокиНаборы,
| ТаблицаТоваров.ПолныйНабор КАК ПолныйНабор,
| ТаблицаТоваров.ЭтоНабор КАК ЭтоНабор
|ИЗ
| ТаблицаТоваров КАК ТаблицаТоваров
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ ТаблицаТранспортныхНакладных КАК ТаблицаТранспортныхНакладных
| ПО (ТаблицаТранспортныхНакладных.ДокументОснование = ТаблицаТоваров.Ссылка)
| ЛЕВОЕ СОЕДИНЕНИЕ КоэффициентыУпаковок КАК КоэффициентыУпаковок
| ПО ТаблицаТоваров.Номенклатура = КоэффициентыУпаковок.Номенклатура
| И ТаблицаТоваров.Упаковка = КоэффициентыУпаковок.Упаковка
| И ТаблицаТоваров.Ссылка = КоэффициентыУпаковок.Ссылка
| И ТаблицаТоваров.НомерСтроки = КоэффициентыУпаковок.НомерСтроки
| И ТаблицаТоваров.КоличествоУпаковок = КоэффициентыУпаковок.КоличествоУпаковок
| И (НЕ &ВыводитьБазовыеЕдиницыИзмерения)
|
|УПОРЯДОЧИТЬ ПО
| Ссылка,
| НомерСтрокиНаборы,
| ЭтоНабор УБЫВ,
| ПорядковыйНомер,
| ТранспортнаяНакладная,
| НомерСтрокиВТранспортнойНакладной,
| НомерСтроки
|ИТОГИ ПО
| ПорядковыйНомер
|;
|
|
|ВЫБРАТЬ
| ТаблицаТранспортныхНакладных.ТранспортнаяНакладная КАК ТранспортнаяНакладная,
| ТаблицаТранспортныхНакладных.ДокументОснование КАК Ссылка,
| ВЫБОР КОГДА РеестрДокументов.ИсправляемыйДокумент ЕСТЬ NULL ТОГДА
| ТаблицаТранспортныхНакладных.ДокументОснование.Номер
| ИНАЧЕ
| РеестрДокументов.ИсправляемыйДокумент.Номер
| КОНЕЦ КАК Номер,
| ВЫБОР КОГДА РеестрДокументов.ИсправляемыйДокумент ЕСТЬ NULL ТОГДА
| ТаблицаТранспортныхНакладных.ДокументОснование.Дата
| ИНАЧЕ
| РеестрДокументов.ИсправляемыйДокумент.Дата
| КОНЕЦ КАК Дата
|ИЗ
| ТаблицаТранспортныхНакладных КАК ТаблицаТранспортныхНакладных
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.РеестрДокументов КАК РеестрДокументов
| ПО ТаблицаТранспортныхНакладных.ДокументОснование = РеестрДокументов.Ссылка
| И РеестрДокументов.СторноИсправление
| И НЕ РеестрДокументов.ДополнительнаяЗапись
|
|ГДЕ
| ТаблицаТранспортныхНакладных.ТранспортнаяНакладная.ВыводДанныхОТоварномСоставе = ЗНАЧЕНИЕ(Перечисление.ВариантыВыводаДанныхОТоварномСоставе.НомераНакладных)
|
|УПОРЯДОЧИТЬ ПО
| ТаблицаТранспортныхНакладных.ПорядковыйНомер,
| ТранспортнаяНакладная
|;
|
|
|УНИЧТОЖИТЬ КоличествоТоваров";
Запрос.Текст = СтрЗаменить(Запрос.Текст, "&ТекстЗапросаКоэффициентУпаковки1",
Справочники.УпаковкиЕдиницыИзмерения.ТекстЗапросаКоэффициентаУпаковки(
"ТаблицаТоваров.Упаковка",
"ТаблицаТоваров.Номенклатура"));
Запрос.Текст = СтрЗаменить(Запрос.Текст, "&ТекстЗапросаВесУпаковки",
Справочники.УпаковкиЕдиницыИзмерения.ТекстЗапросаВесУпаковки(
"ТаблицаТоваров.Упаковка",
"ТаблицаТоваров.Номенклатура"));
Запрос.Текст = СтрЗаменить(Запрос.Текст, "&ТекстЗапросаВесНоменклатуры1",
Справочники.УпаковкиЕдиницыИзмерения.ТекстЗапросаВесУпаковки(
"ТаблицаТоваров.Номенклатура.ЕдиницаИзмерения",
"ТаблицаТоваров.Номенклатура"));
Запрос.Текст = СтрЗаменить(Запрос.Текст, "&ТекстЗапросаВесНоменклатуры2",
Справочники.УпаковкиЕдиницыИзмерения.ТекстЗапросаВесУпаковки(
"ТаблицаТоваров.Упаковка",
"ТаблицаТоваров.Номенклатура",
Ложь));
Запрос.Текст = СтрЗаменить(
Запрос.Текст,
"&ТекстЗапросаНаименованиеЕдиницыИзмерения1",
Справочники.УпаковкиЕдиницыИзмерения.ТекстЗапросаЗначениеРеквизитаЕдиницыИзмерения(
"Наименование",
"ТаблицаТоваров.Упаковка",
"ТаблицаТоваров.Номенклатура"));
Запрос.Текст = СтрЗаменить(
Запрос.Текст,
"&ТекстЗапросаНаименованиеЕдиницыИзмерения2",
Справочники.УпаковкиЕдиницыИзмерения.ТекстЗапросаЗначениеРеквизитаЕдиницыИзмерения(
"Наименование",
"КоэффициентыУпаковок.ВидУпаковки",
"ТаблицаТоваров.Номенклатура"));
Запрос.УстановитьПараметр("ЗаполненаЕдиницаИзмеренияВеса", ЗначениеЗаполнено(Константы.ЕдиницаИзмеренияВеса.Получить()));
Запрос.УстановитьПараметр("ВыводитьБазовыеЕдиницыИзмерения", Константы.ВыводитьБазовыеЕдиницыИзмерения.Получить());
УстановитьПривилегированныйРежим(Истина);
МассивРезультатов = Запрос.ВыполнитьПакет();
УстановитьПривилегированныйРежим(Ложь);
РезультатПоШапке = МассивРезультатов[1];
РезультатПоТабличнойЧасти = МассивРезультатов[2];
РезультатПоНомерамНакладных = МассивРезультатов[3];
ДанныеДляПечати = Новый Структура(
"РезультатПоШапке, РезультатПоТабличнойЧасти, РезультатПоНомерамНакладных",
РезультатПоШапке,
РезультатПоТабличнойЧасти,
РезультатПоНомерамНакладных);
#КонецОбласти
ЗаполнитьТабличныйДокументТТН(
ТабличныйДокумент,
ДанныеДляПечати,
ОбъектыПечати);
Возврат ТабличныйДокумент;
КонецФункции
Функция СформироватьПечатнуюФормуТранспортнойНакладной(МассивОбъектов, ОбъектыПечати, КомплектыПечати = Неопределено) Экспорт
ТабличныйДокумент = Новый ТабличныйДокумент;
ТабличныйДокумент.АвтоМасштаб = Истина;
ТабличныйДокумент.ОриентацияСтраницы = ОриентацияСтраницы.Портрет;
ТабличныйДокумент.ИмяПараметровПечати = "ПАРАМЕТРЫ_ПЕЧАТИ_ТРАНСПОРТНАЯ_НАКЛАДНАЯ";
УстановитьПривилегированныйРежим(Истина);
МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц;
ТипыОбъектов = ПодготовитьПечатьТТНиТН(МенеджерВременныхТаблиц, МассивОбъектов);
Если ТипыОбъектов.Количество() = 0 Тогда
Возврат ТабличныйДокумент;
КонецЕсли;
#Область ПолучитьДанныеДляПечатнойФормыТранспортнаяНакладная
Запрос = Новый Запрос;
Запрос.МенеджерВременныхТаблиц = МенеджерВременныхТаблиц;
ТекстыЗапросаВыборкиИзДокументовОснований = Новый Массив;
Для Каждого КлючЗначение Из ТипыОбъектов Цикл
ТипОбъекта = КлючЗначение.Ключ;
МетаданныеОбъекта = Метаданные.НайтиПоТипу(ТипОбъекта);
ПолноеИмяОснования = МетаданныеОбъекта.ПолноеИмя();
МодульЛокализации = ОбщегоНазначенияУТ.ПолучитьМодульЛокализации(ПолноеИмяОснования);
Если МодульЛокализации = Неопределено Тогда
МодульЛокализации = ОбщегоНазначения.МенеджерОбъектаПоПолномуИмени(ПолноеИмяОснования);
КонецЕсли;
ПараметрыФормированияТранспортныхНакладных = МодульЛокализации.ПараметрыФормированияТранспортныхНакладных();
ТекстЗапроса =
"ВЫБРАТЬ
| ДокументыОснования.ТранспортнаяНакладная КАК Ссылка,
| ДокументыОснования.ПорядковыйНомер КАК ПорядковыйНомер,
| ВЫБОР
| КОГДА ДокументТовары.Номенклатура.ВидНоменклатуры.ИспользоватьИндивидуальноеНаименованиеПриПечати
| ТОГДА ЕСТЬNULL(ДокументТовары.Номенклатура.ВидНоменклатуры.НаименованиеДляПечати, """")
| ИНАЧЕ &НаименованиеДляПечатиВидовНоменклатуры
| КОНЕЦ КАК НаименованиеВидаНоменклатуры
|ИЗ
| ПолноеИмяТаблицы_ КАК ДокументТовары
| ЛЕВОЕ СОЕДИНЕНИЕ ТаблицаТранспортныхНакладных КАК ДокументыОснования
| ПО (ДокументыОснования.ДокументОснование = ДокументТовары.Ссылка)
|ГДЕ
| ДокументТовары.Ссылка В (&ДокументыОснованияИмяТаблицы_)";
ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "ПолноеИмяТаблицы_", ПолноеИмяОснования + ".Товары");
ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "ИмяТаблицы_", Метаданные.Имя);
Запрос.УстановитьПараметр("ДокументыОснования" + Метаданные.Имя, КлючЗначение.Значение);
ТекстыЗапросаВыборкиИзДокументовОснований.Добавить(ТекстЗапроса);
КонецЦикла;
ТекстЗапроса =
"ВЫБРАТЬ РАЗЛИЧНЫЕ
| ТаблицаТранспортныхНакладных.ТранспортнаяНакладная КАК Ссылка,
| ВЫБОР КОГДА РеестрДокументов.ИсправляемыйДокумент ЕСТЬ NULL ТОГДА
| ТаблицаТранспортныхНакладных.ТранспортнаяНакладная.Номер
| ИНАЧЕ
| РеестрДокументов.ИсправляемыйДокумент.Номер
| КОНЕЦ КАК Номер,
| ВЫБОР КОГДА РеестрДокументов.ИсправляемыйДокумент ЕСТЬ NULL ТОГДА
| ТаблицаТранспортныхНакладных.ТранспортнаяНакладная.Дата
| ИНАЧЕ
| РеестрДокументов.ИсправляемыйДокумент.Дата
| КОНЕЦ КАК Дата,
| ТаблицаТранспортныхНакладных.ТранспортнаяНакладная.Организация КАК Организация,
| ТаблицаТранспортныхНакладных.ТранспортнаяНакладная.Грузополучатель КАК Грузополучатель,
| ТаблицаТранспортныхНакладных.ТранспортнаяНакладная.Грузоотправитель КАК Грузоотправитель,
| ТаблицаТранспортныхНакладных.ТранспортнаяНакладная.ЗаказчикПеревозки КАК ЗаказчикПеревозки,
| ТаблицаТранспортныхНакладных.ТранспортнаяНакладная.БанковскийСчетЗаказчикаПеревозки КАК БанковскийСчетЗаказчикаПеревозки,
| ТаблицаТранспортныхНакладных.ТранспортнаяНакладная.Отпустил КАК Кладовщик,
| ТаблицаТранспортныхНакладных.ТранспортнаяНакладная.ОтпустилДолжность КАК ДолжностьКладовщика,
| ТаблицаТранспортныхНакладных.ТранспортнаяНакладная.Плательщик КАК Плательщик,
| ТаблицаТранспортныхНакладных.ТранспортнаяНакладная.БанковскийСчетПлательщика КАК БанковскийСчетПлательщика,
| ТаблицаТранспортныхНакладных.ТранспортнаяНакладная.Перевозчик КАК Перевозчик,
| ТаблицаТранспортныхНакладных.ТранспортнаяНакладная.Водитель КАК Водитель,
| ТаблицаТранспортныхНакладных.ТранспортнаяНакладная.ВидПеревозки КАК ВидПеревозки,
| ТаблицаТранспортныхНакладных.ТранспортнаяНакладная.АвтомобильМарка КАК МаркаАвтомобиля,
| ТаблицаТранспортныхНакладных.ТранспортнаяНакладная.АвтомобильГосударственныйНомер КАК ГосНомерАвтомобиля,
| ТаблицаТранспортныхНакладных.ТранспортнаяНакладная.АдресПогрузки КАК ПунктПогрузки,
| ТаблицаТранспортныхНакладных.ТранспортнаяНакладная.АдресДоставки КАК ПунктРазгрузки,
| ТаблицаТранспортныхНакладных.ТранспортнаяНакладная.СрокДоставки КАК СрокДоставки,
| ТаблицаТранспортныхНакладных.ТранспортнаяНакладная.АвтомобильГрузоподъемностьВТоннах КАК ГрузоподъемностьВТоннахАвтомобиля,
| ТаблицаТранспортныхНакладных.ТранспортнаяНакладная.АвтомобильВместимостьВКубическихМетрах КАК ВместимостьВКубическихМетрахАвтомобиля,
| ТаблицаТранспортныхНакладных.ТранспортнаяНакладная.АвтомобильТип КАК ТипАвтомобиля,
| ТаблицаТранспортныхНакладных.ТранспортнаяНакладная.МассаБрутто КАК МассаБрутто,
| ТаблицаТранспортныхНакладных.ПорядковыйНомер
|ИЗ
| ТаблицаТранспортныхНакладных КАК ТаблицаТранспортныхНакладных
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.РеестрДокументов КАК РеестрДокументов
| ПО ТаблицаТранспортныхНакладных.ТранспортнаяНакладная = РеестрДокументов.Ссылка
| И РеестрДокументов.СторноИсправление
| И НЕ РеестрДокументов.ДополнительнаяЗапись
|
|УПОРЯДОЧИТЬ ПО
| ТаблицаТранспортныхНакладных.ПорядковыйНомер
|;
|
|
|ВЫБРАТЬ РАЗЛИЧНЫЕ
| ВнутреннийЗапрос.Ссылка,
| ВнутреннийЗапрос.ПорядковыйНомер,
| ВнутреннийЗапрос.НаименованиеВидаНоменклатуры
|ИЗ
| (&ТекстЗапросаВыборкиИзДокументовОснований) КАК ВнутреннийЗапрос
|
|УПОРЯДОЧИТЬ ПО
| ВнутреннийЗапрос.ПорядковыйНомер,
| ВнутреннийЗапрос.НаименованиеВидаНоменклатуры";
ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ТекстЗапросаВыборкиИзДокументовОснований",
СтрСоединить(ТекстыЗапросаВыборкиИзДокументовОснований, ОбщегоНазначенияУТ.РазделительЗапросовВОбъединении()));
Запрос.Текст = ТекстЗапроса;
Запрос.УстановитьПараметр("НаименованиеДляПечатиВидовНоменклатуры", Константы.НаименованиеДляПечатиВидовНоменклатуры.Получить());
УстановитьПривилегированныйРежим(Истина);
РезультатЗапроса = Запрос.ВыполнитьПакет();
УстановитьПривилегированныйРежим(Ложь);
ДанныеДляПечати = Новый Структура;
ДанныеДляПечати.Вставить("ТаблицаРезультата", РезультатЗапроса[0].Выгрузить());
ДанныеДляПечати.Вставить("РезультатИменаТоваров", РезультатЗапроса[1]);
#КонецОбласти
ЗаполнитьТабличныйДокументТН(
ТабличныйДокумент,
ДанныеДляПечати,
ОбъектыПечати,
КомплектыПечати);
Возврат ТабличныйДокумент;
КонецФункции
Функция ОписаниеВодительскогоУдостоверения(Серия, Номер)
ПредставлениеУдостоверения = "";
Если Не ПустаяСтрока(Серия) Тогда
ПредставлениеУдостоверения = СокрЛП(Серия) + ", ";
КонецЕсли;
ПредставлениеУдостоверения = ПредставлениеУдостоверения + Номер;
Возврат ПредставлениеУдостоверения;
КонецФункции
Функция СтруктураИтоговыеСуммыТТН()
Структура = Новый Структура;
Структура.Вставить("ИтогоМассаБруттоНаСтранице", 0);
Структура.Вставить("ИтогоМестНаСтранице", 0);
Структура.Вставить("ИтогоКоличествоНаСтранице", 0);
Структура.Вставить("ИтогоСуммаНаСтранице", 0);
Структура.Вставить("ИтогоМассаНеттоНаСтранице", 0);
Структура.Вставить("ИтогоМассаБрутто", 0);
Структура.Вставить("ИтогоМест", 0);
Структура.Вставить("ИтогоКоличество", 0);
Структура.Вставить("ИтогоСумма", 0);
Структура.Вставить("ИтогоМассаНетто", 0);
Структура.Вставить("КоличествоПорядковыхНомеровЗаписейПрописью", 0);
Структура.Вставить("СуммаПрописью", "");
Возврат Структура;
КонецФункции
Функция СтруктураДанныеСтрокиТТН()
Структура = Новый Структура;
Структура.Вставить("Номер", 0);
Структура.Вставить("Мест", 0);
Структура.Вставить("Количество", 0);
Структура.Вставить("Цена", 0);
Структура.Вставить("Сумма", 0);
Структура.Вставить("МассаБрутто", 0);
Структура.Вставить("МассаНетто", 0);
Возврат Структура;
КонецФункции
Процедура РассчитатьИтоговыеСуммыТТН(ИтоговыеСуммы, ДанныеСтроки)
ИтоговыеСуммы.ИтогоМестНаСтранице = ИтоговыеСуммы.ИтогоМестНаСтранице + ДанныеСтроки.Мест;
ИтоговыеСуммы.ИтогоКоличествоНаСтранице = ИтоговыеСуммы.ИтогоКоличествоНаСтранице + ДанныеСтроки.Количество;
ИтоговыеСуммы.ИтогоСуммаНаСтранице = ИтоговыеСуммы.ИтогоСуммаНаСтранице + ДанныеСтроки.Сумма;
ИтоговыеСуммы.ИтогоМассаБруттоНаСтранице = ИтоговыеСуммы.ИтогоМассаБруттоНаСтранице + ДанныеСтроки.МассаБрутто;
ИтоговыеСуммы.ИтогоМассаНеттоНаСтранице = ИтоговыеСуммы.ИтогоМассаНеттоНаСтранице + ДанныеСтроки.МассаНетто;
ИтоговыеСуммы.ИтогоМест = ИтоговыеСуммы.ИтогоМест + ДанныеСтроки.Мест;
ИтоговыеСуммы.ИтогоКоличество = ИтоговыеСуммы.ИтогоКоличество + ДанныеСтроки.Количество;
ИтоговыеСуммы.ИтогоСумма = ИтоговыеСуммы.ИтогоСумма + ДанныеСтроки.Сумма;
ИтоговыеСуммы.ИтогоМассаБрутто = ИтоговыеСуммы.ИтогоМассаБрутто + ДанныеСтроки.МассаБрутто;
ИтоговыеСуммы.ИтогоМассаНетто = ИтоговыеСуммы.ИтогоМассаНетто + ДанныеСтроки.МассаНетто;
КонецПроцедуры
Процедура ОбнулитьИтогиПоСтраницеТТН(ИтоговыеСуммы)
ИтоговыеСуммы.ИтогоМассаБруттоНаСтранице = 0;
ИтоговыеСуммы.ИтогоМассаНеттоНаСтранице = 0;
ИтоговыеСуммы.ИтогоМестНаСтранице = 0;
ИтоговыеСуммы.ИтогоКоличествоНаСтранице = 0;
ИтоговыеСуммы.ИтогоСуммаНаСтранице = 0;
КонецПроцедуры
Процедура ДобавитьИтоговыеДанныеПодвалаТТН(ИтоговыеСуммы, ВсегоНомеров, ВалютаРегламентированногоУчета)
ИтоговыеСуммы.Вставить("КоличествоПорядковыхНомеровЗаписейПрописью", ЧислоПрописью(ВсегоНомеров, ,",,,,,,,,0"));
ИтоговыеСуммы.Вставить("СуммаПрописью", РаботаСКурсамиВалютУТ.СформироватьСуммуПрописью(ИтоговыеСуммы.ИтогоСумма, ВалютаРегламентированногоУчета));
КонецПроцедуры
Процедура ДобавитьИтоговыеДанныеПодвалаТТНДляНесколькихНакладных(ИтоговыеСуммы, ВсегоНомеров, ВалютаРегламентированногоУчета)
ИтоговыеСуммы.Вставить("КоличествоПорядковыхНомеровЗаписейПрописью", ЧислоПрописью(ВсегоНомеров, ,",,,,,,,,0"));
ИтоговыеСуммы.Вставить("СуммаПрописью", РаботаСКурсамиВалютУТ.СформироватьСуммуПрописью(ИтоговыеСуммы.ИтогоСумма, ВалютаРегламентированногоУчета));
КонецПроцедуры
Процедура ЗаполнитьРеквизитыСтрокиТовараТТН(ДанныеПечати, СтрокаТовары, ДанныеСтроки, ОбластьМакета, ЕдиницаИзмеренияВеса = Неопределено, КоэффициентПересчетаВТонны = 0)
ДополнительныеПараметрыПолученияНаименованияДляПечати = НоменклатураКлиентСервер.ДополнительныеПараметрыПредставлениеНоменклатурыДляПечати();
ДополнительныеПараметрыПолученияНаименованияДляПечати.ВозвратнаяТара = СтрокаТовары.ЭтоВозвратнаяТара;
ДопПараметрыПредставлениеНоменклатуры = НоменклатураКлиентСервер.ДополнительныеПараметрыПредставлениеНоменклатурыДляПечати();
ДопПараметрыПредставлениеНоменклатуры.КодОсновногоЯзыка = ОбщегоНазначения.КодОсновногоЯзыка();
ОбластьМакета.Параметры.ТоварНаименование = НоменклатураКлиентСервер.ПредставлениеНоменклатурыДляПечати(
СтрокаТовары.ТоварНаименование,
СтрокаТовары.Характеристика,
,
,
ДополнительныеПараметрыПолученияНаименованияДляПечати);
ИспользоватьНаборы = ОбщегоНазначенияУТКлиентСервер.ЕстьРеквизитОбъекта(СтрокаТовары, "ЭтоНабор");
ДанныеДляРасчетаПостфикса = Новый Структура("ЭтоКомплектующие, ЭтоНабор, ПолныйНабор,
|ВариантПредставленияНабораВПечатныхФормах, ВариантРасчетаЦеныНабора, Количество");
ЗаполнитьЗначенияСвойств(ДанныеДляРасчетаПостфикса, СтрокаТовары);
ДанныеДляРасчетаПостфикса.Вставить("ЕдиницаИзмерения", СтрокаТовары.БазоваяЕдиницаНаименование);
ПрефиксИПостфикс = НаборыСервер.ПолучитьПрефиксИПостфикс(ДанныеДляРасчетаПостфикса, ИспользоватьНаборы);
ВыводитьЦены = Ложь;
Если ИспользоватьНаборы
И СтрокаТовары.ЭтоКомплектующие
И СтрокаТовары.ВариантПредставленияНабораВПечатныхФормах = Перечисления.ВариантыПредставленияНаборовВПечатныхФормах.НаборИКомплектующие
И (СтрокаТовары.ВариантРасчетаЦеныНабора = Перечисления.ВариантыРасчетаЦенНаборов.ЦенаЗадаетсяЗаНаборРаспределяетсяПоДолям
ИЛИ СтрокаТовары.ВариантРасчетаЦеныНабора = Перечисления.ВариантыРасчетаЦенНаборов.ЦенаЗадаетсяЗаНаборРаспределяетсяПоЦенам) Тогда
ОбластьМакета.Параметры.Заполнить(НаборыСервер.ПустыеДанные());
ИначеЕсли ИспользоватьНаборы
И СтрокаТовары.ЭтоНабор
И СтрокаТовары.ВариантПредставленияНабораВПечатныхФормах = Перечисления.ВариантыПредставленияНаборовВПечатныхФормах.НаборИКомплектующие
И (СтрокаТовары.ВариантРасчетаЦеныНабора = Перечисления.ВариантыРасчетаЦенНаборов.РассчитываетсяИзЦенКомплектующих) Тогда
ОбластьМакета.Параметры.Заполнить(НаборыСервер.ПустыеДанные());
Иначе
ОбластьМакета.Параметры.Заполнить(СтрокаТовары);
ВыводитьЦены = Истина;
КонецЕсли;
ПредставлениеНоменклатуры = ПрефиксИПостфикс.Префикс
+ НоменклатураКлиентСервер.ПредставлениеНоменклатурыДляПечати(
Строка(СтрокаТовары.ТоварНаименование),
СтрокаТовары.Характеристика,
,
,
ДополнительныеПараметрыПолученияНаименованияДляПечати)
+ ПрефиксИПостфикс.Постфикс;
ОбластьМакета.Параметры.ТоварНаименование = ПредставлениеНоменклатуры;
Если ЕдиницаИзмеренияВеса <> Неопределено Тогда
Если Не ЗначениеЗаполнено(ЕдиницаИзмеренияВеса) Тогда
ДанныеСтроки.МассаБрутто = 0;
ДанныеСтроки.МассаНетто = 0;
Иначе
ДанныеСтроки.МассаБрутто = СтрокаТовары.МассаБрутто;
ДанныеСтроки.МассаНетто = СтрокаТовары.МассаНетто;
КонецЕсли;
КонецЕсли;
ДанныеСтроки.Сумма = СтрокаТовары.Сумма + СтрокаТовары.СуммаНДС;
ДанныеСтроки.Цена = ?(СтрокаТовары.Количество = 0, 0, ДанныеСтроки.Сумма / СтрокаТовары.Количество);
Если СтрокаТовары.Весовой Тогда
ДанныеСтроки.Мест = 0;
ДанныеСтроки.Количество = 0;
ОбластьМакета.Параметры.Количество = 0;
ОбластьМакета.Параметры.КоличествоМест = 0;
ОбластьМакета.Параметры.БазоваяЕдиницаНаименование = "";
ОбластьМакета.Параметры.ВидУпаковки = "";
Если ВыводитьЦены Тогда
ОбластьМакета.Параметры.Цена = ДанныеСтроки.Цена / СтрокаТовары.КоэффициентПересчетаВТонны;
ОбластьМакета.Параметры.Сумма = ДанныеСтроки.Сумма;
КонецЕсли;
Иначе
Если СтрокаТовары.КоличествоМест - Цел(СтрокаТовары.КоличествоМест) > 0 Тогда
ДанныеСтроки.Мест = Цел(СтрокаТовары.КоличествоМест) + 1;
Иначе
ДанныеСтроки.Мест = СтрокаТовары.КоличествоМест;
КонецЕсли;
ДанныеСтроки.Количество = СтрокаТовары.Количество;
ОбластьМакета.Параметры.Количество = ДанныеСтроки.Количество;
ОбластьМакета.Параметры.КоличествоМест = ДанныеСтроки.Мест;
ОбластьМакета.Параметры.БазоваяЕдиницаНаименование = СтрокаТовары.БазоваяЕдиницаНаименование;
ОбластьМакета.Параметры.ВидУпаковки = СтрокаТовары.ВидУпаковки;
Если ВыводитьЦены Тогда
ОбластьМакета.Параметры.Цена = ДанныеСтроки.Цена;
ОбластьМакета.Параметры.Сумма = ДанныеСтроки.Сумма;
КонецЕсли;
КонецЕсли;
ОбластьМакета.Параметры.МассаНетто = Окр(СтрокаТовары.МассаНетто*КоэффициентПересчетаВТонны, 3, РежимОкругления.Окр15как20);
КонецПроцедуры
Процедура ЗаполнитьНомераНакладныхВСтрокеТовараТТН(ДанныеПечати, ВыборкаНомеровТН, ДанныеСтроки, ОбластьМакета)
СтрокаНомеровНакладных = НСтр("ru = 'Товары по накладным: %НомерНакладной%'");
СтруктураПоиска = Новый Структура("ТранспортнаяНакладная", ДанныеПечати.Ссылка);
ПредставленияНакладных = Новый Массив;
Пока ВыборкаНомеровТН.НайтиСледующий(СтруктураПоиска) Цикл
СтруктураШапки = Новый Структура("Дата, Номер");
ЗаполнитьЗначенияСвойств(СтруктураШапки, ВыборкаНомеровТН);
ПредставленияНакладных.Добавить(ОбщегоНазначенияУТКлиентСервер.СформироватьЗаголовокДокумента(СтруктураШапки));
КонецЦикла;
СтрокаНомеровНакладных = СтрЗаменить(СтрокаНомеровНакладных, "%НомерНакладной%", СтрСоединить(ПредставленияНакладных, ", "));
ОбластьМакета.Параметры.ТоварНаименование = СтрокаНомеровНакладных;
ОбластьМакета.Параметры.ТоварКод = "";
ДанныеСтроки.МассаБрутто = 0;
ДанныеСтроки.МассаНетто = 0;
ДанныеСтроки.Сумма = 0;
ДанныеСтроки.Цена = 0;
ДанныеСтроки.Мест = 0;
ДанныеСтроки.Количество = 0;
ОбластьМакета.Параметры.Цена = "";
ОбластьМакета.Параметры.Сумма = "";
ОбластьМакета.Параметры.Количество = "";
ОбластьМакета.Параметры.КоличествоМест = "";
ОбластьМакета.Параметры.БазоваяЕдиницаНаименование = "";
ОбластьМакета.Параметры.ВидУпаковки = "";
КонецПроцедуры
Процедура ЗаполнитьРеквизитыШапкиТТН(ДанныеПечати, Макет, ТабличныйДокумент)
РеквизитыШапки = Новый Структура;
СведенияОПокупателе = ФормированиеПечатныхФорм.СведенияОЮрФизЛице(ДанныеПечати.Плательщик,ДанныеПечати.Дата,, ДанныеПечати.БанковскийСчетПлательщика);
СведенияОГрузополучателе = ФормированиеПечатныхФорм.СведенияОЮрФизЛице(ДанныеПечати.Грузополучатель, ДанныеПечати.Дата);
СведенияОГрузоотправитель = ФормированиеПечатныхФорм.СведенияОЮрФизЛице(ДанныеПечати.Грузоотправитель, ДанныеПечати.Дата);
ОбластьМакета = Макет.ПолучитьОбласть("Шапка");
ОбластьМакета.Параметры.Заполнить(ДанныеПечати);
РеквизитыШапки.Вставить("НомерДокумента", ПрефиксацияОбъектовКлиентСервер.НомерНаПечать(ДанныеПечати.Номер));
РеквизитыШапки.Вставить("ДатаДокумента", ДанныеПечати.Дата);
ШтрихкодированиеПечатныхФорм.ВывестиШтрихкодВТабличныйДокумент(ТабличныйДокумент, Макет, ОбластьМакета, ДанныеПечати.Ссылка);
ПредставлениеОрганизации = ФормированиеПечатныхФорм.ОписаниеОрганизации(СведенияОГрузоотправитель,
"ПолноеНаименование,ИНН,ЮридическийАдрес,Телефоны");
ПредставлениеГрузополучателя = ФормированиеПечатныхФорм.ОписаниеОрганизации(СведенияОГрузополучателе,
"ПолноеНаименование,ИНН,ЮридическийАдрес,Телефоны");
ПредставлениеПлательщика = ФормированиеПечатныхФорм.ОписаниеОрганизации(СведенияОПокупателе,
"ПолноеНаименование,ЮридическийАдрес,НомерСчета,Банк,БИК,КоррСчет");
РеквизитыШапки.Вставить("ПредставлениеОрганизации", ПредставлениеОрганизации);
РеквизитыШапки.Вставить("ПредставлениеГрузополучателя", ПредставлениеГрузополучателя);
РеквизитыШапки.Вставить("ПредставлениеПлательщика", ПредставлениеПлательщика);
РеквизитыШапки.Вставить("ОрганизацияПоОКПО", СведенияОГрузоотправитель.КодПоОКПО);
РеквизитыШапки.Вставить("ГрузополучательПоОКПО", СведенияОГрузополучателе.КодПоОКПО);
РеквизитыШапки.Вставить("ПлательщикПоОКПО", СведенияОПокупателе.КодПоОКПО);
ЗаполнитьЗначенияСвойств(ОбластьМакета.Параметры, РеквизитыШапки);
ТабличныйДокумент.Вывести(ОбластьМакета);
КонецПроцедуры
Процедура ЗаполнитьРеквизитыПодвалаТТН(ДанныеПечати, ИтоговыеСуммы, Макет, ТабличныйДокумент, ЕдиницаИзмеренияВеса = Неопределено, КоэффициентПересчетаВТонны = 0)
ОбластьМакета = Макет.ПолучитьОбласть("Подвал");
ОбластьМакета.Параметры.ПолнаяДатаДокумента = Формат(ДанныеПечати.Дата, "ДЛФ=DD");
ОбластьМакета.Параметры.ФИОГлавБухгалтера = ДанныеПечати.ГлавныйБухгалтер;
ОбластьМакета.Параметры.ФИОРуководителя = ДанныеПечати.Руководитель;
ОбластьМакета.Параметры.ДолжностьРуководителя = ДанныеПечати.ДолжностьРуководителя;
ОбластьМакета.Параметры.ФИОКладовщика = ФизическиеЛицаУТ.ФамилияИнициалыФизЛица(ДанныеПечати.Кладовщик, ДанныеПечати.Дата);
ОбластьМакета.Параметры.ДолжностьКладовщика = ДанныеПечати.ДолжностьКладовщика;
ОбластьМакета.Параметры.ДоверенностьНомер = ДанныеПечати.ДоверенностьНомер;
ОбластьМакета.Параметры.ДоверенностьДата = Формат(ДанныеПечати.ДоверенностьДата, "ДЛФ=DD");
ОбластьМакета.Параметры.ДоверенностьВыдана = ДанныеПечати.ДоверенностьВыдана;
ОбластьМакета.Параметры.ДоверенностьЧерезКого = ДанныеПечати.ДоверенностьЛицо;
Если ИтоговыеСуммы.ИтогоМест > 0 Тогда
ОбластьМакета.Параметры.ВсегоМестПрописью = ЧислоПрописью(ИтоговыеСуммы.ИтогоМест, ,",,,,,,,,0");
КонецЕсли;
Если ЗначениеЗаполнено(ЕдиницаИзмеренияВеса) И ДанныеПечати.МассаБрутто > 0 Тогда
ПараметрыМассыПрописью = ПродажиСервер.ПараметрыМассыПрописью(ДанныеПечати.МассаБрутто/1000, 1);
ОбластьМакета.Параметры.МассаГрузаБруттоПрописью = ЧислоПрописью(
ДанныеПечати.МассаБрутто/1000*ПараметрыМассыПрописью.Коэффициент,
"ДП=Истина",
ПараметрыМассыПрописью.Формат);
Если КоэффициентПересчетаВТонны <> 0 Тогда
ОбластьМакета.Параметры.МассаГрузаБрутто = Окр(ДанныеПечати.МассаБрутто/1000,3,РежимОкругления.Окр15как20);
КонецЕсли;
КонецЕсли;
Если ЗначениеЗаполнено(ЕдиницаИзмеренияВеса) И ДанныеПечати.МассаНетто > 0 Тогда
ПараметрыМассыПрописью = ПродажиСервер.ПараметрыМассыПрописью(ДанныеПечати.МассаНетто/1000, 1);
ОбластьМакета.Параметры.МассаГрузаНеттоПрописью = ЧислоПрописью(
ДанныеПечати.МассаНетто/1000*ПараметрыМассыПрописью.Коэффициент,
"ДП=Истина",
ПараметрыМассыПрописью.Формат);
Если КоэффициентПересчетаВТонны <> 0 Тогда
ОбластьМакета.Параметры.МассаГрузаНетто = Окр(ДанныеПечати.МассаНетто/1000,3,РежимОкругления.Окр15как20);
КонецЕсли;
КонецЕсли;
ОбластьМакета.Параметры.КоличествоПорядковыхНомеровЗаписейПрописью = ИтоговыеСуммы.КоличествоПорядковыхНомеровЗаписейПрописью;
ОбластьМакета.Параметры.ВсегоНаименованийПрописью = ЧислоПрописью(ДанныеПечати.КоличествоНаименований, ,",,,,,,,,0");
ОбластьМакета.Параметры.СуммаПрописью = ИтоговыеСуммы.СуммаПрописью;
ТабличныйДокумент.Вывести(ОбластьМакета);
КонецПроцедуры
Процедура ЗаполнитьРеквизитыТранспортногоРазделаТТН(ДанныеПечати, Макет, ОбластьМакета)
СведенияОПеревозчике = ФормированиеПечатныхФорм.СведенияОЮрФизЛице(ДанныеПечати.Перевозчик, ДанныеПечати.Дата,,ДанныеПечати.БанковскийСчетПеревозчика);
СведенияОЗаказчикеПеревозок = ФормированиеПечатныхФорм.СведенияОЮрФизЛице(ДанныеПечати.ЗаказчикПеревозки, ДанныеПечати.Дата,,ДанныеПечати.БанковскийСчетЗаказчикаПеревозки);
ОбластьМакета.Параметры.НомерДокумента = ПрефиксацияОбъектовКлиентСервер.НомерНаПечать(ДанныеПечати.Номер);
ОбластьМакета.Параметры.ПредставлениеПеревозчика = ФормированиеПечатныхФорм.ОписаниеОрганизации(СведенияОПеревозчике,
"ПолноеНаименование,ФактическийАдрес,Телефоны,НомерСчета,Банк,БИК,КоррСчет");
ОбластьМакета.Параметры.ПредставлениеЗаказчикаПеревозок = ФормированиеПечатныхФорм.ОписаниеОрганизации(СведенияОЗаказчикеПеревозок,
"ПолноеНаименование,ФактическийАдрес,Телефоны,НомерСчета,Банк,БИК,КоррСчет");
ОбластьМакета.Параметры.ПредставлениеВодителя = ДанныеПечати.Водитель;
ОбластьМакета.Параметры.ВодительскоеУдостоверение = ОписаниеВодительскогоУдостоверения(
ДанныеПечати.УдостоверениеСерия,
ДанныеПечати.УдостоверениеНомер);
ОбластьМакета.Параметры.Заполнить(ДанныеПечати);
СтандартнаяКарточка = ДанныеПечати.ЛицензионнаяКарточкаВид = "Стандартная";
ОграниченнаяКарточка = ДанныеПечати.ЛицензионнаяКарточкаВид = "Ограниченная";
Если СтандартнаяКарточка
Или ОграниченнаяКарточка Тогда
ШрифтСтандарт = Новый Шрифт(ОбластьМакета.Области.Стандарт.Шрифт, , , , , ,Не СтандартнаяКарточка);
ШрифтОграничено = Новый Шрифт(ОбластьМакета.Области.Стандарт.Шрифт, , , , , ,Не ОграниченнаяКарточка);
КонецЕсли;
ОбластьМакета.Области.Стандарт.Шрифт = ШрифтСтандарт;
ОбластьМакета.Области.Ограничено.Шрифт = ШрифтОграничено;
КонецПроцедуры
Процедура ЗаполнитьТабличныйДокументТТН(ТабличныйДокумент, ДанныеДляПечати, ОбъектыПечати)
ЕдиницаИзмеренияВеса = Константы.ЕдиницаИзмеренияВеса.Получить();
КоэффициентПересчетаВТонны = НоменклатураСервер.КоэффициентПересчетаВТонны(Константы.ЕдиницаИзмеренияВеса.Получить());
ДанныеПечати = ДанныеДляПечати.РезультатПоШапке.Выбрать();
ВыборкаПоДокументам = ДанныеДляПечати.РезультатПоТабличнойЧасти.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
ВыборкаПоНомерамТранспортныхНакладных = ДанныеДляПечати.РезультатПоНомерамНакладных.Выбрать();
Макет = УправлениеПечатью.МакетПечатнойФормы("Документ.ТранспортнаяНакладная.ПФ_MXL_ТТН");
ПервыйДокумент = Истина;
Пока ДанныеПечати.Следующий() Цикл
СтруктураПоиска = Новый Структура("ПорядковыйНомер", ДанныеПечати.ПорядковыйНомер);
НайденСледующий = ВыборкаПоДокументам.НайтиСледующий(СтруктураПоиска);
СтрокаТовары = ВыборкаПоДокументам.Выбрать();
КоличествоСтрок = СтрокаТовары.Количество();
Если Не ПервыйДокумент Тогда
ТабличныйДокумент.ВывестиГоризонтальныйРазделительСтраниц();
КонецЕсли;
ПервыйДокумент = Ложь;
НомерСтрокиНачало = ТабличныйДокумент.ВысотаТаблицы + 1;
ЗаполнитьРеквизитыШапкиТТН(ДанныеПечати, Макет, ТабличныйДокумент);
НомерСтраницы = 1;
ИтоговыеСуммы = СтруктураИтоговыеСуммыТТН();
ДанныеСтроки = СтруктураДанныеСтрокиТТН();
МассивВыводимыхОбластей = Новый Массив;
ОбластьЗаголовокТаблицы = Макет.ПолучитьОбласть("ЗаголовокТаблицы");
ОбластьМакета = Макет.ПолучитьОбласть("Строка");
ОбластьМакетаСтандарт = Макет.ПолучитьОбласть("Строка");
ОбластьИтоговПоСтранице = Макет.ПолучитьОбласть("ИтогоПоСтранице");
ОбластьВсего = Макет.ПолучитьОбласть("Всего");
ОбластьПодвала = Макет.ПолучитьОбласть("Подвал");
ОбластьТранспортногоРаздела = Макет.ПолучитьОбласть("ТранспортныйРаздел");
ОбластьСведенийОГрузе = Макет.ПолучитьОбласть("СведенияОГрузе");
ОбластьПодвалаСведенийОГрузе = Макет.ПолучитьОбласть("ПодвалСведенийОГрузе");
ОбластьПогрузочныхОпераций = Макет.ПолучитьОбласть("ПогрузочныеОперации");
ОбластьПрочихСведений = Макет.ПолучитьОбласть("ПрочиеСведения");
ИспользоватьНаборы = Ложь;
Если ОбщегоНазначенияУТКлиентСервер.ЕстьРеквизитОбъекта(ВыборкаПоДокументам, "ЭтоНабор") Тогда
ИспользоватьНаборы = Истина;
ОбластьМакетаНабор = Макет.ПолучитьОбласть("СтрокаНабор");
ОбластьМакетаКомплектующие = Макет.ПолучитьОбласть("СтрокаКомплектующие");
КонецЕсли;
ВыводШапки = 0;
Если ДанныеПечати.ВыводДанныхОТоварномСоставе = Перечисления.ВариантыВыводаДанныхОТоварномСоставе.ТоварныйСостав Тогда
Пока СтрокаТовары.Следующий() Цикл
ДанныеСтроки.Номер = ДанныеСтроки.Номер + 1;
Если НаборыСервер.ИспользоватьОбластьНабор(СтрокаТовары, ИспользоватьНаборы) Тогда
ОбластьМакета = ОбластьМакетаНабор;
ИначеЕсли НаборыСервер.ИспользоватьОбластьКомплектующие(СтрокаТовары, ИспользоватьНаборы) Тогда
ОбластьМакета = ОбластьМакетаКомплектующие;
Иначе
ОбластьМакета = ОбластьМакетаСтандарт;
КонецЕсли;
ЗаполнитьРеквизитыСтрокиТовараТТН(ДанныеПечати, СтрокаТовары, ДанныеСтроки, ОбластьМакета, ЕдиницаИзмеренияВеса, КоэффициентПересчетаВТонны);
Если ДанныеСтроки.Номер = 1 Тогда
ОбластьЗаголовокТаблицы.Параметры.НомерСтраницы = "Страница " + НомерСтраницы;
ТабличныйДокумент.Вывести(ОбластьЗаголовокТаблицы);
Иначе
МассивВыводимыхОбластей.Очистить();
МассивВыводимыхОбластей.Добавить(ОбластьМакета);
МассивВыводимыхОбластей.Добавить(ОбластьИтоговПоСтранице);
Если ДанныеСтроки.Номер = КоличествоСтрок Тогда
МассивВыводимыхОбластей.Добавить(ОбластьВсего);
МассивВыводимыхОбластей.Добавить(ОбластьПодвала);
КонецЕсли;
Если ДанныеСтроки.Номер <> 1 И Не ТабличныйДокумент.ПроверитьВывод(МассивВыводимыхОбластей) Тогда
ОбластьИтоговПоСтранице.Параметры.Заполнить(ИтоговыеСуммы);
ТабличныйДокумент.Вывести(ОбластьИтоговПоСтранице);
ОбнулитьИтогиПоСтраницеТТН(ИтоговыеСуммы);
НомерСтраницы = НомерСтраницы + 1;
ТабличныйДокумент.ВывестиГоризонтальныйРазделительСтраниц();
ОбластьЗаголовокТаблицы.Параметры.НомерСтраницы = "Страница " + НомерСтраницы;
ТабличныйДокумент.Вывести(ОбластьЗаголовокТаблицы);
КонецЕсли;
КонецЕсли;
ТабличныйДокумент.Вывести(ОбластьМакета);
Если Не НаборыСервер.ИспользоватьОбластьКомплектующие(СтрокаТовары, ИспользоватьНаборы) Тогда
РассчитатьИтоговыеСуммыТТН(ИтоговыеСуммы, ДанныеСтроки);
КонецЕсли;
КонецЦикла;
КоличествоПорядковыхНомеровЗаписей = ДанныеСтроки.Номер;
Иначе
ДанныеСтроки.Номер = ДанныеСтроки.Номер + 1;
ЗаполнитьНомераНакладныхВСтрокеТовараТТН(
ДанныеПечати,
ВыборкаПоНомерамТранспортныхНакладных,
ДанныеСтроки,
ОбластьМакета);
ОбластьЗаголовокТаблицы.Параметры.НомерСтраницы = "Страница " + НомерСтраницы;
ТабличныйДокумент.Вывести(ОбластьЗаголовокТаблицы);
ТабличныйДокумент.Вывести(ОбластьМакета);
КоличествоПорядковыхНомеровЗаписей = 0;
КонецЕсли;
ОбластьИтоговПоСтранице = Макет.ПолучитьОбласть("ИтогоПоСтранице");
ОбластьИтоговПоСтранице.Параметры.Заполнить(ИтоговыеСуммы);
ТабличныйДокумент.Вывести(ОбластьИтоговПоСтранице);
ОбластьМакета = Макет.ПолучитьОбласть("Всего");
ОбластьМакета.Параметры.Заполнить(ИтоговыеСуммы);
ТабличныйДокумент.Вывести(ОбластьМакета);
Если ДанныеПечати.ВыводДанныхОТоварномСоставе = Перечисления.ВариантыВыводаДанныхОТоварномСоставе.ТоварныйСостав Тогда
ДобавитьИтоговыеДанныеПодвалаТТН(ИтоговыеСуммы, КоличествоПорядковыхНомеровЗаписей,
ЗначениеНастроекПовтИсп.ВалютаРегламентированногоУчетаОрганизации(ДанныеПечати.Организация));
Иначе
ДобавитьИтоговыеДанныеПодвалаТТНДляНесколькихНакладных(ИтоговыеСуммы, КоличествоПорядковыхНомеровЗаписей,
ЗначениеНастроекПовтИсп.ВалютаРегламентированногоУчетаОрганизации(ДанныеПечати.Организация));
КонецЕсли;
ЗаполнитьРеквизитыПодвалаТТН(ДанныеПечати, ИтоговыеСуммы, Макет, ТабличныйДокумент, ЕдиницаИзмеренияВеса, КоэффициентПересчетаВТонны);
ЗаполнитьРеквизитыТранспортногоРазделаТТН(ДанныеПечати, Макет, ОбластьТранспортногоРаздела);
МассивВыводимыхОбластей.Очистить();
МассивВыводимыхОбластей.Добавить(ОбластьТранспортногоРаздела);
МассивВыводимыхОбластей.Добавить(ОбластьСведенийОГрузе);
МассивВыводимыхОбластей.Добавить(ОбластьПодвалаСведенийОГрузе);
МассивВыводимыхОбластей.Добавить(ОбластьПогрузочныхОпераций);
Если Не ТабличныйДокумент.ПроверитьВывод(МассивВыводимыхОбластей) Тогда
ТабличныйДокумент.ВывестиГоризонтальныйРазделительСтраниц();
КонецЕсли;
ТабличныйДокумент.Вывести(ОбластьТранспортногоРаздела);
ТабличныйДокумент.Вывести(ОбластьСведенийОГрузе);
ТабличныйДокумент.Вывести(ОбластьПодвалаСведенийОГрузе);
ТабличныйДокумент.Вывести(ОбластьПогрузочныхОпераций);
МассивВыводимыхОбластей.Очистить();
МассивВыводимыхОбластей.Добавить(ОбластьПрочихСведений);
Если Не ТабличныйДокумент.ПроверитьВывод(МассивВыводимыхОбластей) Тогда
ТабличныйДокумент.ВывестиГоризонтальныйРазделительСтраниц();
КонецЕсли;
ТабличныйДокумент.Вывести(ОбластьПрочихСведений);
УправлениеПечатью.ЗадатьОбластьПечатиДокумента(ТабличныйДокумент, НомерСтрокиНачало, ОбъектыПечати, ДанныеПечати.Ссылка);
КонецЦикла;
КонецПроцедуры
Процедура ЗаполнитьТабличныйДокументТН(ТабличныйДокумент, СтруктураДанных, ОбъектыПечати, КомплектыПечати)
Макет1529 = УправлениеПечатью.МакетПечатнойФормы("Документ.ТранспортнаяНакладная.ПФ_MXL_ТранспортнаяНакладная");
Макет2200 = УправлениеПечатью.МакетПечатнойФормы("Документ.ТранспортнаяНакладная.ПФ_MXL_ТранспортнаяНакладная_2200");
Макет2200_1 = УправлениеПечатью.МакетПечатнойФормы("Документ.ТранспортнаяНакладная.ПФ_MXL_ТранспортнаяНакладная_2200_1");
ТаблицаДанныхДляПечати = СтруктураДанных.ТаблицаРезультата;
ДанныеСсылкиДокументов = СтруктураДанных.РезультатИменаТоваров.Выбрать();
ПервыйДокумент = Истина;
Для Каждого ДанныеПечати Из ТаблицаДанныхДляПечати Цикл
Если Не ПервыйДокумент Тогда
ТабличныйДокумент.ВывестиГоризонтальныйРазделительСтраниц();
КонецЕсли;
ПервыйДокумент = Ложь;
Если ДанныеПечати.Дата < '20210101' Тогда
ЗаполнитьТабличныйДокументТНВерсияДо2022(ТабличныйДокумент, ОбъектыПечати, ДанныеСсылкиДокументов, ДанныеПечати, Макет1529);
ИначеЕсли ДанныеПечати.Дата < '20220301' Тогда
ЗаполнитьТабличныйДокументТНВерсияДо2022(ТабличныйДокумент, ОбъектыПечати, ДанныеСсылкиДокументов, ДанныеПечати, Макет2200);
Иначе
ЗаполнитьТабличныйДокументТНВерсияС2022(ТабличныйДокумент, ОбъектыПечати, ДанныеСсылкиДокументов, ДанныеПечати, Макет2200_1);
КонецЕсли;
КонецЦикла;
КонецПроцедуры
Процедура ЗаполнитьТабличныйДокументТНВерсияДо2022(ТабличныйДокумент, ОбъектыПечати, ДанныеСсылкиДокументов, ДанныеПечати, Макет)
НомерСтрокиНачало = ТабличныйДокумент.ВысотаТаблицы + 1;
ОбластьМакета = Макет.ПолучитьОбласть("ГоризонтальнаяЛицеваяСторона");
ШтрихкодированиеПечатныхФорм.ВывестиШтрихкодВТабличныйДокумент(ТабличныйДокумент, Макет, ОбластьМакета, ДанныеПечати.Ссылка);
ОбластьМакетаОборотная = Макет.ПолучитьОбласть("ГоризонтальнаяОборотнаяСторона");
СведенияОГрузополучателе = ФормированиеПечатныхФорм.СведенияОЮрФизЛице(ДанныеПечати.Грузополучатель, ДанныеПечати.Дата);
СведенияОГрузоотправитель = ФормированиеПечатныхФорм.СведенияОЮрФизЛице(ДанныеПечати.Грузоотправитель, ДанныеПечати.Дата);
СведенияОПеревозчике = ФормированиеПечатныхФорм.СведенияОЮрФизЛице(ДанныеПечати.Перевозчик, ДанныеПечати.Дата);
СведенияОВодителе = ФормированиеПечатныхФорм.СведенияОЮрФизЛице(ДанныеПечати.Водитель, ДанныеПечати.Дата);
ПредставлениеГрузоотправителя = "";
ПредставлениеПеревозчика = "";
ПредставлениеПеревозчика16_7 = "";
Перевозчик = "";
Грузоотправитель = "";
РеквизитыМакета = Новый Структура;
РеквизитыМакета.Вставить("Пункт0_4", ДанныеПечати.Дата);
РеквизитыМакета.Вставить("Пункт0_5", ПрефиксацияОбъектовКлиентСервер.НомерНаПечать(ДанныеПечати.Номер));
Если ЗначениеЗаполнено(ДанныеПечати.Грузополучатель) Тогда
Если СведенияОГрузополучателе.ЮрФизЛицо = Перечисления.ЮрФизЛицо.ФизЛицо
Или СведенияОГрузополучателе.ЮрФизЛицо = Перечисления.ЮрФизЛицо.ИндивидуальныйПредприниматель Тогда
РеквизитыМакета.Вставить("Пункт2_1", ФормированиеПечатныхФорм.ОписаниеОрганизации(СведенияОГрузополучателе,
"ПолноеНаименование,ИНН,ЮридическийАдрес"));
Иначе
РеквизитыМакета.Вставить("Пункт2_2", ФормированиеПечатныхФорм.ОписаниеОрганизации(СведенияОГрузополучателе,
"ПолноеНаименование,ИНН,ЮридическийАдрес,Телефоны"));
КонецЕсли;
КонецЕсли;
Если ЗначениеЗаполнено(ДанныеПечати.Грузоотправитель) Тогда
Если СведенияОГрузоотправитель.ЮрФизЛицо = Перечисления.ЮрФизЛицо.ФизЛицо
Или СведенияОГрузоотправитель.ЮрФизЛицо = Перечисления.ЮрФизЛицо.ИндивидуальныйПредприниматель Тогда
ПредставлениеГрузоотправителя = ФормированиеПечатныхФорм.ОписаниеОрганизации(СведенияОГрузоотправитель,
"ПолноеНаименование,ИНН,ЮридическийАдрес");
РеквизитыМакета.Вставить("Пункт1_1", ПредставлениеГрузоотправителя);
Грузоотправитель = ФормированиеПечатныхФорм.ОписаниеОрганизации(СведенияОГрузоотправитель, "ПолноеНаименование");
Иначе
ПредставлениеГрузоотправителя = ФормированиеПечатныхФорм.ОписаниеОрганизации(СведенияОГрузоотправитель,
"ПолноеНаименование,ИНН,ЮридическийАдрес,Телефоны");
РеквизитыМакета.Вставить("Пункт1_2", ПредставлениеГрузоотправителя);
Грузоотправитель = ФормированиеПечатныхФорм.ОписаниеОрганизации(СведенияОГрузоотправитель, "ПолноеНаименование");
КонецЕсли;
КонецЕсли;
СтруктураПоиска = Новый Структура("ПорядковыйНомер", ДанныеПечати.ПорядковыйНомер);
ИменаТоваров = "";
Пока ДанныеСсылкиДокументов.НайтиСледующий(СтруктураПоиска) Цикл
ИменаТоваров = ИменаТоваров + ДанныеСсылкиДокументов.НаименованиеВидаНоменклатуры + ", ";
КонецЦикла;
Если СтрДлина(ИменаТоваров) >= 2 Тогда
ИменаТоваров = Лев(ИменаТоваров, СтрДлина(ИменаТоваров) - 2);
КонецЕсли;
РеквизитыМакета.Вставить("Пункт3_1", ИменаТоваров);
РеквизитыМакета.Вставить("Пункт6_1", ДанныеПечати.ПунктПогрузки);
РеквизитыМакета.Вставить("Пункт7_1", ДанныеПечати.ПунктРазгрузки);
МассаБруттоСтрока = НСтр("ru = '%МассаБрутто% кг'");
МассаБруттоСтрока = СтрЗаменить(МассаБруттоСтрока, "%МассаБрутто%", ДанныеПечати.МассаБрутто);
РеквизитыМакета.Вставить("Пункт6_5", МассаБруттоСтрока);
ОбластьМакета.Параметры.Заполнить(РеквизитыМакета);
ТабличныйДокумент.Вывести(ОбластьМакета);
ТабличныйДокумент.ВывестиГоризонтальныйРазделительСтраниц();
РеквизитыМакета.Очистить();
Если ЗначениеЗаполнено(ДанныеПечати.Перевозчик) Тогда
Если СведенияОПеревозчике.ЮрФизЛицо = Перечисления.ЮрФизЛицо.ФизЛицо
Или СведенияОПеревозчике.ЮрФизЛицо = Перечисления.ЮрФизЛицо.ИндивидуальныйПредприниматель Тогда
ПредставлениеПеревозчика = ФормированиеПечатныхФорм.ОписаниеОрганизации(СведенияОПеревозчике,
"ПолноеНаименование,ФактическийАдрес,Телефоны");
РеквизитыМакета.Вставить("Пункт10_1", ПредставлениеПеревозчика);
Иначе
ПредставлениеПеревозчика = ФормированиеПечатныхФорм.ОписаниеОрганизации(СведенияОПеревозчике,
"ПолноеНаименование,ИНН,ФактическийАдрес,Телефоны");
РеквизитыМакета.Вставить("Пункт10_2", ПредставлениеПеревозчика);
КонецЕсли;
Перевозчик = ФормированиеПечатныхФорм.ОписаниеОрганизации(СведенияОПеревозчике, "ПолноеНаименование");
ПредставлениеПеревозчика16_7 = ФормированиеПечатныхФорм.ОписаниеОрганизации(СведенияОПеревозчике, "ПолноеНаименование,ИНН,ЮридическийАдрес");
КонецЕсли;
ПредставлениеВодителя = ФизическиеЛицаУТ.ФамилияИнициалыФизЛица(ДанныеПечати.Водитель, ДанныеПечати.Дата);
РеквизитыМакета.Вставить("Пункт10_3", ПредставлениеВодителя);
ГрузоподъемностьВТоннахАвтомобиля = Формат(ДанныеПечати.ГрузоподъемностьВТоннахАвтомобиля,"");
ВместимостьВКубическихМетрахАвтомобиля = Формат(ДанныеПечати.ВместимостьВКубическихМетрахАвтомобиля,"");
ИнформацияОбАвтомобиле = ""
+ ?(ПустаяСтрока(ДанныеПечати.ТипАвтомобиля),"",Строка(ДанныеПечати.ТипАвтомобиля) + ", ")
+ ?(ПустаяСтрока(ДанныеПечати.МаркаАвтомобиля),"",ДанныеПечати.МаркаАвтомобиля + ", ")
+ ?(ПустаяСтрока(ГрузоподъемностьВТоннахАвтомобиля),"",ГрузоподъемностьВТоннахАвтомобиля + " " + НСтр("ru = 'т'") + ", ")
+ ?(ПустаяСтрока(ВместимостьВКубическихМетрахАвтомобиля),"",ВместимостьВКубическихМетрахАвтомобиля + " " + НСтр("ru = 'куб. м'"));
ИнформацияОбАвтомобиле = СокрЛП(ИнформацияОбАвтомобиле);
Пока Прав(ИнформацияОбАвтомобиле,1) = "," Цикл
ИнформацияОбАвтомобиле = Лев(ИнформацияОбАвтомобиле, СтрДлина(ИнформацияОбАвтомобиле)-1)
КонецЦикла;
ОтветственноеЛицо = СтрШаблон(НСтр("ru = '%1 %2'"), ДанныеПечати.ДолжностьКладовщика, ДанныеПечати.Кладовщик);
РеквизитыМакета.Вставить("Пункт11_1", ИнформацияОбАвтомобиле);
РеквизитыМакета.Вставить("Пункт11_2", ДанныеПечати.ГосНомерАвтомобиля);
СведенияОПлательщике = ФормированиеПечатныхФорм.СведенияОЮрФизЛице(ДанныеПечати.Плательщик, ДанныеПечати.Дата,,ДанныеПечати.БанковскийСчетПлательщика);
РеквизитыМакета.Вставить("Пункт15_6", ФормированиеПечатныхФорм.ОписаниеОрганизации(СведенияОПлательщике,
"ПолноеНаименование,ИНН,ЮридическийАдрес,Телефоны,НомерСчета,Банк,БИК,КоррСчет"));
РеквизитыМакета.Вставить("Пункт16_1", Грузоотправитель);
РеквизитыМакета.Вставить("Пункт16_2", Перевозчик);
РеквизитыМакета.Вставить("Пункт16_7", ПредставлениеПеревозчика16_7);
РеквизитыМакета.Вставить("Пункт16_3", ОтветственноеЛицо);
РеквизитыМакета.Вставить("Пункт16_11", ДанныеПечати.Дата);
РеквизитыМакета.Вставить("Пункт16_21", ДанныеПечати.Дата);
ОбластьМакетаОборотная.Параметры.Заполнить(РеквизитыМакета);
ТабличныйДокумент.Вывести(ОбластьМакетаОборотная);
УправлениеПечатью.ЗадатьОбластьПечатиДокумента(ТабличныйДокумент, НомерСтрокиНачало, ОбъектыПечати, ДанныеПечати.Ссылка);
КонецПроцедуры
Процедура ЗаполнитьТабличныйДокументТНВерсияС2022(ТабличныйДокумент, ОбъектыПечати, ДанныеСсылкиДокументов, ДанныеПечати, Макет)
НомерСтрокиНачало = ТабличныйДокумент.ВысотаТаблицы + 1;
ОбластьМакета = Макет.ПолучитьОбласть("ГоризонтальнаяЛицеваяСторона");
ШтрихкодированиеПечатныхФорм.ВывестиШтрихкодВТабличныйДокумент(ТабличныйДокумент, Макет, ОбластьМакета, ДанныеПечати.Ссылка);
ОбластьМакетаОборотная = Макет.ПолучитьОбласть("ГоризонтальнаяОборотнаяСторона");
СведенияОГрузополучателе = ФормированиеПечатныхФорм.СведенияОЮрФизЛице(ДанныеПечати.Грузополучатель, ДанныеПечати.Дата);
СведенияОГрузоотправитель = ФормированиеПечатныхФорм.СведенияОЮрФизЛице(ДанныеПечати.Грузоотправитель, ДанныеПечати.Дата);
СведенияОПеревозчике = ФормированиеПечатныхФорм.СведенияОЮрФизЛице(ДанныеПечати.Перевозчик, ДанныеПечати.Дата);
ПредставлениеГрузоотправителя = "";
ПредставлениеПеревозчика = "";
ПредставлениеПеревозчика12_6 = "";
Грузоотправитель = "";
РеквизитыМакета = Новый Структура;
РеквизитыМакета.Вставить("Пункт0_4", ДанныеПечати.Дата);
РеквизитыМакета.Вставить("Пункт0_5", ПрефиксацияОбъектовКлиентСервер.НомерНаПечать(ДанныеПечати.Номер));
Если ЗначениеЗаполнено(ДанныеПечати.Грузоотправитель) Тогда
Если СведенияОГрузоотправитель.ЮрФизЛицо = Перечисления.ЮрФизЛицо.ФизЛицо
Или СведенияОГрузоотправитель.ЮрФизЛицо = Перечисления.ЮрФизЛицо.ИндивидуальныйПредприниматель Тогда
ПредставлениеГрузоотправителя = ФормированиеПечатныхФорм.ОписаниеОрганизации(СведенияОГрузоотправитель,
"ПолноеНаименование,ИНН,ЮридическийАдрес");
РеквизитыМакета.Вставить("Пункт1_1", ПредставлениеГрузоотправителя);
Грузоотправитель = ФормированиеПечатныхФорм.ОписаниеОрганизации(СведенияОГрузоотправитель, "ПолноеНаименование");
Иначе
ПредставлениеГрузоотправителя = ФормированиеПечатныхФорм.ОписаниеОрганизации(СведенияОГрузоотправитель,
"ПолноеНаименование,ИНН,ЮридическийАдрес,Телефоны");
РеквизитыМакета.Вставить("Пункт1_1", ПредставлениеГрузоотправителя);
Грузоотправитель = ФормированиеПечатныхФорм.ОписаниеОрганизации(СведенияОГрузоотправитель, "ПолноеНаименование");
КонецЕсли;
КонецЕсли;
Если ЗначениеЗаполнено(ДанныеПечати.Грузополучатель) Тогда
Если СведенияОГрузополучателе.ЮрФизЛицо = Перечисления.ЮрФизЛицо.ФизЛицо
Или СведенияОГрузополучателе.ЮрФизЛицо = Перечисления.ЮрФизЛицо.ИндивидуальныйПредприниматель Тогда
РеквизитыМакета.Вставить("Пункт2_1", ФормированиеПечатныхФорм.ОписаниеОрганизации(СведенияОГрузополучателе,
"ПолноеНаименование,ИНН,ЮридическийАдрес"));
Иначе
РеквизитыМакета.Вставить("Пункт2_1", ФормированиеПечатныхФорм.ОписаниеОрганизации(СведенияОГрузополучателе,
"ПолноеНаименование,ИНН,ЮридическийАдрес,Телефоны"));
КонецЕсли;
КонецЕсли;
РеквизитыМакета.Вставить("Пункт2_2", ДанныеПечати.ПунктРазгрузки);
СтруктураПоиска = Новый Структура("ПорядковыйНомер", ДанныеПечати.ПорядковыйНомер);
ИменаТоваров = "";
Пока ДанныеСсылкиДокументов.НайтиСледующий(СтруктураПоиска) Цикл
ИменаТоваров = ИменаТоваров + ДанныеСсылкиДокументов.НаименованиеВидаНоменклатуры + ", ";
КонецЦикла;
Если СтрДлина(ИменаТоваров) >= 2 Тогда
ИменаТоваров = Лев(ИменаТоваров, СтрДлина(ИменаТоваров) - 2);
КонецЕсли;
РеквизитыМакета.Вставить("Пункт3_1", ИменаТоваров);
Если ЗначениеЗаполнено(ДанныеПечати.Перевозчик) Тогда
Если СведенияОПеревозчике.ЮрФизЛицо = Перечисления.ЮрФизЛицо.ФизЛицо
Или СведенияОПеревозчике.ЮрФизЛицо = Перечисления.ЮрФизЛицо.ИндивидуальныйПредприниматель Тогда
ПредставлениеПеревозчика = ФормированиеПечатныхФорм.ОписаниеОрганизации(СведенияОПеревозчике,
"ПолноеНаименование,ФактическийАдрес,Телефоны");
РеквизитыМакета.Вставить("Пункт6_1", ПредставлениеПеревозчика);
Иначе
ПредставлениеПеревозчика = ФормированиеПечатныхФорм.ОписаниеОрганизации(СведенияОПеревозчике,
"ПолноеНаименование,ИНН,ФактическийАдрес,Телефоны");
РеквизитыМакета.Вставить("Пункт6_1", ПредставлениеПеревозчика);
КонецЕсли;
ПредставлениеПеревозчика12_6 = ФормированиеПечатныхФорм.ОписаниеОрганизации(СведенияОПеревозчике, "ПолноеНаименование,ИНН,ЮридическийАдрес");
КонецЕсли;
ГрузоподъемностьВТоннахАвтомобиля = Формат(ДанныеПечати.ГрузоподъемностьВТоннахАвтомобиля,"");
ВместимостьВКубическихМетрахАвтомобиля = Формат(ДанныеПечати.ВместимостьВКубическихМетрахАвтомобиля,"");
ИнформацияОбАвтомобиле = ""
+ ?(ПустаяСтрока(ДанныеПечати.ТипАвтомобиля),"",Строка(ДанныеПечати.ТипАвтомобиля) + ", ")
+ ?(ПустаяСтрока(ДанныеПечати.МаркаАвтомобиля),"",ДанныеПечати.МаркаАвтомобиля + ", ")
+ ?(ПустаяСтрока(ГрузоподъемностьВТоннахАвтомобиля),"",ГрузоподъемностьВТоннахАвтомобиля + " " + НСтр("ru = 'т'") + ", ")
+ ?(ПустаяСтрока(ВместимостьВКубическихМетрахАвтомобиля),"",ВместимостьВКубическихМетрахАвтомобиля + " " + НСтр("ru = 'куб. м'"));
ИнформацияОбАвтомобиле = СокрЛП(ИнформацияОбАвтомобиле);
Пока Прав(ИнформацияОбАвтомобиле,1) = "," Цикл
ИнформацияОбАвтомобиле = Лев(ИнформацияОбАвтомобиле, СтрДлина(ИнформацияОбАвтомобиле)-1)
КонецЦикла;
РеквизитыМакета.Вставить("Пункт7_1", ИнформацияОбАвтомобиле);
РеквизитыМакета.Вставить("Пункт7_2", ДанныеПечати.ГосНомерАвтомобиля);
ОбластьМакета.Параметры.Заполнить(РеквизитыМакета);
ТабличныйДокумент.Вывести(ОбластьМакета);
ТабличныйДокумент.ВывестиГоризонтальныйРазделительСтраниц();
РеквизитыМакета.Очистить();
РеквизитыМакета.Вставить("Пункт8_1", ПредставлениеГрузоотправителя);
РеквизитыМакета.Вставить("Пункт8_2", ДанныеПечати.ПунктПогрузки);
МассаБруттоСтрока = НСтр("ru = '%МассаБрутто% кг'");
МассаБруттоСтрока = СтрЗаменить(МассаБруттоСтрока, "%МассаБрутто%", ДанныеПечати.МассаБрутто);
РеквизитыМакета.Вставить("Пункт8_5", МассаБруттоСтрока);
ПредставлениеВодителя = ФизическиеЛицаУТ.ФамилияИнициалыФизЛица(ДанныеПечати.Водитель, ДанныеПечати.Дата);
РеквизитыМакета.Вставить("Пункт8_8", ПредставлениеВодителя);
РеквизитыМакета.Вставить("Пункт10_1", ДанныеПечати.ПунктРазгрузки);
РеквизитыМакета.Вставить("Пункт10_6", МассаБруттоСтрока);
РеквизитыМакета.Вставить("Пункт10_9", ПредставлениеВодителя);
СведенияОПлательщике = ФормированиеПечатныхФорм.СведенияОЮрФизЛице(ДанныеПечати.Плательщик, ДанныеПечати.Дата,,ДанныеПечати.БанковскийСчетПлательщика);
РеквизитыМакета.Вставить("Пункт12_10", ФормированиеПечатныхФорм.ОписаниеОрганизации(СведенияОПлательщике,
"ПолноеНаименование,ИНН,ЮридическийАдрес,Телефоны,НомерСчета,Банк,БИК,КоррСчет"));
РеквизитыМакета.Вставить("Пункт12_7", Грузоотправитель);
РеквизитыМакета.Вставить("Пункт12_6", ПредставлениеПеревозчика12_6);
РеквизитыМакета.Вставить("Пункт12_12", ДанныеПечати.Кладовщик);
РеквизитыМакета.Вставить("Пункт12_13", Формат(ДанныеПечати.Дата, "ДЛФ=D"));
МассивСтрок = Новый Массив;
Если Не ПустаяСтрока(ДанныеПечати.ДолжностьКладовщика) Тогда
МассивСтрок.Добавить(ДанныеПечати.ДолжностьКладовщика);
КонецЕсли;
МассивСтрок.Добавить(Формат(ДанныеПечати.Дата, "ДЛФ=D"));
РеквизитыМакета.Вставить("Пункт12_14", СтрСоединить(МассивСтрок, ", "));
ОбластьМакетаОборотная.Параметры.Заполнить(РеквизитыМакета);
ТабличныйДокумент.Вывести(ОбластьМакетаОборотная);
УправлениеПечатью.ЗадатьОбластьПечатиДокумента(ТабличныйДокумент, НомерСтрокиНачало, ОбъектыПечати, ДанныеПечати.Ссылка);
КонецПроцедуры
Процедура ЗаполнитьСтруктуруПолучателейПечатныхФорм(СтруктураДанныхОбъектаПечати) Экспорт
СтруктураДанныхОбъектаПечати.ОсновнойПолучатель = "ЗаказчикПеревозки";
СтруктураДанныхОбъектаПечати.МассивРеквизитовПолучателей.Добавить("ЗаказчикПеревозки");
СтруктураДанныхОбъектаПечати.МассивРеквизитовПолучателей.Добавить("Грузоотправитель");
СтруктураДанныхОбъектаПечати.МассивРеквизитовПолучателей.Добавить("Грузополучатель");
Если ПолучитьФункциональнуюОпцию("ИспользоватьУправлениеДоставкой") Тогда
СтруктураДанныхОбъектаПечати.МассивРеквизитовПолучателей.Добавить("ПеревозчикПартнер");
КонецЕсли;
КонецПроцедуры
#КонецОбласти
Функция ПоляЗаполняемыеПоЗаданиямНаПеревозку()
ПоляЗаполняемыеПоЗаданиямНаПеревозку = Новый Структура;
ПоляЗаполняемыеПоЗаданиямНаПеревозку.Вставить("Перевозчик", "Контрагент");
ПоляЗаполняемыеПоЗаданиямНаПеревозку.Вставить("Водитель", "ВодительФИО");
ПоляЗаполняемыеПоЗаданиямНаПеревозку.Вставить("БанковскийСчетПеревозчика", "БанковскийСчетПеревозчика");
ПоляЗаполняемыеПоЗаданиямНаПеревозку.Вставить("УдостоверениеНомер", "УдостоверениеНомер");
ПоляЗаполняемыеПоЗаданиямНаПеревозку.Вставить("УдостоверениеСерия", "УдостоверениеСерия");
ПоляЗаполняемыеПоЗаданиямНаПеревозку.Вставить("АвтомобильГосударственныйНомер", "АвтомобильГосударственныйНомер");
ПоляЗаполняемыеПоЗаданиямНаПеревозку.Вставить("АвтомобильМарка", "АвтомобильМарка");
ПоляЗаполняемыеПоЗаданиямНаПеревозку.Вставить("ВидПеревозки", "ВидПеревозки");
ПоляЗаполняемыеПоЗаданиямНаПеревозку.Вставить("АвтомобильТип", "АвтомобильТип");
ПоляЗаполняемыеПоЗаданиямНаПеревозку.Вставить("АвтомобильВместимостьВКубическихМетрах", "АвтомобильВместимостьВКубическихМетрах");
ПоляЗаполняемыеПоЗаданиямНаПеревозку.Вставить("АвтомобильГрузоподъемностьВТоннах", "АвтомобильГрузоподъемностьВТоннах");
ПоляЗаполняемыеПоЗаданиямНаПеревозку.Вставить("ЛицензионнаяКарточкаВид", "ЛицензионнаяКарточкаВид");
ПоляЗаполняемыеПоЗаданиямНаПеревозку.Вставить("ЛицензионнаяКарточкаНомер", "ЛицензионнаяКарточкаНомер");
ПоляЗаполняемыеПоЗаданиямНаПеревозку.Вставить("ЛицензионнаяКарточкаРегистрационныйНомер", "ЛицензионнаяКарточкаРегистрационныйНомер");
ПоляЗаполняемыеПоЗаданиямНаПеревозку.Вставить("ЛицензионнаяКарточкаСерия", "ЛицензионнаяКарточкаСерия");
ПоляЗаполняемыеПоЗаданиямНаПеревозку.Вставить("Прицеп", "Прицеп");
ПоляЗаполняемыеПоЗаданиямНаПеревозку.Вставить("ГосударственныйНомерПрицепа", "ГосударственныйНомерПрицепа");
Возврат ПоляЗаполняемыеПоЗаданиямНаПеревозку;
КонецФункции
Функция ПодготовитьПечатьТТНиТН(МенеджерВременныхТаблиц, МассивОбъектов)
ТипыОбъектов = ОбщегоНазначенияУТ.РазложитьМассивСсылокПоТипам(МассивОбъектов);
ОснованияДляВычисленияТранспортныхНакладных = Новый Массив;
ТранспортныеНакладныеДляПечати = Новый Массив;
Для Каждого КлючЗначение Из ТипыОбъектов Цикл
ТипДокументов = КлючЗначение.Ключ;
СсылкиНаДокументы = КлючЗначение.Значение;
Если ТипДокументов = Тип("ДокументСсылка.ЗаданиеНаПеревозку") Тогда
Запрос = Новый Запрос;
Запрос.УстановитьПараметр("ЗаданияНаПеревозку", СсылкиНаДокументы);
Запрос.УстановитьПараметр("ВсеСтрокиАдресов", Истина);
Запрос.УстановитьПараметр("ВыделенныеСтрокиАдресов", Новый Массив);
Запрос.Текст = Документы.ЗаданиеНаПеревозку.ТекстЗапросаПолученияСпискаНакладныхИзЗаданийНаПеревозку(Истина);
Запрос.Текст = Запрос.Текст + ОбщегоНазначения.РазделительПакетаЗапросов();
Запрос.Текст = Запрос.Текст + "
|ВЫБРАТЬ РАЗЛИЧНЫЕ
| НакладныеПоЗаданиямНаПеревозку.Накладная КАК Накладная
|ИЗ
| НакладныеПоЗаданиямНаПеревозку КАК НакладныеПоЗаданиямНаПеревозку";
РезультатЗапроса = Запрос.ВыполнитьПакетСПромежуточнымиДанными();
ОбщегоНазначенияКлиентСервер.ДополнитьМассив(ОснованияДляВычисленияТранспортныхНакладных,
РезультатЗапроса[РезультатЗапроса.ВГраница()].Выгрузить().ВыгрузитьКолонку("Накладная"));
ИначеЕсли ТипДокументов = Тип("ДокументСсылка.ТранспортнаяНакладная") Тогда
ОбщегоНазначенияКлиентСервер.ДополнитьМассив(ТранспортныеНакладныеДляПечати, СсылкиНаДокументы);
Иначе
ОбщегоНазначенияКлиентСервер.ДополнитьМассив(ОснованияДляВычисленияТранспортныхНакладных, СсылкиНаДокументы);
КонецЕсли;
КонецЦикла;
Если ОснованияДляВычисленияТранспортныхНакладных.Количество() > 0 Тогда
ДокументыОснованияТранспортныеНакладные = ТранспортныеНакладныеДокументовОснований(ОснованияДляВычисленияТранспортныхНакладных);
ОбщегоНазначенияКлиентСервер.ДополнитьМассив(ТранспортныеНакладныеДляПечати,
ДокументыОснованияТранспортныеНакладные.ВыгрузитьКолонку("ТранспортнаяНакладная"), Истина);
ДокументыОснованияТранспортныеНакладные.Индексы.Добавить("ДокументОснование");
Для Каждого СтрМас Из ОснованияДляВычисленияТранспортныхНакладных Цикл
Если ДокументыОснованияТранспортныеНакладные.Найти(СтрМас, "ДокументОснование") = Неопределено Тогда
ТекстСообщения = НСтр("ru = 'Для документа %ДокументОснование% не создана транспортная накладная. Печать транспортной накладной невозможна.'");
ТекстСообщения = СтрЗаменить(ТекстСообщения, "%ДокументОснование%", СтрМас);
ОбщегоНазначения.СообщитьПользователю(ТекстСообщения);
КонецЕсли;
КонецЦикла;
КонецЕсли;
Если ТранспортныеНакладныеДляПечати.Количество() = 0 Тогда
Возврат Новый Соответствие;
КонецЕсли;
ТаблицаНакладныхНаПечать = Новый ТаблицаЗначений;
ОписаниеТипаТранспортнаяНакладная = Новый ОписаниеТипов("ДокументСсылка.ТранспортнаяНакладная");
ОписаниеТипаЧисло = Новый ОписаниеТипов("Число");
ТаблицаНакладныхНаПечать.Колонки.Добавить("ТранспортнаяНакладная", ОписаниеТипаТранспортнаяНакладная);
ТаблицаНакладныхНаПечать.Колонки.Добавить("ПорядковыйНомер", ОписаниеТипаЧисло);
ПорядковыйНомер = 0;
Для Каждого СтрМас Из ТранспортныеНакладныеДляПечати Цикл
СтрокаТаблицы = ТаблицаНакладныхНаПечать.Добавить();
СтрокаТаблицы.ТранспортнаяНакладная = СтрМас;
СтрокаТаблицы.ПорядковыйНомер = ПорядковыйНомер;
ПорядковыйНомер = ПорядковыйНомер + 1;
КонецЦикла;
Запрос = Новый Запрос;
Запрос.МенеджерВременныхТаблиц = МенеджерВременныхТаблиц;
Запрос.Текст =
"ВЫБРАТЬ
| ТаблицаНакладных.ТранспортнаяНакладная КАК ТранспортнаяНакладная,
| ТаблицаНакладных.ПорядковыйНомер КАК ПорядковыйНомер
|ПОМЕСТИТЬ ТаблицаТранспортныхНакладныхБезОснований
|ИЗ
| &ТаблицаНакладных КАК ТаблицаНакладных
|;
|
|
|ВЫБРАТЬ
| ТаблицаНакладных.ТранспортнаяНакладная КАК ТранспортнаяНакладная,
| ТаблицаНакладных.ПорядковыйНомер КАК ПорядковыйНомер,
| ТранспортнаяНакладнаяДокументыОснования.НомерСтроки КАК НомерСтрокиВТранспортнойНакладной,
| ТранспортнаяНакладнаяДокументыОснования.ДокументОснование КАК ДокументОснование
|ПОМЕСТИТЬ ТаблицаТранспортныхНакладных
|ИЗ
| ТаблицаТранспортныхНакладныхБезОснований КАК ТаблицаНакладных
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ Документ.ТранспортнаяНакладная.ДокументыОснования КАК ТранспортнаяНакладнаяДокументыОснования
| ПО ТаблицаНакладных.ТранспортнаяНакладная = ТранспортнаяНакладнаяДокументыОснования.Ссылка";
Запрос.УстановитьПараметр("ТаблицаНакладных", ТаблицаНакладныхНаПечать);
УстановитьПривилегированныйРежим(Истина);
ОснованияТранспортныхНакладных = Запрос.ВыполнитьПакетСПромежуточнымиДанными()[1].Выгрузить().ВыгрузитьКолонку("ДокументОснование");
УстановитьПривилегированныйРежим(Ложь);
УстановитьПривилегированныйРежим(Истина);
ОтветственныеЛицаСервер.СформироватьВременнуюТаблицуОтветственныхЛицДокументов(ТранспортныеНакладныеДляПечати, МенеджерВременныхТаблиц);
УстановитьПривилегированныйРежим(Ложь);
Возврат ОбщегоНазначенияУТ.РазложитьМассивСсылокПоТипам(ОснованияТранспортныхНакладных);
КонецФункции
Функция ПредставлениеСпособаДоставки(СпособДоставки, Документ)
Представление = "";
Если СпособДоставки = Перечисления.СпособыДоставки.Самовывоз Тогда
Представление = НСтр("ru = 'Самовывоз (с нашего склада)'");
ИначеЕсли СпособДоставки = Перечисления.СпособыДоставки.ДоКлиента Тогда
ТипДокумента = ТипЗнч(Документ);
Если ТипДокумента = Тип("ДокументСсылка.ПеремещениеТоваров")
Или ТипДокумента = Тип("ДокументСсылка.ЗаказНаПеремещение") Тогда
Представление = НСтр("ru = 'Наша транспортная служба до получателя'");
ИначеЕсли ТипДокумента = Тип("ДокументСсылка.ОтгрузкаТоваровСХранения") Тогда
Представление = НСтр("ru = 'Наша транспортная служба до владельца'");
ИначеЕсли ТипДокумента = Тип("ДокументСсылка.ЗаказПереработчику2_5") Тогда
Представление = НСтр("ru = 'Наша транспортная служба до переработчика'");
ИначеЕсли ТипДокумента = Тип("ДокументСсылка.ПередачаСырьяПереработчику")
Или ТипДокумента = Тип("ДокументСсылка.ЗаказПереработчику") Тогда
Представление = НСтр("ru = 'Наша транспортная служба до переработчика'");
Иначе
Представление = НСтр("ru = 'Наша транспортная служба до клиента'");
КонецЕсли;
ИначеЕсли СпособДоставки = Перечисления.СпособыДоставки.СиламиПеревозчика Тогда
Представление = НСтр("ru = 'Перевозчик (с нашего склада)'");
ИначеЕсли СпособДоставки = Перечисления.СпособыДоставки.СиламиПеревозчикаПоАдресу Тогда
Представление = НСтр("ru = 'Наша транспортная служба до перевозчика'");
ИначеЕсли СпособДоставки = Перечисления.СпособыДоставки.КПолучателюОпределяетСлужбаДоставки Тогда
Представление = НСтр("ru = 'На усмотрение транспортной службы'");
ИначеЕсли СпособДоставки = Перечисления.СпособыДоставки.СиламиПоставщикаДоНашегоСклада Тогда
Представление = НСтр("ru = 'Поставщик (на наш склад)'");
ИначеЕсли СпособДоставки = Перечисления.СпособыДоставки.СиламиПеревозчикаДоНашегоСклада Тогда
Представление = НСтр("ru = 'Перевозчик (на наш склад)'");
ИначеЕсли СпособДоставки = Перечисления.СпособыДоставки.СиламиПеревозчикаДоПунктаПередачи Тогда
Представление = НСтр("ru = 'Наша транспортная служба от перевозчика'");
ИначеЕсли СпособДоставки = Перечисления.СпособыДоставки.НашимиСиламиСАдресаОтправителя Тогда
Представление = НСтр("ru = 'Наша транспортная служба от поставщика'");
ИначеЕсли СпособДоставки = Перечисления.СпособыДоставки.ОтОтправителяОпределяетСлужбаДоставки Тогда
Представление = НСтр("ru = 'На усмотрение транспортной службы'");
КонецЕсли;
Возврат Представление;
КонецФункции
Процедура ПоместитьВременнуюТаблицуТоваров(МенеджерВременныхТаблиц)
ШаблонЗапросаКТаблице =
" ВЫБРАТЬ
| ИмяТаблицы_.Ссылка КАК Ссылка,
| ИмяТаблицы_.Номенклатура КАК Номенклатура,
| ИмяТаблицы_.Характеристика КАК Характеристика,
| ИмяТаблицы_.Упаковка КАК Упаковка,
| ИмяТаблицы_.Количество КАК Количество,
| ИмяТаблицы_.КоличествоУпаковок КАК КоличествоУпаковок,
| ИмяТаблицы_.СуммаБезНДС КАК СуммаБезНДС,
| ИмяТаблицы_.СуммаНДС КАК СуммаНДС,
| ИмяТаблицы_.НомерСтроки КАК НомерСтроки,
| &ТекстПоляИмяТаблицы_ЭтоВозвратнаяТара_ КАК ЭтоВозвратнаяТара,
| &ТекстПоляИмяТаблицы_ВариантПредставленияНабораВПечатныхФормах_ КАК ВариантПредставленияНабораВПечатныхФормах,
| &ТекстПоляИмяТаблицы_ВариантРасчетаЦеныНабора_ КАК ВариантРасчетаЦеныНабора,
| &ТекстПоляИмяТаблицы_ЭтоКомплектующие_ КАК ЭтоКомплектующие,
| &ТекстПоляИмяТаблицы_НомерСтрокиНаборы_ КАК НомерСтрокиНаборы,
| &ТекстПоляИмяТаблицы_ПолныйНабор_ КАК ПолныйНабор,
| &ТекстПоляИмяТаблицы_ЭтоНабор_ КАК ЭтоНабор
|ИЗ
| ИмяТаблицы_ КАК ИмяТаблицы_
|ГДЕ
| ИмяТаблицы_.ЭтоТовар";
ТекстыОбращенияКТаблицам = Новый Массив;
Для Каждого ВременнаяТаблица Из МенеджерВременныхТаблиц.Таблицы Цикл
Если СтрНайти(ВременнаяТаблица.ПолноеИмя, "ТаблицаТоваров") <> 0 Тогда
ПолноеИмяДокумента = "Документ." + СтрЗаменить(ВременнаяТаблица.ПолноеИмя, "ТаблицаТоваров", "");
МетаданныеОбъекта = Метаданные.НайтиПоПолномуИмени(ПолноеИмяДокумента);
Если ОбщегоНазначения.ЕстьРеквизитОбъекта("ВернутьМногооборотнуюТару", МетаданныеОбъекта) Тогда
ТекстВыборкиИзТаблицы = СтрЗаменить(ШаблонЗапросаКТаблице,
"&ТекстПоляИмяТаблицы_ЭтоВозвратнаяТара_",
" ВЫБОР
| КОГДА ИмяТаблицы_.Ссылка.ВернутьМногооборотнуюТару
| И ИмяТаблицы_.Номенклатура.ТипНоменклатуры = ЗНАЧЕНИЕ(Перечисление.ТипыНоменклатуры.МногооборотнаяТара)
| ТОГДА ИСТИНА
| ИНАЧЕ ЛОЖЬ
| КОНЕЦ");
Иначе
ТекстВыборкиИзТаблицы = СтрЗаменить(ШаблонЗапросаКТаблице, "&ТекстПоляИмяТаблицы_ЭтоВозвратнаяТара_", "ЛОЖЬ");
КонецЕсли;
ТекстВыборкиИзТаблицы = СтрЗаменить(ТекстВыборкиИзТаблицы, "ИмяТаблицы_", ВременнаяТаблица.ПолноеИмя);
ОбщегоНазначенияУТ.ЗаменитьОтсутствующиеПоляВтВТекстеЗапроса(МенеджерВременныхТаблиц,
ТекстВыборкиИзТаблицы,
СтрЗаменить("&ТекстПоляИмяТаблицы_ВариантПредставленияНабораВПечатныхФормах_", "ИмяТаблицы_", ВременнаяТаблица.ПолноеИмя),
ВременнаяТаблица.ПолноеИмя,
"ВариантПредставленияНабораВПечатныхФормах");
ОбщегоНазначенияУТ.ЗаменитьОтсутствующиеПоляВтВТекстеЗапроса(МенеджерВременныхТаблиц,
ТекстВыборкиИзТаблицы,
СтрЗаменить("&ТекстПоляИмяТаблицы_ВариантРасчетаЦеныНабора_", "ИмяТаблицы_", ВременнаяТаблица.ПолноеИмя),
ВременнаяТаблица.ПолноеИмя,
"ВариантРасчетаЦеныНабора");
ОбщегоНазначенияУТ.ЗаменитьОтсутствующиеПоляВтВТекстеЗапроса(МенеджерВременныхТаблиц,
ТекстВыборкиИзТаблицы,
СтрЗаменить("&ТекстПоляИмяТаблицы_ЭтоКомплектующие_", "ИмяТаблицы_", ВременнаяТаблица.ПолноеИмя),
ВременнаяТаблица.ПолноеИмя,
"ЭтоКомплектующие",
,
"ЛОЖЬ");
ОбщегоНазначенияУТ.ЗаменитьОтсутствующиеПоляВтВТекстеЗапроса(МенеджерВременныхТаблиц,
ТекстВыборкиИзТаблицы,
СтрЗаменить("&ТекстПоляИмяТаблицы_НомерСтрокиНаборы_", "ИмяТаблицы_", ВременнаяТаблица.ПолноеИмя),
ВременнаяТаблица.ПолноеИмя,
"НомерСтрокиНаборы",
,
"0");
ОбщегоНазначенияУТ.ЗаменитьОтсутствующиеПоляВтВТекстеЗапроса(МенеджерВременныхТаблиц,
ТекстВыборкиИзТаблицы,
СтрЗаменить("&ТекстПоляИмяТаблицы_ПолныйНабор_", "ИмяТаблицы_", ВременнаяТаблица.ПолноеИмя),
ВременнаяТаблица.ПолноеИмя,
"ПолныйНабор",
,
"ЛОЖЬ");
ОбщегоНазначенияУТ.ЗаменитьОтсутствующиеПоляВтВТекстеЗапроса(МенеджерВременныхТаблиц,
ТекстВыборкиИзТаблицы,
СтрЗаменить("&ТекстПоляИмяТаблицы_ЭтоНабор_", "ИмяТаблицы_", ВременнаяТаблица.ПолноеИмя),
ВременнаяТаблица.ПолноеИмя,
"ЭтоНабор",
,
"ЛОЖЬ");
ТекстыОбращенияКТаблицам.Добавить(ТекстВыборкиИзТаблицы);
КонецЕсли;
КонецЦикла;
ТекстЗапроса =
"ВЫБРАТЬ
| ВложенныйЗапрос.Ссылка КАК Ссылка,
| ВложенныйЗапрос.Номенклатура КАК Номенклатура,
| ВложенныйЗапрос.Характеристика КАК Характеристика,
| ВложенныйЗапрос.Упаковка КАК Упаковка,
| ВложенныйЗапрос.Количество КАК Количество,
| ВложенныйЗапрос.КоличествоУпаковок КАК КоличествоУпаковок,
| ВложенныйЗапрос.СуммаБезНДС КАК СуммаБезНДС,
| ВложенныйЗапрос.СуммаБезНДС КАК Сумма,
| ВложенныйЗапрос.СуммаНДС КАК СуммаНДС,
| ВложенныйЗапрос.НомерСтроки КАК НомерСтроки,
| ВложенныйЗапрос.ВариантПредставленияНабораВПечатныхФормах КАК ВариантПредставленияНабораВПечатныхФормах,
| ВложенныйЗапрос.ВариантРасчетаЦеныНабора КАК ВариантРасчетаЦеныНабора,
| ВложенныйЗапрос.ЭтоКомплектующие КАК ЭтоКомплектующие,
| ВложенныйЗапрос.НомерСтрокиНаборы КАК НомерСтрокиНаборы,
| ВложенныйЗапрос.ПолныйНабор КАК ПолныйНабор,
| ВложенныйЗапрос.ЭтоНабор КАК ЭтоНабор,
| ВложенныйЗапрос.ЭтоВозвратнаяТара КАК ЭтоВозвратнаяТара
|ПОМЕСТИТЬ ТаблицаТоваров
|ИЗ
| (&ТекстВложенногоЗапроса) КАК ВложенныйЗапрос";
ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ТекстВложенногоЗапроса", СтрСоединить(ТекстыОбращенияКТаблицам, ОбщегоНазначенияУТ.РазделительЗапросовВОбъединении()));
Запрос = Новый Запрос;
Запрос.МенеджерВременныхТаблиц = МенеджерВременныхТаблиц;
Запрос.Текст = ТекстЗапроса;
Запрос.Выполнить();
КонецПроцедуры
#Область ДляВызоваИзДругихПодсистем
Процедура ПриЗаполненииОграниченияДоступа(Ограничение) Экспорт
Ограничение.Текст =
"РазрешитьЧтениеИзменение
|ГДЕ
| ЗначениеРазрешено(Организация)";
КонецПроцедуры
#КонецОбласти
Функция ТекстВыборкиПолейДокументаОснования(Реквизиты, ПараметрыФормированияТранспортныхНакладных, ПолучатьРеквизитыИзЗаказа, ПолучатьРеквизитыЗадания, ЕстьСпособДоставки)
ТекстыЗапросаПолейДокументаОснования = Новый Массив;
Для Каждого ИмяРеквизита Из Реквизиты Цикл
Если (ИмяРеквизита = "АдресДоставки"
Или ИмяРеквизита = "АдресДоставкиЗначение"
Или ИмяРеквизита = "АдресДоставкиЗначенияПолей"
Или ИмяРеквизита = "ПеревозчикПартнер")
И ЕстьСпособДоставки Тогда
Если ПараметрыФормированияТранспортныхНакладных.ЕстьЗаказы Тогда
ТекстПоля =
"ВЫБОР КОГДА ОснованиеТранспортнойНакладной." + ПараметрыФормированияТранспортныхНакладных.ИмяПоляНакладнаяПоЗаказу + "
| И &ИспользоватьРасширенныеВозможностиЗаказа ТОГДА
| " + ?(Не ПолучатьРеквизитыИзЗаказа,"""""",
"ВЫБОР
| КОГДА ДокументТовары." + ПараметрыФормированияТранспортныхНакладных.ИмяПоляЗаказВТЧТовары + ".СпособДоставки В (&СпособыДоставкиПоЗаданиюНаПеревозку) ТОГДА
| " + ?(ПолучатьРеквизитыЗадания,"НакладныеПоЗаданиямНаПеревозку." + ИмяРеквизита, """""") + "
| ИНАЧЕ
| ДокументТовары." + ПараметрыФормированияТранспортныхНакладных.ИмяПоляЗаказВТЧТовары + "." + ИмяРеквизита + "
| КОНЕЦ") + "
| ИНАЧЕ
| ВЫБОР
| КОГДА ОснованиеТранспортнойНакладной.СпособДоставки В (&СпособыДоставкиПоЗаданиюНаПеревозку) ТОГДА
| " + ?(ПолучатьРеквизитыЗадания,"НакладныеПоЗаданиямНаПеревозку." + ИмяРеквизита, """""") + "
| ИНАЧЕ
| ОснованиеТранспортнойНакладной." + ИмяРеквизита + "
| КОНЕЦ
|КОНЕЦ КАК " + ИмяРеквизита;
Иначе
ТекстПоля =
"ВЫБОР
| КОГДА ОснованиеТранспортнойНакладной.СпособДоставки В (&СпособыДоставкиПоЗаданиюНаПеревозку) ТОГДА
| " + ?(ПолучатьРеквизитыЗадания,"НакладныеПоЗаданиямНаПеревозку." + ИмяРеквизита, """""") + "
| ИНАЧЕ
| ОснованиеТранспортнойНакладной." + ИмяРеквизита + "
| КОНЕЦ КАК " + ИмяРеквизита;
КонецЕсли;
Иначе
ТекстПоля = ПараметрыФормированияТранспортныхНакладных.Реквизиты[ИмяРеквизита] + " КАК " + ИмяРеквизита;
КонецЕсли;
ТекстыЗапросаПолейДокументаОснования.Добавить(ТекстПоля);
КонецЦикла;
Возврат СтрСоединить(ТекстыЗапросаПолейДокументаОснования, "," + Символы.ПС);
КонецФункции
Функция ТекстВыборкиРеквизитов(СинонимТаблицы, Реквизиты, ДобавлятьСиноним)
ТекстыОписанияРеквизитов = Новый Массив;
Если ТипЗнч(Реквизиты) = Тип("Массив") Тогда
Для Каждого СтрМас Из Реквизиты Цикл
ТекстРеквизита = ЗаменитьСинонимТаблицы(СинонимТаблицы, СтрМас) + ?(ДобавлятьСиноним, " КАК " + СтрМас, "");
ТекстыОписанияРеквизитов.Добавить(ТекстРеквизита);
КонецЦикла;
Иначе
Для Каждого КлючЗначение Из Реквизиты Цикл
ТекстРеквизита = ?(ЗначениеЗаполнено(КлючЗначение.Значение),
ЗаменитьСинонимТаблицы(СинонимТаблицы, КлючЗначение.Значение),
ЗаменитьСинонимТаблицы(СинонимТаблицы, КлючЗначение.Ключ))
+ ?(ДобавлятьСиноним, " КАК " + КлючЗначение.Ключ, "");
ТекстыОписанияРеквизитов.Добавить(ТекстРеквизита);
КонецЦикла;
КонецЕсли;
Возврат СтрСоединить(ТекстыОписанияРеквизитов, "," + Символы.ПС);
КонецФункции
Функция ТекстСоединенияПоРеквизитам(СинонимТаблицы1, СинонимТаблицы2, Реквизиты)
ТекстСоединенияПоРеквизитам = Новый Массив;
Если ТипЗнч(Реквизиты) = Тип("Массив") Тогда
Для Каждого СтрМас Из Реквизиты Цикл
ТекстРеквизита = СинонимТаблицы1 + "." + СтрМас + " = " + СинонимТаблицы2 + "." + СтрМас;
ТекстСоединенияПоРеквизитам.Добавить(ТекстРеквизита);
КонецЦикла;
Иначе
Для Каждого КлючЗначение Из Реквизиты Цикл
ТекстРеквизита = СинонимТаблицы1 + "." + КлючЗначение.Ключ + " = " + СинонимТаблицы2 + "." + КлючЗначение.Значение;
ТекстСоединенияПоРеквизитам.Добавить(ТекстРеквизита);
КонецЦикла;
КонецЕсли;
Возврат СтрСоединить(ТекстСоединенияПоРеквизитам, " И " + Символы.ПС);
КонецФункции
Функция ТекстЗапросаВыборкиТранспортныхНакладныхПоДокументуОснованию(
ПараметрыФормированияТранспортныхНакладных,
ПолноеИмяДокумента,
ВернутьЗапросДляВычисленияПриЗаписи,
ЕстьСпособДоставки,
ЭтоФормированиеТекстаГиперссылки = Ложь)
Если ЭтоФормированиеТекстаГиперссылки Тогда
СвойстваКоторыеОбязательноДолжныСовпадать = "ПометкаУдаления,Проведен";
Иначе
СвойстваКоторыеОбязательноДолжныСовпадать =
"Организация,Грузоотправитель,Грузополучатель,ЗаказчикПеревозки,Плательщик,ПометкаУдаления,Проведен";
КонецЕсли;
СвойстваКоторыеМогутНеСовпадать =
"ДоверенностьНомер,ДоверенностьДата,ДоверенностьВыдана,ДоверенностьЛицо,Руководитель,ГлавныйБухгалтер,Отпустил,ОтпустилДолжность,АдресДоставки,АдресДоставкиЗначенияПолей,БанковскийСчетПлательщика,БанковскийСчетЗаказчикаПеревозки";
ВсеВыбираемыеРеквизиты = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(
СвойстваКоторыеОбязательноДолжныСовпадать,,
Истина,
Истина);
Если ВернутьЗапросДляВычисленияПриЗаписи Тогда
ОбщегоНазначенияКлиентСервер.ДополнитьМассив(ВсеВыбираемыеРеквизиты, СтрРазделить(СвойстваКоторыеМогутНеСовпадать, ","));
КонецЕсли;
ТекстЗапроса =
"ВЫБРАТЬ
| ОснованиеТранспортнойНакладной.Ссылка КАК Ссылка,
| &ТекстВыборкиПолейДокументаОснования
|ПОМЕСТИТЬ ЗначенияРеквизитовОснования
|ИЗ
| &ИмяТаблицыДокументаОснования КАК ОснованиеТранспортнойНакладной
|ГДЕ
| ОснованиеТранспортнойНакладной.Ссылка = &ДокументОснование";
Если ВернутьЗапросДляВычисленияПриЗаписи Тогда
ТекстЗапроса = ТекстЗапроса + ОбщегоНазначения.РазделительПакетаЗапросов() +
"ВЫБРАТЬ
| ОснованиеТранспортнойНакладной.Ссылка КАК Ссылка,
| &ТекстПолученияСпособаДоставки КАК СпособДоставки
|ПОМЕСТИТЬ СпособДоставкиДокументаОснования
|ИЗ
| &ИмяТаблицыДокументаОснования КАК ОснованиеТранспортнойНакладной
|ГДЕ
| ОснованиеТранспортнойНакладной.Ссылка = &ДокументОснование";
Если ЕстьСпособДоставки Тогда
ТекстПолученияСпособаДоставки = "ОснованиеТранспортнойНакладной.СпособДоставки";
Иначе
ТекстПолученияСпособаДоставки = "ЗНАЧЕНИЕ(Перечисление.СпособыДоставки.Самовывоз)";
КонецЕсли;
ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ТекстПолученияСпособаДоставки", ТекстПолученияСпособаДоставки);
Если ПараметрыФормированияТранспортныхНакладных.ЕстьЗаказы Тогда
ТекстЗапроса = ТекстЗапроса + "
| И НЕ ОснованиеТранспортнойНакладной." + ПараметрыФормированияТранспортныхНакладных.ИмяПоляНакладнаяПоЗаказу + "
|
|ОБЪЕДИНИТЬ ВСЕ
|
|ВЫБРАТЬ ПЕРВЫЕ 1
| ДокументТовары.Ссылка,
| ДокументТовары." + ПараметрыФормированияТранспортныхНакладных.ИмяПоляЗаказВТЧТовары + ".СпособДоставки
|ИЗ
| &ИмяТаблицыДокументТовары КАК ДокументТовары
|ГДЕ
| ДокументТовары.Ссылка = &ДокументОснование
| И ДокументТовары.Ссылка." + ПараметрыФормированияТранспортныхНакладных.ИмяПоляНакладнаяПоЗаказу;
КонецЕсли;
КонецЕсли;
ТекстЗапроса = ТекстЗапроса + ОбщегоНазначения.РазделительПакетаЗапросов() +
"ВЫБРАТЬ
| ТранспортнаяНакладнаяДокументыОснования.Ссылка КАК Ссылка,
| ТранспортнаяНакладнаяДокументыОснования.Ссылка.Дата КАК Дата,
| ТранспортнаяНакладнаяДокументыОснования.Ссылка.Номер КАК Номер,
| ТранспортнаяНакладнаяДокументыОснования.ДокументОснование КАК ДокументОснование,
| &ТекстВыборкиПолейТранспортнойНакладной,
| НЕ ТранспортнаяНакладнаяДокументыОснования.Ссылка.ЗаданиеНаПеревозку = ЗНАЧЕНИЕ(Документ.ЗаданиеНаПеревозку.ПустаяСсылка) КАК ПоЗаданиюНаПеревозку
|ПОМЕСТИТЬ ТранспортныеНакладныеПоОснованию
|ИЗ
| Документ.ТранспортнаяНакладная.ДокументыОснования КАК ТранспортнаяНакладнаяДокументыОснования
|ГДЕ
| ТранспортнаяНакладнаяДокументыОснования.ДокументОснование = &ДокументОснование
| И ТранспортнаяНакладнаяДокументыОснования.Ссылка.Проведен
|;
|
|
|ВЫБРАТЬ
| ТранспортныеНакладныеПоОснованию.Ссылка КАК Ссылка,
| ТранспортныеНакладныеПоОснованию.ПоЗаданиюНаПеревозку
| И НЕ СпособДоставкиДокументаОснования.СпособДоставки В (&СпособыДоставкиПоЗаданиюНаПеревозку)
| ИЛИ НЕ ТранспортныеНакладныеПоОснованию.ПоЗаданиюНаПеревозку
| И СпособДоставкиДокументаОснования.СпособДоставки В (&СпособыДоставкиПоЗаданиюНаПеревозку) КАК ПроблемаСоСпособомДоставки,
| &ТекстУсловияРазличийРеквизитов КАК ПроблемаРазличийВРеквизитах,
| КОЛИЧЕСТВО(РАЗЛИЧНЫЕ ТранспортнаяНакладнаяДокументыОснования.ДокументОснование) КАК КоличествоДокументовОснований
|ИЗ
| ТранспортныеНакладныеПоОснованию КАК ТранспортныеНакладныеПоОснованию
| ЛЕВОЕ СОЕДИНЕНИЕ СпособДоставкиДокументаОснования КАК СпособДоставкиДокументаОснования
| ПО ТранспортныеНакладныеПоОснованию.ДокументОснование = СпособДоставкиДокументаОснования.Ссылка
| ЛЕВОЕ СОЕДИНЕНИЕ ЗначенияРеквизитовОснования КАК ЗначенияРеквизитовОснования
| ПО ТранспортныеНакладныеПоОснованию.ДокументОснование = ЗначенияРеквизитовОснования.Ссылка
| ЛЕВОЕ СОЕДИНЕНИЕ Документ.ТранспортнаяНакладная.ДокументыОснования КАК ТранспортнаяНакладнаяДокументыОснования
| ПО ТранспортныеНакладныеПоОснованию.Ссылка = ТранспортнаяНакладнаяДокументыОснования.Ссылка
|ГДЕ
| (ТранспортныеНакладныеПоОснованию.ПоЗаданиюНаПеревозку
| И НЕ СпособДоставкиДокументаОснования.СпособДоставки В (&СпособыДоставкиПоЗаданиюНаПеревозку)
| ИЛИ НЕ ТранспортныеНакладныеПоОснованию.ПоЗаданиюНаПеревозку
| И СпособДоставкиДокументаОснования.СпособДоставки В (&СпособыДоставкиПоЗаданиюНаПеревозку)
| ИЛИ &ТекстУсловияРазличийРеквизитов)
|
|СГРУППИРОВАТЬ ПО
| ТранспортныеНакладныеПоОснованию.Ссылка,
| &ТекстУсловияРазличийРеквизитов,
| ТранспортныеНакладныеПоОснованию.ПоЗаданиюНаПеревозку
| И НЕ СпособДоставкиДокументаОснования.СпособДоставки В (&СпособыДоставкиПоЗаданиюНаПеревозку)
| ИЛИ НЕ ТранспортныеНакладныеПоОснованию.ПоЗаданиюНаПеревозку
| И СпособДоставкиДокументаОснования.СпособДоставки В (&СпособыДоставкиПоЗаданиюНаПеревозку)";
ТекстЗапроса = СтрЗаменить(ТекстЗапроса,
"&ТекстВыборкиПолейДокументаОснования",
ТекстВыборкиПолейДокументаОснования(ВсеВыбираемыеРеквизиты, ПараметрыФормированияТранспортныхНакладных, Ложь, Ложь, ЕстьСпособДоставки));
ТекстЗапроса = СтрЗаменить(ТекстЗапроса,
"&ТекстВыборкиПолейТранспортнойНакладной",
ТекстВыборкиРеквизитов("ТранспортнаяНакладнаяДокументыОснования.Ссылка",ВсеВыбираемыеРеквизиты, Истина));
ТекстыУсловияРазличийРеквизитов = Новый Массив;
Для Каждого СтрМас Из ВсеВыбираемыеРеквизиты Цикл
Если СтрМас = "АдресДоставкиЗначенияПолей" Тогда
Продолжить;
КонецЕсли;
ТекстУсловияРазличийРеквизитов = "ТранспортныеНакладныеПоОснованию." + СтрМас + " <> ЗначенияРеквизитовОснования." + СтрМас;
ТекстыУсловияРазличийРеквизитов.Добавить(ТекстУсловияРазличийРеквизитов);
КонецЦикла;
ТекстЗапроса = СтрЗаменить(ТекстЗапроса,
"&ТекстУсловияРазличийРеквизитов",
СтрСоединить(ТекстыУсловияРазличийРеквизитов," ИЛИ " + Символы.ПС));
Если ВернутьЗапросДляВычисленияПриЗаписи Тогда
ИмяТаблицыДокументаОснования = ПолноеИмяДокумента;
Иначе
ИмяТаблицыДокументаОснования = СтрЗаменить(ПолноеИмяДокумента,".","");
КонецЕсли;
ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ИмяТаблицыДокументаОснования", ИмяТаблицыДокументаОснования);
Если ВернутьЗапросДляВычисленияПриЗаписи Тогда
ИмяТаблицыДокументТовары = ПолноеИмяДокумента + "." + ПараметрыФормированияТранспортныхНакладных.ИмяТЧТовары;
Иначе
ИмяТаблицыДокументТовары = СтрЗаменить(ПолноеИмяДокумента,".","") + ПараметрыФормированияТранспортныхНакладных.ИмяТЧТовары;
КонецЕсли;
ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ИмяТаблицыДокументТовары", ИмяТаблицыДокументТовары);
Возврат Новый Структура("ТекстЗапроса,СвойстваКоторыеОбязательноДолжныСовпадать,СвойстваКоторыеМогутНеСовпадать",
ТекстЗапроса,СвойстваКоторыеОбязательноДолжныСовпадать,СвойстваКоторыеМогутНеСовпадать);
КонецФункции
Функция ТекстВТМассыИзОснований(ТипыОбъектов, Запрос) Экспорт
ТекстыВыборкиТоваров = Новый Массив;
ЭтоПервыйТипОснования = Истина;
ИспользоватьРасширенныеВозможностиЗаказа = ПолучитьФункциональнуюОпцию("ИспользоватьРасширенныеВозможностиЗаказаКлиента");
Для Каждого КлючЗначение Из ТипыОбъектов Цикл
ТипОбъекта = КлючЗначение.Ключ;
МетаданныеОбъекта = Метаданные.НайтиПоТипу(ТипОбъекта);
ПолноеИмяОснования = МетаданныеОбъекта.ПолноеИмя();
МодульЛокализации = ОбщегоНазначенияУТ.ПолучитьМодульЛокализации(ПолноеИмяОснования);
Если МодульЛокализации = Неопределено Тогда
МодульЛокализации = ОбщегоНазначения.МенеджерОбъектаПоПолномуИмени(ПолноеИмяОснования);
КонецЕсли;
ПараметрыФормированияТранспортныхНакладных = МодульЛокализации.ПараметрыФормированияТранспортныхНакладных();
ТекстВыборкиТоваров =
"ВЫБРАТЬ
| ДокументТовары.НомерСтроки КАК НомерСтроки,
| ДокументТовары.Номенклатура КАК Номенклатура,
| ДокументТовары.Упаковка КАК Упаковка,
| ДокументТовары.КоличествоУпаковок КАК КоличествоУпаковок,
| ДокументТовары.Количество КАК Количество,
| ВЫРАЗИТЬ(&ТекстЗапросаВесНоменклатуры КАК ЧИСЛО(12,3)) КАК МассаНеттоНоменклатуры,
| ДокументТовары.Количество * &ТекстЗапросаВесНоменклатуры КАК МассаНетто,
| ДокументТовары.Ссылка КАК Ссылка " +
?(ЭтоПервыйТипОснования, "ПОМЕСТИТЬ ТаблицаТоваров", "") + "
|ИЗ
| " + ПолноеИмяОснования + "." + ПараметрыФормированияТранспортныхНакладных.ИмяТЧТовары + " КАК ДокументТовары
|ГДЕ
| ДокументТовары.Ссылка В(&МассивОбъектов)
| //&УсловиеИспользованияЗаказов
|";
ТекстУсловиеИспользованияЗаказов = ?(ПараметрыФормированияТранспортныхНакладных.ЕстьЗаказы,
"И НЕ ДокументТовары.Ссылка." + ПараметрыФормированияТранспортныхНакладных.ИмяПоляНакладнаяПоЗаказу,
"");
ТекстВыборкиТоваров = СтрЗаменить(ТекстВыборкиТоваров,
"&МассивОбъектов",
"&МассивОбъектов" + МетаданныеОбъекта.Имя);
ТекстВыборкиТоваров = СтрЗаменить(ТекстВыборкиТоваров,
"//&УсловиеИспользованияЗаказов",
ТекстУсловиеИспользованияЗаказов);
ТекстыВыборкиТоваров.Добавить(ТекстВыборкиТоваров);
Если ПараметрыФормированияТранспортныхНакладных.ЕстьЗаказы Тогда
ТекстВыборкиТоваров =
"ВЫБРАТЬ
| ДокументТовары.НомерСтроки КАК НомерСтроки,
| ДокументТовары.Номенклатура КАК Номенклатура,
| ДокументТовары.Упаковка КАК Упаковка,
| ДокументТовары.КоличествоУпаковок КАК КоличествоУпаковок,
| ДокументТовары.Количество КАК Количество,
| ВЫРАЗИТЬ(&ТекстЗапросаВесНоменклатуры КАК ЧИСЛО(12,3)) КАК МассаНеттоНоменклатуры,
| ДокументТовары.Количество * &ТекстЗапросаВесНоменклатуры КАК МассаНетто,
| ДокументТовары.Ссылка КАК Ссылка
|ИЗ
| " + ПолноеИмяОснования + "." + ПараметрыФормированияТранспортныхНакладных.ИмяТЧТовары + " КАК ДокументТовары
| ЛЕВОЕ СОЕДИНЕНИЕ НакладныеПоЗаданиямНаПеревозку КАК НакладныеПоЗаданиямНаПеревозку
| ПО ДокументТовары.Ссылка = НакладныеПоЗаданиямНаПеревозку.Накладная
| //&УсловиеСоединенияНакладных
| И ДокументТовары." + ПараметрыФормированияТранспортныхНакладных.ИмяПоляЗаказВТЧТовары + " = НакладныеПоЗаданиямНаПеревозку.Распоряжение
|ГДЕ
| ДокументТовары.Ссылка В(&МассивОбъектов)
| И ДокументТовары.Ссылка." + ПараметрыФормированияТранспортныхНакладных.ИмяПоляНакладнаяПоЗаказу + "
| И (НЕ ДокументТовары." + ПараметрыФормированияТранспортныхНакладных.ИмяПоляЗаказВТЧТовары + ".СпособДоставки В(&СпособыДоставкиПоЗаданиюНаПеревозку)
| ИЛИ НЕ НакладныеПоЗаданиямНаПеревозку.Накладная ЕСТЬ NULL
| //&УсловиеИспользованияЗаказов)
|";
ТекстУсловиеИспользованияЗаказов = ?(ПараметрыФормированияТранспортныхНакладных.ИспользоватьРасширенныеВозможностиЗаказа,
"ИЛИ НЕ &ИспользоватьРасширенныеВозможностиЗаказа",
"");
ТекстУсловиеСоединенияНакладных = ?(НРег(ПолноеИмяОснования) = "документ.реализациятоваровуслуг",
"И ДокументТовары.Склад = НакладныеПоЗаданиямНаПеревозку.Склад",
"");
ТекстВыборкиТоваров = СтрЗаменить(ТекстВыборкиТоваров,
"&МассивОбъектов",
"&МассивОбъектов" + МетаданныеОбъекта.Имя);
ТекстВыборкиТоваров = СтрЗаменить(ТекстВыборкиТоваров,
"//&УсловиеИспользованияЗаказов",
ТекстУсловиеИспользованияЗаказов);
ТекстВыборкиТоваров = СтрЗаменить(ТекстВыборкиТоваров,
"//&УсловиеСоединенияНакладных",
ТекстУсловиеСоединенияНакладных);
ТекстыВыборкиТоваров.Добавить(ТекстВыборкиТоваров);
КонецЕсли;
ЭтоПервыйТипОснования = Ложь;
Запрос.УстановитьПараметр("МассивОбъектов" + МетаданныеОбъекта.Имя, КлючЗначение.Значение);
КонецЦикла;
ТекстВыборкиТоваров = СтрСоединить(ТекстыВыборкиТоваров, ОбщегоНазначенияУТ.РазделительЗапросовВОбъединении());
ТекстВыборкиТоваров = СтрЗаменить(ТекстВыборкиТоваров,
"&ТекстЗапросаВесНоменклатуры",
Справочники.УпаковкиЕдиницыИзмерения.ТекстЗапросаВесУпаковки(
"ДокументТовары.Номенклатура.ЕдиницаИзмерения",
"ДокументТовары.Номенклатура",
Ложь));
ТекстТаблицыКоэффициентыУпаковок = ПродажиСервер.ТекстВременнойТаблицыКоэффициентовУпаковок();
ТекстВыборкиМассы = "
|ВЫБРАТЬ
| ТаблицаТоваров.Ссылка КАК Ссылка,
| ТаблицаТоваров.НомерСтроки КАК НомерСтроки,
| ВЫБОР
| КОГДА НЕ &ВыводитьБазовыеЕдиницыИзмерения
| ТОГДА ТаблицаТоваров.КоличествоУпаковок
| ИНАЧЕ ТаблицаТоваров.Количество
| КОНЕЦ КАК Количество,
| ВЫБОР
| КОГДА НЕ &ВыводитьБазовыеЕдиницыИзмерения
| ТОГДА ВЫБОР
| КОГДА КоэффициентыУпаковок.Количество < КоэффициентыУпаковок.КоэффициентВложеннойУпаковки
| ИЛИ ТаблицаТоваров.Упаковка <> ЗНАЧЕНИЕ(Справочник.УпаковкиЕдиницыИзмерения.ПустаяСсылка)
| И ((ТаблицаТоваров.Номенклатура.ВесИспользовать
| И ТаблицаТоваров.Номенклатура.ВесМожноУказыватьВДокументах
| И ТаблицаТоваров.Упаковка = ТаблицаТоваров.Номенклатура.ВесЕдиницаИзмерения)
| ИЛИ (ТаблицаТоваров.Номенклатура.ОбъемИспользовать
| И ТаблицаТоваров.Номенклатура.ОбъемМожноУказыватьВДокументах
| И ТаблицаТоваров.Упаковка = ТаблицаТоваров.Номенклатура.ОбъемЕдиницаИзмерения)
| ИЛИ (ТаблицаТоваров.Номенклатура.ДлинаИспользовать
| И ТаблицаТоваров.Номенклатура.ДлинаМожноУказыватьВДокументах
| И ТаблицаТоваров.Упаковка = ТаблицаТоваров.Номенклатура.ДлинаЕдиницаИзмерения)
| ИЛИ (ТаблицаТоваров.Номенклатура.ПлощадьИспользовать
| И ТаблицаТоваров.Номенклатура.ПлощадьМожноУказыватьВДокументах
| И ТаблицаТоваров.Упаковка = ТаблицаТоваров.Номенклатура.ПлощадьЕдиницаИзмерения))
| ТОГДА КоэффициентыУпаковок.КоличествоУпаковок
| ИНАЧЕ ТаблицаТоваров.Количество / КоэффициентыУпаковок.КоэффициентВложеннойУпаковки
| КОНЕЦ
| ИНАЧЕ ВЫБОР
| КОГДА ТаблицаТоваров.Упаковка <> ЗНАЧЕНИЕ(Справочник.УпаковкиЕдиницыИзмерения.ПустаяСсылка)
| И &ВыводитьБазовыеЕдиницыИзмерения
| И ((ТаблицаТоваров.Номенклатура.ВесИспользовать
| И ТаблицаТоваров.Номенклатура.ВесМожноУказыватьВДокументах
| И ТаблицаТоваров.Упаковка = ТаблицаТоваров.Номенклатура.ВесЕдиницаИзмерения)
| ИЛИ (ТаблицаТоваров.Номенклатура.ОбъемИспользовать
| И ТаблицаТоваров.Номенклатура.ОбъемМожноУказыватьВДокументах
| И ТаблицаТоваров.Упаковка = ТаблицаТоваров.Номенклатура.ОбъемЕдиницаИзмерения)
| ИЛИ (ТаблицаТоваров.Номенклатура.ДлинаИспользовать
| И ТаблицаТоваров.Номенклатура.ДлинаМожноУказыватьВДокументах
| И ТаблицаТоваров.Упаковка = ТаблицаТоваров.Номенклатура.ДлинаЕдиницаИзмерения)
| ИЛИ (ТаблицаТоваров.Номенклатура.ПлощадьИспользовать
| И ТаблицаТоваров.Номенклатура.ПлощадьМожноУказыватьВДокументах
| И ТаблицаТоваров.Упаковка = ТаблицаТоваров.Номенклатура.ПлощадьЕдиницаИзмерения))
| ТОГДА ТаблицаТоваров.КоличествоУпаковок
|
| КОГДА ТаблицаТоваров.Упаковка = ЗНАЧЕНИЕ(Справочник.УпаковкиЕдиницыИзмерения.ПустаяСсылка)
| ИЛИ ТаблицаТоваров.Упаковка = (ВЫБОР
| КОГДА &ВыводитьБазовыеЕдиницыИзмерения
| ТОГДА ТаблицаТоваров.Номенклатура.ЕдиницаИзмерения
| ИНАЧЕ &ТекстЗапросаЕдиницаИзмерения
| КОНЕЦ)
| ТОГДА ТаблицаТоваров.Количество
|
| ИНАЧЕ ВЫРАЗИТЬ(ТаблицаТоваров.Количество / ЕСТЬNULL(&ТекстЗапросаКоэффициентУпаковки, 1) КАК ЧИСЛО(12, 3))
| КОНЕЦ
| КОНЕЦ КАК КоличествоМестДробное,
| ВЫБОР
| КОГДА НЕ &ВыводитьБазовыеЕдиницыИзмерения
| ТОГДА ВЫБОР
| КОГДА КоэффициентыУпаковок.Количество < КоэффициентыУпаковок.КоэффициентВложеннойУпаковки
| ТОГДА 1
| ИНАЧЕ
| ВЫБОР КОГДА ТаблицаТоваров.Упаковка.ЕдиницаИзмерения = &ТекстЗапросаЕдиницаИзмерения
| ИЛИ ТаблицаТоваров.Упаковка <> ЗНАЧЕНИЕ(Справочник.УпаковкиЕдиницыИзмерения.ПустаяСсылка)
| И ((ТаблицаТоваров.Номенклатура.ВесИспользовать
| И ТаблицаТоваров.Номенклатура.ВесМожноУказыватьВДокументах
| И ТаблицаТоваров.Упаковка = ТаблицаТоваров.Номенклатура.ВесЕдиницаИзмерения)
| ИЛИ (ТаблицаТоваров.Номенклатура.ОбъемИспользовать
| И ТаблицаТоваров.Номенклатура.ОбъемМожноУказыватьВДокументах
| И ТаблицаТоваров.Упаковка = ТаблицаТоваров.Номенклатура.ОбъемЕдиницаИзмерения)
| ИЛИ (ТаблицаТоваров.Номенклатура.ДлинаИспользовать
| И ТаблицаТоваров.Номенклатура.ДлинаМожноУказыватьВДокументах
| И ТаблицаТоваров.Упаковка = ТаблицаТоваров.Номенклатура.ДлинаЕдиницаИзмерения)
| ИЛИ (ТаблицаТоваров.Номенклатура.ПлощадьИспользовать
| И ТаблицаТоваров.Номенклатура.ПлощадьМожноУказыватьВДокументах
| И ТаблицаТоваров.Упаковка = ТаблицаТоваров.Номенклатура.ПлощадьЕдиницаИзмерения))
| ТОГДА 1
| ИНАЧЕ КоэффициентыУпаковок.КоэффициентВложеннойУпаковки
| КОНЕЦ
| КОНЕЦ
| ИНАЧЕ ВЫБОР
| КОГДА ТаблицаТоваров.Упаковка = ЗНАЧЕНИЕ(Справочник.УпаковкиЕдиницыИзмерения.ПустаяСсылка)
| ИЛИ ТаблицаТоваров.Упаковка = (ВЫБОР
| КОГДА &ВыводитьБазовыеЕдиницыИзмерения
| ТОГДА ТаблицаТоваров.Номенклатура.ЕдиницаИзмерения
| ИНАЧЕ &ТекстЗапросаЕдиницаИзмерения
| КОНЕЦ)
| ТОГДА 1
| ИНАЧЕ &ТекстЗапросаКоэффициентУпаковки
| КОНЕЦ
| КОНЕЦ КАК КоличествоВОдномМесте,
| ВЫБОР КОГДА &ВыводитьБазовыеЕдиницыИзмерения ТОГДА &ТекстЗапросаВесУпаковки ИНАЧЕ &ТекстЗапросаВесВидаУпаковки КОНЕЦ КАК МассаБруттоОдногоМеста,
| ЕСТЬNULL(КоэффициентыУпаковок.КоэффициентУпаковки, 1) * ТаблицаТоваров.МассаНеттоНоменклатуры КАК МассаНеттоОднойУпаковки,
| ТаблицаТоваров.Номенклатура КАК Номенклатура,
| ВЫБОР
| КОГДА ТаблицаТоваров.Упаковка.ТипИзмеряемойВеличины = ЗНАЧЕНИЕ(Перечисление.ТипыИзмеряемыхВеличин.Вес)
| ТОГДА ЕСТЬNULL(КоэффициентыУпаковок.КоэффициентУпаковки, 1)
| ИНАЧЕ 1
| КОНЕЦ КАК КоэффициентУпаковки
|
|ПОМЕСТИТЬ РасчитанныеДанныеУпаковокЕдиницИзмерения
|ИЗ
| ТаблицаТоваров КАК ТаблицаТоваров
| ЛЕВОЕ СОЕДИНЕНИЕ КоэффициентыУпаковок КАК КоэффициентыУпаковок
| ПО ТаблицаТоваров.Ссылка = КоэффициентыУпаковок.Ссылка
| И ТаблицаТоваров.НомерСтроки = КоэффициентыУпаковок.НомерСтроки
| И ТаблицаТоваров.Номенклатура = КоэффициентыУпаковок.Номенклатура
| И ТаблицаТоваров.КоличествоУпаковок = КоэффициентыУпаковок.КоличествоУпаковок
| И (НЕ &ВыводитьБазовыеЕдиницыИзмерения)
|
|ИНДЕКСИРОВАТЬ ПО
| Ссылка,
| НомерСтроки,
| Номенклатура
|;
|
|
|ВЫБРАТЬ
| ТаблицаТоваров.Ссылка КАК Ссылка,
| СУММА(ТаблицаТоваров.МассаНетто) КАК МассаНетто,
| СУММА(ВЫБОР
| КОГДА ДанныеУпаковок.КоличествоМестДробное = (ВЫРАЗИТЬ(ДанныеУпаковок.КоличествоМестДробное КАК ЧИСЛО(12, 0)))
| ТОГДА ДанныеУпаковок.КоличествоМестДробное
| ИНАЧЕ ВЫРАЗИТЬ(ДанныеУпаковок.КоличествоМестДробное + 0.5 КАК ЧИСЛО(12, 0))
| КОНЕЦ * ЕСТЬNULL(ДанныеУпаковок.МассаБруттоОдногоМеста, 0) - (ВЫБОР
| КОГДА ДанныеУпаковок.КоличествоМестДробное = (ВЫРАЗИТЬ(ДанныеУпаковок.КоличествоМестДробное КАК ЧИСЛО(12, 0)))
| ТОГДА ДанныеУпаковок.КоличествоМестДробное
| ИНАЧЕ ВЫРАЗИТЬ(ДанныеУпаковок.КоличествоМестДробное + 0.5 КАК ЧИСЛО(12, 0))
| КОНЕЦ * ЕСТЬNULL(ДанныеУпаковок.КоличествоВОдномМесте, 0) - ВЫБОР
| КОГДА &ВыводитьБазовыеЕдиницыИзмерения
| ТОГДА ТаблицаТоваров.Количество
| ИНАЧЕ ТаблицаТоваров.КоличествоУпаковок * ЕСТЬNULL(ДанныеУпаковок.КоэффициентУпаковки, 1)
| КОНЕЦ) * ДанныеУпаковок.МассаНеттоОднойУпаковки) КАК МассаБрутто
|ПОМЕСТИТЬ МассыИзОснований
|ИЗ
| ТаблицаТоваров КАК ТаблицаТоваров
| ЛЕВОЕ СОЕДИНЕНИЕ РасчитанныеДанныеУпаковокЕдиницИзмерения КАК ДанныеУпаковок
| ПО ТаблицаТоваров.Ссылка = ДанныеУпаковок.Ссылка
| И ТаблицаТоваров.НомерСтроки = ДанныеУпаковок.НомерСтроки
| И ТаблицаТоваров.Номенклатура = ДанныеУпаковок.Номенклатура
|
|СГРУППИРОВАТЬ ПО
| ТаблицаТоваров.Ссылка
|";
ТекстВыборкиМассы = СтрЗаменить(ТекстВыборкиМассы, "&ТекстЗапросаКоэффициентУпаковки",
Справочники.УпаковкиЕдиницыИзмерения.ТекстЗапросаКоэффициентаУпаковки(
"ТаблицаТоваров.Упаковка",
"ТаблицаТоваров.Номенклатура"));
ТекстВыборкиМассы = СтрЗаменить(
ТекстВыборкиМассы,
"&ТекстЗапросаВесУпаковки",
Справочники.УпаковкиЕдиницыИзмерения.ТекстЗапросаВесУпаковки(
"ТаблицаТоваров.Упаковка",
"ТаблицаТоваров.Номенклатура"));
ТекстВыборкиМассы = СтрЗаменить(
ТекстВыборкиМассы,
"&ТекстЗапросаВесВидаУпаковки",
Справочники.УпаковкиЕдиницыИзмерения.ТекстЗапросаВесУпаковки(
"КоэффициентыУпаковок.ВидУпаковки",
"ТаблицаТоваров.Номенклатура"));
ТекстВыборкиМассы = СтрЗаменить(
ТекстВыборкиМассы,
"&ТекстЗапросаЕдиницаИзмерения",
Справочники.УпаковкиЕдиницыИзмерения.ТекстЗапросаЗначениеРеквизитаЕдиницыИзмерения(
"Ссылка",
"ТаблицаТоваров.Упаковка",
"ТаблицаТоваров.Номенклатура"));
Запрос.УстановитьПараметр("ВыводитьБазовыеЕдиницыИзмерения", Константы.ВыводитьБазовыеЕдиницыИзмерения.Получить());
Запрос.УстановитьПараметр("ИспользоватьРасширенныеВозможностиЗаказа", ИспользоватьРасширенныеВозможностиЗаказа);
ИтоговыйТекстЗапроса = ТекстВыборкиТоваров
+ ОбщегоНазначения.РазделительПакетаЗапросов()
+ ТекстТаблицыКоэффициентыУпаковок
+ ОбщегоНазначения.РазделительПакетаЗапросов()
+ ТекстВыборкиМассы;
Возврат ИтоговыйТекстЗапроса;
КонецФункции
Функция ЕстьСпособДоставки(ТипРаспоряжения)
Возврат Метаданные.ОпределяемыеТипы.РаспоряжениеНаДоставку.Тип.СодержитТип(ТипРаспоряжения);
КонецФункции
Функция ЗаменитьСинонимТаблицы(СинонимТаблицы, ТекстПоля)
ЧастиСтроки = СтрРазделить(ТекстПоля, ".");
Если ЧастиСтроки.Количество() = 2 Тогда
ЧастиСтроки[0] = СинонимТаблицы;
Возврат СтрСоединить(ЧастиСтроки, ".");
ИначеЕсли ЧастиСтроки.Количество() = 1 Тогда
Возврат СинонимТаблицы + "." + ТекстПоля;
Иначе
Возврат ТекстПоля;
КонецЕсли;
КонецФункции
#КонецОбласти
#КонецЕсли