Версия для печати темы (https://pro1c.org.ua/index.php?s=449643023537c9c34246aa9290750ca7&showtopic=5272)

Нажмите сюда для просмотра этой темы в обычном формате

Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 _ Программирование управляемых форм 1С 8.2 _ Приси записи номенклатуры в наименование добавить код

Автор: Irina_ 03.11.11, 15:05

Здравствуйте, и снова к Вам за советом.

Нужно при записи Номенклатуры в наименование добавить код (не спрашивайте зачем, так было в 8.1, сама не понимаю необходимости но поросили сделать так же в управляемой)

Так вот, при записи делаю так:

&НаСервере
Процедура ПриЗаписиНаСервере(Отказ, ТекущийОбъект, ПараметрыЗаписи)
    ТекущийОбъект.Наименование =  ТекущийОбъект.Наименование + " " + Строка(ТекущийОбъект.Код);
КонецПроцедуры


Дальше наблюдаю такую картину: Если нажать на кнопку "Записать объект", то все в наименование красивенько подставляется,
а когда нажимаю (в новом элементе) Записать и закрыть, то в наименовании остается старое значение, и соответственно в списке оно тоже отображается старое.
Проверяла отладчиком все процедуры типа ПриЗаписи, ПослеЗаписи, ПослеЗаписиНаСервере - наименование как надо, с кодом...но на форму почему-то его не передает((
Подскажите пожалуйста где что не так делаю? Спасибо ))

Автор: Vofka 03.11.11, 15:16

Если открыть/Закрыть форму - наименование потом с кодом становится?

Автор: Irina_ 03.11.11, 15:45

Цитата(Vofka @ 03.11.11, 15:16) *
Если открыть/Закрыть форму - наименование потом с кодом становится?


Нет. Если делать это в процедуре ПриСозданииНаСервере то картина та же но когда закрываешь/открываешь то значение новое подставляется.
Но мне кажется этот вариант не "фонтан"))

Автор: vbi 03.11.11, 16:00

А "ПередЗаписью"?
Объект.Наименование = Объект.Наименование + Объект.Код;

Кстате, представим что вы записали номенклатуру как надо, потом открываете - и наименование у Вас такое "Товар00001" (с кодом, так ведь?). А теперь если ее еще раз записать, тогда наименование будет такое "Товар0000100001". Нехорошо smile.gif

Автор: Irina_ 03.11.11, 16:02

Цитата(vbi @ 03.11.11, 16:00) *
А "ПередЗаписью"?
Объект.Наименование = Объект.Наименование + Объект.Код;

Кстате, представим что вы записали номенклатуру как надо, потом открываете - и наименование у Вас такое "Товар00001" (с кодом, так ведь?). А теперь если ее еще раз записать, тогда наименование будет такое "Товар0000100001". Нехорошо smile.gif


ПередЗаписью код еще не сформирован ((

Автор: vbi 03.11.11, 16:04

Объект.Наименование = Объект.Наименование + Объект.Код;

так должно работать - только что проверил у себя - работает. При чем на Веб-клиенте! ))

Автор: Irina_ 03.11.11, 16:05

Цитата(vbi @ 03.11.11, 16:00) http://pro1c.org.ua/index.php?act=findpost&pid=35875
Объект.Наименование = Объект.Наименование + Объект.Код;

так должно работать - только что проверил у себя - работает. При чем на Веб-клиенте! ))


В процедуре ПередЗаписью?

Автор: vbi 03.11.11, 16:11

Вызовите

УстановитьНовыйКод(<ПрефиксКода>);
и все. Можна вызвыть при создании на сервере.

При создании на сервере вызываете УстановитьНовыйКод(<ПрефиксКода>);

а ПередЗаписью на клиенте Объект.Наименование = Объект.Наименование + Объект.Код;

Автор: Irina_ 03.11.11, 16:13

Цитата(vbi @ 03.11.11, 16:11) *
Вызовите
УстановитьНовыйКод(<ПрефиксКода>);
и все. Можна вызвыть при создании на сервере.

При создании на сервере вызываете УстановитьНовыйКод(<ПрефиксКода>);

а ПередЗаписью на клиенте Объект.Наименование = Объект.Наименование + Объект.Код;


ПриСоданииНаСервере вызывается даже при открытии существующего элемента....хорошо там вызывать УстановитьНовыйКод ?

Автор: vbi 03.11.11, 16:35

Цитата
ПриСоданииНаСервере вызывается даже при открытии существующего элемента....хорошо там вызывать УстановитьНовыйКод ?

Да. Ведь (тем более на сервере) проверить условие нового:

Если Объект.ЭтоНовый() Тогда
     УстановитьНовыйКод("");
КонецЕсли;


Скажете, получилось ли.

Автор: Irina_ 03.11.11, 17:06

Цитата(vbi @ 03.11.11, 16:35) *
Да. Ведь (тем более на сервере) проверить условие нового:

Если Объект.ЭтоНовый() Тогда
     УстановитьНовыйКод("");
КонецЕсли;


Скажете, получилось ли.


Ругается что Метод объекта не обнаружен УстановитьКод ((

Автор: Kutuzov 03.11.11, 17:13

Цитата(Irina_ @ 03.11.11, 17:06) *
Ругается что Метод объекта не обнаружен УстановитьКод ((


УстановитьНовыйКод() И кавычки не нужны

Автор: vbi 03.11.11, 17:26

Сори...

Объект.УстановитьНовыйКод("");

rolleyes.gif

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


&НаКлиенте
Процедура ПередЗаписью(Отказ, ПараметрыЗаписи)
    Объект.Наименование = Объект.Наименование + Объект.Код;
КонецПроцедуры

Автор: Irina_ 03.11.11, 17:31

Цитата(vbi @ 03.11.11, 17:26) *
Сори...
Объект.УстановитьНовыйКод("");

rolleyes.gif

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


&НаКлиенте
Процедура ПередЗаписью(Отказ, ПараметрыЗаписи)
    Объект.Наименование = Объект.Наименование + Объект.Код;
КонецПроцедуры



Поняла в чем ошибка. Если не делать ДокОбъект = РеквизитФормыВЗначение("Объект"); то Объект это структура параметров, поэтому и ругалось ))

Теперь все получилось ))
vbi, СПАСИБО Вам ОГРОМНОЕ :-*

Автор: vbi 03.11.11, 17:48

Да, Объект формі - єто всего лишь структура. это сделано для разделения функционала клиента и сервера. Вообще на клиенте не может быть объект, но по привычке 1Сники сделали такой объект и вставили все реквизиты настоящего объекта туда. И эти реквизиты вполне можно использовать. Вот только методы из структуры вызывать нельзя)

Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7
https://pro1c.org.ua