Имя: Пароль:
1C
1С v8
Доработка формы
,
0 ruysuke
 
19.12.16
10:57
Подскажите примером пожалуйста как изменить значение объекта.
Суть задачи в следующем: делаю доработку управляемой формы справочника через расширение конфигурации.
В результате процедура должна найти все вн. документы справочника с одинаковыми наименованиями, затем переименовать текущий документ.
Я просмотрел много примеров, но почему то у меня возникают ошибки..Буду признателен за помощь..
&НаСервере
Процедура ВнД_ПередЗаписьюНаСервереПосле(Отказ, ТекущийОбъект, ПараметрыЗаписи)
    
    НаименованиеВидаДокумента = Объект.ВидДокумента.Наименование;
    НаименованиеДокумента = Неопределено;
    Если НаименованиеВидаДокумента = "Задания смежному отделу" Тогда
        НаименованиеДокумента = ЭтаФорма.Объект.Заголовок;
        Запрос = Новый Запрос;
        Запрос.УстановитьПараметр("НаименованиеДокумента",НаименованиеДокумента);
        Запрос.Текст = "ВЫБРАТЬ
                       |    ВнутренниеДокументы.Ссылка
                       |ИЗ
                       |    Справочник.ВнутренниеДокументы КАК ВнутренниеДокументы
                       |ГДЕ
                       |    ВнутренниеДокументы.Наименование = &НаименованиеДокумента";
        Результат = Запрос.Выполнить();
        КолЗаписей = Результат.Выбрать().Количество();
        Если КолЗаписей > 1 Тогда
            ИзмененноеНаименование = НаименованиеДокумента + "-" + КолЗаписей;
Дальше нужно присвоить Объекту Заголовок ИзмененноеНаименование и записать. Но мне не понятно как это делается правильно.
1 oslokot
 
19.12.16
11:01
Заголовок = ИзмененноеНаименование;

записывать объект не надо
2 Fedor-1971
 
19.12.16
11:09
(0) Похоже тебе мало что понятно:
ЭтаФорма.Объект.Заголовок - именно у Объекта есть реквизит "Заголовок"?
НаименованиеВидаДокумента = Объект.ВидДокумента.Наименование; - Объект.ВидДокумента по ходу имеет ссылочный тип, почему не сравниваешь ссылки?
ИзмененноеНаименование = НаименованиеДокумента + "-" + КолЗаписей; - неявные преобразования, это замечательно, но для чего в Наименование пихать количество имеющихся записей и сохранять сию очень нужную, постоянно изменяющуюся информацию.

Словами внятно опиши что хочешь сделать, а главное пойми зачем.
3 oslokot
 
19.12.16
11:10
(2) я понял что он просто хочет менять типовой заголовок при открытии формы
4 Fedor-1971
 
19.12.16
11:15
(3) по ходу нет, пытается переименовать текущую запись справочника в формате "Наименование"+"Количество имеющихся документов", но ищет в наименовании не первые символы, например, "прих накладная - 12", а всё наименование (с количеством) и так искренне удивляется "Блин, записей много, а не находятся"
5 Fedor-1971
 
19.12.16
11:16
4+ Хотя зачем ТС куча записей с наименованиями "прих накладная - 5", "прих накладная - 7" и т.д. не озвучено
6 ruysuke
 
19.12.16
12:20
В общем добавлю конкретики. Это 1с ДО КОРП. Эта процедура еще будет дополняться условиями. Но главное..У одного вида документа наименование документа составляется по шаблону наименования. И если есть уже такие же наименования прибавляем -2 или -3 в зависимости сколько их. Записи находятся, Но как изменить уже сохраненный Объект.Заголовок в бд. oslokot правильно понял, только не при открытии, а при закрытии. Если так: Заголовок = ИзмененноеНаименование;
то ничего не меняется.
7 Fedor-1971
 
19.12.16
13:43
(6) Прояснил, стало ещё не понятнее.
oslokot предположил, что тебе нужно информировать пользователя через заголовок открытого окна. По ходу, не угадал.
По поводу записать в некий объект
1. сначала получаем ссылку на него (если её до сих пор нет)
2. найденныйОбъект=Ссылка.ПолучитьОбъект();
3. найденныйОбъект.Заголовок=""; нечто присвоили
4. найденныйОбъект.Записать();
Только код приведи к своей ситуации.
И начни с изучения азов 1С, а не с изменения форм, и не, тем более, с изменения объектов в работающей конфигурации.
8 ruysuke
 
