|
Отчет -> Щелчок по ячейке -> Открытие документа | ☑ | ||
---|---|---|---|---|
0
Max-VLAD
12.07.12
✎
04:57
|
Доброго времени суток! Помогите, пожалуйста, исправить код:
что нужно подставить отсюда: Процедура КнопкаСформироватьНажатие(Кнопка) Экспорт //Сформировать(ЭлементыФормы.Таб); ТабДок = ЭлементыФормы.Таб; Макет = ПолучитьМакет("Макет"); // Шапка Область = Макет.ПолучитьОбласть("Шапка"); ТабДок.Вывести(Область); Выборка = Документы.НД_ПКО.Выбрать(); Строки = Макет.ПолучитьОбласть("Строки"); Пока Выборка.Следующий() Цикл Строки.Параметры.Заполнить(Выборка); Строки.Параметры.ДокРасш = Выборка.Ссылка; ТабДок.Вывести(Строки); КонецЦикла; сюда: ТекМакет = ПолучитьМакет("Макет"); //Заголовок = ТекМакет.ПолучитьОбласть("Заголовок"); Шапка = ТекМакет.ПолучитьОбласть("Шапка"); Строки = ТекМакет.ПолучитьОбласть("Строки"); Итого = ТекМакет.ПолучитьОбласть ("Итого"); СуммаДокументаИтого = 0; выборка.следующий(); //ТабДок.Вывести(Заголовок); Шапка.Параметры.ТекДата=ТекущаяДата(); ТабДок.Вывести(Шапка); Для Каждого Строка Из Результат Цикл Строки.Параметры.Заполнить(Строка); Если ЗначениеЗаполнено(Строка.СуммаДокумента) Тогда СуммаДокументаИтого = Строка.СуммаДокумента + СуммаДокументаИтого; КонецЕсли; Строки.Параметры.Контрагент = Строка.Контрагент; Строки.Параметры.ПодразделениеИз = Строка.ПодразделениеИз; Строки.Параметры.СуммаДокумента = Строка.СуммаДокумента; ТабДок.Вывести(Строки); КонецЦикла; Итого.Параметры.СуммаДокументаИтого = СуммаДокументаИтого; ТабДок.Вывести(Итого); чтобы можно было enter по ячейке и открывалась документ (его форма) на который ссылается ячейка. кое-как работает, но теряется макет, если закомментить Сформировать(ЭлементыФормы.Таб) во второй строке первого листинга и открывается обычное окошко с суммой. помогите, пожалуйста! |
|||
1
Max-VLAD
12.07.12
✎
05:27
|
вроде ключевая строка
Строки.Параметры.ДокРасш = Выборка.Ссылка ее надо подставить во второй листинг. походу тупой вопрос раз никто не отвечает, но когда подставляю - ничего не происходит. |
|||
2
Rie
12.07.12
✎
05:38
|
(1) У тебя в макете Параметр расшифровки указан?
|
|||
3
Max-VLAD
12.07.12
✎
05:42
|
(2) да. ПараметрРасшифровки: ДокРасш
|
|||
4
Rie
12.07.12
✎
05:48
|
(3) Не понял, что ты имеешь в виду под "закомментить Сформировать("
Судя по всему, у тебя Сформировать формировала отчёт. Теперь ты от неё отказался, и прямо на кнопку повесил формирование отчёта. А что тогда такое код, приведенный после "сюда:"? Далее, если "открывается обычное окошко с суммой" - это, скорее всего, означает, что в этой ячейке, из которой "окошко с суммой" открывается, параметром расшифровки оказалось число, а никак не ссылка на документ. |
|||
5
Max-VLAD
12.07.12
✎
05:51
|
потому что с этими двумя листингами происходит двойной цикл. это неправильно, он выбирает данные как попало.
|
|||
6
Max-VLAD
12.07.12
✎
05:52
|
а мне нужен один цикл, нормальный, с расшифровкой
|
|||
7
Cube
12.07.12
✎
06:00
|
Скрины давай
|
|||
8
Oleg_Kag
12.07.12
✎
06:06
|
Человеку надо такое (насколько я понял это 8.1, без СКД)
Строки.Параметры.РасшифровкаДок=Выборка.Ссылка; B РасшифровкаДок вписать в ПараметрРасшифровки для ячейки Макета. |
|||
9
Rie
12.07.12
✎
06:08
|
(5) Так сделай один цикл. Ты правильно написал
Строки.Параметры.ДокРасш = Выборка.Ссылка; при условии, что ДокРасш указан как параметр _расшифровки_. Судя по "открывается окошко с суммой", в данной ячейке параметр расшифровки в макете задан иначе - и это "иначе" заполняется в предыдущем Строки.Параметры.Заполнить(Выборка); А параметр ДокРасш используется где-то ещё, НЕ в этой ячейке. |
|||
10
Max-VLAD
12.07.12
✎
06:28
|
всем спасибо за участие, пошел думать дальше
|
|||
11
Max-VLAD
12.07.12
✎
06:42
|
Мне нужно подставить Строки.Параметры.ДокРасш = Выборка.Ссылка
вот в этот цикл Для Каждого Строка Из Результат Цикл Строки.Параметры.Заполнить(Строка); Если ЗначениеЗаполнено(Строка.СуммаДокумента) Тогда СуммаДокументаИтого = Строка.СуммаДокумента + СуммаДокументаИтого; КонецЕсли; Строки.Параметры.Контрагент = Строка.Контрагент; Строки.Параметры.ПодразделениеИз = Строка.ПодразделениеИз; Строки.Параметры.СуммаДокумента = Строка.СуммаДокумента; ТабДок.Вывести(Строки); КонецЦикла; Вопрос: куда именно? |
|||
12
Max-VLAD
12.07.12
✎
06:52
|
или что туда надо написать, чтобы была расшифровка?
|
|||
13
Max-VLAD
12.07.12
✎
07:15
|
ну помогите, пожалуйста!
|
|||
14
Oleg_Kag
12.07.12
✎
07:21
|
Заходим в Макет, правой клавишей мыши нажимаем на нужную ячейку. Выбираем свойства. Там есть такая надпись ПараметрРасшифровки. Что там написано?
|
|||
15
Max-VLAD
12.07.12
✎
07:24
|
(14) ДокРасш
|
|||
16
Max-VLAD
12.07.12
✎
07:24
|
во всех трех
|
|||
17
Мимохожий Однако
12.07.12
✎
07:27
|
Что показывает отладчик в строке Строки.Параметры.ДокРасш = Выборка.Ссылка;
Кстати. Использование переменной с именем Строка совсем некстати. |
|||
18
Rie
12.07.12
✎
07:28
|
(12) Поставь перед ТабДок.Вывести(Строки)
|
|||
19
Max-VLAD
12.07.12
✎
07:29
|
Поле объекта не обнаружено (Ссылка)
{Отчет.ПКО.Форма.ФормаОтчета.Форма(69)}: Поле объекта не обнаружено (Ссылка) Строки.Параметры.ДокРасш = Выборка.Ссылка; |
|||
20
Max-VLAD
12.07.12
✎
07:31
|
(18) вылезает ошибка что выше
|
|||
21
Мимохожий Однако
12.07.12
✎
07:32
|
(19)Вот и ответ. Нечего расшифровывать.
Показывай код запроса до выборки. Не стесняйся. |
|||
22
Max-VLAD
12.07.12
✎
07:34
|
Процедура ЗаполнитьТабДок() Экспорт
КонецПроцедуры Процедура Кнопка1Нажатие(Элемент) НастройкаПериода = Новый НастройкаПериода; НастройкаПериода.РедактироватьКакИнтервал = Истина; НастройкаПериода.РедактироватьКакПериод = Истина; НастройкаПериода.ВариантНастройки = ВариантНастройкиПериода.Период; НастройкаПериода.УстановитьПериод(ДатаНач, ?(ДатаКон='0001-01-01', ДатаКон, КонецДня(ДатаКон))); Если НастройкаПериода.Редактировать() Тогда ДатаНач = НастройкаПериода.ПолучитьДатуНачала(); ДатаКон = НастройкаПериода.ПолучитьДатуОкончания(); КонецЕсли; КонецПроцедуры Процедура Сформировать(ТабДок) Экспорт ЭлементыФормы.Таб.Очистить(); Запрос = Новый Запрос; Запрос.Текст ="ВЫБРАТЬ | НД_ПКО.Контрагент КАК Контрагент, | НД_ПКО.ПодразделениеИз КАК ПодразделениеИз, | НД_ПКО.СуммаДокумента КАК СуммаДокумента | ИЗ | Документ.НД_ПКО КАК НД_ПКО | ГДЕ НД_ПКО.Ссылка.Проведен | И НД_ПКО.Дата <= &ДатаКон | И НД_ПКО.Дата >= &ДатаНач | УПОРЯДОЧИТЬ ПО ПодразделениеИз | ИТОГИ СУММА(СуммаДокумента) ПО ПодразделениеИз"; Запрос.УстановитьПараметр("ДатаКон",ДатаКон); Запрос.УстановитьПараметр("ДатаНач",ДатаНач); Результат = Запрос.Выполнить().Выгрузить(); выборка = Запрос.Выполнить().Выбрать(); Таб = Новый ТабличныйДокумент; ТекМакет = ПолучитьМакет("Макет"); Шапка = ТекМакет.ПолучитьОбласть("Шапка"); Строки = ТекМакет.ПолучитьОбласть("Строки"); Итого = ТекМакет.ПолучитьОбласть ("Итого"); СуммаДокументаИтого = 0; выборка.следующий(); Шапка.Параметры.ТекДата=ТекущаяДата(); ТабДок.Вывести(Шапка); Для Каждого Строка Из Результат Цикл Строки.Параметры.Заполнить(Строка); Если ЗначениеЗаполнено(Строка.СуммаДокумента) Тогда СуммаДокументаИтого = Строка.СуммаДокумента + СуммаДокументаИтого; КонецЕсли; Строки.Параметры.Контрагент = Строка.Контрагент; Строки.Параметры.ПодразделениеИз = Строка.ПодразделениеИз; Строки.Параметры.СуммаДокумента = Строка.СуммаДокумента; Строки.Параметры.ДокРасш = Выборка.Ссылка; ТабДок.Вывести(Строки); КонецЦикла; Итого.Параметры.СуммаДокументаИтого = СуммаДокументаИтого; ТабДок.Вывести(Итого); КонецПроцедуры |
|||
23
Rie
12.07.12
✎
07:39
|
(22) Ну и где в запросе поле с именем Ссылка?
Добавь после ВЫБРАТЬ НД_ПКО.Ссылка, |
|||
24
Max-VLAD
12.07.12
✎
07:42
|
(23) та же ошибка
ржака: при двойном цикле (1) (первый листинг) все выводится и ячейки кликаются, просто он выбирает данные как попало и макет весь теряется, но стоит убрать этот второй цикл и подставить Строки.Параметры.ДокРасш = Выборка.Ссылка в первый, так вылезает ошибка (19) |
|||
25
Rie
12.07.12
✎
07:45
|
(24) У тебя в запросе, помимо детальных записей, есть и итоговые. У них какую ссылку ты ожидаешь увидеть?
Проверяй, к примеру, ТипЗаписи() |
|||
26
Max-VLAD
12.07.12
✎
07:46
|
(25) в итоговых записях никакой расшифровки нет, итог формируется запросом
|
|||
27
Rie
12.07.12
✎
07:46
|
+(25) Совет: возьми КонсольЗапросов и полюбуйся на то, что тебе запрос выдаёт.
|
|||
28
Rie
12.07.12
✎
07:47
|
(26) Но ты ж каждую запись пытаешься выпихнуть в табличный документ. Невзирая на то, детальная она или итоговая.
|
|||
29
Max-VLAD
12.07.12
✎
07:51
|
(29) ну да. просто у меня есть пример как это делать. вот листинг примера:
Процедура КнопкаСформироватьНажатие(Кнопка) ТабДок = ЭлементыФормы.ПолеТабличногоДокумента1; Макет = ПолучитьМакет("Макет"); // Заголовок Область = Макет.ПолучитьОбласть("Заголовок"); ТабДок.Вывести(Область); // Шапка Область = Макет.ПолучитьОбласть("Шапка"); ТабДок.Вывести(Область); Выборка = Документы.ПриходнаяНакладная.Выбрать(); Реквизиты = Макет.ПолучитьОбласть("Реквизиты"); Пока Выборка.Следующий() Цикл Реквизиты.Параметры.Заполнить(Выборка); Реквизиты.Параметры.ДокРасш = Выборка.Ссылка; ТабДок.Вывести(Реквизиты); КонецЦикла; ТабДок.ОтображатьСетку = Ложь; ТабДок.Защита = Ложь; ТабДок.ТолькоПросмотр = Истина; ТабДок.ОтображатьЗаголовки = Ложь; ТабДок.Показать(); КонецПроцедуры и вот на примере этого листинга я пытаюсь сделать это у сеья |
|||
30
Мимохожий Однако
12.07.12
✎
08:08
|
Удали строку в запросе:
| ИТОГИ СУММА(СуммаДокумента) ПО ПодразделениеИз"; |
|||
31
Max-VLAD
12.07.12
✎
08:20
|
(30) не подходит
|
|||
32
Мимохожий Однако
12.07.12
✎
08:22
|
(31)Расшифруй.
|
|||
33
Max-VLAD
12.07.12
✎
08:27
|
(32) мне надо выбрать итоги по каждому подразделению и общий итог за период
|
|||
34
Rie
12.07.12
✎
08:28
|
(33) Посмотрел в консоли запросов? Как в виде списка, так и в виде дерева?
Ты можешь использовать ОбходРезультатаЗапроса.ПоГруппировкам. Можешь проверять ТипЗаписи(). Но не надо валить всё в одну кучу. |
|||
35
Мимохожий Однако
12.07.12
✎
08:29
|
(33)Сначала реши задачу по расшифровке ячейки. Потом добавишь свои итоги. Открытой ладошкой бить - пальчикам больно. ))
|
|||
36
Max-VLAD
12.07.12
✎
08:37
|
Всё отлично работает через этот код:
Процедура ЗаполнитьТабДок() Экспорт КонецПроцедуры Процедура Кнопка1Нажатие(Элемент) НастройкаПериода = Новый НастройкаПериода; НастройкаПериода.РедактироватьКакИнтервал = Истина; НастройкаПериода.РедактироватьКакПериод = Истина; НастройкаПериода.ВариантНастройки = ВариантНастройкиПериода.Период; НастройкаПериода.УстановитьПериод(ДатаНач, ?(ДатаКон='0001-01-01', ДатаКон, КонецДня(ДатаКон))); Если НастройкаПериода.Редактировать() Тогда ДатаНач = НастройкаПериода.ПолучитьДатуНачала(); ДатаКон = НастройкаПериода.ПолучитьДатуОкончания(); КонецЕсли; КонецПроцедуры Процедура Сформировать(ТабДок) Экспорт ЭлементыФормы.Таб.Очистить(); Запрос = Новый Запрос; Запрос.Текст ="ВЫБРАТЬ | НД_ПКО.Контрагент КАК Контрагент, | НД_ПКО.ПодразделениеИз КАК ПодразделениеИз, | НД_ПКО.СуммаДокумента КАК СуммаДокумента | ИЗ | Документ.НД_ПКО КАК НД_ПКО | ГДЕ НД_ПКО.Ссылка.Проведен | И НД_ПКО.Дата <= &ДатаКон | И НД_ПКО.Дата >= &ДатаНач | УПОРЯДОЧИТЬ ПО ПодразделениеИз | ИТОГИ СУММА(СуммаДокумента) ПО ПодразделениеИз"; Запрос.УстановитьПараметр("ДатаКон",ДатаКон); Запрос.УстановитьПараметр("ДатаНач",ДатаНач); Результат = Запрос.Выполнить().Выгрузить(); выборка = Запрос.Выполнить().Выбрать(); Таб = Новый ТабличныйДокумент; ТекМакет = ПолучитьМакет("Макет"); Шапка = ТекМакет.ПолучитьОбласть("Шапка"); Строки = ТекМакет.ПолучитьОбласть("Строки"); Итого = ТекМакет.ПолучитьОбласть ("Итого"); СуммаДокументаИтого = 0; выборка.следующий(); Шапка.Параметры.ТекДата=ТекущаяДата(); ТабДок.Вывести(Шапка); Для Каждого Строка Из Результат Цикл Строки.Параметры.Заполнить(Строка); Если ЗначениеЗаполнено(Строка.СуммаДокумента) Тогда СуммаДокументаИтого = Строка.СуммаДокумента + СуммаДокументаИтого; КонецЕсли; Строки.Параметры.Контрагент = Строка.Контрагент; Строки.Параметры.ПодразделениеИз = Строка.ПодразделениеИз; Строки.Параметры.СуммаДокумента = Строка.СуммаДокумента; ТабДок.Вывести(Строки); КонецЦикла; Итого.Параметры.СуммаДокументаИтого = СуммаДокументаИтого; ТабДок.Вывести(Итого); КонецПроцедуры Процедура КнопкаСформироватьНажатие(Кнопка) Экспорт Сформировать(ЭлементыФормы.Таб); ТабДок = ЭлементыФормы.Таб; Макет = ПолучитьМакет("Макет"); //Шапка Область = Макет.ПолучитьОбласть("Шапка"); ТабДок.Вывести(Область); Выборка = Документы.НД_ПКО.Выбрать(); Строки = Макет.ПолучитьОбласть("Строки"); Пока Выборка.Следующий() Цикл Строки.Параметры.Заполнить(Выборка); Строки.Параметры.ДокРасш = Выборка.Ссылка; ТабДок.Вывести(Строки); КонецЦикла; КонецПроцедуры НО: подразделения выводятся неупорядоченно, плюс итоги не выводятся (33) с расшифровкой всё ОК, но проблема выше ? (32) как мне в режиме толстого клиента его открыть? http://s017.radikal.ru/i426/1207/b0/bb11f9c0b783.jpg |
|||
37
Мимохожий Однако
12.07.12
✎
08:40
|
Открывай новую ветку
|
|||
38
Rie
12.07.12
✎
08:42
|
(26) Файл - Открыть - выбираешь КонсольЗапросов. (Только не управляемую, а обычную!).
Для вывода итогов - см. (34). Проверяешь тип записи - и выясняешь, итоговая она или детальная. А ещё лучше - что-то _вроде_ (не копируй в точности) Выборка = Запрос.Выполнить().Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам); Пока Выборка.Следующий() Цикл // выводишь итоги ВыборкаПоПодразделению = Выборка.Выбрать(); Пока ВыборкаПоПозразделению.Следующий() Цикл // детализируешь КонецЦикла; КонецЦикла; |
|||
39
Max-VLAD
12.07.12
✎
08:50
|
(38) Rie, спасибо! Всё работает!))
|
|||
40
Max-VLAD
12.07.12
✎
08:54
|
(38) свою консоль запросов открыл в режиме Предприятия ;)
|
|||
41
Max-VLAD
12.07.12
✎
09:19
|
(34) кстати данные в Консоли запросов как в виде списка, так в виде дерева выбирались упорядоченно, проблема была во втором цикле
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |