Версия для печати темы (https://pro1c.org.ua/index.php?showtopic=2843)

Нажмите сюда для просмотра этой темы в обычном формате

Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 _ Программирование обычных форм 1С 8.2 и не интерфейсной логики _ 1c 8.2 вешает сервер терминалов

Автор: meverikxp 02.02.11, 11:14

Здравствуйте, в УТ сделал запрос который выполняется при изменении поля номенклатуры:

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

И в результате этого запроса тупо висит сервер, и проц компьютера на котором заходили в сервер тоже загружен на 100%, но если не изменять номенклатуру, то все работает нормально, подскажите в чем может быть проблема?

Автор: Vofka 02.02.11, 11:19

Попробуйте сделать запрос так:

|ВЫБРАТЬ
|Номенклатура, ТипЦен, Цена
|ИЗ
|РегистрСведений.ЦеныНоменклатуры.СрезПоследних(, Номенклатура = &Номенклатура)

Автор: logist 02.02.11, 11:27

Вы изобрели авианосец для перевозки пары зернышек. Вообще, то что Вы сделали это жуть.

Вам нужно при изменении номенклатуры вызывать процедуру которая два раза отфильтрует регистр по номенклатуре, в каждом случае с отдельной ценой, и подставить в нужные значения строки.

Автор: Vofka 02.02.11, 11:31

Цитата
Вообще, то что Вы сделали это жуть.

В принципе да, я сразу код особо не разбирал.

Автор: DartRomanius 02.02.11, 11:49

Для Каждого СтрТовары Из Товары Цикл


Так как телепаты в отпуску... smile.gif

вопрос? а это что перебирается в цикле то?

ЗЫ: и некоторые операции можно в теле запроса указать наверное... smile.gif

Автор: Batchir 02.02.11, 11:52

Посмотрите общий модуль Ценообразование процедуру ПолучитьЦенуНоменклатуры.
Весь код у Вас приведется к виду:

СтрТовары.Закупка = Ценообразование.ПолучитьЦенуНоменклатуры(<параметры процедуры>);
СтрТовары.Продажа = Ценообразование.ПолучитьЦенуНоменклатуры(<параметры процедуры>);

Автор: meverikxp 02.02.11, 11:53

Цитата(logist @ 02.02.11, 12:27) *
Вы изобрели авианосец для перевозки пары зернышек. Вообще, то что Вы сделали это жуть.

Вам нужно при изменении номенклатуры вызывать процедуру которая два раза отфильтрует регистр по номенклатуре, в каждом случае с отдельной ценой, и подставить в нужные значения строки.

Проблему я решил, как оказалось дело было не в этом запросе.
Но почему лучше сделать отбор, а не запрос?

Автор: logist 02.02.11, 12:26

Цитата(DartRomanius @ 02.02.11, 11:49) http://pro1c.org.ua/index.php?act=findpost&pid=17629
Проблему я решил, как оказалось дело было не в этом запросе.

Расскажите как решили, нам очень интересно.

Цитата(meverikxp @ 02.02.11, 11:53) *
Но почему лучше сделать отбор, а не запрос?

Ну представьте, Вы делаете салат, достаете из холодильника 10 продуктов, а потом выбираете 2 из них которые будут необходимы... Наверное лучше будет из холодильника достать сразу только 2 продукта.

Автор: meverikxp 02.02.11, 12:54

Цитата(logist @ 02.02.11, 13:26) *
Ну представьте, Вы делаете салат, достаете из холодильника 10 продуктов, а потом выбираете 2 из них которые будут необходимы... Наверное лучше будет из холодильника достать сразу только 2 продукта.

А как результаты отбора поместить в ячейки?

Автор: meverikxp 02.02.11, 12:59

Цитата(logist @ 02.02.11, 13:26) *
Расскажите как решили, нам очень интересно.

Проблема бала в том что в Процедурам ПриВыводеСтроки()
сделал цикл и он "Зацыклелся"

Автор: logist 02.02.11, 13:25

Цитата(meverikxp @ 02.02.11, 12:59) http://pro1c.org.ua/index.php?act=findpost&pid=17643
А как результаты отбора поместить в ячейки?

как-то так:
ОтборРегистра = РегистрыСведений.ИмяРегистра.СрезПоследних(Дата,СтруктураОтбора)
СтрокаТЧ = Элементы.Товары.ТекущаяСтрока
СтрокаТЧ.Цена = ОтборРегистра.Цена
СтрокаТЧ.Цена2 = ОтборРегистра.Цена2

Автор: Batchir 02.02.11, 13:38

функция в общем модуле Ценообразование имеет вид
ПолучитьЦенуНоменклатуры(Номенклатура, ХарактеристикаНоменклатуры = Неопределено, Знач ТипЦен,
ДатаПараметр = Неопределено, ЕдиницаИзмерения = Неопределено, Валюта = Неопределено, Курс = 0, Кратность = 1, ПроцентСкидкиНаценки = 0, ДоговорКонтрагента = Неопределено, УсловиеПродаж = Неопределено)

Вот код для Вашего случая

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

Автор: Jaffar 14.02.11, 13:14

Цитата(meverikxp @ 02.02.11, 12:14) http://pro1c.org.ua/index.php?act=findpost&pid=17625
функция в общем модуле Ценообразование имеет вид
ПолучитьЦенуНоменклатуры(Номенклатура, ХарактеристикаНоменклатуры = Неопределено, Знач ТипЦен,
ДатаПараметр = Неопределено, ЕдиницаИзмерения = Неопределено, Валюта = Неопределено, Курс = 0, Кратность = 1, ПроцентСкидкиНаценки = 0, ДоговорКонтрагента = Неопределено, УсловиеПродаж = Неопределено)


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

Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7
https://pro1c.org.ua