Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
28 фев 2024, 08:50

Условие

Автор aboba174, 02 мая 2023, 10:26

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

aboba174

Здравствуйте.
Есть общий модуль "РаботаСРегистрами" и в нем 2 функции, "НоменклатураЦена" и "УслугаЦена".

Код в них:
Функция НоменклатураЦена(АктуальнаяДата, ЭлементНоменклатуры) Экспорт
Отбор = Новый Структура("Номенклатура", ЭлементНоменклатуры);

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


Функция УслугаЦена(АктуальнаяДата, ЭлементНоменклатуры) Экспорт
Отбор = Новый Структура("Номенклатура", ЭлементНоменклатуры);

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



А также есть документ "ОказаниеУслуги". Я хочу сделать чтобы при заполнении табличной части: "ПереченьНоменклатуры" и при выборе в "Номенклатура", в реквизит "Цена" подставлялись данные из нужных регистров сведений, но ничего не получается, так как полный ноль. Подскажите что мне нужно исправить.
У меня при выборе номенклатура, программно пишется её вид (материал) или (услуга).
Задано оно с помощью Перечисления "ВидыНоменклатуры" в котором 2 значения "Материал"
 и "Услуга".

Подскажите как правильно или лучше все оформить.

Код в документе:
&НаКлиенте
Процедура ПереченьНоменклатурыНоменклатураПриИзменении(Элемент)
  СтрокаТабличнойЧасти = Элементы.ПереченьНоменклатуры.ТекущиеДанные; //получаем тек. строку табл. части
РаботаСДокументами.РассчитатьСумму(СтрокаТабличнойЧасти);

Если Объект.ПолучитьВидРаботы = ПредопределенноеЗначение("Перечисление.ВидыНоменклатуры.Услуга") Тогда
    СтрокаТабличнойЧасти.Цена = РаботаСРегистрами.УслугаЦены(Объект.Дата, СтрокаТабличнойЧасти.Номенклатура)
Иначе
СтрокаТабличнойЧасти.Цена = РаботаСРегистрами.НоменклатураЦены(Объект.Дата, СтрокаТабличнойЧасти.Номенклатура)
КонецЕсли;
КонецПроцедуры

LexaK

aboba174, немного переставить команды...
&НаКлиенте
Процедура ПереченьНоменклатурыНоменклатураПриИзменении(Элемент)
     СтрокаТабличнойЧасти = Элементы.ПереченьНоменклатуры.ТекущиеДанные; //получаем тек. строку табл. части
   
    Если СтрокаТабличнойЧасти.ВидРаботы = ПредопределенноеЗначение("Перечисление.ВидыНоменклатуры.Услуга") Тогда
        СтрокаТабличнойЧасти.Цена = РаботаСРегистрами.УслугаЦены(Объект.Дата, СтрокаТабличнойЧасти.Номенклатура)
    Иначе
        СтрокаТабличнойЧасти.Цена = РаботаСРегистрами.НоменклатураЦены(Объект.Дата, СтрокаТабличнойЧасти.Номенклатура)
    КонецЕсли;
    РаботаСДокументами.РассчитатьСумму(СтрокаТабличнойЧасти);
КонецПроцедуры
если помогло нажмите: Спасибо!

aboba174

LexaK, У меня почему-то цены подставляются для "Материала", а для "Услуга" не подставляются.

В коде поменял названия функций.

&НаКлиенте
Процедура ПереченьНоменклатурыНоменклатураПриИзменении(Элемент)
  СтрокаТабличнойЧасти = Элементы.ПереченьНоменклатуры.ТекущиеДанные; //получаем тек. строку табл. части

Если СтрокаТабличнойЧасти.Номенклатура = ПредопределенноеЗначение("Перечисление.ВидыНоменклатуры.Услуга") Тогда
        СтрокаТабличнойЧасти.Цена = РаботаСРегистрами.УслугаЦена(Объект.Дата, СтрокаТабличнойЧасти.Номенклатура)
    Иначе
        СтрокаТабличнойЧасти.Цена = РаботаСРегистрами.НоменклатураЦена(Объект.Дата, СтрокаТабличнойЧасти.Номенклатура)
    КонецЕсли;
    РаботаСДокументами.РассчитатьСумму(СтрокаТабличнойЧасти);
КонецПроцедуры

aboba174

LexaK, А если поменяю местами

СтрокаТабличнойЧасти.Цена = РаботаСРегистрами.УслугаЦена(Объект.Дата, СтрокаТабличнойЧасти.Номенклатура)
и

СтрокаТабличнойЧасти.Цена = РаботаСРегистрами.НоменклатураЦена(Объект.Дата, СтрокаТабличнойЧасти.Номенклатура)
Тогда подставляется к Услуге цены, а к материалу нет.

Получается он не видит проверку Если и отрабатывает Иначе

antoneus

СтрокаТабличнойЧасти.Номенклатура = ПредопределенноеЗначение("Перечисление.ВидыНоменклатуры.Услуга")
Сдается мне, что СтрокаТабличнойЧасти.Номенклатура - это ссылка на элемент справочника Номенклатура, а не перечисление. Поэтому всегда срабатывает Иначе.

aboba174

antoneus, Да, это ссылка на элемент справочника "Номенклатура", а также у меня в модуле менеджера у этого справочнике следующий код:

Процедура ОбработкаПолученияПолейПредставления(Поля, СтандартнаяОбработка)         
// описываем какие  реквезиты будут учавствовать в формировании представляения документа "оказания услуги"
СтандартнаяОбработка = Ложь;
Поля.Добавить("Наименование");
Поля.Добавить("ВидНоменклатуры");   

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

Процедура ОбработкаПолученияПредставления(Данные, Представление, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
Если ЗначениеЗаполнено(Данные.ВидНоменклатуры) Тогда
Представление = Данные.Наименование + " (" +НРег(Строка(Данные.ВидНоменклатуры)) + ")";
Иначе
Представление = Данные.Наименование;
КонецЕсли;
КонецПроцедуры

antoneus

И при чем тут модуль менеджера? Каким боком тут представление?

СтрокаТабличнойЧасти = Элементы.ПереченьНоменклатуры.ТекущиеДанные; //получаем тек. строку табл. части
СтрокаТабличнойЧасти.Цена = РаботаСРегистрами.ЦенаНоменклатуры(Объект.Дата, СтрокаТабличнойЧасти.Номенклатура);

......

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

aboba174

antoneus, Спасибо большое, теперь все работает. А можете подсказать книгу по 1с? Чтобы хоть как-то в коде что-то понимать.

antoneus

Радченко, например, "Практическое пособие разработчика".

Теги:

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

Рейтинг@Mail.ru

Поиск