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

Тема в разделе "1C и всё что с ней связано", создана пользователем lira89, 10 фев 2011.

  1. lira89

    lira89 Well-Known Member

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

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

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

    Andruha Гость

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

    Hryv Гость

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

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

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

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

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

    lira89 Well-Known Member

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

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

    СпрОб = СоздатьОбъект("Справочник.Обучение");
     
  7. unknown181538

    unknown181538 НеГуру
    1C Team

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

    lira89 Well-Known Member

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

    Hryv Гость

    Для того, что между
    |"//}}ЗАПР

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

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


    не знаю как у кого, но у меня изредка бывает, что ищу ошибку и в некоторые места не смотрю, так как уверен, что там все ОК
    а потом оказывается, что просчет в алгоритве и входные параметры не те что ожидалось, что и стало причиной ошибки
     
Загрузка...
Похожие Темы - Запросы справочнику
  1. anna
    Ответов:
    18
    Просмотров:
    1.323
  2. ToxaRat
    Ответов:
    11
    Просмотров:
    1.709
  3. bumbarashek
    Ответов:
    4
    Просмотров:
    2.143
  4. c11984
    Ответов:
    0
    Просмотров:
    1.647
  5. Xima
    Ответов:
    1
    Просмотров:
    1.604

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