Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
26 ноя 2024, 04:00

Невходит в цикл

Автор AxOn, 24 окт 2010, 09:51

0 Пользователей и 1 гость просматривают эту тему.

AxOn

Есть докумень заказ покупателей и справочник номенклатура. У меня при нажатии на кнопку ок в 1-ом цикле выщщитывается количество строк в таблице, а во втором в соответствии с именем товара в справочнике , количество этого товара отнимается от количества заказаного всё в той же строки и т.д. Но пробелма в том что программа невходит во 2-ой цикл. Неподскажите в чём дело? :(






Процедура ПослеЗаписи()
   // Вставить содержимое обработчика.
            
         
               
         Попытка
            к = 0;
         
         Для д = 1 По 10 Цикл
                  
                  
                  
                Сообщить(к);
          
            
                       
            Если ЭлементыФормы.ТабНоменклатура.Значение[к].НомерСтроки <> Null Тогда
               
               к = к + 1;
            
            
            КонецЕсли;
            КонецЦикла;

               
            Исключение         
                   
                            
                   Сообщить("ДААААА");
                  к = к - 1;         
                  
                  ф = 0;
                    

            Для д = 1 По к Цикл
                   
            Кол = ЭлементыФормы.ТабНоменклатура.Значение[ф].Количество;
            
            
            
            
            Имя = Справочники.Номенклатура.НайтиПоНаименованию(ЭлементыФормы.ТабНоменклатура.Значение[ф].Номенклатура);
            Имя.Количество = Имя.Количество - Кол;
            
             Сообщить(Кол);
            
            ф = ф + 1;
         
         КонецЦикла;
         
            КонецПопытки;

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

progmikon

Программа у вас сможет войти только в один цикл, поскольку один цикл у вас находится в попытке, а другой в исключении.
Что вы делаете этим кодом?

к = 0;
Для д = 1 По 10 Цикл
Сообщить(к);
Если ЭлементыФормы.ТабНоменклатура.Значение[к].НомерСтроки <> Null Тогда
к = к + 1;
КонецЕсли;
КонецЦикла;


Считаете количество строк?
К если строк больше 10?

для подсчета количества строк можно написать так ТабНоменклатура.Количество().

progmikon

Еще  у вас в табличной части номенклатура - это строка или справочник?

progmikon


//Если номенклатура - это справочник, а количество - реквизит справочника
Для Каждого ТекСтрока Из ТабНоменклатура Цикл
Количество = ТекСтрока.Номенклатура.Количество - ТекСтрока.Количество;
Сообщить(Количество);
КонецЦикла
//Если номенклатура - строка
Для Каждого ТекСтрока Из ТабНоменклатура Цикл
НайденныйЭлемент = Справочники.Номенклатура.НайтиПоНаименованию(ТекСтрока.Номенклатура);
Количество = НайденныйЭлемент.Количество - ТекСтрока.Количество;
Сообщить(Количество);
КонецЦикла

progmikon

AxOn, отпишитесь, пожалуйста, получилось?

AxOn

Для Каждого ТекСтрока Из ТабНоменклатура Цикл

       НайденЭлимент = Справочники.Номенклатура.НайтиПоНаименованию(ТекСтрока.Номенклатура);

         НайденЭлимент.Количество =  НайденЭлимент.Количество - ТекСтрока.Количество;

КонецЦикла;

да спс за разъяснение, я понял как можно сделать проще. Вот так всё правильно. Только пише ошибку при нажатии на ок. Поля объекта недоступно для записи(((.

P.S
ТекСтрока.Номенклатура и ТекСтрока.Количество - это реквизиты в табличной части
НайденЭлимент.Количество - это реквизит в справочнике




progmikon

Цитата: AxOn от 24 окт 2010, 13:57
Для Каждого ТекСтрока Из ТабНоменклатура Цикл

       НайденЭлимент = Справочники.Номенклатура.НайтиПоНаименованию(ТекСтрока.Номенклатура);

         НайденЭлимент.Количество =  НайденЭлимент.Количество - ТекСтрока.Количество;

КонецЦикла;

да спс за разъяснение, я понял как можно сделать проще. Вот так всё правильно. Только пише ошибку при нажатии на ок. Поля объекта недоступно для записи(((.

P.S
ТекСтрока.Номенклатура и ТекСтрока.Количество - это реквизиты в табличной части
НайденЭлимент.Количество - это реквизит в справочнике





Все правильно.
Если вы хотите записать полученный результат в справочник нужно получить объект.

Для Каждого ТекСтрока Из ТабНоменклатура Цикл
    НайденЭлимент = Справочники.Номенклатура.НайтиПоНаименованию(ТекСтрока.Номенклатура);
    ОбъектСпр = НайденныйЭлемент.ПолучитьОбъект();   
    ОбъектСпр.Количество =  ОбъектСпр.Количество - ТекСтрока.Количество;
    ОбъектСпр.Записать();
КонецЦикла;


Теги:

Похожие темы (5)

Рейтинг@Mail.ru

Поиск