ge4r
Участник
Offline
|
 |
« : 17-07-2009 09:48 » |
|
Добрый день. проблема следующая: есть подчиненный справочник УсловияДоговораАренды в котором содержится инфо о имени арендатора,арендуемой точке,ее площади,сумме оплаты,начале и конце срока. по этому справочнику нужно создать отчет... таблица отчета должна содержать те же столбцы что и поля в справочнике вот код Процедура Сформировать() Запрос = СоздатьОбъект("Запрос"); .//Запрос к справочнику ТекстЗапроса = " |Аренда = Справочник.УсловияДоговораАренды.Наименование; |Группировка Аренда Упорядочить по Аренда.Наименование; |ТорговаяТочка = Справочник.УсловияДоговораАренды.ТорговаяТочка; |Площадь = Справочник.УсловияДоговораАренды.Площадь; |СуммаОплаты = Справочник.УсловияДоговораАренды.СуммаОплаты; |ДатаНачала = Справочник.УсловияДоговораАренды.ДатаНачалаДействия; |ДатаКонца = Справочник.УсловияДоговораАренды.ДатаКонцаОплаты; |Комментарий = Справочник.УсловияДоговораАренды.Комментарий; |" Запрос.Выполнить(ТекстЗапроса); Таб = СоздатьОбъект("Таблица"); Таб.ВывестиСекцию ("Шапка"); Таб.ВывестиСекцию ("Строка") Таб.Показать();
КонецПроцедуры
Сначала выполню запрос к нужному справочнику...а вот как потом все это перенести в таблицу?
|
|
|
Записан
|
|
|
|
Kivals
|
 |
« Ответ #1 : 17-07-2009 10:18 » |
|
Таблица - имеется в виду печатная форма? Пока Запрос.Группировка() Цикл Таб.ВывестиСекцию("Строка"); КонецЦикла; Только боюсь запрос в том виде, как он написан, не выполниться...
|
|
|
Записан
|
|
|
|
ge4r
Участник
Offline
|
 |
« Ответ #2 : 17-07-2009 10:23 » |
|
да,имеется в виду печатная форма...сейчас попробую
|
|
|
Записан
|
|
|
|
ge4r
Участник
Offline
|
 |
« Ответ #3 : 17-07-2009 10:26 » |
|
у меня еще вопрос назрел..меняю в конфигураторе диалоговое окно,сохраняю отчет,но при запуске в обычном режиме мне все равно выдает окно без тех изменений,которые я в носил...возможно глупый вопрос,но знаком с 1с всего неделю ...)
|
|
|
Записан
|
|
|
|
ge4r
Участник
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
Участник
Offline
|
 |
« Ответ #5 : 17-07-2009 10:40 » |
|
оу,нашел косяк)
|
|
|
Записан
|
|
|
|
Kivals
|
 |
« Ответ #6 : 17-07-2009 10:46 » |
|
Отчет внешний? В режиме предприятия нужно обязательно закрыть окно отчета и открыть снова, иначе в памяти остается старая версия, с которой и продолжаешь работать.
Исправлять ошибки всегда нужно начинать с первой. У тебя в строке определения переменной Запрос синтаксическая ошибка (лишня точка перед комментарием). Исправишь эту ошибку - и переменная будет уже определена
|
|
|
Записан
|
|
|
|
ge4r
Участник
Offline
|
 |
« Ответ #7 : 17-07-2009 10:48 » |
|
да,точку я нашел....) Пока Запрос.Группировка() Цикл Таб.ВывестиСекцию("Строка"); КонецЦикла;
а так действительно форма не заполняется...
|
|
|
Записан
|
|
|
|
ge4r
Участник
Offline
|
 |
« Ответ #8 : 17-07-2009 11:01 » |
|
вот отчет...
|
|
|
Записан
|
|
|
|
Kivals
|
 |
« Ответ #9 : 17-07-2009 11:26 » |
|
Перенес группировку в конец, поменял реквизит запроса Аренда: Аренда = Справочник.УсловияДоговораАренды.ТекущийЭлемент; исправил таблицу вывода (в ячейках не надо ставить символы "<" и ">" - надо в совйствах ячейки указать Тип - Выражение) У меня работает
|
|
|
Записан
|
|
|
|
Kivals
|
 |
« Ответ #10 : 17-07-2009 11:28 » |
|
Запрос.Группировка() используется когда в запросе присутствует ключевая фраза "Без итогов", в противном случае правильно использовать вложенные циклы Запрос.Группировка(<Номер группировки>)
|
|
|
Записан
|
|
|
|
Kivals
|
 |
« Ответ #11 : 17-07-2009 11:31 » |
|
А, еще - простую ошибку в выбоде таблицы оставил умышленно  Разбирайся как исправить...
|
|
|
Записан
|
|
|
|
ge4r
Участник
Offline
|
 |
« Ответ #12 : 17-07-2009 11:38 » |
|
ошибка я так понимаю это в таблице ячейку запрос.наименование нужно заменить на запрос.аренда?)
|
|
|
Записан
|
|
|
|
Kivals
|
 |
« Ответ #13 : 17-07-2009 11:40 » |
|
Угу. Но лучше: Запрос.Аренда.Наименование
|
|
|
Записан
|
|
|
|
ge4r
Участник
Offline
|
 |
« Ответ #14 : 17-07-2009 11:41 » |
|
спасибо,пойду дальше читать маны)
|
|
|
Записан
|
|
|
|
ge4r
Участник
Offline
|
 |
« Ответ #15 : 17-07-2009 16:14 » |
|
делитед,разобрался
|
|
« Последнее редактирование: 17-07-2009 16:33 от ge4r »
|
Записан
|
|
|
|
ge4r
Участник
Offline
|
 |
« Ответ #16 : 24-07-2009 08:04 » |
|
Возник еще вопрос.. Есть справочник "Условия договора аренды",есть внешний отчет...нужно,что бы в режиме "предприятия" при выводе отчета при клике на одну из ячеек с условиями открывалось диалоговое окно справочника,и можно было редактировать данные...это нужно прописывать через конфигуратор в таблице?
То есть ,например,выводится отчет,смотрим,а "площадь" выводится не та,кликаем на нее,открывается диалоговое окно редактирования справочника для этого контрагента,изменяем площадь и эти изменения сохраняются в БД
|
|
« Последнее редактирование: 24-07-2009 08:09 от ge4r »
|
Записан
|
|
|
|
Kivals
|
 |
« Ответ #17 : 24-07-2009 08:28 » |
|
Смотри в сторону расшифровки ячейки. Чтобы расшифровка была на всю строку - нужно добавить символ # в начало либо конец выражения расшифровки
|
|
|
Записан
|
|
|
|
ge4r
Участник
Offline
|
 |
« Ответ #18 : 24-07-2009 08:49 » |
|
Сейчас пытаюсЬ,пишу в расшифровке Справочник.УсловияДоговораАренды.ТекущийЭлемент() ,но 1с пишет, что переменные не объявлены Текущий вариант отчета выглядит так:
|
|
« Последнее редактирование: 24-07-2009 08:55 от ge4r »
|
Записан
|
|
|
|
ge4r
Участник
Offline
|
 |
« Ответ #19 : 24-07-2009 09:02 » |
|
иль нужно в код добавить что то вроде этого: Спр = СоздатьОбъект("Справочник.УсловияДоговораАренды") и расшифровке писать спр.текущийэлемент() ?
|
|
|
Записан
|
|
|
|
Kivals
|
 |
« Ответ #20 : 24-07-2009 09:03 » |
|
Естественно не объявлены... В расшифроке нужно указать существующий объект, в твоем случае: Запрос.Аренда
|
|
|
Записан
|
|
|
|
Kivals
|
 |
« Ответ #21 : 24-07-2009 09:04 » |
|
Можно конечно почти так, как ты написал, но будет сложнее: После Спр = СоздатьОбъект("Справочник.УсловияДоговораАренды") и перед выводом секции с расшифровкой спр.текущийэлемент() тебе еще нужно спозиционироваться на нужный элемент: Спр.НайтиЭлемент(Запрос.Аренда);
|
|
|
Записан
|
|
|
|
ge4r
Участник
Offline
|
 |
« Ответ #22 : 24-07-2009 09:06 » |
|
все,понял...спасибо
|
|
« Последнее редактирование: 24-07-2009 09:13 от ge4r »
|
Записан
|
|
|
|
ge4r
Участник
Offline
|
 |
« Ответ #23 : 29-07-2009 09:27 » |
|
Еще вопрос...) В сей отчет нужно добавить колонку контрагенты,то есть есть справочник контрагенты,ему подчинен справочник договора,и в свою очередь ему подчинен справочник условия договора аренды... вся информация в отчете берется из "условия договора аренды"...и теперь инфо для одного столбца должна браться из "контрагенты" что делаю я: в запрос добавляю строку Контрагент = Справочник.Контрагенты.Наименование и в таблице в нужной ячейке прописываю Запрос.Контрагент но при выводе отчета ячейка контрагент пуста...в чем косяк?
|
|
« Последнее редактирование: 29-07-2009 09:37 от ge4r »
|
Записан
|
|
|
|
Kivals
|
 |
« Ответ #24 : 30-07-2009 11:30 » |
|
В тексте запроса вместо Контрагент = Справочник.Контрагенты.Наименование; нужно писать Контрагент = Справочник.УсловияДоговораАренды.Владелец.Владелец.Наименование; Иначе 1С не знает как нужно связать данные запроса
|
|
|
Записан
|
|
|
|
ge4r
Участник
Offline
|
 |
« Ответ #25 : 01-08-2009 11:30 » |
|
спасибо
|
|
|
Записан
|
|
|
|
ge4r
Участник
Offline
|
 |
« Ответ #26 : 05-08-2009 06:02 » |
|
еще косяк нашел.... у меня стоит группировка по торговой точке,по наименованию,но если есть повторяющаяся торговая точка,подчиненая разным контрагентам, то выводится только одна из них....
|
|
|
Записан
|
|
|
|
ge4r
Участник
Offline
|
 |
« Ответ #27 : 05-08-2009 06:31 » |
|
разобрался,сделал двойную группировку и всё ок
|
|
|
Записан
|
|
|
|
Ольга111
Интересующийся
Offline
|
 |
« Ответ #28 : 13-05-2010 10:04 » |
|
Здравствуйте, у меня простое задание, и мне даже стыдно обращаться к вам с таким вопросом, но помощь ОЧЕНЬ нужна Конфигурация элементарня, самописная. Есть справочник Альбомы. Нужен отчет, который выведет Наименование и Группу (оба они реквизиты справочника Альбомы) альбома, вышедшего позже 2005 года. Я написала так: Процедура Сформировать() Запрос = СоздатьОбъект("Запрос");
ТекстЗапроса = " |ГодВыпуска = Справочник.Альбомы.ГодВыпуска; |Альбом = Справочник.Альбомы.Наименование; |Условие (ГодВыпуска>1999); |"; Запрос.Выполнить(ТекстЗапроса); Таб = СоздатьОбъект("Таблица"); Таб.ВывестиСекцию("Заголовок"); Таб.ВывестиСекцию("Данные"); Таб.Показать("ОтчетПоСправочнику"); КонецПроцедуры В секции данные выводит только ГодВыпуска первого попавшегося элемента, который подходит под условие... Чувствую, что надо выводить векцию в цикле, но не могу понять как именно... Помогите, пожалуйста... 
|
|
|
Записан
|
|
|
|
Ольга111
Интересующийся
Offline
|
 |
« Ответ #29 : 13-05-2010 10:15 » |
|
Пока Запрос.Группировка() Цикл Таб.ВывестиСекцию("Данные"); КонецЦикла; Если выводить таким образом, что написать в условии цикла, у меня же нет Группировки в ТекстеЗапроса? Ну, пожалуйста, помогите!  (((
|
|
|
Записан
|
|
|
|
Kivals
|
 |
« Ответ #30 : 13-05-2010 10:44 » |
|
ТекстЗапроса = " |Без итогов; |ТекущийЭлемент = Справочник.Альбомы.ТекущийЭлемент; |ГодВыпуска = Справочник.Альбомы.ГодВыпуска; |Альбом = Справочник.Альбомы.Наименование; |Условие (ГодВыпуска>1999); |Группировка(ТекущийЭлемент); |"; Ну а дальше доступайся в цикле к нужным реквизитам через Запрос.ТекущийЭлемент.<НазваниеРеквизита>
|
|
|
Записан
|
|
|
|
Ольга111
Интересующийся
Offline
|
 |
« Ответ #31 : 13-05-2010 14:45 » |
|
Простите, пожалуйста, но я не совсем понимаю. Дело в том, что я не программист, вы не могли бы мне по-подробней показать, как надо делать. Пока я только ТекстЗапроса написала, как вы сказали. Процедура Сформировать() Запрос = СоздатьОбъект("Запрос"); ТекстЗапроса = " |Без итогов; |ТекущийЭлемент = Справочник.Альбомы.ТекущийЭлемент; |ГодВыпуска = Справочник.Альбомы.ГодВыпуска; |Альбом = Справочник.Альбомы.Наименование; |Условие (ГодВыпуска>1999); |Группировка(ТекущийЭлемент); |"; Запрос.Выполнить(ТекстЗапроса); Таблица = СоздатьОбъект("Таблица"); Таблица.ВывестиСекцию("Заголовок"); А дальше никак не разберусь...
|
|
|
Записан
|
|
|
|
|
Kivals
|
 |
« Ответ #33 : 13-05-2010 17:57 » |
|
Ольга111, при всем желании не смогу тебе помочь подредактировать Таблицу, которую ты выводишь, так что разбираться все равно придется... Вот что получается дальше: Запрос.Выполнить(ТекстЗапроса); Пока Запрос.Группировка() Цикл //Таб.ВывестиСекцию("Данные"); Сообщить(Запрос.ТекущийЭлемент.Наименование); Сообщить(Запрос.ТекущийЭлемент.Группа); КонецЦикла; Как это прикрутить к таблице - попробуй разобраться сама
|
|
|
Записан
|
|
|
|
Ольга111
Интересующийся
Offline
|
 |
« Ответ #34 : 13-05-2010 18:39 » |
|
Большое вам спасибо, но в строке Пока Запрос.Группировка() Цикл ошибка: Выражение должно иметь логический тип. Когда я пишу Пока Запрос.Группировка()=1 Цикл Выдаёт ошибку - Запрос.Выполнить(ТекстЗапроса); {Обработка.ПопулярноеЗа5лет.Форма.Модуль(22)}: Группировка <<?>> (ТекущийЭлемент); Запро
|
|
|
Записан
|
|
|
|
Ольга111
Интересующийся
Offline
|
 |
« Ответ #35 : 13-05-2010 18:41 » |
|
Запрос.Выполнить(ТекстЗапроса); {Обработка.ПопулярноеЗа5лет.Форма.Модуль(22)}: Группировка <<?>> (ТекущийЭлемент); Запро
|
|
|
Записан
|
|
|
|
Dest
Опытный
Offline
|
 |
« Ответ #36 : 14-05-2010 03:18 » |
|
|ТекущийЭлемент = Справочник.Альбомы.ТекущийЭлемент; "ТекущийЭлемент" - зарезервированное слово. Попробуй поменять, например на "ТекущийЭл" |ТекущийЭл = Справочник.Альбомы.ТекущийЭлемент;
|
|
|
Записан
|
|
|
|
Ольга111
Интересующийся
Offline
|
 |
« Ответ #37 : 14-05-2010 04:43 » |
|
Спасибо, буду пробовать...
|
|
|
Записан
|
|
|
|
Kivals
|
 |
« Ответ #38 : 14-05-2010 12:29 » |
|
Ольга111, я не проверял код - писал прямо в форуме. Про цикл - абсолютно верно, там должно быть "=1" Про группировку - по-моему там скобок не нужно, вот так: |Группировка ТекущийЭлемент упорядочить по ТекущийЭлемент.Наименование без групп;
|
|
|
Записан
|
|
|
|
Ольга111
Интересующийся
Offline
|
 |
« Ответ #39 : 14-05-2010 12:46 » |
|
Большое спасибо, с тем заданием разобралась... Если можно, подскажите, пожалуйста, как из табличной части записать данные в справочник? т.е. в табл. части документа есть название и количество, надо, чтобы в справочнике у нужного элемента менялось количество.
|
|
|
Записан
|
|
|
|
Ольга111
Интересующийся
Offline
|
 |
« Ответ #40 : 14-05-2010 13:02 » |
|
Я попробовала сделать так: Процедура ОбработкаПроведения() СпрКниги = СоздатьОбъект("Справочник.Книги"); СпрКниги.Новый(); ДокПост = СоздатьОбъект("Документ.ПоступлениеКниг");
ДокПост. ВыбратьСтроки(); Пока ДокПост.ПолучитьСтроку()=1 Цикл СпрКниги.ВыбратьСтроки(); Пока СпрКниги.ПолучитьСтроку()=1 Цикл Если СпрКниги.Наименование = НазКниги Тогда СпрКниги.Количество = Количество; //Скажите, пожалуйста, можно ли написать СпрКниги.Количество = СпрКниги.Количество + Количество ? //а то мне надо увеличивать количество в справочнике КонецЕсли; КонецЦикла; КонецЦикла; КонецПроцедуры Но в справочнике ничего не меняется, правда и ошибок тоже нет...
|
|
|
Записан
|
|
|
|
Kivals
|
 |
« Ответ #41 : 14-05-2010 13:39 » |
|
Ну что не меняется - неудивительно: цикл не выполняется ни разу, т.к. табличной части для вновь созданного объекта нет. Если ты это делаешь в ОбработкеПроведения, то нужно приблизительно так: ВыбратьСтроки(); Пока ПолучитьСтроку()=1 Цикл ... КонецЦикла; А у тебя в табличной части документа только названия, а не ссылка на элемент справочника?
|
|
|
Записан
|
|
|
|
Ольга111
Интересующийся
Offline
|
 |
« Ответ #42 : 14-05-2010 13:56 » |
|
Спасибо Вам. НазКниги (из табличной части документа) имеет тип Справочник.Книги. Примерно так, как вы показали я уже пробовала: Процедура ОбработкаПроведения() СпрКниги = СоздатьОбъект("Справочник.Книги"); ВыбратьСтроки(); Пока ПолучитьСтроку()=1 Цикл //цикл по таб. части документа //перебираю элементы справочника и ищу нужные, чтобы увеличить в них количество //Пока СпрКниги.ПолучитьСтроку()=1 Цикл //когда раскомментировано - ругается, на эту строку: Поле агрегатного //объекта не обнаружено (ПолучитьСтроку) Если СпрКниги.Наименование = НазКниги Тогда СпрКниги.Количество = Количество; КонецЕсли; // КонецЦикла; КонецЦикла; КонецПроцедуры
|
|
|
Записан
|
|
|
|
|
Kivals
|
 |
« Ответ #44 : 14-05-2010 22:37 » |
|
СпрКниги = СоздатьОбъект("Справочник.Книги"); ВыбратьСтроки(); Пока ПолучитьСтроку()=1 Цикл СпрКниги.НайтиЭлемент(НазКниги); // НазКниги - это реквизит табл.части СпрКниги.Количество = СпрКниги.Количество + Количество; // Можно. // Только: 1. При каждом проведении одного и того же документа к-во будет добавляться // 2. Не забудь отнять назад в процедуре ОбработкаУдаленияПроведения() СпрКниги.Записать(); КонецЦикла;
|
|
|
Записан
|
|
|
|
AndyG
Постоялец
Offline
|
 |
« Ответ #45 : 07-07-2010 09:45 » |
|
Ольга111, Та дались вам эти запросы!:( Не обязательно использовать их для всего и вся.
Вот вам решение
Таб = СоздатьОбъект("Таблица"); Таб.ВывестиСекцию("Заголовок"); Спр=СоздатьОбъект("Справочник.Альбомы"); Спр.ВыбратьЭлементы(); Пока Спр.ПолучитьЭлемент()=1 Цикл ТекЭл=Спр.ТекущийЭлемент(); Если ТекЭл.ПометкаУдаления()=1 Тогда Продолжить; КонецЕсли; Если ТекЭл.ГодВыпуска<1999 Тогда Продолжить; КонецЕсли; //ОПРЕДЕЛИМ Ваши переменные альбом=ТекЭл.Альбом; ГодВыпуска=ТекЭл.ГодВыпуска; //или в таблице заполняем переменными ТекЭл.Альбом и ТекЭл.ГодВыпуска ТаБ.ВывестиСекцию("ТаЧёХочешьВыводи"); //тут точное название горизонтальной секции Вашей таблицы КонецЦикла;
|
|
« Последнее редактирование: 07-07-2010 09:54 от AndyG »
|
Записан
|
|
|
|
|