Имя: Пароль:
1C
1С v8
Внешняя обработка на изменения норм часов
0 example221
 
30.12.19
08:27
Подскажите в чем может быть проблема


Процедура КнопкаВыполнитьНажатие(Кнопка)
     //Защита картера ДВС с/у
    Работа = Новый СписокЗначений;         
    Работа.Добавить(Справочники.Автоработы.НайтиПоКоду("ЦБ00021506"));
    //Номер.Добавить("0,200");
        
    Запрос = Новый Запрос;
    Запрос.Текст =
                  "ВЫБРАТЬ
                  |    ЗаказНарядРаботы.Ссылка КАК Ссылка,
                  |    ЗаказНарядРаботы.Работа КАК ВидРаботы,
                  |    ЗаказНарядРаботы.Коэффициент КАК Коэффициент
                  |ИЗ
                  |    Документ.ЗаказНаряд.Работы КАК ЗаказНарядРаботы
                  |ГДЕ
                  |    ЗаказНарядРаботы.Работа В(&Работа)";
    
    Запрос.УстановитьПараметр("Работа", Работа);
    
    Результат = Запрос.Выполнить();
    
    Выборка = Результат.Выбрать();
    
    Пока Выборка.Следующий() Цикл
        Объекта = Выборка.Ссылка.ПолучитьОбъект();
        Для каждого Выборка из Объекта.Работы Цикл
            Если Выборка.Коэффициент = 0.200 Тогда
                Объекта.Коэффициент = 1.000;
            КонецЕсли;    
        КонецЦикла;
        Попытка
            Объекта.Записать();
            Сообщить(Выборка.Ссылка)
        Исключение
            Сообщить("НормЧасы " + Выборка.Ссылка + " не изменены.");
        КонецПопытки;
    КонецЦикла;    
КонецПроцедуры
1 Aleksey
 
30.12.19
08:30
тебе виднее в чем проблема.

Что за ошибка, что не получается?
2 example221
 
30.12.19
08:30
(1) Вроде считывает,но по задумке неизменяет значение норм часов.
3 JeHer
 
30.12.19
08:31
(1) Наверное, тут ошибка
>>>  Для каждого Выборка
4 example221
 
30.12.19
08:33
(3) ОО возможно,спсибо щас проверю
5 example221
 
30.12.19
08:37
(3) Начал жаловаться что итератор не определен
6 example221
 
30.12.19
08:40
Закрыто
7 example221
 
30.12.19
12:53
Извиняюсь за плодение веток.
Но Обясните что от меня хотят
Сообщение в котором говорят что изменить
(Смотри, ты в запросе выбираешь номер строки.
Теперь вместо цикла с обходом строк ты пиши сразу Объект.Работы.(номер строки - поищи как правильно указывать).Коэффициент = ...)

Сам Код

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


Я Туповат да
8 NcSteel
 
30.12.19
12:53
Процедура КнопкаВыполнитьНажатие(Кнопка)
    //Защита картера ДВС с/у
    Работа = Новый СписокЗначений;        
    Работа.Добавить(Справочники.Автоработы.НайтиПоКоду("ЦБ00021506"));
    //Номер.Добавить("0,200");
    Запрос = Новый Запрос;
    Запрос.Текст =
    "ВЫБРАТЬ
    |    ЗаказНарядРаботы.Ссылка,
    |    ЗаказНарядРаботы.Работа,
    |    ЗаказНарядРаботы.Коэффициент,
    |    ЗаказНарядРаботы.НомерСтроки
    |ИЗ
    |    Документ.ЗаказНаряд.Работы КАК ЗаказНарядРаботы
    |ГДЕ
    |    ЗаказНарядРаботы.Работа В(&Работа)
    |Итоги ПО ЗаказНарядРаботы.Ссылка";
    
    Запрос.УстановитьПараметр("Работа", Работа);
    
    Результат = Запрос.Выполнить();
    
    ВыборкаЗН = Результат.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
    Пока ВыборкаЗН.Следующий() Цикл    
        Объект = ВыборкаЗН.Ссылка.ПолучитьОбъект();
        ВыборкаДетали = ВыборкаЗН.Выбрать(ОбходРезультатаЗапроса.Прямой);
        Пока ВыборкаДетали.Следующий() Цикл
            ИндексСтроки = ВыборкаДетали.НомерСтроки - 1;
            стр = Объект.Работы[ИндексСтроки];
            стр.Коэффициент = 0.600;
            
        КонецЦикла;
        Попытка
            Объект.Записать();
        Исключение
            Сообщить("НормЧасы " + Объект + " не изменены.");
        КонецПопытки;
        
    КонецЦикла;

КонецПроцедуры
9 example221
 
30.12.19
12:54
(8) Угу Спасибо,щас проверю
10 example221
 
30.12.19
12:56
(8) Но тут опять цикл в цикле получается,одним циклом это не провернуть?
11 hhhh
 
30.12.19
13:05
(10) зачем это всё? Есть же типовая ГрупповаяОбработкаСправочниковИДокументов. Идеально подходит для данного случая, и вообще ничего писать не надо.
12 NcSteel
 
30.12.19
13:24
(10) Так оптимальнее.