Имя: Пароль:
1C
1С v8
Отчет -> Щелчок по ячейке -> Открытие документа
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) кстати данные в Консоли запросов как в виде списка, так в виде дерева выбирались упорядоченно, проблема была во втором цикле
Чтобы обнаруживать ошибки, программист должен иметь ум, которому доставляет удовольствие находить изъяны там, где, казалось, царят красота и совершенство. Фредерик Брукс-младший