Имя: Пароль:
1C
1С v8
Не отрабатывает процедура в цикле
,
0 Малый Тихон
 
30.10.15
13:07
Добрый день!

Столкнулся с такой проблемой:

Есть простая обработка с кодом:

&НаСервере
Процедура ПрочиститьВсеНормыНаСервере()
    СоединениеДругаяБаза = ПолучитьПодключение();

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

    КонецЦикла;
    
КонецПроцедуры



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

    Для каждого стр из РезультатКЕРП Цикл
        ///заполняем нормы
        ПараметрыОтбора = Новый Структура;
        ПараметрыОтбора.Вставить("ВидРабот", ПолучитьОперациюПоКоду(МК.ссылка,стр.НомерОперации));
        НайденныеСтроки = мк.Трудозатраты.НайтиСтроки(ПараметрыОтбора);
        
        
        для каждого стр1 из НайденныеСТроки цикл
            
            
            стр1.Количество=стр.НормаВремени;
            
            ТабЗнач.Очистить();
            НоваяСтрока = ТабЗнач.Добавить();
            НоваяСтрока.Свойство = ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.НайтиПоНаименованию("ШифрПрофессии");
            НоваяСтрока.Значение = стр.ШифрПрофессии;
            
            НоваяСтрока = ТабЗнач.Добавить();
            НоваяСтрока.Свойство = ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.НайтиПоНаименованию("ВидОплаты");
            НоваяСтрока.Значение = стр.ВидОплаты;
            
            НоваяСтрока = ТабЗнач.Добавить();
            НоваяСтрока.Свойство = ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.НайтиПоНаименованию("ВидОборудования");
            НоваяСтрока.Значение = стр.ВидОборудования;
            
            НоваяСтрока = ТабЗнач.Добавить();
            НоваяСтрока.Свойство = ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.НайтиПоНаименованию("ВидНорм");
            НоваяСтрока.Значение = стр.ВидНорм;
            
            НоваяСтрока = ТабЗнач.Добавить();
            НоваяСтрока.Свойство = ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.НайтиПоНаименованию("ВидТарифа");
            НоваяСтрока.Значение = стр.ВидТарифа;
            
            НоваяСтрока = ТабЗнач.Добавить();
            НоваяСтрока.Свойство = ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.НайтиПоНаименованию("УровеньМеханики");
            НоваяСтрока.Значение = стр.УровеньМеханики;
            
            НоваяСтрока = ТабЗнач.Добавить();
            НоваяСтрока.Свойство = ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.НайтиПоНаименованию("РазрядРаботы");
            НоваяСтрока.Значение = стр.РазрядРаботы;
            
            НоваяСтрока = ТабЗнач.Добавить();
            НоваяСтрока.Свойство = ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.НайтиПоНаименованию("Участок");
            НоваяСтрока.Значение = стр.РазрядРаботы;
            
            УправлениеСвойствами.ЗаписатьСвойстваУОбъекта(стр1.Операция.ссылка, ТабЗнач);
            ТабЗнач.Очистить();
            
            
        конеццикла;
        
    КонецЦикла;
    
    МК.Записать();


если в первой процедуре поставить условие на конкретный элемент справочника тогда все проходит нормально, а в цикле нет. Не пойму в чем подвох.
1 Малый Тихон
 
30.10.15
13:09
Извиняюсь не все скопировал: Вместо

МК=МКДляИзменения.ПолучитьОбъект();

нужно

&НаСервере
Процедура ЗагрузитьНормыНаСервере(СоединениеДругаяБаза,МКДляИзменения)


    МК=МКДляИзменения.ПолучитьОбъект();
2 DmitriyDI
 
30.10.15
13:09
посмотир отладчиком мб результат запроса пустой?
3 Mirnin
 
30.10.15
13:12
Запрос.Текст =
    "ВЫБРАТЬ
    |   МаршрутныеКартыВыходныеИзделия.Ссылка КАК МК
    |ИЗ
    |   Справочник.МаршрутныеКарты.ВыходныеИзделия КАК МаршрутныеКартыВыходныеИзделия
    |ГДЕ
    |   НЕ МаршрутныеКартыВыходныеИзделия.Ссылка.ЭтоГруппа";
    Запрос.УстановитьПараметр("Ссылка",Объект.МК);


Есть подозрение, что запрос получает совсем не то, что задумывалось. Параметра "Ссылка" нет.
4 Малый Тихон
 
30.10.15
13:13
(2)-нет. не пустой, я же пишу-на одном элементе все нормально
(3)-код остался когда пробовал с одним элементом
5 hhhh
 
30.10.15
13:33
ЗапросКЕРП.УстановитьПараметр("ЧертежныйНомер",СоединениеДругаяБаза.ЗначениеИзСтрокиВнутр(ЗначениеВСтрокуВнутр(ЧН)));

бред, пиши  

ЗапросКЕРП.УстановитьПараметр("ЧертежныйНомер",ЧН);

примитивные типы просто передаются.
6 Малый Тихон
 
30.10.15
13:35
похоже перемудрил, сейчас попробую, спасибо
7 GROOVY
 
30.10.15
13:36
Никогда не понимал, зачем люди из выборки делают ТЗ, и ничего с ней не делают.
8 Малый Тихон
 
30.10.15
14:02
не взлетает
9 Малый Тихон
 
30.10.15
14:05
не пойму почему не работает-если по одному элементу срабатывает то в цикле тоже должно работать, только ссылку пуляй в процедуру и все....
10 Малый Тихон
 
30.10.15
14:53
Нет ни у кого мыслей?
11 Малый Тихон
 
30.10.15
15:20
Кто нибудь:) пока не сделаю домой нельзя уходить:)
Компьютеры — прекрасное средство для решения проблем, которых до их появления не было.