Имя: Пароль:
1C
 
Почему 1с зависает?
0 pro3ri
 
23.12.15
09:33
ДОбрый день!
На форме есть кнопка "подбор".

&НаКлиенте
Процедура Подбор(Команда)
    ПараметрыПодбора = Новый Структура("ЗакрыватьПриВыборе,МножественныйВыбор", Ложь, Истина);
    ОткрытьФорму("Справочник.Номенклатура.ФормаВыбора",ПараметрыПодбора, Элементы.Товары);
КонецПроцедуры

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

    Возврат Константы.ОсновнаяЦенаНоменклатуры.Получить();    

КонецФункции// ПолучениеКонстанты()()

при Множественном выборе система зависает, конфигуратор работает. Похоже на зацикливание, Как победить?
1 Godofsin
 
23.12.15
09:37
Прям зависает намертво?
2 pro3ri
 
23.12.15
09:39
(1) прям мистика какая-то теперь работает, похоже проблема была в     
Возврат Константы.ОсновнаяЦенаНоменклатуры.Получить();
3 Godofsin
 
23.12.15
09:40
(2) Освяти сервак. Демоны, не иначе ))))
4 pro3ri
 
23.12.15
09:40
файловая
5 Рэйв
 
23.12.15
09:41
(2)Нафиг ты в цикл вызов константы вставил? Получил бы один раз перед циклом
6 Lexey_
 
23.12.15
09:41
(0)
1.Убрать точки останова?
2. Называть переменные именами, отличными от имен параметров (Элемент)
3. Избавиться от запроса в цикле
7 Stim
 
23.12.15
09:43
1С зависает не потому что 1С, а потому что зависает
8 pro3ri
 
23.12.15
09:53
(6) всем спасибо, так сделал:

&НаКлиенте
Процедура Подбор(Команда)
    ПараметрыПодбора = Новый Структура("ЗакрыватьПриВыборе,МножественныйВыбор", Ложь, Истина);
    ОткрытьФорму("Справочник.Номенклатура.ФормаВыбора",ПараметрыПодбора, Элементы.Товары);
КонецПроцедуры

&НаКлиенте
Процедура ДобавитьСтрокуТовары(Элемент,ВидПрайсаНоменклатуры)

    Строка = Объект.Товары.Добавить();
    Строка.Номенклатура = Элемент;
    Строка.Количество = 1;
    Строка.Цена = РаботаСДокументами.ПодстановкаЦеныСервер(Элемент, ВидПрайсаНоменклатуры, Объект.Дата);        

КонецПроцедуры // ДобавитьСтрокуТовары()


&НаКлиенте
Процедура ТоварыОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка)
    ВидПрайсаНоменклатуры = ?((Не ЗначениеЗаполнено(Объект.ВидПрайсаНоменклатуры)),ПолучениеКонстанты(), Объект.ВидПрайсаНоменклатуры);
    Если ТипЗнч(ВыбранноеЗначение) = Тип("СправочникСсылка.Номенклатура") Тогда

        ДобавитьСтрокуТовары (Элемент,ВидПрайсаНоменклатуры);
        
    Иначе         
            
        Для каждого Товар Из ВыбранноеЗначение Цикл
    
            ДобавитьСтрокуТовары(Товар,ВидПрайсаНоменклатуры);
        
        КонецЦикла;
        
    КонецЕсли;

КонецПроцедуры
    
&НаСервереБезКонтекста
Функция ПолучениеКонстанты()

    Возврат Константы.ОсновнаяЦенаНоменклатуры.Получить();    

КонецФункции// ПолучениеКонстанты()()
9 Stim
 
23.12.15
10:09
(8) а ты попробуй первоначальный вариант вместо
&НаСервереБезКонтекста
Функция ПолучениеКонстанты()
написать

&НаСервере
Функция ПолучениеКонстанты()

а то походу ты лезешь на сервер без данных формы, а когда возвращаешься обратно, то считываются заново все выбранные значения и цикл получается бесконечным
AdBlock убивает бесплатный контент. 1Сергей