Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
16 окт 2021, 22:11

Как можно подставлять цену из регистра сведений "Цены поставщиков" в документ"ПоступлениеТоваров" на актуальную дату? Необходимо использовать запрос в решении.

Автор Елена6666666666, 24 окт 2014, 11:58

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

Елена6666666666

Помогите пожалуйста решить задачу! У меня ничего не получается. Больше, чем приведенный код, я ничего не могу придумать. А код не рабочий - ругается на Объект.Цена.  :dfbsdfbsdf:
&НаКлиенте
Процедура ТоварОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка)
    Объект.Цена = ЦенаНаСервере(ВыбранноеЗначение);
КонецПроцедуры

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

        Запрос.УстановитьПараметр("Номенклатура", Значение);
        РезультатЗапроса = Запрос.Выполнить();
       
    ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();

    Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
        Если    ВыборкаДетальныеЗаписи.ЦенаНоменклатуры = Неопределено Тогда
            Возврат 0;
        Иначе
            Возврат ВыборкаДетальныеЗаписи.ЦенаНоменклатуры;
        КонецЕсли;

    КонецЦикла;
             
КонецФункции // ()

И ещё ругается на неопределённую переменную Номенклатура. Я новичок. Пыталась по всякому, это решение показалось самым нормальным. Но не работает оно...

Yura063

Помогли, отблагодари!

cska-fanat-kz

1. Событие следует использовать ПриИзменении(). Это у колонки Товар
2. В обработчике (см. п.1) надо сперва получить ТекущуюСтроку:
    СтрокаТЧ = Элементы.Товары.ТекущиеДанные;

3. СтрокаТЧ.Цена = ПолучитьЦенуНаСервере(СтрокаТЧ.Товар);
4. Скорее всего надо передать еще и дату...
Получил помощь - скажи СПАСИБО.
Разобрался сам - расскажи другим.

Елена6666666666

Цитата: cska-fanat-kz от 24 окт 2014, 12:26
1. Событие следует использовать ПриИзменении(). Это у колонки Товар
2. В обработчике (см. п.1) надо сперва получить ТекущуюСтроку:
    СтрокаТЧ = Элементы.Товары.ТекущиеДанные;

3. СтрокаТЧ.Цена = ПолучитьЦенуНаСервере(СтрокаТЧ.Товар);
4. Скорее всего надо передать еще и дату...

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

я ничего не могу придумать!
И ещё - а как передать дату? Я новичек - всего 4-й день учусь и "плаваю" по полной.

cska-fanat-kz

Получил помощь - скажи СПАСИБО.
Разобрался сам - расскажи другим.

cska-fanat-kz

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

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

Елена6666666666

Цитата: cska-fanat-kz от 24 окт 2014, 12:49
а Номенклатуру кто будет в функцию передавать? (и дату!)
а то вы первую попавшуюся цену получаете...

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

cska-fanat-kz

Цитата: Елена6666666666 от 24 окт 2014, 12:45Я новичек - всего 4-й день учусь и "плаваю" по полной.

Все когда то начинали.
Берете Радченко "Практическое пособие разработчика" и по нему учитесь, делаете все по тексту и будет вам счастье...
Получил помощь - скажи СПАСИБО.
Разобрался сам - расскажи другим.

Елена6666666666

Цитата: cska-fanat-kz от 24 окт 2014, 12:57
Цитата: Елена6666666666 от 24 окт 2014, 12:45Я новичек - всего 4-й день учусь и "плаваю" по полной.

Все когда то начинали.
Берете Радченко "Практическое пособие разработчика" и по нему учитесь, делаете все по тексту и будет вам счастье...
Я радченко посмотрела - там задача не совсем так стоит. Мне же надо с помощью табличной модели сделать. А как у Радченко - я сделала - это не то для меня.

cska-fanat-kz

Запросы думаю и в Радченко применяются. Просто возможно не с самого начала...
Правильнее начинать от простого к сложному...
А вы сразу прыгаете куда то в середину и удивляетесь что плаваете...
Получил помощь - скажи СПАСИБО.
Разобрался сам - расскажи другим.

Теги:

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

Рейтинг@Mail.ru Rambler's Top100

Поиск