Новая печатная форма документа Перемещение товаров

Версия для печатиPDF-версия

Платформа:

Добрый день. И снова прошу помощи. Подскажите, пожалуйста, почему в печатной форме каждая позиция номенклатуры печатается по 3 раза. Вот процедура:

Процедура ПечатьНовойНакладной(ТабДок, Ссылка) Экспорт

Макет = Документы.ПеремещениеТоваров.ПолучитьМакет("ПечатьНовойНакладной");

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

РезультатЗапроса = Запрос.Выполнить();
Выборка = РезультатЗапроса.Выбрать();

ОбластьЗаголовок = Макет.ПолучитьОбласть("Заголовок");
Шапка = Макет.ПолучитьОбласть("Шапка");
Подвал = Макет.ПолучитьОбласть("Подвал");

ТабДок.Очистить();

ВставлятьРазделительСтраниц = Ложь;
Пока Выборка.Следующий() Цикл
Если ВставлятьРазделительСтраниц Тогда
ТабДок.ВывестиГоризонтальныйРазделительСтраниц();
КонецЕсли;

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

Шапка.Параметры.Заполнить(Выборка);
ТабДок.Вывести(Шапка);
КонецЦикла;

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

РезультатЗапроса = Запрос.Выполнить();
Выборка = РезультатЗапроса.Выбрать();

ОбластьТоварыШапка = Макет.ПолучитьОбласть("ТоварыШапка");
ОбластьТовары = Макет.ПолучитьОбласть("Товары");

ВставлятьРазделительСтраниц = Ложь;

ТабДок.Вывести(ОбластьТоварыШапка);
Пока Выборка.Следующий() Цикл
ОбластьТовары.Параметры.Заполнить(Выборка);
ТабДок.Вывести(ОбластьТовары);
КонецЦикла;

ВставлятьРазделительСтраниц = Истина;

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

РезультатЗапроса = Запрос.Выполнить();
Выборка = РезультатЗапроса.Выбрать();

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

КонецЦикла;

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

А зачем вы соединяете ТЧ Товары с ТЧ Серии? В ТЧ Товары есть реквизит Серия.

ПС. Зачем 2 раза создавать и выполнять один и тот же запрос для шапки и для подвала?

А из ТЧ.Товары серия не выбирается ( макет не заполняется).

Если не делаю второй запрос для подвала, он тоже не заполняет

1. Сколько в базе видов цен? В запросе по ценам надо указать Вид цен в параметрах виртуальной таблицы.

|ИЗ
| РегистрСведений.ЦеныНоменклатуры.СрезПоследних(, ВидЦены = &ВидЦены) КАК ЦеныНоменклатурыСрезПоследних

Скорее всего затроение строк происходит именно из-за этого.

2. Где в запросе условия отбора по текущему документу? По идее, они должны быть в запросе по сериям и в запросе по товарам, а также в запросе по шапке.

3. Область подвал можно заполнять в начале процедуры вместе с шапкой, а выводить после вывода товаров.

Спасибо большое

Добрый день. Установила условие отбора по текущему документу в шапке

"ВЫБРАТЬ
| ПеремещениеТоваров.Ссылка,
| ПеремещениеТоваров.Номер,
| ПеремещениеТоваров.Дата,
| ПеремещениеТоваров.Организация,
| ПеремещениеТоваров.СкладОтправитель,
| ПеремещениеТоваров.СкладПолучатель,
| ПеремещениеТоваров.Ответственный
|ИЗ
| Документ.ПеремещениеТоваров КАК ПеремещениеТоваров
|ГДЕ
| ПеремещениеТоваров.Ссылка = &Ссылка";
Запрос.УстановитьПараметр("Ссылка",Ссылка);
 
В консоле запросов все работает,  а при печати выдает ошибку
{Документ.ПеремещениеТоваров.МодульМенеджера(6220)}: Ошибка при вызове метода контекста (Выполнить)
РезультатЗапроса = Запрос.Выполнить();
по причине:
{(12, 28)}: Неверные параметры в операции сравнения. Нельзя сравнивать поля
 неограниченной длины и поля несовместимых типов.
ПеремещениеТоваров.Ссылка <<?>>= &Ссылка
 
Как это исправить. И также в запросах по сериям и товарам.

 

Посмотрите, что у вас передаётся в параметр Ссылка.

Передается почему-то массив...

А как правильно надо сделать?

Если в массиве 1 элемент - ссылка на документ, то вместо

Запрос.УстановитьПараметр("Ссылка",Ссылка);

написать

Запрос.УстановитьПараметр("Ссылка",Ссылка[0]);.

А если там несколько элементов, то в запросе в условиях "= &Ссылка"  нужно заменить на "В (&Ссылка)". Только в этом случае запрос будет выдавать данные по всем документам из массива.

Спасибо большое