Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
25 ноя 2024, 11:20

Сортировка в макете

Автор xgladosx, 25 фев 2014, 11:02

0 Пользователей и 1 гость просматривают эту тему.

xgladosx

Добрый день!
есть документ резервирования, с него печатается требование на склад с адресами, мне нужно сделать сортировку по месту хранения, я не очень знаком с языком запросов, помогите пожалуйста. Код печати ниже.
Спасибо
Процедура Печать(Кнопка)

Если ЭтоНовый() Тогда
Предупреждение("Документ можно распечатать только после его записи");
Возврат;
ИначеЕсли Не РазрешитьПечатьНепроведенныхДокументов(Проведен) Тогда
Предупреждение("Недостаточно полномочий для печати непроведенного документа!");
Возврат;
КонецЕсли;

Если Не ПроверитьМодифицированность(ЭтотОбъект) Тогда
Возврат;
КонецЕсли;

Запрос = Новый Запрос;
Запрос.УстановитьПараметр("ТекущийДокумент", ЭтотОбъект.Ссылка);

Запрос.Текст =
"ВЫБРАТЬ
| Номер,
| Дата,
| Организация,
| Товары.(
| Номенклатура,
| Номенклатура.ссылка как ссылк,
| Номенклатура.НаименованиеПолное КАК Товар,
| Номенклатура.Код                КАК Код,
| Номенклатура.Артикул            Как Артикул,
| КоличествоМест,
| Количество,
| ЕдиницаИзмерения.Представление     КАК ЕдиницаИзмерения,
| ЕдиницаИзмеренияМест.Представление КАК ЕдиницаИзмеренияМест,
| ),
| ВозвратнаяТара.(
| Номенклатура,
| Номенклатура.НаименованиеПолное КАК Товар,
| Номенклатура.Код                КАК Код,
| Номенклатура.Артикул            КАК Артикул,
| 0 КАК КоличествоМест,
| Количество,
| Номенклатура.ЕдиницаХраненияОстатков.Представление КАК ЕдиницаИзмерения,
| NULL                                               КАК ЕдиницаИзмеренияМест
| )
|ИЗ
| Документ.РезервированиеТоваров КАК РезервированиеТоваров
|ГДЕ
| РезервированиеТоваров.Ссылка = &ТекущийДокумент
|
|УПОРЯДОЧИТЬ ПО
| Товары.Артикул,
| ВозвратнаяТара.НомерСтроки
|";

Шапка = Запрос.Выполнить().Выбрать();
Шапка.Следующий();
ВыборкаСтрокТовары = Шапка.Товары.Выбрать();
ВыборкаСтрокТара   = Шапка.ВозвратнаяТара.Выбрать();

ТабДокумент = Новый ТабличныйДокумент;
ТабДокумент.ИмяПараметровПечати = "ПАРАМЕТРЫ_ПЕЧАТИ_ПеремещениеТоваров_Накладная";
Макет       = ПолучитьМакет("Накладная");

// Выводим шапку накладной
ОбластьМакета = Макет.ПолучитьОбласть("Заголовок");
ОбластьМакета.Параметры.ТекстЗаголовка = СформироватьЗаголовокДокумента(Шапка, "Требование на склад");
ОбластьМакета.Параметры.Заказ1=ЗаказПокупателя.Ссылка;
  областьМакета.Параметры.Контрагент1=контрагент.Ссылка;
  ОбластьМакета.Параметры.МагазКлиента=МагазинКлиента;
  ТабДокумент.Вывести(ОбластьМакета);

// Вывести табличную часть
ДопКолонка = Константы.ДополнительнаяКолонкаПечатныхФормДокументов.Получить();
Если ДопКолонка = Перечисления.ДополнительнаяКолонкаПечатныхФормДокументов.Артикул Тогда
ВыводитьКоды = Истина;
Колонка = "Артикул";
ИначеЕсли ДопКолонка = Перечисления.ДополнительнаяКолонкаПечатныхФормДокументов.Код Тогда
ВыводитьКоды = Истина;
Колонка = "Код";
Иначе
ВыводитьКоды = Ложь;
КонецЕсли;

ИмяШапки  = "ШапкаТаблицы";
ИмяСтроки = "Строка";

