|
ТекущиеДанные = Неопределено | ☑ | ||
---|---|---|---|---|
0
Trezvy
13.02.23
✎
13:11
|
Здравствуйте!
Добавляю строку в объект: НоваяСтрока = Объект.Товары.Добавить(); // заполнение ЗаполнитьЗначенияСвойств(НоваяСтрока, СтрокаСпецификации); // запись в номенклатуру СоздатьЗаписьНоменклатуры(СтрокаСпецификации.Номенклатура, КонтрагентСпецификации, Объект.Ссылка); вызываю процедуру изменения новой строки и там ТекущиеДанные = Неопределено Почему, ведь данные есть, строка создана... ЗаполнитьГруппуПроцентИзменения(НоваяСтрока.Номенклатура, НоваяСтрока.Цена); Процедура ЗаполнитьГруппуПроцентИзменения(ВыбНоменклатура = Неопределено,ТекущаяЦена = Неопределено) Если ВыбНоменклатура = Неопределено и ТекущаяЦена = Неопределено Тогда ТекущиеДанные = Элементы.Товары.ТекущиеДанные; ВыбНоменклатура = ТекущиеДанные.Номенклатура; ТекущаяЦена = ТекущиеДанные.Цена; КонецЕсли; Если ЗначениеЗаполнено(ВыбНоменклатура) Тогда СтруктураГруппы = ПолучитьПоследнееЗначениеЦены(ВыбНоменклатура); Если СтруктураГруппы <> Неопределено Тогда ТекущиеДанные.ПроцентИзменения = ОКР(ТекущаяЦена*100/СтруктураГруппы.ПредыдущаяЦена-100,2); ТекущиеДанные.ДатаПредыдущейЦены = СтруктураГруппы.ДатаПредыдущейЦены; ТекущиеДанные.ПредыдущаяЦена = СтруктураГруппы.ПредыдущаяЦена; КонецЕсли; КонецЕсли; КонецПроцедуры |
|||
1
vicof
13.02.23
✎
13:14
|
Контекст выполнения процедур тоже важен
|
|||
2
spiller26
13.02.23
✎
13:16
|
(0) Как ты определяешь "ТекущиеДанные", если ВыбНоменклатура <> Неопределено ???
|
|||
3
Trezvy
13.02.23
✎
13:34
|
vicof(1),
&НаСервере Процедура СоздатьЗаписьЦеныНоменклатуры(Номенклатура,Контрагент,СсылкаНаДокумент) МенеджерЗаписи = РегистрыСведений.ЦеныНоменклатуры.СоздатьМенеджерЗаписи(); МенеджерЗаписи.Номенклатура = Номенклатура; МенеджерЗаписи.Контрагент = Контрагент; МенеджерЗаписи.Цена = Цена; МенеджерЗаписи.Валюта = Валюта; МенеджерЗаписи.ВнутреннийДокумент = СсылкаНаДокумент; МенеджерЗаписи.Записать(); КонецПроцедуры |
|||
4
Trezvy
13.02.23
✎
13:38
|
ТекущиеДанные = Неопределено
Выносил ТекущиеДанные = Элементы.Товары.ТекущиеДанные; выше, до проверки, реузльтат всё равно ТекущиеДанные = Неопределено |
|||
5
vicof
13.02.23
✎
13:42
|
ЗаполнитьГруппуПроцентИзменения в каком контексте?
|
|||
6
Kassern
13.02.23
✎
13:43
|
(0) Зачем вам вообще это "Элементы.Товары.ТекущиеДанные"?
Если вы добавляете строку и работаете с ней, то у вас она уже хранится в НоваяСтрока |
|||
7
Kassern
13.02.23
✎
13:43
|
Напишите по рабоче-крестьянски, что сделать-то хотите?
|
|||
8
Остап Ибрагимович
13.02.23
✎
13:50
|
Навскидку: мало что-то добавить в данные - для доступа к ним через параметры и свойства элементов диалога надо соответствующие реквизиты диалога привести в состояние, соответствующие измененным данным. Например, Активизировать в диалоге то, откуда хотите тянуть ТекущиеДанные.
|
|||
9
Trezvy
13.02.23
✎
13:51
|
(5) &НаКлиенте
Процедура ЗаполнитьГруппуПроцентИзменения(ВыбНоменклатура = Неопределено,ТекущаяЦена = Неопределено) |
|||
10
Trezvy
13.02.23
✎
13:54
|
(7) Хочу заполнить данные строк в таблице Товары данными из СтруктураГруппы:
ТекущиеДанные.ПроцентИзменения = ОКР(ТекущаяЦена*100/СтруктураГруппы.ПредыдущаяЦена-100,2); ТекущиеДанные.ДатаПредыдущейЦены = СтруктураГруппы.ДатаПредыдущейЦены; ТекущиеДанные.ПредыдущаяЦена = СтруктураГруппы.ПредыдущаяЦена; |
|||
11
Trezvy
13.02.23
✎
14:05
|
(6) Передавать в ЗаполнитьГруппуПроцентИзменения НоваяСтрока и присваивать значения через неё, без ТекущиеДанные?
Процедура ЗаполнитьГруппуПроцентИзменения(ВыбНоменклатура = Неопределено,ТекущаяЦена = Неопределено, НоваяСтрока = Неопределено) СтруктураГруппы = ПолучитьПоследнееЗначениеЦены(ВыбНоменклатура); Если СтруктураГруппы <> Неопределено Тогда НоваяСтрока.ПроцентИзменения = ОКР(ТекущаяЦена*100/СтруктураГруппы.ПредыдущаяЦена-100,2); НоваяСтрока.ДатаПредыдущейЦены = СтруктураГруппы.ДатаПредыдущейЦены; НоваяСтрока.ПредыдущаяЦена = СтруктураГруппы.ПредыдущаяЦена; КонецЕсли; КонецПроцедуры |
|||
12
Kassern
13.02.23
✎
14:27
|
(11) Зачем вы передаете "ВыбНоменклатура = Неопределено,ТекущаяЦена = Неопределено" в параметрах? У вас есть НоваяСтрока, в которой уже есть и номенклатура и цена.
|
|||
13
Kassern
13.02.23
✎
14:28
|
И да, ТекущиеДанные вам не нужны при этом.
|
|||
14
Kassern
13.02.23
✎
14:29
|
Сами ТекущиеДанные нужны, когда вы работаете с формой, и нужно получить текущие данные строки, но раз вы сами добавляете эту строку, то в этом нет необходимости.
|
|||
15
Trezvy
13.02.23
✎
15:03
|
(14) Дело в том, что эта же процедура ЗаполнитьГруппуПроцентИзменения() - без параметров - вызывается при изменение данных строки в таблице (при редактировании). В этом случае ТекущиеДанные отрабатывают корректно.
Ошибка с ними получалась при вызове этой процедуры ЗаполнитьГруппуПроцентИзменения(ВыбНоменклатура = Неопределено,ТекущаяЦена = Неопределено) из процедуры заполнения таблицы данными из файла. Создаем в таблице очередную новую запись - и вызываем ЗаполнитьГруппуПроцентИзменения. Но при этом ТекущиеДанные = Неопределено. Сейчас получается такая модернизация: &НаКлиенте Процедура ЗаполнитьГруппуПроцентИзменения(ВыбНоменклатура = Неопределено,ТекущаяЦена = Неопределено, НоваяСтрока = Неопределено) // ++++++++ для пересчета текущий записи Если ВыбНоменклатура = Неопределено и ТекущаяЦена = Неопределено Тогда ТекущиеДанные = Элементы.Товары.ТекущиеДанные; ВыбНоменклатура = ТекущиеДанные.Номенклатура; ТекущаяЦена = ТекущиеДанные.Цена; КонецЕсли; Если ЗначениеЗаполнено(ВыбНоменклатура) И ЗначениеЗаполнено(Объект.M3_DATE_ORD) Тогда СтруктураГруппы = ПолучитьПоследнееЗначениеЦены(ВыбНоменклатура,Дата(Объект.M3_DATE_ORD+" 00:00:00")); Если СтруктураГруппы <> Неопределено Тогда // ++++++++ пересчет текущий записи Если ТекущиеДанные <> Неопределено Тогда Процент = ОКР(ТекущаяЦена*100/СтруктураГруппы.ПредыдущаяЦена-100,2); ТекущиеДанные.ПроцентИзменения = Процент; ТекущиеДанные.ДатаПредыдущейЦены = СтруктураГруппы.ДатаПредыдущейЦены; ТекущиеДанные.ПредыдущаяЦена = СтруктураГруппы.ПредыдущаяЦена; Иначе // +++++++++++++ обработка новой записи // вместо ТекущиеДанные используем переданный параметр НоваяСтрока НоваяСтрока.ПроцентИзменения = Процент; НоваяСтрока.ДатаПредыдущейЦены = СтруктураГруппы.ДатаПредыдущейЦены; НоваяСтрока.ПредыдущаяЦена = СтруктураГруппы.ПредыдущаяЦена; // ------------- КонецЕсли; КонецЕсли; КонецЕсли; КонецПроцедуры |
|||
16
Kassern
13.02.23
✎
15:13
|
(15) Если честно, то код коряво написан, читать сложно, куча условий лишних.
Что у вас является Объект? M3_DATE_ORD - что за реквизиты такие? Зачем вы делаете так Объект.M3_DATE_ORD+" 00:00:00"? Нельзя разве хранить в реквизите дату, а при желании ее всегда можно через формат привести к нужному виду. Зачем вы проверяете на " Если ВыбНоменклатура = Неопределено и ТекущаяЦена = Неопределено Тогда "? У вас имхо можно написать общую логику на пересчет текущей строки и добавленной. Просто в параметрам процедуры передавайте строку, которую нужно пересчитать. В одном случае будете текущие данные передавать, в другом - новую строку. |
|||
17
Kassern
13.02.23
✎
15:14
|
Один хрен вы на каждую строку дергаете сервер ради "ПолучитьПоследнееЗначениеЦены". Так какой смысл было делать процедуру на клиенте, а не сразу на сервере посчитать запросом и заполнить, что нужно?
|
|||
18
Trezvy
14.02.23
✎
06:29
|
(16) Спасибо!
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |