Svarog86
Интересующийся
Offline
|
|
« : 20-07-2010 10:22 » |
|
Я всех приветствую. Народ, дело такое- немогу выполнить задание. 1С только начал изучать на курсах. Задание такое: Есть справочник(квартиры), в нем периодический реквизит(жильцы). Надо вывести их просто на экран( видимо методом "сообщить"). Создал справочник, реквизит, через предприятие вбил 5 жильцов. Ну и создал документ( Обзор жильцов) В модуле написал так: Процедура ОбработкаПроведения()
Перем А; А=СоздатьОбъект("Справочник.Квартиры"); Пока А.ВыбратьЭлементы()=1 Цикл А.ПолучитьЭлемент(); Сообщить(); КонецЦикла; КонецПроцедуры Дальше интересней) Предприятие зависло=) ни ошибки ни жильцов не вывело и на команды не отвечает. А закрывается только через Ктрл+Альт+Делит=). Может кто подсказать что я пропустил а то я даже не знаю где ошибку искать. Подсказали, что к периодическим р. обращаться нужно через переменную и тоже при помощи цикл. Как это в модуль вбить подскажите плз. Заранее спасибо всем.
|
|
|
Записан
|
|
|
|
Элексир
|
|
« Ответ #1 : 20-07-2010 11:06 » |
|
Svarog86, для того чтобы получить число жильцов. попробуй так. А.ВыбратьЭлементы(); Пока А.ПолучитьЭлемент()=1 цикл сообщить(А.Жильцы.Получить(Дата)) КонецЦикла;
|
|
|
Записан
|
|
|
|
Svarog86
Интересующийся
Offline
|
|
« Ответ #2 : 20-07-2010 12:00 » |
|
Элексир, Спасибо, теперь хоть предприятие не зависает). Я вот что думаю, не хватает данных для вывода. Ведь периодические реквизиты имеют дату актуальности. Когда вбивал жильцов, про дату там ничего не вводил. Может поэтому и не проводится документ?
|
|
|
Записан
|
|
|
|
Svarog86
Интересующийся
Offline
|
|
« Ответ #3 : 20-07-2010 12:46 » |
|
Я исправил модуль: Процедура ОбработкаПроведения()
Перем А; А=СоздатьОбъект("Справочник.Квартиры"); А.ВыбратьЭлементы(); Пока А.ПолучитьЭлемент()=1 Цикл Если А.этоГруппа()=0 Тогда Сообщить("В квартире № "+А.наименование+" проживает жилец по фамилии "+А.Жилец.Получить(ТекущаяДата()); конецЕсли; КонецЦикла; КонецПроцедуры Вывел ошибку: Сообщить("В квартире № "+А.наименование+" проживает жилец по фамилии "+А.Жилец.Получить(ТекущаяДата())<<?>>; {Документ.ОбзорЖильцов.Модуль Документа(10)}: Ожидается символ ')' Какой еще символ ему нада? вродь везде двоеточие поставил.
|
|
|
Записан
|
|
|
|
Элексир
|
|
« Ответ #4 : 20-07-2010 18:09 » |
|
Svarog86, он тебе же пишет ...: Ожидается символ ')' вот это и надо поставить.
|
|
|
Записан
|
|
|
|
Элексир
|
|
« Ответ #5 : 20-07-2010 18:10 » |
|
кстати а что у твоих жильцов фамилии и состав семьи совпадает?
|
|
|
Записан
|
|
|
|
Svarog86
Интересующийся
Offline
|
|
« Ответ #6 : 21-07-2010 04:41 » |
|
в каждой квартире по одному жильцу. Я может неправильно забил инфу хз... Чета я такого символа ниразу не встречал ')' помоему тут в другом проблема. В справочнике квартиры два реквизита-наименование стоит по умолчанию а жилец периодический. Но даты там не указаны, так как к нему обращаться? ведь они только по датам отвечают на запрос. Может дату установить? тока как?=)
|
|
|
Записан
|
|
|
|
Svarog86
Интересующийся
Offline
|
|
« Ответ #7 : 21-07-2010 05:34 » |
|
А вот еще поробовал Процедура ОбработкаПроведения() Перем А; А=СоздатьОбъект("Справочник.Квартиры"); А.ВыбратьЭлементы(); Пока А.ПолучитьЭлемент()=0 Цикл Сообщить("В квартире № "+А.наименование+" Проживает жилец по фамилии "+А.Жилец.Получить('01.01.10')); КонецЦикла; КонецПроцедуры Теперь документ провелся , но не вывел сообщение( Как задать периодическому реквизиту справочника дату ??
|
|
|
Записан
|
|
|
|
Элексир
|
|
« Ответ #8 : 21-07-2010 10:19 » |
|
Svarog86, получитьэлемент()=0? поменяй 0 на 1.
|
|
|
Записан
|
|
|
|
Svarog86
Интересующийся
Offline
|
|
« Ответ #9 : 22-07-2010 06:10 » |
|
Все гениальное просто) спасибо) Но в документе он всеравно не проводится. Зато работает во внешнем отчете).Элексир, еще раз спасибо за помощ.
|
|
|
Записан
|
|
|
|
Svarog86
Интересующийся
Offline
|
|
« Ответ #10 : 26-07-2010 06:23 » |
|
Снова проблема) На курсах мне дали другой вариант решения задачи. Там он работал, а дома не хочет( почему? Процедура Сформировать() Перем кв,пер; кв=создатьОбъект("справочник.квартиры"); пер=создатьОбъект("периодический"); кв.выбратьЭлементы(); Пока кв.ПолучитьЭлемент()=1 Цикл Сообщить(кв.наименование); пер.использоватьОбъект(пер.жилец,пер.текущийЭлемент()); пер.выбратьЗначения(Датаначала,ДатаКонца); Пока пер.ПолучитьЗначение()=1 Цикл Сообщить(" "+пер.значение); КонецЦикла; КонецЦикла; КонецПроцедуры в таком варианте он вывел мне всего 1 квартиру из 4х
|
|
|
Записан
|
|
|
|
Kivals
|
|
« Ответ #11 : 26-07-2010 07:24 » |
|
Вот эта строчка в корне неверна: пер.использоватьОбъект(пер.жилец,пер.текущийЭлемент()); В синтакс помощник - читать справку по функции использоватьОбъект
|
|
|
Записан
|
|
|
|
Svarog86
Интересующийся
Offline
|
|
« Ответ #12 : 26-07-2010 09:15 » |
|
Синтаксис: ИспользоватьОбъект(<ИмяРеквизита>,<Объект>) мм а что я пропустил? "периодический" реквизит жилец(ИмяРеквизита) ТекущийЭлемент()(Объект)
В примере ТекущийЭлемент() был без переменной, но так он вообще не запускается) я его сам поставил. Но зато теперь прога работает но опять же не выводит всех
|
|
|
Записан
|
|
|
|
Kivals
|
|
« Ответ #13 : 26-07-2010 09:46 » |
|
Начнем по порядку: приведи точно как эта строчка была в рабочем решении
|
|
|
Записан
|
|
|
|
Svarog86
Интересующийся
Offline
|
|
« Ответ #14 : 26-07-2010 09:51 » |
|
пер.использоватьОбъект(пер.жилец,текущийЭлемент()); только в рабочем решении она еще не была) Просто пример мне такой записали, но на него матерится предприятие
|
|
|
Записан
|
|
|
|
Kivals
|
|
« Ответ #15 : 26-07-2010 11:36 » |
|
тоже работать не будет Разберем по-порядку: Синтаксис: ИспользоватьОбъект( <ИмяРеквизита>,<Объект>) Как ты пытаешься задать имя реквизита?
|
|
|
Записан
|
|
|
|
Svarog86
Интересующийся
Offline
|
|
« Ответ #16 : 27-07-2010 06:24 » |
|
В справочнике есть периодический реквизит жилец, я вбил в него 4 квартиры с жильцами. наименование это номер квартиры жилец соответственно фамилия, через журнал событий вбил еще несколько значений для каждой квартиры. задаем переменную. указываем ей значение пер.СоздатьОбъект("периодический"); А вот чтобы обратиться к периодическому реквизиту, использую метод пер.ИспользоватьОбъект(пер.жилец, пер.ТекущийОбъект()); Как я понял, жилец это имя реквизита. ТекущийЭлемент это мы указываемк какому объекту обращаемся. Вот пака писал, задумался) но всеравно не вижу ошибки.
|
|
|
Записан
|
|
|
|
Kivals
|
|
« Ответ #17 : 27-07-2010 07:04 » |
|
Хорошо что детально расписал "Как я понял, жилец это имя реквизита." - правильно. А пер.жилец - это обращение к реквизиту только что созданного объекта "периодический". Мало того, что такого реквизита у этого объекта нет, так еще и его значение вряд ли будет соответствовать "жилец". Должно быть: пер.ИспользоватьОбъект("жилец", .... Теперь подумай что не так со вторым параметром
|
|
|
Записан
|
|
|
|
Svarog86
Интересующийся
Offline
|
|
« Ответ #18 : 27-07-2010 07:52 » |
|
пер.ИспользоватьОбъект("жилец",кв.ТекущийЭлемент()); Вот так работает) спасибо Kivals,
|
|
|
Записан
|
|
|
|
Svarog86
Интересующийся
Offline
|
|
« Ответ #19 : 28-07-2010 05:20 » |
|
И вот еще один вопросик. Я решил еще добавить сюда выбор по квартирам, ну чтоб наверняка не предрались преподы) Код набросал, но он работает не так как мне надо, почемуто) в поле ввожу номер квартиры и он мне опять выводит все квартиры со значениями в периодическом реквизите. Может для него надо отдельную кнопку сделать? Процедура Сформировать() Перем кв,пер; кв=создатьОбъект("справочник.квартиры"); пер=создатьОбъект("периодический"); кв.выбратьЭлементы(); Пока кв.ПолучитьЭлемент()=1 Цикл Сообщить(кв.наименование); пер.использоватьОбъект("жилец",кв.ТекущийЭлемент()); пер.выбратьЗначения(Датаначала,ДатаКонца); Пока пер.ПолучитьЗначение()=1 Цикл Сообщить(" "+пер.значение); КонецЦикла; КонецЦикла; КонецПроцедуры
Процедура ОбрВыборКвартир() перем пер,кв; кв=создатьОбъект("справочник.квартиры"); пер=создатьОбъект("периодический"); кв.НайтиЭлемент(ВыборКвартир); Сообщить(кв.наименование); пер.ИспользоватьОбъект("жилец",кв.ТекущийЭлемент()); пер.ВыбратьЗначения(ДатаНачала,ДатаКонца); Пока пер.ПолучитьЗначение()=1 Цикл Сообщить(" "+пер.значение); КонецЦикла; КонецПроцедуры Я что то упустил, только не помню что. Надо было гдето еще формулу вписать. Может кто подсказать?
|
|
|
Записан
|
|
|
|
Kivals
|
|
« Ответ #20 : 28-07-2010 08:42 » |
|
Формула (вызов функции/процедуры) вписывается на закладке Дополнительно свойств кнопки
|
|
|
Записан
|
|
|
|
|