Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: 1 2 [Все]   Вниз
  Печать  
Автор Тема: Создание отчета по справочнику  (Прочитано 37199 раз)
0 Пользователей и 1 Гость смотрят эту тему.
ge4r
Участник

ru
Offline Offline

« : 17-07-2009 09:48 » 

Добрый день.
проблема следующая:
есть подчиненный справочник УсловияДоговораАренды в котором содержится инфо о имени арендатора,арендуемой точке,ее площади,сумме оплаты,начале и конце срока.
по этому справочнику нужно создать отчет...
таблица отчета должна содержать те же столбцы что и поля в справочнике

вот код

Код:
Процедура Сформировать()
Запрос = СоздатьОбъект("Запрос");     .//Запрос к справочнику
ТекстЗапроса = "
|Аренда = Справочник.УсловияДоговораАренды.Наименование;
|Группировка Аренда Упорядочить по Аренда.Наименование;
|ТорговаяТочка = Справочник.УсловияДоговораАренды.ТорговаяТочка;
|Площадь = Справочник.УсловияДоговораАренды.Площадь;
|СуммаОплаты = Справочник.УсловияДоговораАренды.СуммаОплаты;
|ДатаНачала = Справочник.УсловияДоговораАренды.ДатаНачалаДействия;
|ДатаКонца = Справочник.УсловияДоговораАренды.ДатаКонцаОплаты;
|Комментарий = Справочник.УсловияДоговораАренды.Комментарий;
|"

    Запрос.Выполнить(ТекстЗапроса);

Таб = СоздатьОбъект("Таблица");
Таб.ВывестиСекцию ("Шапка");
Таб.ВывестиСекцию ("Строка")
    Таб.Показать();


КонецПроцедуры


Сначала выполню запрос к нужному справочнику...а вот как потом все это перенести в таблицу?
Записан
Kivals
Модератор

us
Offline Offline
Пол: Мужской

WWW
« Ответ #1 : 17-07-2009 10:18 » 

Таблица - имеется в виду печатная форма?
Код:
Пока Запрос.Группировка() Цикл
Таб.ВывестиСекцию("Строка");
КонецЦикла;
Только боюсь запрос в том виде, как он написан, не выполниться...
Записан
ge4r
Участник

ru
Offline Offline

« Ответ #2 : 17-07-2009 10:23 » 

да,имеется в виду печатная форма...сейчас попробую
Записан
ge4r
Участник

ru
Offline Offline

« Ответ #3 : 17-07-2009 10:26 » 

у меня еще вопрос назрел..меняю в конфигураторе диалоговое окно,сохраняю отчет,но при запуске в обычном режиме мне все равно выдает окно без тех изменений,которые я в носил...возможно глупый вопрос,но знаком с 1с всего неделю ...)
Записан
ge4r
Участник

ru
Offline Offline

« Ответ #4 : 17-07-2009 10:37 » 

Код:
//*******************************************
Процедура Сформировать()
Перем Запрос, Таб, ТекстЗапроса;
Запрос = СоздатьОбъект("Запрос");     .//Запрос к справочнику
ТекстЗапроса = "
|Аренда = Справочник.УсловияДоговораАренды.Наименование;
|Группировка Аренда Упорядочить по Аренда.Наименование;
|ТорговаяТочка = Справочник.УсловияДоговораАренды.ТорговаяТочка;
|Площадь = Справочник.УсловияДоговораАренды.Площадь;
|СуммаОплаты = Справочник.УсловияДоговораАренды.СуммаОплаты;
|ДатаНачала = Справочник.УсловияДоговораАренды.ДатаНачалаДействия;
|ДатаКонца = Справочник.УсловияДоговораАренды.ДатаКонцаОплаты;
|Комментарий = Справочник.УсловияДоговораАренды.Комментарий;
|"
Запрос.Выполнить(ТекстЗапроса);

Таб = СоздатьОбъект("Таблица");
Таб.ВывестиСекцию ("Шапка");
Пока Запрос.Группировка(1) = 1 Цикл
Таб.ВывестиСекцию("Строка")
КонецЦикла;
    Таб.Показать();


КонецПроцедуры


выдает ошибки:
Запрос = СоздатьОбъект("Запрос");     <<?>>.//Запрос к справочнику
{D:\Базы\nikel20090717\Условия договора аренды.ert(4)}: Неопознанный оператор
Пока Запрос<<?>>.Группировка(1) = 1 Цикл
{D:\Базы\nikel20090717\Условия договора аренды.ert(19)}: Переменная не определена (Запрос)
Таб<<?>>.ВывестиСекцию("Строка")
{D:\Базы\nikel20090717\Условия договора аренды.ert(20)}: Переменная не определена (Таб)
Таб<<?>>.Показать();
{D:\Базы\nikel20090717\Условия договора аренды.ert(22)}: Переменная не определена (Таб)
Таб.Показать();<<?>>

не пойму, почему пишет ,что переменные не определены....
Записан
ge4r
Участник

ru
Offline Offline

« Ответ #5 : 17-07-2009 10:40 » 

оу,нашел косяк)
Записан
Kivals
Модератор

us
Offline Offline
Пол: Мужской

WWW
« Ответ #6 : 17-07-2009 10:46 » 

Отчет внешний? В режиме предприятия нужно обязательно закрыть окно отчета и открыть снова, иначе в памяти остается старая версия, с которой и продолжаешь работать.

Исправлять ошибки всегда нужно начинать с первой. У тебя в строке определения переменной Запрос синтаксическая ошибка (лишня точка перед комментарием). Исправишь эту ошибку - и переменная будет уже определена
Записан
ge4r
Участник

ru
Offline Offline

« Ответ #7 : 17-07-2009 10:48 » 

да,точку я нашел....)

Код:
Пока Запрос.Группировка() Цикл
Таб.ВывестиСекцию("Строка");
КонецЦикла;
а так действительно форма не заполняется...
Записан
ge4r
Участник

ru
Offline Offline

« Ответ #8 : 17-07-2009 11:01 » 

вот отчет...

* Условия договора аренды.ert (45 Кб - загружено 769 раз.)
Записан
Kivals
Модератор

us
Offline Offline
Пол: Мужской

WWW
« Ответ #9 : 17-07-2009 11:26 » 

Перенес группировку в конец,
поменял реквизит запроса Аренда:
Аренда = Справочник.УсловияДоговораАренды.ТекущийЭлемент;
исправил таблицу вывода (в ячейках не надо ставить символы "<" и ">" - надо в совйствах ячейки указать Тип - Выражение)
У меня работает

* Условия договора аренды.ert (8.5 Кб - загружено 929 раз.)
Записан
Kivals
Модератор

us
Offline Offline
Пол: Мужской

WWW
« Ответ #10 : 17-07-2009 11:28 » 

Запрос.Группировка() используется когда в запросе присутствует ключевая фраза "Без итогов", в противном случае правильно использовать вложенные циклы Запрос.Группировка(<Номер группировки>)
Записан
Kivals
Модератор

us
Offline Offline
Пол: Мужской

WWW
« Ответ #11 : 17-07-2009 11:31 » 

А, еще - простую ошибку в выбоде таблицы оставил умышленно Ага
Разбирайся как исправить...
Записан
ge4r
Участник

ru
Offline Offline

« Ответ #12 : 17-07-2009 11:38 » 

ошибка я так понимаю это
в таблице ячейку запрос.наименование  нужно заменить на запрос.аренда?)
Записан
Kivals
Модератор

us
Offline Offline
Пол: Мужской

WWW
« Ответ #13 : 17-07-2009 11:40 » 

Угу. Но лучше: Запрос.Аренда.Наименование
Записан
ge4r
Участник

ru
Offline Offline

« Ответ #14 : 17-07-2009 11:41 » 

спасибо,пойду дальше читать маны)
Записан
ge4r
Участник

ru
Offline Offline

« Ответ #15 : 17-07-2009 16:14 » 

делитед,разобрался
« Последнее редактирование: 17-07-2009 16:33 от ge4r » Записан
ge4r
Участник

ru
Offline Offline

« Ответ #16 : 24-07-2009 08:04 » 

Возник еще вопрос..
Есть справочник "Условия договора аренды",есть внешний отчет...нужно,что бы в режиме "предприятия" при выводе отчета при клике на одну из ячеек с условиями открывалось диалоговое окно справочника,и можно было редактировать данные...это нужно прописывать через конфигуратор в таблице?

То есть ,например,выводится отчет,смотрим,а "площадь" выводится не та,кликаем на нее,открывается диалоговое окно редактирования справочника для этого контрагента,изменяем площадь и эти изменения сохраняются в БД
« Последнее редактирование: 24-07-2009 08:09 от ge4r » Записан
Kivals
Модератор

us
Offline Offline
Пол: Мужской

WWW
« Ответ #17 : 24-07-2009 08:28 » 

Смотри в сторону расшифровки ячейки. Чтобы расшифровка была на всю строку - нужно добавить символ # в начало либо конец выражения расшифровки
Записан
ge4r
Участник

ru
Offline Offline

« Ответ #18 : 24-07-2009 08:49 » 

Сейчас пытаюсЬ,пишу в расшифровке Справочник.УсловияДоговораАренды.ТекущийЭлемент() ,но 1с пишет, что переменные не объявлены
Текущий вариант отчета выглядит так:

* Условия договора аренды.ert (46.5 Кб - загружено 848 раз.)
« Последнее редактирование: 24-07-2009 08:55 от ge4r » Записан
ge4r
Участник

ru
Offline Offline

« Ответ #19 : 24-07-2009 09:02 » 

иль нужно в код добавить что то вроде этого:
Код:
Спр = СоздатьОбъект("Справочник.УсловияДоговораАренды")
и расшифровке писать спр.текущийэлемент()
?
Записан
Kivals
Модератор

us
Offline Offline
Пол: Мужской

WWW
« Ответ #20 : 24-07-2009 09:03 » 

Естественно не объявлены...
В расшифроке нужно указать существующий объект, в твоем случае: Запрос.Аренда
Записан
Kivals
Модератор

us
Offline Offline
Пол: Мужской

WWW
« Ответ #21 : 24-07-2009 09:04 » 

Можно конечно почти так, как ты написал, но будет сложнее:
После Спр = СоздатьОбъект("Справочник.УсловияДоговораАренды") и перед выводом секции с расшифровкой спр.текущийэлемент() тебе еще нужно спозиционироваться на нужный элемент:
Спр.НайтиЭлемент(Запрос.Аренда);
Записан
ge4r
Участник

ru
Offline Offline

« Ответ #22 : 24-07-2009 09:06 » 

все,понял...спасибо
« Последнее редактирование: 24-07-2009 09:13 от ge4r » Записан
ge4r
Участник

ru
Offline Offline

« Ответ #23 : 29-07-2009 09:27 » 

Еще вопрос...)
В сей отчет нужно добавить колонку контрагенты,то есть есть справочник контрагенты,ему подчинен справочник договора,и в свою очередь ему подчинен справочник условия договора аренды...
вся информация в отчете берется из "условия договора аренды"...и теперь инфо для одного столбца должна браться из "контрагенты"
что делаю я:
в запрос добавляю строку
Код:
Контрагент = Справочник.Контрагенты.Наименование
и в таблице в нужной ячейке прописываю Запрос.Контрагент

но при выводе отчета ячейка контрагент пуста...в чем косяк?

* Условия договора аренды.ert (47 Кб - загружено 835 раз.)
« Последнее редактирование: 29-07-2009 09:37 от ge4r » Записан
Kivals
Модератор

us
Offline Offline
Пол: Мужской

WWW
« Ответ #24 : 30-07-2009 11:30 » 

В тексте запроса вместо
Код:
Контрагент = Справочник.Контрагенты.Наименование;
нужно писать
Код:
Контрагент = Справочник.УсловияДоговораАренды.Владелец.Владелец.Наименование;

Иначе 1С не знает как нужно связать данные запроса
Записан
ge4r
Участник

ru
Offline Offline

« Ответ #25 : 01-08-2009 11:30 » 