ФлагПечатиМест = (Товары.Итог("КоличествоМест") > 0);
ОбластьНомера  = Макет.ПолучитьОбласть(ИмяШапки + "|НомерСтроки");
ОбластьКодов   = Макет.ПолучитьОбласть(ИмяШапки + "|КолонкаКодов");
ОбластьТовар   = Макет.ПолучитьОбласть(ИмяШапки + "|Товар");
ОбластьМест    = Макет.ПолучитьОбласть(ИмяШапки + "|Мест");
ОбластьДанных  = Макет.ПолучитьОбласть(ИмяШапки + "|Данные");
//арх*
ОбластьАдрес=макет.ПолучитьОбласть(ИмяШапки+"|Адрес");
//*арх

ТабДокумент.Вывести(ОбластьНомера);
Если ВыводитьКоды Тогда
ОбластьКодов.Параметры.ИмяКолонкиКодов = Колонка;
ТабДокумент.Присоединить(ОбластьКодов);
КонецЕсли;
ТабДокумент.Присоединить(ОбластьТовар);
ОбластьКолонкаТовар = Макет.Область("Товар");
Если ВыводитьКоды Тогда
ОбластьКолонкаТовар.ШиринаКолонки = ОбластьКолонкаТовар.ШиринаКолонки
                                    + ?(ФлагПечатиМест, 0, Макет.Область("R14C5").ШиринаКолонки + Макет.Область("R14C6").ШиринаКолонки);
Иначе
ОбластьКолонкаТовар.ШиринаКолонки = ОбластьКолонкаТовар.ШиринаКолонки
                                    + Макет.Область("КолонкаКодов").ШиринаКолонки
                                    + ?(ФлагПечатиМест, 0, Макет.Область("R14C5").ШиринаКолонки + Макет.Область("R14C6").ШиринаКолонки);
КонецЕсли;
Если ФлагПечатиМест Тогда
ТабДокумент.Присоединить(ОбластьМест);
КонецЕсли;
ТабДокумент.Присоединить(ОбластьДанных);
    ТабДокумент.Присоединить(ОбластьАдрес);

ОбластьНомера = Макет.ПолучитьОбласть(ИмяСтроки + "|НомерСтроки");
ОбластьКодов  = Макет.ПолучитьОбласть(ИмяСтроки + "|КолонкаКодов");
ОбластьТовар  = Макет.ПолучитьОбласть(ИмяСтроки + "|Товар");
ОбластьМест   = Макет.ПолучитьОбласть(ИмяСтроки + "|Мест");
ОбластьДанных = Макет.ПолучитьОбласть(ИмяСтроки + "|Данные");
//арх*
ОбластьАдрес=макет.ПолучитьОбласть(ИмяСтроки+"|Адрес");//*арх

Ном = 0;

// Выборка товаров
Пока ВыборкаСтрокТовары.Следующий() Цикл

Если ЗначениеНеЗаполнено(ВыборкаСтрокТовары.Номенклатура) Тогда
Сообщить("В одной из строк не заполнено значение номенклатуры - строка при печати пропущена.", СтатусСообщения.Важное);
Продолжить;
КонецЕсли;

Ном = Ном + 1;

//ОбластьНомера.Параметры.Заполнить(ВыборкаСтрокТовары);
ОбластьНомера.Параметры.НомерСтроки = Ном;
ТабДокумент.Вывести(ОбластьНомера);

Если ВыводитьКоды Тогда
Если Колонка = "Артикул" Тогда
ОбластьКодов.Параметры.Артикул = ВыборкаСтрокТовары.Артикул;
Иначе
ОбластьКодов.Параметры.Артикул = ВыборкаСтрокТовары.Код;
КонецЕсли;
ТабДокумент.Присоединить(ОбластьКодов);
КонецЕсли;

ОбластьТовар.Параметры.Товар = ВыборкаСтрокТовары.Товар;
ТабДокумент.Присоединить(ОбластьТовар);

Если ФлагПечатиМест Тогда
ОбластьМест.Параметры.Заполнить(ВыборкаСтрокТовары);
ТабДокумент.Присоединить(ОбластьМест);
КонецЕсли;

ОбластьДанных.Параметры.Заполнить(ВыборкаСтрокТовары);
ТабДокумент.Присоединить(ОбластьДанных);

