Имя: Пароль:
1C
 
Как по максимуму оптимизировать процедуру при изменений?
0 Айрат_116
 
28.08.19
09:53
Здравствуйте. Помогите пжл, Как можно получше сделать эту задачу? (Всё работает, но нужен другой вариант)
Слышал что можно как то через "ОбщийМодуль" сделать это.
&НаКлиенте
Процедура ОсновныеСредстваПриИзменении(Элемент)
    ОсновныеСредстваПриИзмененииНаСервере();
КонецПроцедуры

&НаСервере
Процедура ОсновныеСредстваПриИзмененииНаСервере()
    Если Не ЗначениеЗаполнено(Объект.ОсновноеСредство) Тогда
        ИнвентарныйНомерОС = ""; Возврат;
    КонецЕсли;
    ИнвентарныйНомерОС = Объект.ОсновноеСредство.Код;
КонецПроцедуры
1 saaken
 
28.08.19
10:12
Выведи на форму ИнвентарныйНомерОС  не как отдельную переменную, а как свойство объекта.
И весь код можешь убрать.
2 GGDots
 
28.08.19
10:14
Либо вообще убери серверную процедуру, и делай все на клиенте, получая значения через точку на клиенте через процедуру "ПолучитьЗначениеРеквизита" общего модуля (что то типа ОбщегоНазначенияСервер.ПолучитьЗначениеРеквизита)
3 dezss
 
28.08.19
10:15
ИнвентарныйНомерОС
ПутьКДанным Объект.ОсновноеСредство.Код.
4 Айрат_116
 
28.08.19
10:16
Спасибо за варианты щас попробую
5 dezss
 
28.08.19
10:17
(2) В моей древней БСП это в ОбщегоНазначения. И там нет вызова сервера.
(0) Можно еще Процедура ОсновныеСредстваПриИзмененииНаСервере() сделать функцией &НаСервереБезКонтекста и передавать туда Объект.ОсновноеСредство.
А возвращать уже сам код через ОбщегоНазначения.ЗначениеРеквизита объекта.
А на клиенте ИнвентарныйНомерОС = ОсновныеСредстваПриИзмененииНаСервере(Объект.ОсновноеСредство).
6 Айрат_116
 
28.08.19
10:37
Я еще пробывал запросом сделать. Но не получилось(
ВЫБРАТЬ
    тн_ДефектнаяВедемость.ОсновноеСредство.Код КАК ОсновноеСредствоКод
ИЗ
    Документ.тн_ДефектнаяВедемость КАК тн_ДефектнаяВедемость
ГДЕ
    тн_ДефектнаяВедемость.Ссылка = &Ссылка
7 dezss
 
28.08.19
10:40
(6) не получится, если было свойство изменено, но док еще не записан в базу. Тут запрос надо было бы делать к справочнику (или че это там у вас) ОсновноеСредство.
8 Айрат_116
 
28.08.19
10:46
(7) Щас попробую
9 dezss
 
28.08.19
10:51
(8) И не делай в таких случаях контекстных серверных.
10 Айрат_116
 
28.08.19
10:56
(9) Хорошо, буду знать.
11 Айрат_116
 
28.08.19
11:07
(9) Вот так сделал. все равно пусто.
&НаКлиенте
Процедура ОсновныеСредстваПриИзменении(Элемент)
     Док = Объект.ОсновноеСредство;
     ОсновныеСредстваПриИзмененииНаСервереБезКонтекста(Док);
КонецПроцедуры
&НаСервереБезКонтекста
Функция ОсновныеСредстваПриИзмененииНаСервереБезКонтекста(Док)
    Запрос = Новый Запрос;
    Запрос.Текст = "
|    ВЫБРАТЬ
|    ОсновныеСредства.Код КАК Код
|ИЗ
|    Справочник.ОсновныеСредства КАК ОсновныеСредства
|ГДЕ
|    ОсновныеСредства.Ссылка = &Ссылка";
    Запрос.УстановитьПараметр("Ссылка",Док);
    РезультатЗапроса = Запрос.Выполнить();
    Если РезультатЗапроса.Пустой() Тогда
        Возврат "";
    КонецЕсли;
12 Айрат_116
 
28.08.19
11:12
Результат запроса точнее пусто.
13 dezss
 
28.08.19
11:23
(11) А если не пустой результат запроса, то что возвращаешь?
И не мешало бы присвоить возвращаемое значение:
ИнвентарныйНомерОС = ОсновныеСредстваПриИзмененииНаСервереБезКонтекста(Док);
14 unregistered
 
28.08.19
11:27
(0) ОФФ. Если у вас какая-либо типовая конфигурация (например БП), то вы должны знать, что инвентарный номер ОС и код элемента справочника ОС - это два разных понятия и их значения могут различаться (и очень часто реально различаются).
Просто на всякий случай спросил.
15 Айрат_116
 
28.08.19
11:34
(13) Всё получилось. Спасибо
16 Айрат_116
 
28.08.19
11:36
(14) Хорошо, Проверю это, спасибо.