Имя: Пароль:
1C
 
два ресурса по двум измерениям из регистра сведений при автозаполнении? - 1С
0 Awesome1992
 
10.04.17
16:32
Учусь 1С написал две процедуры

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

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

и две функции

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

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

но значения связаны попарно(номенклатура-цена, котрагент-сроки), но между собой нет (контрагент-цена, номенклатура сроки). Подскажите пожалуйста как решить данную проблему?
1 RomanYS
 
10.04.17
16:42
Проблемы нет.
При изменении контрагента пересчитывайте только срок.
При изменении номенклатуры обновляйте цену.
При изменении цены/суммы/количество делайте пересчеты.
Разные элементы - разные события и обработчики, не мешайте всё в одну кучу.
2 Awesome1992
 
10.04.17
16:52
Дела в том что у каждого контрагента на определенную номенклатуру свой срок и своя цена, при изменении контрагента могут измениться оба ресурса.
3 dezss
 
10.04.17
16:59
(2) Тогда у РС цены должно быть еще и измерение по контрагентам, иначе цена не может поменяться.
4 dezss
 
10.04.17
17:00
(2) тьфу....так у тебя так и есть...
ну в чем тогда проблема, делай отбор и по контрагенту и по номенклатуре
5 Buster007
 
10.04.17
17:02
Отбор = Новый Структура("Номенклатура, Контрагент",Номенклатура, Контрагент);
    ЗначенияРесурсов=РегистрыСведений.Цены.ПолучитьПоследнее(АктуальнаяДата,Отбор);
6 Awesome1992
 
10.04.17
17:03
там и так два измерения контрагенты и номенклатура, и два ресурса цена и срок исполнения
7 dezss
 
10.04.17
17:03
Функция РасчетСрокаИЦены(АктуальнаяДата,ЭлементКонтрагенты) Экспорт
    Отбор = Новый Структура("Контрагент,Номенклатура",ЭлементКонтрагенты,ЭлементНоменклатуры);
    ЗначенияРесурсов=РегистрыСведений.Цены.ПолучитьПоследнее(АктуальнаяДата,Отбор);
    Возврат ЗначенияРесурсов.СрокПоставки;
КонецФункции
8 dezss
 
10.04.17
17:04
(7) тьфу...
Возврат ЗначенияРесурсов.СрокПоставки;
поменять на
Возврат ЗначенияРесурсов;
9 Awesome1992
 
10.04.17
17:13
но тога же в функцию надо передавать сразу и ЭлементКонтрагенты,ЭлементНоменклатуры
10 Awesome1992
 
10.04.17
17:18
не пойму немного как процедуру в таком случае переписать
11 Awesome1992
 
10.04.17
17:20
тут же для каждой значения отдельный параметр передавать приходится

СтрокаТабличнойЧасти.СрокПоставки = ПодстановкаЦены.РасчетСрока(Объект.Дата,СтрокаТабличнойЧасти.Контрагент)
12 Awesome1992
 
10.04.17
17:21
а если 3 параметра передавать, то как тогда?

СтрокаТабличнойЧасти.??? = ПодстановкаЦены.РасчетСрокаИЦены(Объект.Дата,СтрокаТабличнойЧасти.Контрагент,СтрокаТабличнойЧасти.Номенклатура);
13 Buster007
 
10.04.17
17:26
(12) ЗначенияПараметров = ПодстановкаЦены.РасчетСрокаИЦены(Объект.Дата,СтрокаТабличнойЧасти.Контрагент,СтрокаТабличнойЧасти.Номенклатура);
СтрокаТабличнойЧасти.Срок = ЗначенияПараметров.Срок;
СтрокаТабличнойЧасти.Цена = ЗначенияПараметров.Цена;
14 Awesome1992
 
10.04.17
17:31
Что то совсем перестало работать
Функция РасчетСрокаИЦены(АктуальнаяДата,ЭлементКонтрагенты,ЭлементНоменклатуры) Экспорт
    Отбор = Новый Структура("Контрагент,Номенклатура",ЭлементКонтрагенты,ЭлементНоменклатуры);
    ЗначенияРесурсов=РегистрыСведений.Цены.ПолучитьПоследнее(АктуальнаяДата,Отбор);
    Возврат ЗначенияРесурсов
КонецФункции


&НаКлиенте
Процедура ВРемонтКонтрагентПриИзменении(Элемент)
    СтрокаТабличнойЧасти = Элементы.ВРемонт.ТекущиеДанные;
    ЗначенияПараметров = ПодстановкаЦены.РасчетСрокаИЦены(Объект.Дата,СтрокаТабличнойЧасти.Контрагент,СтрокаТабличнойЧасти.Номенклатура);
    СтрокаТабличнойЧасти.СрокПоставки = ЗначенияПараметров.Срок;
    СтрокаТабличнойЧасти.Цена = ЗначенияПараметров.Цена;
КонецПроцедуры
15 Buster007
 
10.04.17
17:34
(14) у нас тут экстрасенс в отпуске, не подскажешь что пишет?
16 Awesome1992
 
10.04.17
17:36
на ошибки не ругается, подставлять перестал. Выручайте пожалуйста...
17 Buster007
 
10.04.17
17:38
(16) возвращение пустого значения и "подставлять перестал" не равны.
Значит у тебя там такие данные.
18 Awesome1992
 
10.04.17
20:11
странно, до этого вставлял значения. Надо было отъехать, позже пройдусь дебагом. А так сами функция и процедура написаны правильно?
19 dezss
 
11.04.17
11:35
(18) Вроде правильно.
Но тебе надо проверить, есть ли у тебя в РС есть для этого контрагента и этой номенклатуры срок и цена.
20 Awesome1992
 
11.04.17
14:24
Блин, метод не был выбран для элемента)) Спасибо вам всем большое!!!))))))))
Оптимист верит, что мы живем в лучшем из миров. Пессимист боится, что так оно и есть.