Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: 1c 8.2 вешает сервер терминалов
Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 > Программисту > Программирование в 1С Предприятие 8.2 > Программирование обычных форм 1С 8.2 и не интерфейсной логики
meverikxp
Здравствуйте, в УТ сделал запрос который выполняется при изменении поля номенклатуры:
Запрос = Новый Запрос;
    Запрос.Текст = "
    |ВЫБРАТЬ
|Номенклатура, ТипЦен, Цена
|ИЗ
|РегистрСведений.ЦеныНоменклатуры.СрезПоследних
|ГДЕ Номенклатура = &Номенклатура";
Для Каждого СтрТовары Из Товары Цикл
    
     ТекНоменклатура = СтрТовары.Номенклатура;
     Запрос.УстановитьПараметр("Номенклатура", ТекНоменклатура);
     Выборка = Запрос.Выполнить().Выбрать();
     Пока Выборка.Следующий() Цикл
        
         Если Выборка.ТипЦен = Справочники.ТипыЦенНоменклатуры.НайтиПоНаименованию("Закупка") Тогда
             
             СтрТовары.Закупка = Выборка.Цена;
                       
          КонецЕсли;
          
           Если Выборка.ТипЦен = Справочники.ТипыЦенНоменклатуры.НайтиПоНаименованию("Роздрібний") Тогда
            
              СтрТовары.Продажа = Выборка.Цена;
                            
            КонецЕсли;
                 
     КонецЦикла;
    
    
КонецЦикла;

И в результате этого запроса тупо висит сервер, и проц компьютера на котором заходили в сервер тоже загружен на 100%, но если не изменять номенклатуру, то все работает нормально, подскажите в чем может быть проблема?
Vofka
Попробуйте сделать запрос так:
|ВЫБРАТЬ
|Номенклатура, ТипЦен, Цена
|ИЗ
|РегистрСведений.ЦеныНоменклатуры.СрезПоследних(, Номенклатура = &Номенклатура)
logist
Вы изобрели авианосец для перевозки пары зернышек. Вообще, то что Вы сделали это жуть.

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

В принципе да, я сразу код особо не разбирал.
DartRomanius
Для Каждого СтрТовары Из Товары Цикл


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

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

ЗЫ: и некоторые операции можно в теле запроса указать наверное... smile.gif
Batchir
Посмотрите общий модуль Ценообразование процедуру ПолучитьЦенуНоменклатуры.
Весь код у Вас приведется к виду:
СтрТовары.Закупка = Ценообразование.ПолучитьЦенуНоменклатуры(<параметры процедуры>);
СтрТовары.Продажа = Ценообразование.ПолучитьЦенуНоменклатуры(<параметры процедуры>);
meverikxp
Цитата(logist @ 02.02.11, 12:27) необходимо зарегистрироваться для просмотра ссылки
Вы изобрели авианосец для перевозки пары зернышек. Вообще, то что Вы сделали это жуть.

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

Проблему я решил, как оказалось дело было не в этом запросе.
Но почему лучше сделать отбор, а не запрос?
logist
Цитата(DartRomanius @ 02.02.11, 11:49) необходимо зарегистрироваться для просмотра ссылки
Для Каждого СтрТовары Из Товары Цикл


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

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

Телепаты на месте, перебирается ТЧ "Товары", начальная школа 2-й класс.

Цитата(meverikxp @ 02.02.11, 11:53) необходимо зарегистрироваться для просмотра ссылки
Проблему я решил, как оказалось дело было не в этом запросе.

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

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

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

А как результаты отбора поместить в ячейки?
meverikxp
Цитата(logist @ 02.02.11, 13:26) необходимо зарегистрироваться для просмотра ссылки
Расскажите как решили, нам очень интересно.

Проблема бала в том что в Процедурам ПриВыводеСтроки()
сделал цикл и он "Зацыклелся"
logist
Цитата(meverikxp @ 02.02.11, 12:59) необходимо зарегистрироваться для просмотра ссылки
Проблема бала в том что в Процедурам ПриВыводеСтроки()
сделал цикл и он "Зацыклелся"

А что Вы вообще делаете? если не секрет..

Цитата(meverikxp @ 02.02.11, 12:54) необходимо зарегистрироваться для просмотра ссылки
А как результаты отбора поместить в ячейки?

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

Вот код для Вашего случая
Для Каждого СтрТовары Из Товары Цикл
     ТекНоменклатура = СтрТовары.Номенклатура;
     ТипЦенЗакупочная = Справочники.ТипыЦенНоменклатуры.НайтиПоНаименованию("Закупка");
     ТипЦенРозничная = Справочники.ТипыЦенНоменклатуры.НайтиПоНаименованию("Роздрібний");
     СтрТовары.Закупка = Ценообразование.ПолучитьЦенуНоменклатуры(ТекНоменклатура,,ТипЦенЗакупочная);
     СтрТовары.Продажа = Ценообразование.ПолучитьЦенуНоменклатуры(ТекНоменклатура,,ТипЦенРозничная);
КонецЦикла;
Jaffar
Цитата(meverikxp @ 02.02.11, 12:14) необходимо зарегистрироваться для просмотра ссылки
Здравствуйте, в УТ сделал запрос который выполняется при изменении поля номенклатуры:
...
И в результате этого запроса тупо висит сервер, и проц компьютера на котором заходили в сервер тоже загружен на 100%, но если не изменять номенклатуру, то все работает нормально, подскажите в чем может быть проблема?

А почему никто не сказал, что вызывать запрос ВНУТРИ цикла - это моветон? Почему бы (если очень уж хочется сделать это запросом) не выгрузить всю номенклатуру в массив/таблицу значений и не передать ее в запрос одним параметром?

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


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