|
Помощь со внешним отчетом | ☑ | ||
---|---|---|---|---|
0
ДолекоДо1Са
02.03.25
✎
19:14
|
Здравствуйте, возникла проблема. Я хотел сделать так, если документ выбран то формируется отчет по этому 1 документу, а если нет, то по всем документам. Я добавил параметр ВыбранныйДокумент в скд для пользовательского выбора, но значение этого параметра почему то всегда Неопределенно, хотя я выбираю значение ссылки на документ перед формированием.
Вот код. Задание я решаю для себя поэтому не судите строго. Буду рад помощи. [code] Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка) СтандартнаяОбработка = Ложь; Результат = Новый ТаблицаЗначений; Результат.Колонки.Добавить("НаименованиеПоля"); Результат.Колонки.Добавить("КоличествоКлапанов"); Результат.Колонки.Добавить("КоличествоОткрытых"); Результат.Колонки.Добавить("МаксОткрытыхПодряд"); Результат.Колонки.Добавить("МаксЗакрытыхПодряд"); Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | ОрошаемыеПоля.НаименованиеПоля КАК НаименованиеПоля, | ОрошаемыеПоля.КоличествоКлапанов КАК КоличествоКлапанов, | ОрошаемыеПоляКлапаны.НомерНачального КАК НомерНачального, | ОрошаемыеПоляКлапаны.НомерКонечного КАК НомерКонечного, | ОрошаемыеПоля.Ссылка КАК Ссылка |ИЗ | Документ.ОрошаемыеПоля КАК ОрошаемыеПоля | ЛЕВОЕ СОЕДИНЕНИЕ Документ.ОрошаемыеПоля.Клапаны КАК ОрошаемыеПоляКлапаны | ПО (ОрошаемыеПоляКлапаны.Ссылка = ОрошаемыеПоля.Ссылка) |{ГДЕ | (ОрошаемыеПоля.Ссылка = &ВыбранныйДокумент) КАК Поле2}"; ТекНастройкиКомпоновщика = КомпоновщикНастроек.Настройки; Параметр = ТекНастройкиКомпоновщика.ПараметрыДанных.НайтиЗначениеПараметра(Новый ПараметрКомпоновкиДанных("ВыбранныйДокумент")).Значение; Запрос.УстановитьПараметр("ВыбранныйДокумент", Параметр); РезультатЗапроса = Запрос.Выполнить(); Выборка = РезультатЗапроса.Выбрать(); Пока Выборка.Следующий() Цикл Буфер = Выборка.Ссылка; НаименованиеПоля = Выборка.НаименованиеПоля; МассивКлапанов = Новый Массив(Выборка.КоличествоКлапанов); Для Итератор = 0 По МассивКлапанов.Количество() - 1 Цикл МассивКлапанов[Итератор] = Ложь; КонецЦикла; Прервать; КонецЦикла; Выборка.Сбросить(); Пока Выборка.Следующий() Цикл Если Буфер <> Выборка.Ссылка Тогда ЗаписьВТЗ(МассивКлапанов, Результат, НаименованиеПоля); МассивКлапанов = Новый Массив(Выборка.КоличествоКлапанов); Для Итератор = 0 По МассивКлапанов.Количество() - 1 Цикл МассивКлапанов[Итератор] = Ложь; КонецЦикла; КонецЕсли; Минимум = Мин(Выборка.НомерНачального, Выборка.НомерКонечного) - 1; Максимум = Макс(Выборка.НомерНачального, Выборка.НомерКонечного) - 1; Для Итератор = Минимум По Максимум Цикл МассивКлапанов[Итератор] = НЕ МассивКлапанов[Итератор]; КонецЦикла; Буфер = Выборка.Ссылка; НаименованиеПоля = Выборка.НаименованиеПоля; КонецЦикла; ЗаписьВТЗ(МассивКлапанов, Результат, НаименованиеПоля); СхемаКомпоновкиДанных = ПолучитьМакет("ОсновнаяСхемаКомпоновкиДанных"); Настройки = СхемаКомпоновкиДанных.НастройкиПоУмолчанию; КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных; ДанныеРасшифровки1 = Новый ДанныеРасшифровкиКомпоновкиДанных; МакетКомпановки = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных, Настройки, ДанныеРасшифровки1); ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных; ВнешнийНабор = Новый Структура("Результат", Результат); ПроцессорКомпоновки.Инициализировать(МакетКомпановки, ВнешнийНабор, ДанныеРасшифровки1); ДокументРезультат.Очистить(); ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент; ПроцессорВывода.УстановитьДокумент(ДокументРезультат); ПроцессорВывода.Вывести(ПроцессорКомпоновки); КонецПроцедуры Процедура ЗаписьВТЗ(МассивКлапанов, Результат, НаименованиеПоля) Открытые = 0; МаксОткрытых = 0; МаксЗакрытых = 0; ТекущаяДлина = 0; ТекущееСостояние = Ложь; Для Итератор = 0 По МассивКлапанов.Количество() - 1 Цикл Если МассивКлапанов[Итератор] Тогда Открытые = Открытые + 1; Если ТекущееСостояние Тогда ТекущаяДлина = ТекущаяДлина + 1; Иначе ТекущаяДлина = 1; ТекущееСостояние = Истина; КонецЕсли; МаксОткрытых = Макс(МаксОткрытых, ТекущаяДлина); Иначе Если ТекущееСостояние Тогда ТекущаяДлина = 1; ТекущееСостояние = Ложь; Иначе ТекущаяДлина = ТекущаяДлина + 1; КонецЕсли; МаксЗакрытых = Макс(МаксЗакрытых, ТекущаяДлина); КонецЕсли; КонецЦикла; Стр = Результат.Добавить(); Стр.НаименованиеПоля = НаименованиеПоля; Стр.КоличествоКлапанов = МассивКлапанов.Количество(); Стр.КоличествоОткрытых = Открытые; Стр.МаксОткрытыхПодряд = МаксОткрытых; Стр.МаксЗакрытыхПодряд = МаксЗакрытых; КонецПроцедуры [\code] |
|||
1
Волшебник
02.03.25
✎
20:04
|
Ваш Документ.ОрошаемыеПоля надо сделать справочником
|
|||
2
ДолекоДо1Са
02.03.25
✎
20:05
|
Не будет никаких мыслей? Я просто не понимаю, что я делаю не так...
|
|||
3
Волшебник
02.03.25
✎
20:05
|
(2) У Вас неправильная структура базы. Переделайте
|
|||
4
ДолекоДо1Са
02.03.25
✎
20:06
|
(1) Я решаю задачку, по условию тут должен быть документ
|
|||
5
Волшебник
02.03.25
✎
20:06
|
(4) Вы не должны подчиняться условиям задачи
|
|||
6
ДолекоДо1Са
02.03.25
✎
20:07
|
Ну просто хочется сделать максимально приближенное к тз решение
|
|||
7
Волшебник
02.03.25
✎
20:08
|
(6) Вы должны думать как 1С-архитектор. Орошаемые поля не могут быть документом.
|
|||
8
ДолекоДо1Са
02.03.25
✎
20:10
|
Почему? В нем мы имеем Поля и клапаны, которые в данный момент поливают или не поливают поле
|
|||
9
Волшебник
02.03.25
✎
20:10
|
(8) Орошаемые поля — это справочник
|
|||
10
ДолекоДо1Са
02.03.25
✎
20:11
|
Ладно тогда, предположим, что документ называется ОрошениеПолей
|
|||
11
Волшебник
02.03.25
✎
20:12
|
Вся остальная информация по ОрошаемымПолям, это документы и регистры сведений, но сами Поля — это справочник.
|
|||
12
Волшебник
02.03.25
✎
20:13
|
(10) Так тоже нельзя. Ваш документ должен называться "СельскохозяйственнаяОперация" с видом "Орошение". В табличной части может быть ссылка на справочник.
|
|||
13
ДолекоДо1Са
02.03.25
✎
20:13
|
(11) Тут согласен, но так как я шел по тз, это не сильно учитывалось)
|
|||
14
Волшебник
02.03.25
✎
20:16
|
(13) Вы должны думать в первую очередь своей головой, а не сразу создавать ветку на форуме.
|
|||
15
ДолекоДо1Са
02.03.25
✎
20:18
|
(14) Пытался(
|
|||
16
Волшебник
02.03.25
✎
20:19
|
(15) Не надо пытаться. Надо делать.
|
|||
17
ДолекоДо1Са
02.03.25
✎
20:25
|
(16) Спасибо за совет
|
|||
18
Волшебник
модератор
02.03.25
✎
20:26
|
(17) Хватит флудить на форуме. Иди работай, школота!
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |