Имя: Пароль:
1C
1С v8
Использование регистра и справочника
0 Cherryy
 
21.05.16
12:13
Здравствуйте, форумчане) В 1с новичок, поэтому вопрос может показаться глупым( Выручайте. Имеется Регистр сведений Цены на номенклатуру, Справочник Номенклатура..и имеется справочник Изделие, в котором я в табличной части указываю перечень номенклатуры из которого производят изделие. Проблема вот в чем: при выборе номенклатуры из регистра сведения должна указываться автоматически цена..в документах знаю как делать, а вот в справочниках нет( Помогите, пожалуйста(
1 _Дайвер_
 
21.05.16
12:16
(0) Код покажи как ты цену получаешь ...
2 GROOVY
 
21.05.16
12:17
Никакой разницы между документом и справочником тут нет. Тут просто работа с формой.
3 _Дайвер_
 
21.05.16
12:19
(0) Запрос на получение цены будет отличаться малость, и все
4 Cherryy
 
21.05.16
12:20
&НаКлиенте
      Процедура ТоварыНоменклатураПриИзменении(Элемент)
          // Получить текущую строку табличной части.
СтрокаТабличнойЧасти = Элементы.Товары.ТекущиеДанные;
// Установить цену.
СтрокаТабличнойЧасти.Цена = РаботаСоСправочниками.РозничнаяЦена(Объект.Дата,
СтрокаТабличнойЧасти.Номенклатура);
// Пересчитать сумму строки


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


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


так я получаю на документы
5 _Дайвер_
 
21.05.16
12:27
в форме в ТЧ выбираешь реквизит НОменклатура , назначаешь ей процедуру при изменении, пишешь там:

Процедура НоменклатураПриИзменении (Элемент)
   Элемент.Цена = ПолучитьЦену();
КонецПроцедуры;

Функция ПолучитьЦену()
//Здесь запрос пишешь
КонецФункции;
6 _Дайвер_
 
21.05.16
12:30
(0) Вот пример

&НаСервере
Функция ПолучитьЦену(Номенклатура)
    
    Запрос = Новый Запрос;
    Запрос.Текст =
    "ВЫБРАТЬ
    |    ЦеныНоменклатурыСрезПоследних.Цена
    |ИЗ
    |    РегистрСведений.ЦеныНоменклатуры.СрезПоследних(
    |            &Период,
    |            Номенклатура = &Номенклатура
    |                И ВидЦены = &ВидЦены) КАК ЦеныНоменклатурыСрезПоследних"
    ;
    Запрос.УстановитьПараметр("Период", ТекущаяДата());
    Запрос.УстановитьПараметр("Номенклатура", Номенклатура);
    Запрос.УстановитьПараметр("ВидЦены", Объект.Соглашение.ВидЦен);
    
    Цена = 0;
    
    РезультатЗапроса = Запрос.Выполнить();
    Выборка = РезультатЗапроса.Выбрать();
    Если Выборка.Следующий() Тогда
        Возврат Выборка.Цена;
    КонецЕсли;
    
    Возврат Цена;
    
КонецФункции
7 Cherryy
 
21.05.16
12:44
Функцию также на форме писать? Просто те я в общих модулях писал.
Пишет: {Справочник.Изделия.Форма.ФормаЭлемента.Форма(3,16)}: Процедура или функция с указанным именем не определена (ПолучитьЦену)
Элемент.Цена = <<?>>ПолучитьЦену(); (Проверка: Тонкий клиент)
8 _Дайвер_
 
21.05.16
13:06
(7) Да на форме, директиву компиляции поставь &НаСервере
9 Cherryy
 
21.05.16
13:41
подскажите, где я туплю

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

Функция ПолучитьЦену(Номенклатура)

мне кажется, что это разные функции
11 Фрэнки
 
21.05.16
14:15
(9)
Процедура ИспользуемыеМатериалыНоменклатураПриИзменении(Элемент)
     Элемент.Цена = ПолучитьЦену();
КонецПроцедуры

Тут же не хватает параметра в вызове функции - внимательно посмотри
12 Cherryy
 
21.05.16
14:59
А так?

Процедура ИспользуемыеМатериалыНоменклатураПриИзменении(Элемент)
  ТекущиеДанные = Элементы.ИспользуемыеМатериалы.ТекущиеДанные;

    ТекущиеДанные.Цена = ПолучитьЦену(ТекущиеДанные.Номенклатура);
КонецПроцедуры