спасибо
Записан
ge4r
Участник

ru
Offline Offline

« Ответ #26 : 05-08-2009 06:02 » 

еще косяк нашел....
у меня стоит группировка по торговой точке,по наименованию,но если есть повторяющаяся торговая точка,подчиненая разным контрагентам, то выводится только одна из них....
Записан
ge4r
Участник

ru
Offline Offline

« Ответ #27 : 05-08-2009 06:31 » 

разобрался,сделал двойную группировку и всё ок
Записан
Ольга111
Интересующийся

ua
Offline Offline

« Ответ #28 : 13-05-2010 10:04 » 

Здравствуйте, у меня простое задание, и мне даже стыдно обращаться к вам с таким вопросом, но помощь ОЧЕНЬ нужна Здесь была моя ладья...
Конфигурация элементарня, самописная. Есть справочник Альбомы. Нужен отчет, который выведет Наименование и Группу (оба они реквизиты справочника Альбомы) альбома, вышедшего позже 2005 года. Я написала так:
Код:
Процедура Сформировать()
 Запрос = СоздатьОбъект("Запрос");

ТекстЗапроса = "
|ГодВыпуска = Справочник.Альбомы.ГодВыпуска;
|Альбом = Справочник.Альбомы.Наименование;
|Условие (ГодВыпуска>1999);
|";   
Запрос.Выполнить(ТекстЗапроса);
Таб = СоздатьОбъект("Таблица");
Таб.ВывестиСекцию("Заголовок");
Таб.ВывестиСекцию("Данные");
Таб.Показать("ОтчетПоСправочнику");
КонецПроцедуры
В секции данные выводит только ГодВыпуска первого попавшегося элемента, который подходит под условие... Чувствую, что надо выводить векцию в цикле, но не могу понять как именно... Помогите, пожалуйста... А черт его знает...
Записан
Ольга111
Интересующийся

ua
Offline Offline

« Ответ #29 : 13-05-2010 10:15 » 

Пока Запрос.Группировка() Цикл
   Таб.ВывестиСекцию("Данные");
КонецЦикла;
Если выводить таким образом, что написать в условии цикла, у меня же нет Группировки в ТекстеЗапроса? Ну, пожалуйста, помогите! Жаль(((
Записан
Kivals
Модератор

us
Offline Offline
Пол: Мужской

WWW
« Ответ #30 : 13-05-2010 10:44 » 

Код:
ТекстЗапроса = "
|Без итогов;
|ТекущийЭлемент = Справочник.Альбомы.ТекущийЭлемент;
|ГодВыпуска = Справочник.Альбомы.ГодВыпуска;
|Альбом = Справочник.Альбомы.Наименование;
|Условие (ГодВыпуска>1999);
|Группировка(ТекущийЭлемент);
|";
Ну а дальше доступайся в цикле к нужным реквизитам через
Запрос.ТекущийЭлемент.<НазваниеРеквизита>
Записан
Ольга111
Интересующийся

ua
Offline Offline

« Ответ #31 : 13-05-2010 14:45 » 

Простите, пожалуйста, но я не совсем понимаю. Дело в том, что я не программист, вы не могли бы мне по-подробней показать, как надо делать. Пока я только ТекстЗапроса написала, как вы сказали.
Код:
Процедура Сформировать()
Запрос = СоздатьОбъект("Запрос");
ТекстЗапроса = "
|Без итогов;
|ТекущийЭлемент = Справочник.Альбомы.ТекущийЭлемент;
|ГодВыпуска = Справочник.Альбомы.ГодВыпуска;
|Альбом = Справочник.Альбомы.Наименование;
|Условие (ГодВыпуска>1999);
|Группировка(ТекущийЭлемент);
|"; 
Запрос.Выполнить(ТекстЗапроса);
Таблица  = СоздатьОбъект("Таблица");
Таблица.ВывестиСекцию("Заголовок");
А дальше никак не разберусь...
Записан
Ольга111
Интересующийся

ua
Offline Offline

« Ответ #32 : 13-05-2010 15:21 » 

Kivals, помогите мне, пожалуйста, мне больше и спросить-то не у кого, а нужно очень-очень  Жаль С ума сойти...
Записан
Kivals
Модератор

us
Offline Offline
Пол: Мужской

WWW
« Ответ #33 : 13-05-2010 17:57 » 

Ольга111, при всем желании не смогу тебе помочь подредактировать Таблицу, которую ты выводишь, так что разбираться все равно придется...
Вот что получается дальше:
Код:
Запрос.Выполнить(ТекстЗапроса);
Пока Запрос.Группировка() Цикл
//Таб.ВывестиСекцию("Данные");
Сообщить(Запрос.ТекущийЭлемент.Наименование);
Сообщить(Запрос.ТекущийЭлемент.Группа);
КонецЦикла;
Как это прикрутить к таблице - попробуй разобраться сама
Записан
Ольга111
Интересующийся

ua
Offline Offline

« Ответ #34 : 13-05-2010 18:39 » 

Большое вам спасибо, но в строке 
Код:
Пока Запрос.Группировка() Цикл
ошибка: Выражение должно иметь логический тип.
Когда я пишу
Код:
Пока Запрос.Группировка()=1 Цикл
Выдаёт ошибку - Запрос.Выполнить(ТекстЗапроса);
{Обработка.ПопулярноеЗа5лет.Форма.Модуль(22)}: Группировка <<?>> (ТекущийЭлемент);
Запро
Записан
Ольга111
Интересующийся

ua
Offline Offline

« Ответ #35 : 13-05-2010 18:41 » 

Запрос.Выполнить(ТекстЗапроса);
{Обработка.ПопулярноеЗа5лет.Форма.Модуль(22)}: Группировка <<?>> (ТекущийЭлемент);
Запро
Записан
Dest
Опытный

ru
Offline Offline

« Ответ #36 : 14-05-2010 03:18 » 

Код:
|ТекущийЭлемент = Справочник.Альбомы.ТекущийЭлемент;

"ТекущийЭлемент" - зарезервированное слово. Попробуй поменять, например на "ТекущийЭл"


Код:
|ТекущийЭл = Справочник.Альбомы.ТекущийЭлемент;
Записан
Ольга111
Интересующийся

ua
Offline Offline

« Ответ #37 : 14-05-2010 04:43 » 

Спасибо, буду пробовать...
Записан
Kivals
Модератор

us
Offline Offline
Пол: Мужской

WWW
« Ответ #38 : 14-05-2010 12:29 » 

Ольга111, я не проверял код - писал прямо в форуме.
Про цикл - абсолютно верно, там должно быть "=1"
Про группировку - по-моему там скобок не нужно, вот так:
Код:
|Группировка ТекущийЭлемент упорядочить по ТекущийЭлемент.Наименование без групп;
Записан
Ольга111
Интересующийся

ua
Offline Offline

« Ответ #39 : 14-05-2010 12:46 » 

Большое спасибо, с тем заданием разобралась... Если можно, подскажите, пожалуйста, как из табличной части записать данные в справочник? т.е. в табл. части документа есть название и количество, надо, чтобы в справочнике у нужного элемента менялось количество.
Записан
Ольга111
Интересующийся

ua
Offline Offline

« Ответ #40 : 14-05-2010 13:02 » 

Я попробовала сделать так:
Код:
Процедура ОбработкаПроведения()
СпрКниги = СоздатьОбъект("Справочник.Книги");
СпрКниги.Новый();
ДокПост = СоздатьОбъект("Документ.ПоступлениеКниг");

  ДокПост. ВыбратьСтроки();
Пока ДокПост.ПолучитьСтроку()=1 Цикл 
СпрКниги.ВыбратьСтроки();
  Пока СпрКниги.ПолучитьСтроку()=1 Цикл
                Если СпрКниги.Наименование = НазКниги Тогда
    СпрКниги.Количество = Количество;
//Скажите, пожалуйста, можно ли написать СпрКниги.Количество = СпрКниги.Количество + Количество ?
//а то мне надо увеличивать количество в справочнике
   КонецЕсли;   
  КонецЦикла;
КонецЦикла;
КонецПроцедуры
Но в справочнике ничего не меняется, правда и ошибок тоже нет...
Записан
Kivals
Модератор

us
Offline Offline
Пол: Мужской

WWW
« Ответ #41 : 14-05-2010 13:39 » 

Ну что не меняется - неудивительно: цикл не выполняется ни разу, т.к. табличной части для вновь созданного объекта нет.
Если ты это делаешь в ОбработкеПроведения, то нужно приблизительно так:
Код:
ВыбратьСтроки();
Пока ПолучитьСтроку()=1 Цикл
...
КонецЦикла;
А у тебя в табличной части документа только названия, а не ссылка на элемент справочника?
Записан
Ольга111
Интересующийся

ua
Offline Offline

« Ответ #42 : 14-05-2010 13:56 » 

Спасибо Вам. НазКниги (из табличной части документа) имеет тип Справочник.Книги.
Примерно так, как вы показали я уже пробовала:
Код:
Процедура ОбработкаПроведения()
  СпрКниги = СоздатьОбъект("Справочник.Книги");
     ВыбратьСтроки();
Пока ПолучитьСтроку()=1 Цикл   //цикл по таб. части документа
//перебираю элементы справочника и ищу нужные, чтобы увеличить в них количество
//Пока СпрКниги.ПолучитьСтроку()=1 Цикл    //когда раскомментировано - ругается, на эту строку: Поле агрегатного
                                                                                        //объекта не   обнаружено (ПолучитьСтроку)
       Если СпрКниги.Наименование = НазКниги Тогда
    СпрКниги.Количество = Количество;
   КонецЕсли;   
// КонецЦикла;
КонецЦикла;
КонецПроцедуры
Записан
Ольга111
Интересующийся

ua
Offline Offline

« Ответ #43 : 14-05-2010 14:33 » 

Т.е. для перебора справочника надо использовать ВыбратьЭлементы() и ПолучитьЭлементы(), тогда ошибок нет, но количество в справочнике всё равно не меняется... Что же делать?  Жаль  Жаль  Жаль
Записан
Kivals
Модератор

us
Offline Offline
Пол: Мужской

WWW
« Ответ #44 : 14-05-2010 22:37 » 

Код:
СпрКниги = СоздатьОбъект("Справочник.Книги");
ВыбратьСтроки();
Пока ПолучитьСтроку()=1 Цикл
СпрКниги.НайтиЭлемент(НазКниги); // НазКниги - это реквизит табл.части
СпрКниги.Количество = СпрКниги.Количество + Количество; // Можно.
// Только: 1. При каждом проведении одного и того же документа к-во будет добавляться
// 2. Не забудь отнять назад в процедуре ОбработкаУдаленияПроведения()
СпрКниги.Записать();
КонецЦикла;
Записан
AndyG
Постоялец

by
Offline Offline

« Ответ #45 : 07-07-2010 09:45 » 

Ольга111,
Та дались вам эти запросы!:(
Не обязательно использовать их для всего и вся.

Вот вам решение

Таб = СоздатьОбъект("Таблица");
Таб.ВывестиСекцию("Заголовок");
Спр=СоздатьОбъект("Справочник.Альбомы");
Спр.ВыбратьЭлементы();
Пока Спр.ПолучитьЭлемент()=1 Цикл
ТекЭл=Спр.ТекущийЭлемент();    
    Если ТекЭл.ПометкаУдаления()=1 Тогда Продолжить; КонецЕсли;
    Если ТекЭл.ГодВыпуска<1999 Тогда Продолжить; КонецЕсли;
    //ОПРЕДЕЛИМ Ваши переменные
    альбом=ТекЭл.Альбом;
    ГодВыпуска=ТекЭл.ГодВыпуска;
    //или в таблице заполняем переменными  ТекЭл.Альбом и ТекЭл.ГодВыпуска
    ТаБ.ВывестиСекцию("ТаЧёХочешьВыводи"); //тут точное название горизонтальной секции Вашей таблицы
КонецЦикла;
« Последнее редактирование: 07-07-2010 09:54 от AndyG » Записан
Страниц: 1 2 [Все]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines