|
Как в расширении вызвать процедуру из формы | ☑ | ||
---|---|---|---|---|
0
ded20ded
26.01.22
✎
20:39
|
Вечер добрый.
Перенес форму в расширение, сделал кнопку обновление цены. Цены меняются, как правильно вызвать пересчет суммы? &НаСервере Процедура Расш1_ПроверкаЦенПоСпецификацииПослеНаСервере() // Вставить содержимое обработчика. Если НЕ ЗначениеЗаполнено(Объект.ДоговорКонтрагента.ТипЦен) Тогда Сообщить("Не заполнены типы цены в договоре контрагента"); Возврат; КонецЕсли; Для каждого Стр Из Объект.Товары Цикл Запрос=Новый Запрос; Запрос.Текст="ВЫБРАТЬ | ЦеныНоменклатурыСрезПоследних.Цена КАК Цена |ИЗ | РегистрСведений.ЦеныНоменклатуры.СрезПоследних(&ДатаЦены, ) КАК ЦеныНоменклатурыСрезПоследних |ГДЕ | ЦеныНоменклатурыСрезПоследних.Номенклатура = &Номенклатура | И ЦеныНоменклатурыСрезПоследних.ТипЦен = &ТипЦен"; Запрос.УстановитьПараметр("ДатаЦены", Объект.Дата); Запрос.УстановитьПараметр("Номенклатура", Стр.Номенклатура); Запрос.УстановитьПараметр("ТипЦен", Объект.ДоговорКонтрагента.ТипЦен); Выборка=Запрос.Выполнить().Выбрать(); Пока Выборка.Следующий() Цикл Если Стр.Цена<>Выборка.Цена И Выборка.Цена<>0 Тогда Стр.Цена=Выборка.Цена; ДокументОбъект = РеквизитФормыВЗначение("Объект"); РезультатФункции = ДокументОбъект.ТоварыЦенаПриИзменении(Стр.Цена); КонецЕсли; КонецЦикла; КонецЦикла; КонецПроцедуры &НаКлиенте Процедура Расш1_ПроверкаЦенПоСпецификацииПосле(Команда) Расш1_ПроверкаЦенПоСпецификацииПослеНаСервере(); КонецПроцедуры |
|||
1
vicof
26.01.22
✎
20:42
|
Провалиться чуток в процедуры изменения цены и вызвать серверные обработчики
|
|||
2
ded20ded
26.01.22
✎
20:42
|
&НаКлиенте
Процедура ТоварыЦенаПриИзменении(Элемент) Строка = Элементы.Товары.ТекущиеДанные; Если НЕ Строка.ЭтоУслуга И Строка.Цена < 0 Тогда Строка.Цена = 0; КонецЕсли; ПересчитатьСуммуТовары("Товары"); КонецПроцедуры |
|||
3
vicof
26.01.22
✎
20:43
|
и еще немного провалиться
|
|||
4
ded20ded
26.01.22
✎
20:44
|
&НаКлиенте
Процедура ПересчитатьСуммуТовары(ИмяТабЧасти) Строка = Элементы[ИмяТабЧасти].ТекущиеДанные; ЗначениеПустогоКоличества = ?(ИмяТабЧасти = "Товары" И Строка.ЭтоУслуга, 1, 0); НалоговыйАгентПоФЗ335 = ПокупательНалоговыйАгентПоНДС = Истина И ВедетсяУчетНДСПоФЗ335; ОбщегоНазначенияБПКлиент.ПересчитатьСумму(Строка, Объект.СуммаВключаетНДС, ЗначениеПустогоКоличества,,НалоговыйАгентПоФЗ335); КонецПроцедуры |
|||
5
vicof
26.01.22
✎
20:45
|
Ну вот. В цикле перебираешь строки и персечитываешь суммы.
|
|||
6
vicof
26.01.22
✎
20:47
|
В БПКлиент тоже какие-то серверные процедуры вызываются.
|
|||
7
ded20ded
26.01.22
✎
20:48
|
&НаСервере
Процедура Расш1_ПроверкаЦенПоСпецификацииПослеНаСервере() // Вставить содержимое обработчика. Если НЕ ЗначениеЗаполнено(Объект.ДоговорКонтрагента.ТипЦен) Тогда Сообщить("Не заполнены типы цены в договоре контрагента"); Возврат; КонецЕсли; Для каждого Стр Из Объект.Товары Цикл Запрос=Новый Запрос; Запрос.Текст="ВЫБРАТЬ | ЦеныНоменклатурыСрезПоследних.Цена КАК Цена |ИЗ | РегистрСведений.ЦеныНоменклатуры.СрезПоследних(&ДатаЦены, ) КАК ЦеныНоменклатурыСрезПоследних |ГДЕ | ЦеныНоменклатурыСрезПоследних.Номенклатура = &Номенклатура | И ЦеныНоменклатурыСрезПоследних.ТипЦен = &ТипЦен"; Запрос.УстановитьПараметр("ДатаЦены", Объект.Дата); Запрос.УстановитьПараметр("Номенклатура", Стр.Номенклатура); Запрос.УстановитьПараметр("ТипЦен", Объект.ДоговорКонтрагента.ТипЦен); Выборка=Запрос.Выполнить().Выбрать(); Пока Выборка.Следующий() Цикл Если Стр.Цена<>Выборка.Цена И Выборка.Цена<>0 Тогда Стр.Цена=Выборка.Цена; ИмяТабЧасти = "Товары"; Строка = Элементы[ИмяТабЧасти].ТекущиеДанные; ЗначениеПустогоКоличества = ?(ИмяТабЧасти = "Товары" И Строка.ЭтоУслуга, 1, 0); НалоговыйАгентПоФЗ335 = ПокупательНалоговыйАгентПоНДС = Истина И ВедетсяУчетНДСПоФЗ335; ДокументОбъект = РеквизитФормыВЗначение("Объект"); РезультатФункции = ДокументОбъект.ОбщегоНазначенияБПКлиент.ПересчитатьСумму(Строка, Объект.СуммаВключаетНДС, ЗначениеПустогоКоличества,,НалоговыйАгентПоФЗ335); КонецЕсли; КонецЦикла; КонецЦикла; КонецПроцедуры |
|||
8
ded20ded
26.01.22
✎
20:49
|
сделал так (7) но ошибка
Ошибка при получении значения атрибута контекста (ТекущиеДанные) {Доработки Документ.СчетНаОплатуПокупателю.Форма.ФормаДокумента.Форма(29)}: Строка = Элементы[ИмяТабЧасти].ТекущиеДанные; {Доработки Документ.СчетНаОплатуПокупателю.Форма.ФормаДокумента.Форма(46)}: Расш1_ПроверкаЦенПоСпецификацииПослеНаСервере(); по причине: Текущие данные таблицы недоступны на сервере Текущие данные таблицы недоступны на сервере |
|||
9
vicof
26.01.22
✎
20:51
|
Для каждого СтрокаТЧ из Объект.Товары Цикл
ОбщегоНазначенияСерверный.ПересчитатьСумму(СтрокаТЧ, Объект.СуммаВключаетНДС, ЗначениеПустогоКоличества,,НалоговыйАгентПоФЗ335); КонецЦикла; |
|||
10
ded20ded
26.01.22
✎
20:55
|
<<?>>ОбщегоНазначенияСерверный.ПересчитатьСумму(Стр, Объект.СуммаВключаетНДС, ЗначениеПустогоКоличества,,НалоговыйАгентПоФЗ335); (Проверка: Сервер)
|
|||
11
ded20ded
26.01.22
✎
20:55
|
не видит в расширении
|
|||
12
vicof
26.01.22
✎
20:59
|
Ну то есть ты просто все копипастишь? Это был не код из твоей конфигурации, про которую ты не сообщил. А намек на то, что не надо реквизиты формы в значения преобразовывать. И подучить клиент-серверную модель. И намек на то, как надо сделать.
|
|||
13
ded20ded
26.01.22
✎
21:11
|
&НаСервере
Процедура Расш1_ПроверкаЦенПоСпецификацииПослеНаСервере() // Вставить содержимое обработчика. Элементы.АдресДоставки.Доступность=Истина; Если НЕ ЗначениеЗаполнено(Объект.ДоговорКонтрагента.ТипЦен) Тогда Сообщить("Не заполнены типы цены в договоре контрагента"); Возврат; КонецЕсли; Для каждого Стр Из Объект.Товары Цикл Запрос=Новый Запрос; Запрос.Текст="ВЫБРАТЬ | ЦеныНоменклатурыСрезПоследних.Цена КАК Цена |ИЗ | РегистрСведений.ЦеныНоменклатуры.СрезПоследних(&ДатаЦены, ) КАК ЦеныНоменклатурыСрезПоследних |ГДЕ | ЦеныНоменклатурыСрезПоследних.Номенклатура = &Номенклатура | И ЦеныНоменклатурыСрезПоследних.ТипЦен = &ТипЦен"; Запрос.УстановитьПараметр("ДатаЦены", Объект.Дата); Запрос.УстановитьПараметр("Номенклатура", Стр.Номенклатура); Запрос.УстановитьПараметр("ТипЦен", Объект.ДоговорКонтрагента.ТипЦен); Выборка=Запрос.Выполнить().Выбрать(); Пока Выборка.Следующий() Цикл Если Стр.Цена<>Выборка.Цена И Выборка.Цена<>0 Тогда Стр.Цена=Выборка.Цена; ИмяТабЧасти = "Товары"; //Строка = Элементы[ИмяТабЧасти].ТекущиеДанные; // ЗначениеПустогоКоличества = ?(ИмяТабЧасти = "Товары" И стр.ЭтоУслуга, 1, 0); // НалоговыйАгентПоФЗ335 = ПокупательНалоговыйАгентПоНДС = Истина И ВедетсяУчетНДСПоФЗ335; // ДокументОбъект = РеквизитФормыВЗначение("Объект"); РезультатФункции = ДокументОбъект.ОбщегоНазначенияСерверный.ПересчитатьСумму(Стр, Объект.СуммаВключаетНДС, ЗначениеПустогоКоличества,,НалоговыйАгентПоФЗ335); КонецЕсли; КонецЦикла; КонецЦикла; КонецПроцедуры |
|||
14
ded20ded
26.01.22
✎
21:12
|
(все равно ошибка (10)
|
|||
15
acht
26.01.22
✎
21:14
|
(13) РезультатФункции = ДокументОбъект.ОбщегоНазначенияСерверный.ПересчитатьСумму(Стр, Объект.СуммаВключаетНДС, ЗначениеПустогоКоличества,,НалоговыйАгентПоФЗ335);
Я бы тоже ругался |
|||
16
ded20ded
26.01.22
✎
21:17
|
(15) проясни в чем ошибка?
|
|||
17
ded20ded
26.01.22
✎
21:18
|
в расширении нет функции пересчета суммы при изменении цены, цена меняется, сумма остается.
|
|||
18
acht
26.01.22
✎
21:23
|
(16) Что такое ДокументОбъект?
|
|||
19
ded20ded
26.01.22
✎
21:27
|
Я понимаю что тут ошибка, как правильно получить процедуры и функции "Объекта" - ДокументОбъект = РеквизитФормыВЗначение("Объект");
|
|||
20
hhhh
26.01.22
✎
21:28
|
(19) так
РезультатФункции = ДокументОбъект.ПересчитатьСумму(Стр, Объект.СуммаВключаетНДС, |
|||
21
ded20ded
26.01.22
✎
21:32
|
(18) ДокументОбъект.СчетНаОплатуПокупателю()
|
|||
22
ded20ded
26.01.22
✎
21:33
|
(20) сделал так РезультатФункции = ДокументОбъект.ПересчитатьСумму(Стр);
Метод объекта не обнаружен (ПересчитатьСумму) |
|||
23
hhhh
26.01.22
✎
22:13
|
(22) так добавь туда этот метод. Копипастом 3 секунды
|
|||
24
ded20ded
27.01.22
✎
11:21
|
(23) то есть, вызвать процедуру которая в основной конфигурации на форме не возможно? Нужно тупо переносить весь код в расширение?
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |