|   |   | 
| 
 | ТекущиеДанные = Неопределено | ☑ | ||
|---|---|---|---|---|
| 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) Спасибо!     | 
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |