helpf.pro
Регистрация

v8: Результат запроса на печать

Bell
12.06.2013 18:13Прочитано: 2054
Здравствуйте
Мне надо переделать вывод на печать документов через запрос (раньше были объекно)
1.Будет ли данная модель оптимальна (возьму за шаблон)? Сначало запрос на шапку документа, потом на Таб.части документа
2.Если через ТЧ документа получаем периодические реквизиты лучше сразу сделать соединение или сначал поместить во временную таблицу ( по аналогии с остаткми будет быстрее идти соединение)
3. Как выставить параметры страницы вместить на лист по ширине и высоте (некоторы формы могут быть портрет и ландшафт в зависимости от ситуации)
4 Где ошбика в соединении, а то на печать выводит две периодические надписи надписи. (До 1 числа бы Иванов - подразделение1, с 5 Иванов - Подразделение2), а надо Иванов - Подразделение2).
Если есть другая лучшая схема опишите как лучше спланировать.

Код 1C v 8.х
 Функция Печать_КомандировочноеУдостоверение(НазваниеМакета)

Запрос = Новый Запрос;
Запрос.УстановитьПараметр("ДатаДок", КонецДня(Дата));
Запрос.УстановитьПараметр("НомерДок", Номер);
Запрос.УстановитьПараметр("МестоНазначения", МестоНазначения);
Запрос.УстановитьПараметр("ОрганизацияНазначения", ОрганизацияНазначения);
Запрос.УстановитьПараметр("Основание", Основание);
Запрос.УстановитьПараметр("ТекущийДокумент", Ссылка);

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


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


ПериодическиеДанныеОрганизации = ПериодическиеРеквизиты.СведенияОбОрганизации(Шапка.ДатаДок);

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

// Запоминаем области макета
Макет = ПолучитьМакет("КомандировочноеУдостоверение");
ТабДокумент.ПолеСлева = 20;
ТабДокумент.ПолеСправа = 5;
ТабДокумент.ПолеСверху = 5;
ТабДокумент.ПолеСнизу = 5;
ТабДокумент.АвтоМасштаб = Истина;
ТабДокумент.ОтображатьСетку = Ложь;

ОбластьМакетаШапка = Макет.ПолучитьОбласть("Шапка"); // Секция Шапка
ОбластьМакетаОтметки = Макет.ПолучитьОбласть("Отметки"); // Секция Отметки

Для Каждого СтрокаТЧ из ТЧ Цикл

Если ТабДокумент.ВысотаТаблицы > 0 Тогда
ТабДокумент.ВывестиГоризонтальныйРазделительСтраниц();
КонецЕсли;

Если ТЧ.Количество() > 1 Тогда

// Здесь выводим данные на печать

КонецЕсли;

ТабДокумент.Вывести(ОбластьМакетаШапка);
ТабДокумент.Вывести(ОбластьМакетаОтметки);

КонецЦикла;

Возврат ТабДокумент;

КонецФункции

Изменено 12.06.13 18:41:15
Yandex
Возможно, вас также заинтересует
Реклама на портале
E_Migachev
12.06.2013 19:33Ответ № 1
(0) Bell,
1. Можно и так
2. в данном случае лучше без Врем. таб.
3. в конце функции:
Код 1C v 8.х
 ТабДокумент.ПолеСлева          = 20;
ТабДокумент.ПолеСправа = 5;
ТабДокумент.ПолеСверху = 5;
ТабДокумент.ПолеСнизу = 5;
ТабДокумент.АвтоМасштаб = Истина;
ТабДокумент.ОтображатьСетку = Ложь;

4. Срез последних должен получать только последнее значение на дату
Bell
12.06.2013 19:50Ответ № 2
По 4
А где у меня ошибка дублирует строки Сотруднков. Вроде все правильно сделел на срез последних. Может где нибудь еще параметр надо указать?
Dana
13.06.2013 10:09Ответ № 3
Возможно, сотрудник работает не по 1 графику или совмещает, тогда и табельный номер и подразделение будут другими, отбор же не по ФизЛицу.
Bell
13.06.2013 10:11Ответ № 4
Я наверное понял
У меня в ТЧ документа реквизит Сотрудники, в регистре сведений измерения Сотрудники, Подразделения, Отдел, Должность.
переделал на (Патался вводить параметр сотрудники ошибка)Как выйт из ситуации, не вводя доп. реквизиты в ТЧ документа или не писать функцию по получению периодач. данных и при выводе на печать в цикле получать периодач.данный сотудника (работает проверил ). тогда теряется весь ссысл делать чеерз запрос.
Что за ошибка у меня в СрезеПоследних
Код 1C v 8.х
 ВЫБРАТЬ
Док.Ссылка,
Док.НомерСтроки КАК НомерСтроки,
Док.Код КАК ТабельныйНомер,
Док.Сотрудники КАК Сотрудники,
Док.ДатаС КАК ДатаС,
Док.ДатаПо КАК ДатаПо,
Док.Дней КАК Дней,
Док.Цель КАК Цель,
Док.Приказ КАК Приказ,
ПериодическиеДанныеСотрудника.Подразделение,
ПериодическиеДанныеСотрудника.Отдел,
ПериодическиеДанныеСотрудника.Должность,
ПериодическиеДанныеСотрудника.ГрафикРаботы,
ПериодическиеДанныеСотрудника.ДатаПриема,
ПериодическиеДанныеСотрудника.ДатаУвольнения,
ПериодическиеДанныеСотрудника.Статус
ИЗ
Документ.КомандировочноеУдостоверение.Сотрудники КАК Док
ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.РС_Сотрудники.СрезПоследних(&ДатаДок, &?????) КАК ПериодическиеДанныеСотрудника
ПО Док.Сотрудники = ПериодическиеДанныеСотрудника.Сотрудники
ГДЕ
Док.Ссылка = &ТекущийДокумент
???????

Изменено 13.06.13 10:11:38
Bell
14.06.2013 09:31Ответ № 5
Подумал, передалал регистр свдений
Подсказка: Для выделения Кода используйте (в редакторе).
Вы не можете отправить комментарий анонимно, пожалуйста войдите или зарегистрируйтесь.