Имя: Пароль:
1C
1С v8
Запрос с обработкой результата помогите найти ошибку
0 FIL0S0FF
 
26.11.16
12:48
Только начинаю изучать 1с так, что заранее прошу прощение за тупость.

В стандартной 1с Бухгалтерия 2.0 в справочнике Номенклатура переместить все услуги в папку Услуги.
Т.е нужно создать обработку, если в номенклатуре стоит флажок Услуга то переместить в группу Услуги.

Создал обработку


&НаКлиенте
Процедура Переместить(Команда)
    Перемещение();
КонецПроцедуры


&НаСервереБезКонтекста
Процедура Перемещение()
    //{{КОНСТРУКТОР_ЗАПРОСА_С_ОБРАБОТКОЙ_РЕЗУЛЬТАТА
    // Данный фрагмент построен конструктором.
    // При повторном использовании конструктора, внесенные вручную изменения будут утеряны!!!

    Запрос = Новый Запрос;
    Запрос.Текст =
        "ВЫБРАТЬ
        |    Номенклатура.Услуга,
        |    Номенклатура.Родитель,
        |    Номенклатура.Ссылка
        |ИЗ
        |    Справочник.Номенклатура КАК Номенклатура";

    Результат = Запрос.Выполнить();

    ВыборкаДетальныеЗаписи = Результат.Выбрать();

    Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
        Если ВыборкаДетальныеЗаписи.Услуга = Истина Тогда
                  ВыбОбъект=ВыборкаДетальныеЗаписи.Родитель.ПолучитьОбъект();
        ВыбОбъект.Родитель = "Услуги";
        ВыбОбъект.Записать();
        КонецЕсли;
        КонецЦикла;

    //}}КОНСТРУКТОР_ЗАПРОСА_С_ОБРАБОТКОЙ_РЕЗУЛЬТАТА


КонецПроцедуры


Обработка вроде как выполняется но ничего не происходит. Почему?
1 Остап Сулейманович
 
26.11.16
12:51
(0) Все здесь: ВыбОбъект.Родитель = "Услуги";
Действительно родителем есть строка, а не группа справочника? У вас эксклюзивная 1С?
2 FIL0S0FF
 
26.11.16
12:57
Родитель группа справочника. 1с Стандартная
Я просто думал что значение задается как Строка.
Если это неправильно напишите как должно быть.
Заранее Спасибо.

Понимаю что ошибка плевая но бьюсь над ней уже второй день)
3 mehfk
 
26.11.16
13:02
А ты доки читай. Они рулез.
4 Gangar
 
26.11.16
13:10
Если ВыборкаДетальныеЗаписи.Услуга = Истина Тогда                  ВыбОбъект=ВыборкаДетальныеЗаписи.Родитель.ПолучитьОбъект();
ВыбОбъект.Родитель = Справочники.Номенклатура.НайтиПоКоду("код_нужной_группы");
ВыбОбъект.Записать();
КонецЕсли;
5 FIL0S0FF
 
26.11.16
13:10
Блин, да вроде читаю)
Радченко уже прочел и конфу сделал но толку чет пока мало)
6 mehfk
 
26.11.16
13:18
Какие ЯП знаешь?
7 Gangar
 
26.11.16
13:19
(5) мало читать - надо еще понимать прочитанное.
8 Lazy Stranger
 
26.11.16
13:29
там бред в половине строчек:
проверка на флажок Услуга должна быть в запросе
вынимать нужно Номенклатуру, а не её родителя, он в запросе вообще не нужен
ВыбОбъект=ВыборкаДетальныеЗаписи.Родитель.ПолучитьОбъект();
вернет объект-родитель а не объект-услугу
9 FIL0S0FF
 
26.11.16
13:32
По ЯП 4 года назад делал курсовые на PHP и все), щас и его не помню толком.

Спасибо Gangar очень помог. Перенос заработал.

Вылезла еще одна ошибка но с ней сам справился.
На счет понимать это да, еще перечитаю не раз надеюсь. Щас еще начал смотреть курсы Чистова многое стало понятнее но не все, возникают такие вот мелкие непонятки на которые упираюсь и торможу а оперативно найти решение не получается надеюсь со временем их не останется)
10 FIL0S0FF
 
26.11.16
13:33
Lazy Stranger тоже спасибо, но уже сам разобрался когда группы номенклатур в услуги прекидывать начало вместо конкретной номенклатуры)
11 mehfk
 
26.11.16
13:34
>> По ЯП 4 года назад делал курсовые на PHP и все), щас и его не помню толком.

Тогда я пас.
12 Lazy Stranger
 
26.11.16
13:35
запрос тем и ценен, что можно не всю номенклатуру выбирать, а только часть
так что я бы в твой запрос добавил в конце
ГДЕ
  Услуга = Истина
13 Lazy Stranger
 
26.11.16
13:37
допустим у тебя миллион элементов номенклатуры, из них сотня услуг: без фильтра в запросе он тебе весь миллион элементов вернет, а с фильтром - только нужную сотню
14 FIL0S0FF
 
26.11.16
13:42
Ок, я сделал через запрос(честно говоря я еще вчера так пытался)
вот отрывок кода который добавляется

    
         |ГДЕ
        |    Номенклатура.Услуга = &Услуга";

    Запрос.УстановитьПараметр("Услуга", Услуга);

Но при начале отладке вылезает ошибка

Переменная не определена (Услуга)
    Запрос.УстановитьПараметр("Услуга", <<?>>Услуга); (Проверка: Сервер)

И как её решить я не понял
15 youalex
 
26.11.16
13:46
Запрос.УстановитьПараметр("Услуга", ИСТИНА)
зы. можешь прямо в запросе написать:
ГДЕ Номенклатура.Услуга
16 FIL0S0FF
 
26.11.16
13:54
Все сделал все заработало.
Но опять же вопрос почему все таки вылезает ошибка, что переменная не определена?

P/S/Чувствую надо начинать читать учебник по языку запросов...
17 Gangar
 
26.11.16
14:22
Запрос = Новый Запрос("ВЫБРАТЬ
|    Ссылка
|ИЗ
|    Справочник.Номенклатура
|ГДЕ
|    Услуга  //выбираем только услуги
|    И Родитель.Код <> "код_нужной_группы"  //исключаем уже перенесенные";

Результат = Запрос.Выполнить();
Выборка = Результат.Выбрать();
Пока Выборка.Следующий() Цикл
ВыбОбъект = Выборка.Ссылка.ПолучитьОбъект();
ВыбОбъект.Родитель = Справочники.Номенклатура.НайтиПоКоду("код_нужной_группы");
ВыбОбъект.Записать();
КонецЦикла;
18 Lazy Stranger
 
26.11.16
15:01
(17) тогда уж
НужнаяГруппа = Справочники.Номенклатура.НайтиПоКоду("код_нужной_группы");
перед циклом
и
ВыбОбъект.Родитель = НужнаяГруппа; в цикле

искать одну и ту же группу по коду внутри запроса, имхо, изврат
19 FIL0S0FF
 
26.11.16
15:03
Блин, чувствую себя каким то недалеким...)
Всем спасибо, особенно Gangar и Lazy Stranger 3 часа этой темы на форуме дало очень много новой информации.
Чтобы обнаруживать ошибки, программист должен иметь ум, которому доставляет удовольствие находить изъяны там, где, казалось, царят красота и совершенство. Фредерик Брукс-младший