19.12.16
14:36
Сразу видно, мастера отвечали, и добрым словом привели в чувства и подсказали. Огромное спасибо, все получилось. вот такой код получился:
НаименованиеВидаДокумента = Объект.ВидДокумента.Наименование;
    НаименованиеДокумента = Неопределено;
    Если НаименованиеВидаДокумента = "Задания смежному отделу" Тогда
        НаименованиеДокумента = ЭтаФорма.Объект.Заголовок;
        Запрос = Новый Запрос;
        Запрос.УстановитьПараметр("НаименованиеДокумента",НаименованиеДокумента);
        Запрос.Текст = "ВЫБРАТЬ
                       |    ВнутренниеДокументы.Ссылка
                       |ИЗ
                       |    Справочник.ВнутренниеДокументы КАК ВнутренниеДокументы
                       |ГДЕ
                       |    ВнутренниеДокументы.Наименование = &НаименованиеДокумента";
        Результат = Запрос.Выполнить();
        КолЗаписей = Результат.Выбрать().Количество();
        Если КолЗаписей > 1 Тогда
            ИзмененноеНаименование = НаименованиеДокумента + "-" + КолЗаписей;
            Объект.Заголовок = ИзмененноеНаименование;
            ИщемОбъект = Справочники.ВнутренниеДокументы;
            НашлиОбъект = ИщемОбъект.НайтиПоНаименованию(НаименованиеДокумента);
            ПолучилиОбъект = НашлиОбъект.ПолучитьОбъект();
            ПолучилиОбъект.Заголовок = ИзмененноеНаименование;
            ПолучилиОбъект.Записать();    
        КонецЕсли;    
    КонецЕсли;
Выше вы упомянули про поиск по символам, наверное можно задавать поиск например по первым 10 символам или по всем кроме последних 2х, скажите это как, вернее про что почитать?
9 aleks_default
 
19.12.16
14:55
нет слов, кроме матерных
10 Fedor-1971
 
19.12.16
15:33
(9) +100
Что ж ты творишь человече? На ... (зачем) это тебе нужно не знаю, но "что будет если нет такого наименования в справочнике?"
Изначальную задачу словами, таки опиши (что тебе постановщик сказал то, дружище?)
11 ruysuke
 
20.12.16
07:48
Так будет правильно?
...
ИщемОбъект = Объект.Ссылка;
НашлиОбъект = ИщемОбъект.ПолучитьОбъект();
НашлиОбъект.Заголовок = ИзмененноеНаименование;
НашлиОбъект.Записать();

Еще есть что не по человечески написано?
12 Fedor-1971
 
20.12.16
09:27
(11)Да уж, (9) прав на все 1000%, и матерных слов уже не подобрать.
Если "Объект" сейчас открыт в форме, то в ПередЗаписьюНаСервере параметр ТекущийОбъект и есть уже полученный и заполненный текущими данными объект элемента справочника - заполни в нём свой Заголовок.
Ты хоть в ЖКК прочитай про то как и что движется или в инете пошурши порядок вызова событий при записи Объекта.
Не надо угадывать (форуму не видна твоя конфигурация), надо просто знать!!! ЧТО открыто, ГДЕ хранится нужное и КАК это изменить для получения нужного результата.

Для информации:
НашлиОбъект = ИщемОбъект.НайтиПоНаименованию(НаименованиеДокумента);

Вот тебе выдержка из СП:
НайтиПоНаименованию()
Возвращаемое значение:
Тип: СправочникСсылка.<Имя справочника>; Неопределено.
Ссылка на найденный элемент справочника.
Если не существует ни одного элемента с требуемым наименованием, то будет возвращена пустая ссылка.
Если для справочника наименование не задано (длина = 0), то будет возвращено Неопределено.

ПолучитьОбъект()
Возвращаемое значение:
Тип: СправочникОбъект; Неопределено.
Неопределено - объекта в базе нет (например, при обмене данными или после непосредственного удаления объекта, на который есть ссылки).

1+1 сложить в состоянии? Как думаешь куда тебя отправит платформа при попытке заполнить Неопределено.Заголовок="---", а потом ещё и записать оное?