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

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

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

Автор: pt_denis 27.07.14, 16:15

Здравствуйте. Мне нужно сделать так, что бы в Документе при изменении Элемента ВидЦены изменялась Цена в табличной части документа, которая берется из регистра сведений.
В общем модуле я прописал:

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


и в модуле формы документа:

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


При попытке изменение цены выдает следующее:
{ОбщийМодуль.РаботаСоСправочниками2.Модуль(3)}: Ошибка при вызове метода контекста (ПолучитьПоследнее)
ЗначенияРесурсов = РегистрыСведений.ЦеныНоменклатуры.ПолучитьПоследнее(ЭлементТМЦ,Отбор);
по причине:
Несоответствие типов (Параметр номер ""1"")

Помогите плз, начал программировать не давно.

Автор: Ardi 27.07.14, 17:25

РегистрСведенийМенеджер.<Имя регистра сведений>.ПолучитьПоследнее (InformationRegisterManager.<Имя регистра сведений>.GetLast)
РегистрСведенийМенеджер.<Имя регистра сведений> (InformationRegisterManager.<Имя регистра сведений>)
ПолучитьПоследнее (GetLast)
Синтаксис:

ПолучитьПоследнее(<КонецПериода>, <Отбор>)
Параметры:

<КонецПериода> (необязательный)

Тип: Дата; МоментВремени; Граница.
Определяет момент времени, по который необходимо получить значения ресурсов. Может задаваться значениями типа Дата, МоментВремени или Граница. Если параметр не указан, то будут возвращены значения ресурсов самой последней записи регистра.
<Отбор> (необязательный)

Тип: Структура.
Структура, содержащая отбор по измерениям регистра. Имя ключа структуры должно совпадать с именем измерения регистра, заданного в конфигураторе, а значение элемента структуры - задает отбираемое по данному измерению значение.
Структура дополнительно может иметь элементы, соответствующие разделителям регистра с уровнем разделения НезависимоИСовместно, в состав которых входит регистр. Если такой элемент структуры задан для используемого в сеансе разделителя, значение для этого элемента должно совпадать со значением разделителя, иначе будет вызвано исключение.
Если параметр не указан, то отбор не используется.
Возвращаемое значение:

Тип: Структура.
Возвращает структуру, содержащую значения ресурсов.
Описание:

Получает значения ресурсов наиболее поздней записи регистра, соответствующей указанным периоду и значениям измерений регистра.

Доступность:

Сервер, толстый клиент, внешнее соединение.
Примечание:

Применим только для периодических регистров сведений.
Пример:

Доллары = Справочники.Валюты.НайтиПоНаименованию("USD");
Отбор = Новый Структура;
Отбор.Вставить("Валюта", Доллары);
Курсы = РегистрыСведений.КурсыВалют;
ТекКурс = Курсы.ПолучитьПоследнее(ТекущаяДата(), Отбор);
Сообщить("Текущий курс доллара: " + ТекКурс.Курс + " руб.");

Автор: pt_denis 27.07.14, 17:46

То есть в

ЗначенияРесурсов = РегистрыСведений.ЦеныНоменклатуры.ПолучитьПоследнее(ЭлементТМЦ,Отбор);


Неправильно метод взял или элемент отбора?
Если я ставлю
ЗначенияРесурсов = РегистрыСведений.ЦеныНоменклатуры.ПолучитьПоследнее(ТекущаяДата(),Отбор)

цена не изменяется.

Автор: Ardi 27.07.14, 21:22

Отбор тоже неправильный.
Отбор = Новый Структура;
Отбор.Вставить("ВидЦены", тутВидЦены);
Отбор.Вставить("Номенклатура", тутНоенклатура);

Автор: pt_denis 27.07.14, 21:33

Извиняюсь, я просто практикуюсь по Радченко и взял пример оттуда.

Сейчас общий модуль выглядит так:

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


и в документе модуль формы так:

   Для каждого СтрокаТабличнойЧасти Из Объект.ПереченьТМЦ Цикл
              СтрокаТабличнойЧасти.Цена = РаботаСоСправочниками2.ВидЦены(Объект.Дата, СтрокаТабличнойЧасти.ТМЦ);
               РаботаСДокументами.РасчитатьСумму(СтрокаТабличнойЧасти);
      КонецЦикла;  
КонецПроцедуры


Но при попытке сменить Вид Цены, в табличной части Цена исчезает.


Автор: Ardi 27.07.14, 21:38

Какая конфигурация?

Автор: pt_denis 27.07.14, 21:42

1С:Предприятие 8.2, учебная версия (8.2.17.169)

Цитата
  СтрокаТабличнойЧасти.Цена = РаботаСоСправочниками2.ВидЦены(Объект.Дата, СтрокаТабличнойЧасти.ТМЦ);


точнее вот так:

СтрокаТабличнойЧасти.Цена = РаботаСоСправочниками2.ВидЦены(Объект.ВидЦены, СтрокаТабличнойЧасти.ТМЦ);

Автор: pt_denis 28.07.14, 13:32

Все, справился.
Нужно было сделать так:
Общий модуль -

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


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


Проблема была в неправильной форме Отбора и записи ПолучитьПоследнее

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