//архутич
запрос=Новый запрос;
запрос.текст="ВЫБРАТЬ
| АдресацияСкладаОстатки.Номенклатура,
| АдресацияСкладаОстатки.НомерСклада,
| АдресацияСкладаОстатки.СекцияСклада,
| АдресацияСкладаОстатки.Полка,
| АдресацияСкладаОстатки.Качество,
| АдресацияСкладаОстатки.КоличествоОстаток
|ИЗ
| РегистрНакопления.АдресацияСклада.Остатки(&Дат,Номенклатура.ссылка=&Номен) КАК АдресацияСкладаОстатки";
запрос.УстановитьПараметр("Дат",Дата);
запрос.УстановитьПараметр("Номен",ВыборкаСтрокТовары.ссылк);
адр=" ";
кол=" ";
вып=запрос.Выполнить();
если вып.Пустой() тогда
адр=" ";
кол=" ";
ОбластьАдрес.Параметры.адрес=адр;
ОбластьАдрес.Параметры.кол=кол;
иначе
выб=вып.Выбрать();

Пока выб.Следующий() Цикл
адр1=СокрЛП(выб.НомерСклада)+СокрЛП(выб.СекцияСклада)+СокрЛП(выб.Полка);
адр=адр1+Символы.ПС+адр;
кол1=выб.КоличествоОстаток;
кол=Строка(кол1)+Символы.ПС+Строка(кол);
ОбластьАдрес.Параметры.адрес=адр;
ОбластьАдрес.Параметры.кол=кол;
КонецЦикла;
КонецЕсли;
                     ТабДокумент.Присоединить(ОбластьАдрес); //архутич
КонецЦикла;

// Выборка возвратная тара
Пока ВыборкаСтрокТара.Следующий() Цикл

Если ЗначениеНеЗаполнено(ВыборкаСтрокТара.Номенклатура) Тогда
Сообщить("В одной из строк не заполнено значение номенклатуры - строка при печати пропущена.", СтатусСообщения.Важное);
Продолжить;
КонецЕсли;

Ном = Ном + 1;

//ОбластьНомера.Параметры.Заполнить(ВыборкаСтрокТара);
ОбластьНомера.Параметры.НомерСтроки = Ном;
ТабДокумент.Вывести(ОбластьНомера);

Если ВыводитьКоды Тогда
Если Колонка = "Артикул" Тогда
ОбластьКодов.Параметры.Артикул = ВыборкаСтрокТара.Артикул;
Иначе
ОбластьКодов.Параметры.Артикул = ВыборкаСтрокТара.Код;
КонецЕсли;
ТабДокумент.Присоединить(ОбластьКодов);
КонецЕсли;

ОбластьТовар.Параметры.Товар = ВыборкаСтрокТара.Товар;
ТабДокумент.Присоединить(ОбластьТовар);

Если ФлагПечатиМест Тогда
ОбластьМест.Параметры.Заполнить(ВыборкаСтрокТара);
ТабДокумент.Присоединить(ОбластьМест);
КонецЕсли;

ОбластьДанных.Параметры.Заполнить(ВыборкаСтрокТара);
ТабДокумент.Присоединить(ОбластьДанных);

КонецЦикла;

// Вывести подвал
ОбластьНомера = Макет.ПолучитьОбласть("Подвал|НомерСтроки");
ОбластьКодов  = Макет.ПолучитьОбласть("Подвал|КолонкаКодов");
ОбластьТовар  = Макет.ПолучитьОбласть("Подвал|Товар");
ОбластьМест   = Макет.ПолучитьОбласть("Подвал|Мест");
ОбластьДанных = Макет.ПолучитьОбласть("Подвал|Данные");
//арх*
ОбластьАдрес=макет.ПолучитьОбласть("Подвал|Адрес");
    //*арх

ТабДокумент.Вывести(ОбластьНомера);
Если ВыводитьКоды Тогда
ТабДокумент.Присоединить(ОбластьКодов);
КонецЕсли;
ТабДокумент.Присоединить(ОбластьТовар);
Если ФлагПечатиМест Тогда
ТабДокумент.Присоединить(ОбластьМест);
КонецЕсли;
ТабДокумент.Присоединить(ОбластьДанных);
    ТабДокумент.Присоединить(ОбластьАдрес);

// Вывести подписи
ОбластьМакета = Макет.ПолучитьОбласть("Подписи");
ОбластьМакета.Параметры.Заполнить(Шапка);
ТабДокумент.Вывести(ОбластьМакета);

НапечататьДокумент(ТабДокумент, 1, 0, СформироватьЗаголовокДокумента(ЭтотОбъект, ЭтотОбъект.Метаданные().Представление()));





КонецПроцедуры

Теги:

Похожие темы (5)

Рейтинг@Mail.ru

Поиск