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

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

ru
Offline Offline

« : 20-07-2010 10:22 » 

Я всех приветствую. Народ, дело такое- немогу выполнить задание. 1С только начал изучать на курсах. Задание такое: Есть справочник(квартиры), в нем периодический реквизит(жильцы). Надо вывести их просто на экран( видимо методом "сообщить"). Создал справочник, реквизит, через предприятие вбил 5 жильцов.
Ну и создал документ( Обзор жильцов)
В модуле написал так:

Код:
Процедура ОбработкаПроведения()

    Перем А;
А=СоздатьОбъект("Справочник.Квартиры");
Пока А.ВыбратьЭлементы()=1 Цикл
А.ПолучитьЭлемент();
Сообщить();
КонецЦикла;
КонецПроцедуры

Дальше интересней) Предприятие зависло=) ни ошибки ни жильцов не вывело и на команды не отвечает. А закрывается только через Ктрл+Альт+Делит=). Может кто подсказать что я пропустил а то я даже не знаю где ошибку искать. Подсказали, что к периодическим р. обращаться нужно через переменную и тоже при помощи цикл. Как это в модуль вбить подскажите плз. Заранее спасибо всем.
Записан
Элексир
Помогающий

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

« Ответ #1 : 20-07-2010 11:06 » 

Svarog86, для того чтобы получить число жильцов. попробуй так.
Код:
А.ВыбратьЭлементы();
Пока А.ПолучитьЭлемент()=1 цикл
сообщить(А.Жильцы.Получить(Дата))
КонецЦикла;
Записан
Svarog86
Интересующийся

ru
Offline Offline

« Ответ #2 : 20-07-2010 12:00 » 

Элексир,  Спасибо, теперь хоть предприятие не зависает). Я вот что думаю, не хватает данных для вывода. Ведь периодические реквизиты имеют дату актуальности. Когда вбивал жильцов, про дату там ничего не вводил. Может поэтому и не проводится документ?
Записан
Svarog86
Интересующийся

ru
Offline Offline

« Ответ #3 : 20-07-2010 12:46 » 

Я исправил модуль:
Код:
Процедура ОбработкаПроведения()

    Перем А;
А=СоздатьОбъект("Справочник.Квартиры");
    А.ВыбратьЭлементы();
Пока А.ПолучитьЭлемент()=1 Цикл
Если А.этоГруппа()=0 Тогда
Сообщить("В квартире № "+А.наименование+" проживает жилец по фамилии "+А.Жилец.Получить(ТекущаяДата());
конецЕсли;
КонецЦикла;
КонецПроцедуры
Вывел ошибку:
Сообщить("В квартире № "+А.наименование+" проживает жилец по фамилии "+А.Жилец.Получить(ТекущаяДата())<<?>>;
{Документ.ОбзорЖильцов.Модуль Документа(10)}: Ожидается символ ')'


Какой еще символ ему нада? вродь везде двоеточие поставил.
Записан
Элексир
Помогающий

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

« Ответ #4 : 20-07-2010 18:09 » 

Svarog86, он тебе же пишет
Цитата
...: Ожидается символ ')'
вот это и надо поставить.
Записан
Элексир
Помогающий

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

« Ответ #5 : 20-07-2010 18:10 » 

кстати а что у твоих жильцов фамилии и состав семьи совпадает?Улыбаюсь
Записан
Svarog86
Интересующийся

ru
Offline Offline

« Ответ #6 : 21-07-2010 04:41 » 

в каждой квартире по одному жильцу. Я может неправильно забил инфу хз... Чета я такого символа ниразу не встречал  ')' помоему тут в другом проблема.  В справочнике квартиры   два реквизита-наименование стоит по умолчанию а жилец периодический. Но даты там не указаны, так как к нему обращаться? ведь они только по датам отвечают на запрос. Может дату установить? тока как?=)
Записан
Svarog86
Интересующийся

ru
Offline Offline

« Ответ #7 : 21-07-2010 05:34 » 

А вот еще поробовал
Код:
Процедура ОбработкаПроведения()
    Перем А;
А=СоздатьОбъект("Справочник.Квартиры");
    А.ВыбратьЭлементы();
Пока А.ПолучитьЭлемент()=0 Цикл
Сообщить("В квартире № "+А.наименование+" Проживает жилец по фамилии "+А.Жилец.Получить('01.01.10'));
КонецЦикла;
КонецПроцедуры
Теперь документ провелся , но не вывел сообщение( Как задать периодическому реквизиту справочника дату ??
Записан
Элексир
Помогающий

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

« Ответ #8 : 21-07-2010 10:19 » 

Svarog86,
Цитата
получитьэлемент()=0?
поменяй 0 на 1.
Записан
Svarog86
Интересующийся

ru
Offline Offline

« Ответ #9 : 22-07-2010 06:10 » 

Все гениальное просто) спасибо) Но в документе он всеравно не проводится. Зато работает во внешнем отчете).Элексир, еще раз спасибо за помощ.
Записан
Svarog86
Интересующийся

ru
Offline Offline

« Ответ #10 : 26-07-2010 06:23 » 

