|
Доработка формы | ☑ | ||
---|---|---|---|---|
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 сложить в состоянии? Как думаешь куда тебя отправит платформа при попытке заполнить Неопределено.Заголовок="---", а потом ещё и записать оное? |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |