|
Как программно добавить дополнительные реквизиты? | ☑ | ||
---|---|---|---|---|
0
Vito
04.07.22
✎
12:07
|
Подскажите, пожалуйста, как добавить программно дополнительные реквизиты контрагенту в справочнике контрагентов.
|
|||
1
saaken
04.07.22
✎
12:39
|
сначала вводишь руками, потом аналогично делаешь в конфинураторе
|
|||
2
Ryzeman
04.07.22
✎
12:43
|
УправлениеСвойствами.ЗаписатьСвойстваУОбъекта()
Если тебе надо именно добавить новый допреквизит на кой то чёрт, то сделай ручками, посмотри что заполнилось, сделай то же самое программно. |
|||
3
Vito
04.07.22
✎
12:56
|
Реквизит уже добавлен в ручную. Как обратиться к этому реквизиту, чтобы добавить его значение?
Объект.ДополнительныеРекивзиты.<Как соcлаться на реквизит с именем "ExternalId"?> |
|||
4
Vito
04.07.22
✎
12:59
|
И где хранятся значения, доп.реквизитов? Где их можно посмотреть?
|
|||
5
xenos
04.07.22
✎
12:59
|
(3) найди свойство по имени перебери все строки и найди нужное свойство
|
|||
6
Ryzeman
04.07.22
✎
13:00
|
(3) я тебе уже написал.
УправлениеСвойствами.ЗаписатьСвойстваУОбъекта() Через точку обращаться нельзя, это не реквизит. Это строка табличной части ДополнительныеРеквизиты. В запросе надо обращаться туда. Вне запросов делай через БСП |
|||
7
Dmitry1c
04.07.22
✎
13:01
|
(0) наркоманы ...
|
|||
8
Vito
04.07.22
✎
13:21
|
Простите чайника . Ничего не пойму. Получается, что обратиться можно только через запрос, если не использовать БСП?
(6) Как обратиться, можете пример написать? Ну вот никак не соображу как сделать, сижу часов 8 уже с этой проблемой. (5) Как найти свойство? |
|||
9
Vito
04.07.22
✎
13:24
|
(6) Пробовал вот так но не получается:
Объект.ДополнительныеРеквизиты.НайтиСтроки(Новый Структура("ExternalId",""))[0].Значение |
|||
10
rudnitskij
04.07.22
✎
13:34
|
(9) НовСтр = Объект.ДополнительныеРеквизиты.Добавить()...
и заполнять реквизиты строки таб части. Писали же выше, что это обычная табчасть |
|||
11
Ryzeman
04.07.22
✎
13:35
|
Для начала тебе надо почитать про то, что такое вообще дополнительные реквизиты. Заодно что такое ПланыВидовХарактеристик и как с ними работать.
Затем, тебе надо понять твою задачу. Затем, тебе надо понять как работать с БСП. Я тебе в третий раз пишу - установить значение, задача, которую ты написал в (0) делается через УправлениеСвойствами.ЗаписатьСвойстваУОбъекта(). Это метод БСП, который именно для этого написан. Он тебе и нужен и правильнее всего им и воспользоваться. Что у тебя в строках табличной части ты можешь посмотреть в конфигураторе. Какие там значения - тем же запросом "ВЫБРАТЬ * ИЗ МойДокумент.ДополнительныеРеквизиты КАК МойДокумент ГДЕ МойДокумент.Ссылка = &СсылкаНаДокумент" В БСП и так все функции задукоментированы, достаточно перейти в модуль и там всё предельно ясно описано: // Записывает дополнительные реквизиты и сведения владельцу свойств. // Изменения происходят в транзакции. // // Параметры: // ВладелецСвойств - Ссылка - например, СправочникСсылка.Номенклатура, ДокументСсылка.ЗаказПокупателя и т.д. // ТаблицаСвойствИЗначений - ТаблицаЗначений - с колонками: // * Свойство - ПланВидовХарактеристикСсылка.ДополнительныеРеквизитыИСведения - свойство владельца. // * Значение - Произвольный - любое значение, допустимое для свойства (указано в элементе свойства). // Процедура ЗаписатьСвойстваУОбъекта(ВладелецСвойств, ТаблицаСвойствИЗначений) Экспорт Изучи всё это, попробуй, что не получится - напиши. |
|||
12
Vito
04.07.22
✎
14:13
|
БСП, к сожалению нет, нужно как-то решить задачу без БСП.
Насчет получения информации и Доп.Реквизитов, понял, что только через запрос к БД, а не к объекту конфигурации БД. Спасибо! |
|||
13
Ryzeman
04.07.22
✎
14:17
|
(12) Я прошу прощения, а откуда у тебя взялись доп реквизиты без БСП?
|
|||
14
Vito
04.07.22
✎
14:32
|
(13) В ручную в карточке контрагента добавил
|
|||
15
Ryzeman
04.07.22
✎
14:34
|
(14) Ты издеваешься сейчас?) Какая конфигурация? Что такое по-твоему БСП?) Ты путаешь с ИТС? Что будет если ты в конфигураторе в любом модуле напишешь УправлениеСвойствами.ЗаписатьСвойстваУОбъекта() и нажмёшь F12 на нём?)
|
|||
16
Vito
04.07.22
✎
15:17
|
(15) Я не издеваюсь, я в 1С погружаю только 3-ю неделю (правда до этого были курсы 6 мес, но для аналитика). Конфигурация УНФ. Т.е. Вы хотите сказать, что БСП является частью стандартной конфигурации? Зачем тогда о ней вообще упоминать. Я думал это некая внешняя подключаемая библиотека.
Нажал F12 м попал в общий модуль, а там всякие процедуры и функции интересные лежат. Мне что теперь использовать соответствующую процедуру: ЗаполнитьДополнительныеРеквизитыВФорме ? |
|||
17
Ryzeman
04.07.22
✎
15:23
|
(16) БСП = Библиотека Стандартных Подсистем, и во все (какие мне известно) типовые тиражные решения от 1с и франчей она входит. Сам механизм дополнительных реквизитов и сведений - это стандартная подсистема из этой библиотеки. То есть это есть в любой современной конфигурации на БСП.
>> Зачем тогда о ней вообще упоминать Затем, что ты о ней не знаешь, очевидно, и что бы сподвигнуть тебя немножко погуглить и почитать. Не сработало. >>Мне что теперь использовать соответствующую процедуру Да. Это самый правильный вариант решения задачи из (0). Не надо изобретать велосипедов, надо вдумчиво посмотреть как работает уже существующий и правильно крутануть педаль. |
|||
18
Vito
04.07.22
✎
19:28
|
(17) Спасибо! Попробовал вот такой вариант:
МассивСтруктур = Новый Массив; Z =ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.НайтиПоНаименованию("ExternalId", Истина); S = Новый Структура("Свойство, Значение",Z,"123456789"); МассивСтруктур.Добавить(S); УправлениеСвойствами.ЗаписатьСвойстваУОбъекта(NewCounterparty,МассивСтруктур); Но на последней строке получаю ошибку: Ошибка при вызове метода контекста (Заблокировать) {ОбщийМодуль.УправлениеСвойствами.Модуль(1175)}:Блокировка.Заблокировать(); по причине: Неверный тип значения: Справочник.Контрагенты.Ссылка Никак не пойму почему. Вроде в отладчики структура правильная... |
|||
19
Ryzeman
04.07.22
✎
19:52
|
(18) Сделай точку на останова на функции, посмотри что передаёшь в NewCounterparty.
Не совсем понял что у тебя за версия БСП, почему массив структур? В моей таблицу значений надо. Если не поможет - попробуй остановку по ошибке (отладка - остановка по ошибке...). Там посмотри что у тебя вообще передаётся во ВладелецСвойств. И дальше через стек вызовов сможешь отследить. Чёт думается что ты пустую ссылку кидаешь или ещё что-то непотребное. Ещё два совета - не используй короткие перменные типа Z и S даже в таких случаях. В 1с это не принято, если перебираешься к нам - избавляйся от этой привычки. ПВХ лучше искать по полю "имя", оно уникально. В режиме предприятия это в самом низу будет. Там по умолчанию добавляется УИД, но ты сам можешь задать как тебе надо. |
|||
20
Ryzeman
04.07.22
✎
19:53
|
(19) если вдруг не знаешь как смотреть - выделяешь переменную, shift+F9. Ну вообще отладчиком пользоваться надо обязательно научиться. Это ключевой навык.
|
|||
21
Vito
04.07.22
✎
20:18
|
( (19) Получилось ! Спасибо за помощь!
Как Вы и предположили передавал в NewCounterparty не ссылку, а объект. Подскажите, как узнать используемую в конфигурации версию БСП? |
|||
22
Гений 1С
гуру
04.07.22
✎
20:21
|
Мой гений дарит вам, ггг (запоздало):
&НаСервере Функция СоздатьДопРеквизитНаСервере(НаборСвойствСтрокой, ИдентификаторРеквизита, НаименованиеРеквизита, ТипЗначения = Неопределено, Многострочный = 0) Экспорт УстановитьПривилегированныйРежим(Истина); //включим константу использования Если Не Константы.ИспользоватьДополнительныеРеквизитыИСведения.Получить() Тогда Константы.ИспользоватьДополнительныеРеквизитыИСведения.Установить(Истина); КонецЕсли; //попробуем найти реквизит по наименованию //ДопРеквизитСсылка = ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.НайтиПоНаименованию(ИмяРеквизита); ДопРеквизитСсылка = ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.НайтиПоРеквизиту("Имя", ИдентификаторРеквизита); Если НЕ ЗначениеЗаполнено(ДопРеквизитСсылка) Тогда //если не нашли реквизит - будем его создавать ДопРеквизитОбъект = ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.СоздатьЭлемент(); ДопРеквизитОбъект.Заголовок = НаименованиеРеквизита; ДопРеквизитОбъект.НаборСвойств = Справочники.НаборыДополнительныхРеквизитовИСведений[НаборСвойствСтрокой]; //.Справочник_Контрагенты; Если ТипЗначения = Неопределено Тогда ТипЗначения = Новый ОписаниеТипов("Строка",,,,Новый КвалификаторыСтроки(250)); КонецЕсли; ДопРеквизитОбъект.ТипЗначения = ТипЗначения; // ДопРеквизитОбъект.Наименование = ДопРеквизитОбъект.Заголовок + " ("+ДопРеквизитОбъект.НаборСвойств+")"; ДопРеквизитОбъект.Виден = Истина; ДопРеквизитОбъект.Доступен = Истина; ДопРеквизитОбъект.МногострочноеПолеВвода = Многострочный; ДопРеквизитОбъект.ДополнительныеЗначенияИспользуются = Истина; //зададим имя нового реквизита ДопРеквизитОбъект.Имя = ИдентификаторРеквизита; //"filap_"+СтрЗаменить(ИмяРеквизита," ",""); ДопРеквизитОбъект.Записать(); ДопРеквизитСсылка = ДопРеквизитОбъект.Ссылка; КонецЕсли; //добавим наш реквизит в набор дополнительных реквизитов контрагента НаборДополнительныхРеквизитовКонтрагента = Справочники.НаборыДополнительныхРеквизитовИСведений[НаборСвойствСтрокой].ПолучитьОбъект(); //Справочник_Контрагенты Если НаборДополнительныхРеквизитовКонтрагента.ДополнительныеРеквизиты.Найти(ДопРеквизитСсылка, "Свойство") = Неопределено Тогда //добавим реквизит в набор Стр = НаборДополнительныхРеквизитовКонтрагента.ДополнительныеРеквизиты.Добавить(); Стр.Свойство = ДопРеквизитСсылка; НаборДополнительныхРеквизитовКонтрагента.Записать(); КонецЕсли; Возврат ДопРеквизитСсылка; КонецФункции Примеры вызова: &НаСервере Функция ДатьЗначениеДопРеквизитаНаСервере(Ссылка, ИдентификаторРеквизита, НаименованиеРеквизита, ТипЗначения = Неопределено, Многострочный = 0) Экспорт Если ТипЗнч(Ссылка) = Тип("СправочникСсылка.Контрагенты") Тогда НаборСвойствСтрокой = "Справочник_Контрагенты"; ИначеЕсли ТипЗнч(Ссылка) = Тип("СправочникСсылка.Партнеры") Тогда НаборСвойствСтрокой = "Справочник_Партнеры_Общие"; ИначеЕсли ТипЗнч(Ссылка) = Тип("СправочникСсылка.ДоговорыКонтрагентов") Тогда НаборСвойствСтрокой = "Справочник_ДоговорыКонтрагентов"; ИначеЕсли ТипЗнч(Ссылка) = Тип("ДокументСсылка.ЗаказКлиента") Тогда НаборСвойствСтрокой = "Документ_ЗаказКлиента"; Иначе Возврат Неопределено; КонецЕсли; УстановитьПривилегированныйРежим(Истина); Реквизит = СоздатьДопРеквизитНаСервере(НаборСвойствСтрокой, ИдентификаторРеквизита, НаименованиеРеквизита, ТипЗначения, Многострочный); ИскСтрока = Ссылка.ДополнительныеРеквизиты.Найти(Реквизит, "Свойство"); Если ИскСтрока = Неопределено Тогда Возврат Неопределено; КонецЕсли; Возврат ИскСтрока.Значение; КонецФункции ДанныеДоговора.Вставить("ПодписантКлиентаФИО", ДатьЗначениеДопРеквизитаНаСервере(Договор, "Договор_ПодписантКлиентаФИО", "Подписант клиента ФИО", ТипСтрока250)); ДанныеДоговора.Вставить("ПодписантКлиентаДолжность", ДатьЗначениеДопРеквизитаНаСервере(Договор, "Договор_ПодписантКлиентаДолжность", "Подписант клиента должность", ТипСтрока250)); ДанныеДоговора.Вставить("ОГРН", ДатьЗначениеДопРеквизитаНаСервере(ДанныеДоговора.Партнер, "Партнер_ОГРН", "ОГРН", ТипСтрока250)); ДанныеДоговора.Вставить("ДействующийНаОсновании", ДатьЗначениеДопРеквизитаНаСервере(ДанныеДоговора.Партнер, "Партнер_ДействующийНаОсновании", "Действующий на основании", ТипСтрока250)); ТипСтрока250 = Новый ОписаниеТипов("Строка",,,,Новый КвалификаторыСтроки(250)); ДанныеДоговора.Вставить("ПодписантКлиентаФИО", ДатьЗначениеДопРеквизитаНаСервере(Договор, "Договор_ПодписантКлиентаФИО", "Подписант клиента ФИО", ТипСтрока250)); ДанныеДоговора.Вставить("ПодписантКлиентаДолжность", ДатьЗначениеДопРеквизитаНаСервере(Договор, "Договор_ПодписантКлиентаДолжность", "Подписант клиента должность", ТипСтрока250)); ДанныеДоговора.Вставить("ОГРН", ДатьЗначениеДопРеквизитаНаСервере(ДанныеДоговора.Партнер, "Партнер_ОГРН", "ОГРН", ТипСтрока250)); ДанныеДоговора.Вставить("ДействующийНаОсновании", ДатьЗначениеДопРеквизитаНаСервере(ДанныеДоговора.Партнер, "Партнер_ДействующийНаОсновании", "Действующий на основании", ТипСтрока250)); |
|||
23
Фантазер
04.07.22
✎
20:29
|
(21) Ну вот еще одно зачатие 1С-ника. А злые языки говорят - вырождаемся.
|
|||
24
Vito
04.07.22
✎
20:44
|
(23) Зачался как 1С-ник месяцев 6 назад еще, а сейчас Спасибо всем за то, что грудями выкармливаете!
|
|||
25
Ryzeman
04.07.22
✎
20:55
|
(21) Пожалуйста :)
>>Подскажите, как узнать используемую в конфигурации версию БСП? В режиме предприятия посмотреть регистр сведений "Версии подсистем" У меня, например, СтандартныеПодсистемы версии 3.1.5.385 (22) Кыш! Не порти нам человека своей гггениальностью)) |
|||
26
Garykom
гуру
04.07.22
✎
21:03
|
(22) А если "Дополнительное значение (иерархия)" где?
|
|||
27
Гений 1С
гуру
04.07.22
✎
22:13
|
(26) допили
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |