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

2 регистра сведений.

Автор aboba174, 30 апр 2023, 17:11

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

aboba174

Здравствуйте.

У меня есть 2 регистра сведений: 1) ЦеныУслуга (независимый) 2) ЦеныНоменклатура (Подчинение регистратору).

При записи в документ "ОказаниеУслуги" я хочу чтобы при выборе в "Номенклатура" табличной части "ПереченьНоменклатуры" для услуги выставлялись цены из регистра "ЦеныУслуга", а для номенклатуры из "ЦеныНоменклатура".

У меня есть следующие код, но он не работает, прикреплю во вложении и ниже:

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

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


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

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


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

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

Afinogen

Цитата: aboba174 от 30 апр 2023, 17:11Здравствуйте.

У меня есть 2 регистра сведений: 1) ЦеныУслуга (независимый) 2) ЦеныНоменклатура (Подчинение регистратору).

При записи в документ "ОказаниеУслуги" я хочу чтобы при выборе в "Номенклатура" табличной части "ПереченьНоменклатуры" для услуги выставлялись цены из регистра "ЦеныУслуга", а для номенклатуры из "ЦеныНоменклатура".

У меня есть следующие код, но он не работает, прикреплю во вложении и ниже:

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

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

вы сначала цены находіте считая номенклатуру - товаром а затем ее переопределяете

вам нужно делать условие

если номенклатра = товар тогда первый вариант иначе второй

aboba174

Afinogen, Я сделал вот так, но у меня выбивает ошибку:

Ошибка при получении значения атрибута контекста (ТекущиеДанные)
{Документ.ОказаниеУслуги.Форма.ФормаДокумента.Форма(30)}: СтрокаТабличнойЧасти = Элементы.ПереченьНоменклатуры.ТекущиеДанные;
{Документ.ОказаниеУслуги.Форма.ФормаДокумента.Форма(22)}: ДляРегистраНаСервере();
по причине:
Текущие данные таблицы недоступны на сервере
Текущие данные таблицы недоступны на сервере



Мой код:

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


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

&НаСервере
Процедура ДляРегистраНаСервере()

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

Afinogen

aboba174, ну так у вас все четко написано - текущие данные таблицы недоступны на сервере

вы на сервер не можете передать ТекущиеДанные, особенности управляемой формы,  вам надо для передачи на сервер из объекта Текущиеданные сделать например структуру

типа такого

Структура = Новый структура;
Стркутура.Вставить("ключ - имя колонки", значение - значение)

и только потом прописать  РаботаСДокументами.РассчитатьСумму(Структура);

в результате ваша цена будет равна значению в соответствующем ключе структуры


Теги:

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

Рейтинг@Mail.ru

Поиск