Имя: Пароль:
1C
1С v8
8.х Изменение документа
0 ivorotnikov
 
02.03.16
08:45
Добрый день! пытаюсь освоить способ изменения документа по
нажатию кнопки в другом документе, не выходит. Хочу этой процедурой найти именно один документ, с маршрутом "Зарплата", ФИО, и датами в пределах ДатаНачала и ДатаОкончания. И в этом документе изменить реквизит ПримечаниеДТ. Этот документ есть.

ВодительФИО = "Белоус Александр Борисович";
Запрос = Новый Запрос;
Запрос.Текст =  "ВЫБРАТЬ
               | НашаТехника.Ссылка
               |ИЗ
               | Документ.НашаТехника КАК НашаТехника
               |ГДЕ
               | НашаТехника.МаршрутВидРаботы = &Маршрут
               | И НашаТехника.Дата МЕЖДУ &ДатаНачала И &ДатаОкончания
               | И НашаТехника.Водитель = &ВодительФИО";
Запрос.УстановитьПараметр("ДатаНачала", НачалоДня(НачалоПериода));
Запрос.УстановитьПараметр("ДатаОкончания", КонецДня(ОкончаниеПериода));
Запрос.УстановитьПараметр("Маршрут", "Зарплата");
Запрос.УстановитьПараметр("ВодительФИО", ВодительФИО);
РезультатЗапроса = Запрос.Выполнить();

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

СсылкаНаЛюбойДокумент = Документы.НашаТехника.ПустаяСсылка();

Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
        СсылкаНаЛюбойДокумент = ВыборкаДетальныеЗаписи.Ссылка;
КонецЦикла;

ОбъектДокумента = СсылкаНаЛюбойДокумент.ПолучитьОбъект();
    ОбъектДокумента.ПримечаниеДТ = "Документ изменен.";
    ОбъектДокумента.Записать();


Выдает "Элемент не выбран" на третьей с низу строке.
1 capllary_
surgut
 
02.03.16
08:51
(0) Есть такой замечательный инструмент, называется Отладчик.
2 lubitelxml
 
02.03.16
08:51
запрос не вернул ни одной записи
3 Dmitrii
 
гуру
02.03.16
08:51
(0) ВыборкаДетальныеЗаписи.Следующий() возвращает ЛОЖЬ. Условие не выполняется, цикл не делает ни одной итерации, СсылкаНаЛюбойДокумент - пустая ссылка, ПолучитьОбъект от пустой ссылки выдаёт ошибку.

Всё логично.
Думай, почему выборка пустая.
Предположу, что реквизит Водитель в документе - это не строка. А ты в условии сравниваешь его со строкой  "Белоус Александр Борисович"
4 Metman
 
02.03.16
08:55
Запрос.УстановитьПараметр("Маршрут", "Зарплата");

Занятно...
5 Metman
 
02.03.16
08:58
В (3) верно по водителю сказал. Тогда сделай Справочники.Водители.НайтиПоНаименованию("Белоус Александр Борисович")
6 ivorotnikov
 
02.03.16
09:11
Большое спасибо! Действительно, не корректно искал данные в запросе. Поправил, теперь все работает!

Процедура КнопкаСоздатьДокументыЗарплатаНажатие(Элемент)
    // Вставить содержимое обработчика.
    ВодительФИО = "Белоус Александр Борисович";
    Запрос = Новый Запрос;
    Запрос.Текст =  "ВЫБРАТЬ
                    |    НашаТехника.Ссылка
                    |ИЗ
                    |    Документ.НашаТехника КАК НашаТехника
                    |ГДЕ
                    |    НашаТехника.МаршрутВидРаботы.Наименование = &Маршрут
                    |    И НашаТехника.Дата МЕЖДУ &ДатаНачала И &ДатаОкончания
                    |    И НашаТехника.Водитель.Наименование = &ВодительФИО";
    Запрос.УстановитьПараметр("ДатаНачала", НачалоДня(НачалоПериода));
    Запрос.УстановитьПараметр("ДатаОкончания", КонецДня(ОкончаниеПериода));
    Запрос.УстановитьПараметр("Маршрут", "Зарплата");
    Запрос.УстановитьПараметр("ВодительФИО", ВодительФИО);
    
    РезультатЗапроса = Запрос.Выполнить();
     ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();

    СсылкаНаЛюбойДокумент =
        Документы.НашаТехника.ПустаяСсылка();

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

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