Снова проблема) На курсах мне дали другой вариант решения задачи. Там он работал, а дома не хочет( почему?
Код:
Процедура Сформировать() 
Перем кв,пер;
кв=создатьОбъект("справочник.квартиры");
пер=создатьОбъект("периодический");
кв.выбратьЭлементы();
Пока кв.ПолучитьЭлемент()=1 Цикл
Сообщить(кв.наименование);
пер.использоватьОбъект(пер.жилец,пер.текущийЭлемент());
пер.выбратьЗначения(Датаначала,ДатаКонца);
Пока пер.ПолучитьЗначение()=1 Цикл
Сообщить(" "+пер.значение);
КонецЦикла;   
КонецЦикла;
КонецПроцедуры

в таком варианте он вывел мне всего 1 квартиру из 4х
Записан
Kivals
Модератор

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

WWW
« Ответ #11 : 26-07-2010 07:24 » 

Вот эта строчка в корне неверна:
пер.использоватьОбъект(пер.жилец,пер.текущийЭлемент());
В синтакс помощник - читать справку по функции использоватьОбъект
Записан
Svarog86
Интересующийся

ru
Offline Offline

« Ответ #12 : 26-07-2010 09:15 » 

Синтаксис:
ИспользоватьОбъект(<ИмяРеквизита>,<Объект>) мм а что я пропустил?
"периодический" реквизит жилец(ИмяРеквизита)
ТекущийЭлемент()(Объект)

В примере ТекущийЭлемент() был без переменной, но так он вообще не запускается) я его сам поставил. Но зато теперь прога работает но опять же не выводит всех

Записан
Kivals
Модератор

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

WWW
« Ответ #13 : 26-07-2010 09:46 » 

Начнем по порядку:
приведи точно как эта строчка была в рабочем решении
Записан
Svarog86
Интересующийся

ru
Offline Offline

« Ответ #14 : 26-07-2010 09:51 » 

Код:
пер.использоватьОбъект(пер.жилец,текущийЭлемент());
только в рабочем решении она еще не была) Просто пример мне такой записали, но на него матерится предприятие
Записан
Kivals
Модератор

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

WWW
« Ответ #15 : 26-07-2010 11:36 » 

тоже работать не будет Улыбаюсь Разберем по-порядку:
Синтаксис:
ИспользоватьОбъект(<ИмяРеквизита>,<Объект>)
Как ты пытаешься задать имя реквизита?
Записан
Svarog86
Интересующийся

ru
Offline Offline

« Ответ #16 : 27-07-2010 06:24 » 

В справочнике есть периодический реквизит жилец, я вбил в него 4 квартиры с жильцами.
наименование это номер квартиры жилец соответственно фамилия, через журнал событий вбил еще несколько значений для каждой квартиры.
задаем переменную.
указываем ей значение
Код:
пер.СоздатьОбъект("периодический");
А вот чтобы обратиться к периодическому реквизиту, использую метод
Код:
 пер.ИспользоватьОбъект(пер.жилец, пер.ТекущийОбъект());
Как я понял, жилец это имя реквизита. ТекущийЭлемент это мы указываемк какому объекту обращаемся.  Вот пака писал, задумался) но всеравно не вижу ошибки.
Записан
Kivals
Модератор

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

WWW
« Ответ #17 : 27-07-2010 07:04 » new

Хорошо что детально расписал Улыбаюсь
"Как я понял, жилец это имя реквизита." - правильно. А пер.жилец - это обращение к реквизиту только что созданного объекта "периодический". Мало того, что такого реквизита у этого объекта нет, так еще и его значение вряд ли будет соответствовать "жилец". Должно быть:
Код:
пер.ИспользоватьОбъект("жилец", ....
Теперь подумай что не так со вторым параметром
Записан
Svarog86
Интересующийся

ru
Offline Offline

« Ответ #18 : 27-07-2010 07:52 » 

Код:
пер.ИспользоватьОбъект("жилец",кв.ТекущийЭлемент());
Вот так работает) спасибо Kivals,


Записан
Svarog86
Интересующийся

ru
Offline Offline

« Ответ #19 : 28-07-2010 05:20 » 

И вот еще один вопросик. Я решил еще добавить сюда выбор по квартирам, ну чтоб наверняка не предрались преподы) Код набросал, но он работает не так как мне надо, почемуто)
в поле ввожу номер квартиры и он мне опять выводит все квартиры со значениями в периодическом реквизите. Может для него надо отдельную кнопку сделать?
Код:
Процедура Сформировать() 
Перем кв,пер;
кв=создатьОбъект("справочник.квартиры");
пер=создатьОбъект("периодический");
кв.выбратьЭлементы();
Пока кв.ПолучитьЭлемент()=1 Цикл
Сообщить(кв.наименование);
пер.использоватьОбъект("жилец",кв.ТекущийЭлемент());
пер.выбратьЗначения(Датаначала,ДатаКонца);
Пока пер.ПолучитьЗначение()=1 Цикл
Сообщить(" "+пер.значение);
КонецЦикла;   
КонецЦикла;
КонецПроцедуры 

Процедура ОбрВыборКвартир()
перем пер,кв;
кв=создатьОбъект("справочник.квартиры");
пер=создатьОбъект("периодический");
кв.НайтиЭлемент(ВыборКвартир);
Сообщить(кв.наименование);
пер.ИспользоватьОбъект("жилец",кв.ТекущийЭлемент());
пер.ВыбратьЗначения(ДатаНачала,ДатаКонца);
Пока пер.ПолучитьЗначение()=1 Цикл
Сообщить(" "+пер.значение);
КонецЦикла;
КонецПроцедуры
Я что то упустил, только не помню что. Надо было гдето еще формулу вписать. Может кто подсказать?
Записан
Kivals
Модератор

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

WWW
« Ответ #20 : 28-07-2010 08:42 » 

Формула (вызов функции/процедуры) вписывается на закладке Дополнительно свойств кнопки
Записан
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines