|
Программно изменить дополнительные реквизиты (сведения) | ☑ | ||
---|---|---|---|---|
0
tabarigen
17.12.15
✎
15:02
|
Здравствуйте друзья.
Для документа поступления добавил 2 доп реквизита: ВремяРазбора(Тип Дата) и Проверено (Тип Булево). Как я могу получить доступ к этим реквизитам, через ссылку на документ? И возможно ли вообще через ссылку на документ изменить их? Или же обязательно нужно ПВХ ковырять, или где там они хранятся? |
|||
1
Живой Ископаемый
17.12.15
✎
15:16
|
через ссылку ты даже НЕдополнительные не сможешь изменить, придется объект получать...
|
|||
2
tabarigen
17.12.15
✎
15:17
|
(1) так я получил, на сервере
&НаСервере Процедура ПеренестиВДокументНаСервере() // Вставить содержимое обработчика. ДокПоступления = ДокументПоступления.ПолучитьОбъект(); ДокПоступления.Проверено = Истина; КонецПроцедуры |
|||
3
tabarigen
17.12.15
✎
15:18
|
{Форма.Форма.Форма(222)}: Поле объекта не обнаружено (Проверено)
ДокПоступления.Проверено = Истина; |
|||
4
pessok
17.12.15
✎
15:21
|
(3) а ДокументПоступления то заполнено?
|
|||
5
IlyaSR
17.12.15
✎
15:22
|
нет конечно, раз параметра нет
и записать после ДокПоступления не забудь |
|||
6
tabarigen
17.12.15
✎
15:24
|
(4) Док Поступления заполнено на форме. В нем хранится ссылка на Документ.
|
|||
7
pessok
17.12.15
✎
15:28
|
(6) а что нам говорит отладчик на строке
ДокПоступления.Проверено = Истина; ? |
|||
8
tabarigen
17.12.15
✎
15:28
|
Непонятно как добраться до Доп Реквизитов?
|
|||
9
tabarigen
17.12.15
✎
15:29
|
(7) я ж показал что он говорит
{Форма.Форма.Форма(222)}: Поле объекта не обнаружено (Проверено) ДокПоступления.Проверено = Истина; |
|||
10
pessok
17.12.15
✎
15:30
|
*отладчик*
|
|||
11
pessok
17.12.15
✎
15:31
|
(8) конфа какая, для начала? в управлении борделем 3.1 это табчасть объекта, например
|
|||
12
tabarigen
17.12.15
✎
15:31
|
тоже самое говорит. Shift+F9 Выдает
поле объекта не обнаружено. |
|||
13
tabarigen
17.12.15
✎
15:31
|
(11) конфа УТ 11
|
|||
14
pessok
17.12.15
✎
15:32
|
(12) так надо ж смотреть что у тебя в ДокументПоступления
(13) ну та в УТ 11 тоже в ТЧ объекта |
|||
15
tabarigen
17.12.15
✎
15:35
|
Кстати для Ссылки на документ доступны свойства ДополнительныеРеквизиты и ДоаолнительныеСведения
|
|||
16
tabarigen
17.12.15
✎
15:36
|
(14) Вы наверное вопрос не поняли. Я создал в ПВХ дополнительные сведения для Документа поступления. Теперь я хочу их программно изменить.
|
|||
17
pessok
17.12.15
✎
15:36
|
(15) продолжайте наблюдения
|
|||
18
pessok
17.12.15
✎
15:36
|
(16) я то как раз все прекрасно понял.
но судя по ошибке в (9) что-то там не то |
|||
19
АдинС
17.12.15
✎
15:40
|
к доп реквизитам через точку не добраться.... через точку только к нормальным реквизитам...
|
|||
20
tabarigen
17.12.15
✎
15:41
|
(18) Добраться не могу до Дополнительного Реквизита.
Неудивительно, напрямую это навероне и не должно делаться. https://yadi.sk/i/2clt5shAmHyg5 |
|||
21
tabarigen
17.12.15
✎
15:41
|
(19) ну вот и я о том же. Как же к ним обращаться?
|
|||
22
singlych
17.12.15
✎
15:44
|
(21) они лежат в ТЧ ДополнительныеРеквизиты
|
|||
23
АдинС
17.12.15
✎
15:45
|
(21) Через ТЧ ДополнительныеРквизиты
|
|||
24
DexterMorgan
17.12.15
✎
15:46
|
//Объект = Объект-владелец доп реквизита
//НаименованиеДопРеквизита - Имя доп реквизита //ЗначениеДопРеквизита - новое значение доп реквизита ДопРеквизитСсылка = ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.НайтиПоНаименованию(НаименованиеДопРеквизита, Истина); СтрокаТЧ = Объект.ДополнительныеРеквизиты.Найти(ДопРеквизитСсылка, "Свойство"); Если СтрокаТЧ = Неопределено Тогда СтрокаТЧ = ОбъектОбъект.ДополнительныеРеквизиты.Добавить(); СтрокаТЧ.Свойство = ДопРеквизитСсылка; КонецЕсли; СтрокаТЧ.Значение = ЗначениеДопРеквизита; |
|||
25
DexterMorgan
17.12.15
✎
15:52
|
(20) да, кстати, наименование доп реквизита нужно посмотреть в ПВХ, это не просто "Проверено", а что то вроде "Проверено (Поступление товаров и услуг)"
|
|||
26
tabarigen
17.12.15
✎
15:54
|
(25) {Форма.Форма.Форма(224)}: Ошибка при вызове метода контекста (Найти)
СТрокаТЧ = ДокПоступления.ДополнительныеРеквизиты.Найти(ДопРеквизитСсылка, "Проверено"); по причине: Неверное имя колонки эт точно. Сейчас посмотрю |
|||
27
DexterMorgan
17.12.15
✎
15:56
|
(26) ну ты даешь.
СтрокаТЧ = Объект.ДополнительныеРеквизиты.Найти(ДопРеквизитСсылка, "Свойство"); это менять не надо, искать доп реквизит надо тут ДопРеквизитСсылка = ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.НайтиПоНаименованию(НаименованиеДопРеквизита, Истина); |
|||
28
tabarigen
17.12.15
✎
15:56
|
(25) ссылку на реквизит получаю, дальше ошибка
{Форма.Форма.Форма(224)}: Ошибка при вызове метода контекста (Найти) СТрокаТЧ = ДокПоступления.ДополнительныеРеквизиты.Найти(ДопРеквизитСсылка, "Проверено"); по причине: Неверное имя колонки код такой // Получаем ссылку на документ ДокПоступления = ДокументПоступления.ПолучитьОбъект(); //Получаем ссылку на доп реквизит ДопРеквизитСсылка = ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.НайтиПоНаименованию("Проверено (Поступление товаров и услуг)", Истина); СТрокаТЧ = ДокПоступления.ДополнительныеРеквизиты.Найти(ДопРеквизитСсылка, "Проверено"); СТрокаТЧ.Значение = Истина; ДокПоступления.Записать(); |
|||
29
tabarigen
17.12.15
✎
15:57
|
(27) расслабься я так и сделал)
|
|||
30
DexterMorgan
17.12.15
✎
15:57
|
(26) Проверено действительно колонки в тч нет, есть колонка "свойство"
|
|||
31
DexterMorgan
17.12.15
✎
15:58
|
(29) да я и не напрягался
|
|||
32
DexterMorgan
17.12.15
✎
15:59
|
(29) я вижу как ты сделал
|
|||
33
tabarigen
17.12.15
✎
16:03
|
(30) сделал свойство теперь такая ошибка
{Форма.Форма.Форма(225)}: Значение не является значением объектного типа (Значение) СТрокаТЧ.Значение = Истина; &НаСервере Процедура ПеренестиВДокументНаСервере() // Получаем ссылку на документ ДокПоступления = ДокументПоступления.ПолучитьОбъект(); //Получаем ссылку на доп реквизит ДопРеквизитСсылка = ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.НайтиПоНаименованию("Проверено (Поступление товаров и услуг)", Истина); СТрокаТЧ = ДокПоступления.ДополнительныеРеквизиты.Найти(ДопРеквизитСсылка, "Свойство"); СТрокаТЧ.Значение = Истина; ДокПоступления.Записать(); КонецПроцедуры |
|||
34
DexterMorgan
17.12.15
✎
16:05
|
(33) Слушай я тебе написал код, который проверяем на неопределено строку. Но ты его решил не писать, ты же лучше знаешь как надо. Прочитай лучше (24), ты думаешь "если" там зря написано?
|
|||
35
tabarigen
17.12.15
✎
16:08
|
(34) Зачем мне проверять есть ли реквизит "Проверено" если я знаю что он есть
|
|||
36
DexterMorgan
17.12.15
✎
16:10
|
(35) Ну видишь, ты лучше знаешь как устроен этот механизм
|
|||
37
tabarigen
17.12.15
✎
16:11
|
(36) ))
|
|||
38
tabarigen
17.12.15
✎
16:11
|
(36) Ну Морган ну не томи
|
|||
39
DexterMorgan
17.12.15
✎
16:11
|
(35) Зачем тогда на форуме спрашивать?
|
|||
40
DexterMorgan
17.12.15
✎
16:12
|
(38) его там нет. В табличную часть доп реквизиты добавляются при записи объекта
|
|||
41
DexterMorgan
17.12.15
✎
16:12
|
(38) При чем только если они заполнены
|
|||
42
tabarigen
17.12.15
✎
16:15
|
(40) упс.. нестыковочка. Так реквизиты я добавлял разве не к объекту? причем тут табличная часть? я ж не для каждой строки меняю, а для объекта Документ Поступления в целом.
|
|||
43
DexterMorgan
17.12.15
✎
16:16
|
(42) А ты не троль?)
|
|||
44
tabarigen
17.12.15
✎
16:18
|
(43) нет, честно
|
|||
45
DexterMorgan
17.12.15
✎
16:18
|
(44) Ты создавал элемент плана видов характеристик, к документу это не имеет отношения. Чтобы заполнить доп реквизит в документе, нужно добавить его в табличную часть "ДополнительныеРеквизиты" документа.
|
|||
46
DexterMorgan
17.12.15
✎
16:19
|
(44) Его там может не быть. А может быть. Поэтому нужно найти эту строку табличной части и проверить неопределено она или нет. И если ее нет, то добавить.
|
|||
47
tabarigen
17.12.15
✎
16:25
|
(46) Спасибо что объяснили на пальцах. я и не знал что допреквизиты в отдельной тч хранятся.
Переписал код как вы посоветовали, ошибок нет, но значение реквизита не меняется. &НаСервере Процедура ПеренестиВДокументНаСервере() // Получаем ссылку на документ ДокПоступления = ДокументПоступления.ПолучитьОбъект(); //Получаем ссылку на доп реквизит ДопРеквизитСсылка = ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.НайтиПоНаименованию("Проверено (Поступление товаров и услуг)", Истина); СТрокаТЧ = ДокПоступления.ДополнительныеРеквизиты.Найти(ДопРеквизитСсылка, "Свойство"); Если СтрокаТЧ = Неопределено Тогда СтрокаТЧ = ДокПоступления.ДополнительныеРеквизиты.Добавить(); СтрокаТЧ.Свойство = ДопРеквизитСсылка; КонецЕсли; СТрокаТЧ.Значение = Истина; ДокПоступления.Записать(); КонецПроцедуры Может я значение неправильно присваиваю. Так как в СтрокаТЧ я получаю ссылку парвильно |
|||
48
DexterMorgan
17.12.15
✎
16:28
|
В форме меняешь?
|
|||
49
DexterMorgan
17.12.15
✎
16:28
|
Или из обработки?
|
|||
50
tabarigen
17.12.15
✎
16:36
|
из обработки
|
|||
51
DexterMorgan
17.12.15
✎
16:37
|
Кароче, если это форма обработки - значит должно меняться, нужно перечитать данные формы или переоткрыть документ.
Если из формы документа, нужно по-другому делать: Доп реквизиты на форме генерятся автоматически причем наименование складывается из гуида ПВХ ДополнительныеРеквизитыИСведения и гуида спр НаборыДополнительныхРеквизитовИСведений надо найти на форме в отладке реквизит, он будет типа такого: ДопРеквизит = "ДополнительныйРеквизитЗначение_F04809F9x137Dx11E4x93F1x002590F36D23_F26DC8FFx2E7Fx11E4x93FFx002590F36D25"; и просто присвоить ему значение ЭтаФорма["ДополнительныйРеквизитЗначение_F04809F9x137Dx11E4x93F1x002590F36D23_F26DC8FFx2E7Fx11E4x93FFx002590F36D25"] = Истина; |
|||
52
DexterMorgan
17.12.15
✎
16:38
|
(50) Тогда не может не меняться =)
|
|||
53
DexterMorgan
17.12.15
✎
16:47
|
(50) А ты точно доп реквизит создал или доп сведение?
|
|||
54
tabarigen
17.12.15
✎
16:47
|
(52) буду провобовать. Вам спасибо. по результатам отпишусь
|
|||
55
tabarigen
18.12.15
✎
11:05
|
в общем ситуация такая, у меня были добавлены допсведения и не доп реквизиты, потому они и не менялись.
Теперь бы еще осмыслить как быть если хочу изменить больше одного Доп реквизита. &НаСервере Процедура ПеренестиВДокументНаСервере() // Получаем ссылку на документ ДокПоступления = ДокументПоступления.ПолучитьОбъект(); //Получаем ссылку на доп реквизит ДопРеквизитПроверено = ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.НайтиПоНаименованию("Проверено (Поступление товаров и услуг)", Истина); ДопРеквизитВремяРазбора = ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.НайтиПоНаименованию("Время Разбора (Поступление товаров и услуг)", Истина); ПараметрыОтбора = Новый Структура; ПараметрыОтбора.Вставить("Свойство", ДопРеквизитПроверено); ПараметрыОтбора.Вставить("Свойство", ДопРеквизитВремяРазбора); ЕстьСтроки = ДокПоступления.ДополнительныеРеквизиты.НайтиСтроки(ПараметрыОтбора); Если ЕстьСтроки.Количество() = 0 Тогда СтрокаТЧ = ДокПоступления.ДополнительныеРеквизиты.Добавить(); СтрокаТЧ.Свойство = ДопРеквизитПроверено; Иначе СтрокаТЧ = ЕстьСтроки[0]; КонецЕсли; СтрокаТЧ.Значение = Истина; СтрокаТЧ.ТекстоваяСтрока = "Да"; ДокПоступления.Записать(); КонецПроцедуры Если сделаю так то думаю будет ошибка. Если ЕстьСтроки.Количество() = 0 Тогда СтрокаТЧ = ДокПоступления.ДополнительныеРеквизиты.Добавить(); СтрокаТЧ.Свойство = ДопРеквизитПроверено; СтрокаТЧ.Свойство = ДопРеквизитВремяРазбора; Иначе |
|||
56
tabarigen
18.12.15
✎
14:48
|
Сделал так если кому интересно, не знаю насколько правильно с точки зрения производительности
&НаСервере Процедура ПеренестиВДокументНаСервере() // Получаем ссылку на документ ДокПоступления = ДокументПоступления.ПолучитьОбъект(); //Получаем ссылку на доп реквизит ДопРеквизитПроверено = ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.НайтиПоНаименованию("Проверено (Поступление товаров и услуг)", Истина); ЕстьСтроки = ДокПоступления.ДополнительныеРеквизиты.НайтиСтроки(Новый Структура("Свойство", ДопРеквизитПроверено));//Пусть результатом поиска будут "ЕстьСтроки" Если ЕстьСтроки.Количество() = 0 Тогда СтрокаТЧ = ДокПоступления.ДополнительныеРеквизиты.Добавить(); СтрокаТЧ.Свойство = ДопРеквизитПроверено; Иначе СтрокаТЧ = ЕстьСтроки[0]; КонецЕсли; СТрокаТЧ.Значение = Истина; ДокПоступления.Записать(); ДопРеквизитВремяРазбора = ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.НайтиПоНаименованию("Время Разбора (Поступление товаров и услуг)", Истина); ЕстьСтроки = ДокПоступления.ДополнительныеРеквизиты.НайтиСтроки(Новый Структура("Свойство", ДопРеквизитВремяРазбора));//Пусть результатом поиска будут "ЕстьСтроки" Если ЕстьСтроки.Количество() = 0 Тогда СтрокаТЧ = ДокПоступления.ДополнительныеРеквизиты.Добавить(); СтрокаТЧ.Свойство = ДопРеквизитВремяРазбора; Иначе СтрокаТЧ = ЕстьСтроки[0]; КонецЕсли; СТрокаТЧ.Значение = ТекущаяДата(); ДокПоступления.Записать(); КонецПроцедуры |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |