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

параметры в печатной форме Больничная аптека

Автор ppkmlite, 15 мая 2015, 22:26

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

ppkmlite

Добрый день!Подскажите, пожалуйста.
Есть печатная форма для элемента справочника договоры. Когда заходим в один договор на форме кнопка, по нажатию на которую выходит печатная форма, котррая выводит все номенклатуру, закупленную по этому договору, номер и дату документов потсупления. Вопрос такой - номенклатур в одном документе может быть много, они находятся в табличной части, как сделать чтобы номер документа выводился только один раз, и по нему вся номенклатура??. У меня получается сейчас,на каждую номенклатуру выводится номер,хотя он одинаковый
&НаКлиенте
Процедура акт(Команда)
акты().Показать();
КонецПроцедуры

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

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

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

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

ppkmlite

Макет

vitasw

1. Левым соединением пристегивайте приходные к договорам, а не так как сейчас у вас договоры к приходным
2. Заполняйте параметр номер только для первой строки.
3. Для вас будет полезным секция "Итоги" в запросе.

Rokkie

Обнаружил неточность в запросе. Тут произвольное указание соединения по строке, хотя не понятно зачем. Так же, чтобы отчет был менее громоздким (в частности, чтобы не повторялась номенклатура), нужно сделать группировку по всем полям. Далее, как правильно предлагает vitasw нужно получить итоговое группировочное поле по полю "НомерВходящегоДокумента" (т.е. вместо одноуровнего результата запроса, мы получаем древовидный: на первом уровне итоговое группировочное поле, на втором детальные записи - все остальные поля включая и сам номер входящего документа). Это налаживается в закладке конструктора запроса "Итоги". Это было сделано, чтобы получить номер всходящего документа один раз и добавить его на печатную форму так же 1 раз. Такого рода неудобный, но все же работающий метод. дальше, чтобы не было трудностей с обходом древовидного результата выложу код:

&НаСервере
функция акты()

Макет = справочники.ДоговорыКонтрагентов.ПолучитьМакет("МакетОтчета");   

ОбластьЗаголовок = Макет.ПолучитьОбласть("заголовочек");
ОбластьСтрокаТЧ = Макет.ПолучитьОбласть("СтрокаТЧ");

ТабДок=Новый ТабличныйДокумент;
ТабДок.Вывести(ОбластьЗаголовок);   

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

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

Результат = Запрос.Выполнить();
ВыборкаИтог = Результат.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам); // 1 уровень

сч = 0;

ВыборкаИтог.Следующий();
НомерДок = ВыборкаИтог.НомерВходящегоДокумента;

ВыборкаДетальныеЗаписи = ВыборкаИтог.Выбрать(); // 2 уровень

Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
сч = сч+1;

ОбластьСтрокаТЧ.Параметры.НомерПоПорядку = сч;
ОбластьСтрокаТЧ.Параметры.ДатаДокумента = ВыборкаДетальныеЗаписи.ДатаВходящегоДокумента;
ОбластьСтрокаТЧ.Параметры.номенклатура = ВыборкаДетальныеЗаписи.Номенклатура;
ОбластьСтрокаТЧ.Параметры.номерНакладной = НомерДок;
ТабДок.Вывести(ОбластьСтрокаТЧ);
НомерДок = 0;

КонецЦикла;

ТабДок.ОтображатьСетку = Ложь;
ТабДок.Защита = Ложь;
ТабДок.ТолькоПросмотр = Истина;
ТабДок.ОтображатьЗаголовки = Ложь;
Возврат ТабДок;
Конецфункции


PS Финальное д/з

ppkmlite

Спасибо большое. Скажите,пожалуйста,как нужно запретить редактирование табличного документа,пишу ТабДок.ТолькоПросмотр = Истина;
    ТабДок.Защита = Истина;

Но не работает, пользовательсвободно редактирует макет в режиме 1с предприятие. КАк можно еще запретить редактирование? (Мне нужно сделать расшифровку для документа)

Дмитрий@


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

Рейтинг@Mail.ru

Поиск