1. Набираем команду codeby webinar. Набираем команду для организации и проведения вебинаров. Подробнее ...

    Скрыть объявление
  2. Требуются разработчики и тестеры для проекта codebyOS. Требования для участия в проекте: Знание принципов работы ОС на базе Linux; Знание Bash; Крайне желательное знание CPP, Python, Lua; Навыки системного администрирования. Подробнее ...

    Скрыть объявление
  3. Получи 30.000 рублей. Для получения денег необходимо принять участие в конкурсе авторов codeby. С условиями и призами можно ознакомиться на этой странице ...

    Внимание! Регистрация авторов на конкурс закрыта.

    Скрыть объявление

Запросы к справочнику

Тема в разделе "Базы данных и администрирование", создана пользователем lira89, 10 фев 2011.

  1. lira89

    lira89 Well-Known Member

    Репутация:
    0
    Регистрация:
    12 мар 2010
    Сообщения:
    154
    Симпатии:
    0
    Здравствуйте. У меня следующая ситуация. Мне нужно с помощью запроса, который находиться в модуле документа, найти элемент справочника провести в нем изменения (например изменить адрес) и записать(сохранить) изменения. С помощью запроса я получила элемент справочника в переменную Эл (код запроса ниже):
    Код:
    Запр = СоздатьОбъект("Запрос");
    Текст = "//{{Запр()
    |Период С {ДатаПериода} По {ДатаПериода};
    |Эл = Справочник.Обучение.ТекущийЭлемент;
    |Студ = Справочник.Обучение.ФизЛицо;
    |Фак = Справочник.Обучение.Факультет;
    |Спец = Справочник.Обучение.Специальность;
    |Группировка Эл Упорядочить По Эл.Наименование Без Групп;
    |Условие ((Студ = ФизЛицо) и (Фак = Факультет) и (Спец = Специальность));
    |"//}}ЗАПР
    Чтобы сохранить какие либо изменения в данном элементе справочника должна выполнить следующее :
    Код:
    СпрОб.НайтиЭлемент(Запр.Эл);
    СпрОб.Адрес = Адрес;
    СпрОб.Записать()
    Я не могу написать Запр.Эл.Записать, потому что это элемент, а не обект. Или можно обойтись без метода НайтиЭлемент()???Если да, то каким образом? Если использовать следующий код:
    Код:
    Запр.Эл.Адрес = Адрес;
    СпрОб.Записать()
    то данные не записываются.
     
  2. KiR

    KiR НЕ шибка опытный програмер)

    Репутация:
    0
    Регистрация:
    11 сен 2007
    Сообщения:
    1.581
    Симпатии:
    0
    СпрОб = создатьОбъект("Справочник."нужный тип справочника"")?
     
  3. Andruha

    Andruha Гость

    Репутация:
    0
    Где полный код - выборка запроса, чтоб увидеть как ты ищешь этот эл. справочника?
     
  4. Hryv

    Hryv Гость

    Репутация:
    0
    Во-первых, как уже заметил KiR, действительно ли
    СпрОб = СоздатьОбъект("Справочник.Обучение");
    ???

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

    В третьих, хорошо бы проверить, а вдруг Адрес - это периодический реквизит
     
  5. vitfil

    vitfil IT-интегратор

    Репутация:
    0
    Регистрация:
    2 апр 2004
    Сообщения:
    2.062
    Симпатии:
    0
    Вот и для чего это? Если в запросе получена ссылка, значит элемент есть. Особенно для служебного справочника. Насколько я понял, тот таковым и является.
     
  6. lira89

    lira89 Well-Known Member

    Репутация:
    0
    Регистрация:
    12 мар 2010
    Сообщения:
    154
    Симпатии:
    0
    Код:
    Перем СпрОб;
    Процедура ДобавлениеЭлемента(ПризнакФБИУ,ПризнакАспирантаДляЭлемента,ПрИПК)
    Запр = СоздатьОбъект("Запрос");
    Текст = "//{{Запр()
    |Период С {ДатаПериода} По {ДатаПериода};
    |Эл = Справочник.Обучение.ТекущийЭлемент;
    |Студ = Справочник.Обучение.ФизЛицо;
    |Фак = Справочник.Обучение.Факультет;
    |Спец = Справочник.Обучение.Специальность;
    |Группировка Эл Упорядочить По Эл.Наименование Без Групп; 
    |Условие ((Студ = ФизЛицо) и (Фак = Факультет) и (Спец = Специальность));
    |"//}}ЗАПР
    ;
    Если Запр.Выполнить(Текст) = 1 Тогда
    фл=0;
    Пока Запр.Группировка(1)=1 Цикл
    фл=1;
    //изменяю данные в найденом элементе (Запр.Эл это и есть элемент справочника)
    Запр.Эл.ЗачетКнижка = ЗачетКнижка;
    !!!!!!!они в отладчике изменяются, но как сохранить изменения, СпрОб.ТекущийЭлемент()=название папки, которую я выбрала родителем
    ///я пробовала СпрОб.Записать(), но ничего не меняется
    КонецЦикла;
    Если фл=0 Тогда	  
    Сообщить("Добавление нового студента: """+ФизЛицо+"""."); 		
    СпрОб.Новый();	
    ....
    СпрОб.Записать();
    КонецЕсли;
    КонецПроцедуры
    
    Процедура ОбработкаПроведения()	
    //здесь ищу нужную папку в справочнике, если нахожу, то использую ее в качестве родителя , если не нахожу, то создаю новую
    Если СпрОб.НайтиПоНаименованию("Стажеры")=1 Тогда
    Если СпрОб.ТекущийЭлемент().ПометкаУдаления()=1 Тогда
    Предупреждение("Папка """+СпрОб.ТекущийЭлемент()+""" помечена на удаление.
    |Чтобы добавить запись снимите пометку на удаление." ); 
    СтатусВозврата(0);
    Иначе
    СпрОб.ИспользоватьРодителя(СпрОб.ТекущийЭлемент());	 
    ДобавлениеЭлемента(ПризнакФБИУ,ПризнакАспирантаДляЭлемента,ПрИПК);//эта процедура ищет и добвляет если надо элемент. 
    КонецЕсли;
    Иначе
    СпрОб.НоваяГруппа();
    СпрОб.Наименование = "Стажеры";
    СпрОб.Записать();
    СпрОб.ИспользоватьРодителя(СпрОб.ТекущийЭлемент());
    ДобавлениеЭлемента(ПризнакФБИУ,ПризнакАспирантаДляЭлемента,ПрИПК);//эта процедура ищет и добвляет если надо элемент. 
    КонецЕсли;
    КонецПроцедуры
    
    СпрОб = СоздатьОбъект("Справочник.Обучение");
     
  7. unknown181538

    unknown181538 НеГуру

    Репутация:
    0
    Регистрация:
    28 дек 2008
    Сообщения:
    1.417
    Симпатии:
    0
    Об = СоздатьОБъект("Справочник");
    Об.НайтиЭлемент( Запр.Эл);
    Об.ЗачетКнижка = ЗачетКнижка;
    Об.зАписать();
     
  8. lira89

    lira89 Well-Known Member

    Репутация:
    0
    Регистрация:
    12 мар 2010
    Сообщения:
    154
    Симпатии:
    0
    я так и делала, просто думала, что возможно ли было бы обойтись без метода НайтиЭлемент, ведь у на в Запр.Эл уже есть элемент справочника Обучение . Только вот метод Записать тогда не применишь к элементу(
     
  9. Hryv

    Hryv Гость

    Репутация:
    0
    Для того, что между
    |"//}}ЗАПР

    и
    СпрОб.НайтиЭлемент(Запр.Эл);

    может быть цельная туча всего, что не гарантирует "Если в запросе получена ссылка, значит элемент есть"


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

Поделиться этой страницей