Имя: Пароль:
 
1C
1С v8
Заполнение доп. реквизитов через обработку Загрузка данных из ТД
0 oqjawa
 
16.07.19
14:47
Создал Доп реквизит с неограниченной длинной в справочнике номенклатура.
Загружаю в него значения с помощью обработки "загрузка данных из табличного документа" из экселя.

Для Каждого ЭлементДопСвойства Из ДопСвойства Цикл

    ТекСвойство = ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.НайтиПоНаименованию(ЭлементДопСвойства.Ключ + " (" + Объект.ВидНоменклатуры + ")", Ложь);
    ТекЗначение = Справочники.ЗначенияСвойствОбъектов.НайтиПоНаименованию(ТекстыЯчеек[ЭлементДопСвойства.Значение], Ложь);
    Если Не ЗначениеЗаполнено(ТекСвойство) Тогда
        Сообщить("Не удалось найти свойство: """ + ЭлементДопСвойства.Ключ + " (" + Объект.ВидНоменклатуры + ")""");
        Продолжить;
    КонецЕсли;
    Если Не ЗначениеЗаполнено(ТекЗначение) Тогда
        Сообщить("Создаем новое значение """ + ТекстыЯчеек[ЭлементДопСвойства.Значение] + """ для свойства """ + ТекСвойство + """");
        НовоеЗначение = Справочники.ЗначенияСвойствОбъектов.СоздатьЭлемент();
        НовоеЗначение.Владелец = ТекСвойство;
        НовоеЗначение.Наименование = ТекстыЯчеек[ЭлементДопСвойства.Значение];
        НовоеЗначение.Записать();
        ТекЗначение = НовоеЗначение.Ссылка;
    КонецЕсли;

    МассивСтрок = Объект.ДополнительныеРеквизиты.НайтиСтроки(Новый Структура("Свойство", ТекСвойство));
    Если МассивСтрок.Количество() = 0 Тогда
        ДопРеквизит = Объект.ДополнительныеРеквизиты.Добавить();
    Иначе
        ДопРеквизит = МассивСтрок[0];
    КонецЕсли;
    ДопРеквизит.Свойство = ТекСвойство;
    ДопРеквизит.Значение = ТекЗначение;

КонецЦикла;

Объект.Записать();


записывается только около 100 символов, хотя длинна строки позволяет вместить больше текста..
Дело вовсе не в длине реквизита?
1 DmitriyDI
 
16.07.19
15:24
(0) Если это реквизит с типом строка, зачем добавлять для него элемент в ЗначенияСвойствОбъектов, просто тогда было бы:
ДопРеквизит.Значение = ТекстыЯчеек[ЭлементДопСвойства.Значение];
а тут получается уже не Доп реквизит с неограниченной длинной , а элемент справочника, где наименование помещает только 100 символов.
2 oqjawa
 
16.07.19
15:41
а как по другому сделать?
3 oqjawa
 
16.07.19
15:54
Вы правы длинна наименования действительно 100
4 DmitriyDI
 
16.07.19
15:56
(2) Сделать доп реквизит, тип Строка Неограниченная,

Это убрать:

  Если Не ЗначениеЗаполнено(ТекЗначение) Тогда
        Сообщить("Создаем новое значение """ + ТекстыЯчеек[ЭлементДопСвойства.Значение] + """ для свойства """ + ТекСвойство + """");
        НовоеЗначение = Справочники.ЗначенияСвойствОбъектов.СоздатьЭлемент();
        НовоеЗначение.Владелец = ТекСвойство;
        НовоеЗначение.Наименование = ТекстыЯчеек[ЭлементДопСвойства.Значение];
        НовоеЗначение.Записать();
        ТекЗначение = НовоеЗначение.Ссылка;
    КонецЕсли;

Тут сделать так:

ДопРеквизит.Значение = ТекстыЯчеек[ЭлементДопСвойства.Значение];
5 oqjawa
 
16.07.19
16:02
переменная не определена (ДопРеквизит)
6 DmitriyDI
 
16.07.19
16:04
Для Каждого ЭлементДопСвойства Из ДопСвойства Цикл

    ТекСвойство = ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.НайтиПоНаименованию(ЭлементДопСвойства.Ключ + " (" + Объект.ВидНоменклатуры + ")", Ложь);

    Если Не ЗначениеЗаполнено(ТекСвойство) Тогда
        Сообщить("Не удалось найти свойство: """ + ЭлементДопСвойства.Ключ + " (" + Объект.ВидНоменклатуры + ")""");
        Продолжить;
    КонецЕсли;


    МассивСтрок = Объект.ДополнительныеРеквизиты.НайтиСтроки(Новый Структура("Свойство", ТекСвойство));
    Если МассивСтрок.Количество() = 0 Тогда
        ДопРеквизит = Объект.ДополнительныеРеквизиты.Добавить();
    Иначе
        ДопРеквизит = МассивСтрок[0];
    КонецЕсли;
    ДопРеквизит.Свойство = ТекСвойство;
    ДопРеквизит.Значение = ТекстыЯчеек[ЭлементДопСвойства.Значение];

КонецЦикла;

Объект.Записать();
7 oqjawa
 
16.07.19
16:23
не удалось найти свойство.. и так для каждого доп реквизита
8 oqjawa
 
16.07.19
16:25
странно если я вот тут:

  Если Не ЗначениеЗаполнено(ТекЗначение) Тогда
        Сообщить("Создаем новое значение """ + ТекстыЯчеек[ЭлементДопСвойства.Значение] + """ для свойства """ + ТекСвойство + """");
        НовоеЗначение = Справочники.ЗначенияСвойствОбъектов.СоздатьЭлемент();
        НовоеЗначение.Владелец = ТекСвойство;
        НовоеЗначение.ПолноеНаименование = ТекстыЯчеек[ЭлементДопСвойства.Значение];
        НовоеЗначение.Записать();
        ТекЗначение = НовоеЗначение.Ссылка.ПолноеНаименование;
    КонецЕсли;

он выводит немного больше текста но не весь.. хотя у реквизита Справочники.ЗначенияСвойствОбъектов.ПолноеНаименование длинна не ограничена
9 DmitriyDI
 
16.07.19
16:27
(8) странно, что при том же коде он находит свойство), вот это странно)
10 oqjawa
 
16.07.19
16:29
нет нет) я ваш код вставлял когда он на свойства ругался

Для Каждого ЭлементДопСвойства Из ДопСвойства Цикл

    ТекСвойство = ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.НайтиПоНаименованию(ЭлементДопСвойства.Ключ + " (" + Объект.ВидНоменклатуры + ")", Ложь);

    Если Не ЗначениеЗаполнено(ТекСвойство) Тогда
        Сообщить("Не удалось найти свойство: """ + ЭлементДопСвойства.Ключ + " (" + Объект.ВидНоменклатуры + ")""");
        Продолжить;
    КонецЕсли;


    МассивСтрок = Объект.ДополнительныеРеквизиты.НайтиСтроки(Новый Структура("Свойство", ТекСвойство));
    Если МассивСтрок.Количество() = 0 Тогда
        ДопРеквизит = Объект.ДополнительныеРеквизиты.Добавить();
    Иначе
        ДопРеквизит = МассивСтрок[0];
    КонецЕсли;
    ДопРеквизит.Свойство = ТекСвойство;
    ДопРеквизит.Значение = ТекстыЯчеек[ЭлементДопСвойства.Значение];

КонецЦикла;

Объект.Записать();
11 DmitriyDI
 
16.07.19
16:31
(10) Видимо не туда вставил или не так, потому что мой код в плане поиска свойства ничем не отличается от указанного в шапке.
12 oqjawa
 
16.07.19
16:40
Действительно, не туда вставил.. зато теперь выводит 1024 символа.. это и есть неограниченная длинна?
13 hhhh
 
16.07.19
16:55
(12) ну так в конфе задано для ДопРеквизит.Значение. там ни фига не неограниченное.
14 oqjawa
 
16.07.19
16:59
(13)странно, а руками спокойно позволяет вбить хоть больше 1024
15 oqjawa
 
16.07.19
17:10
ладно странно что он руками позволяет вбить больше 1024 при неограниченной длине когда не загружает больше 1024 символов..

но когда я ставлю ограничение 1024 и пытаюсь руками написать больше.. тоже даёт мне это сделать
16 DmitriyDI
 
16.07.19
17:18
(15) Надо попробовать сохранить больше чем 1024 и посмотреть в регистре ДополнительныеСведения как это выглядит и вообще сохранит ли он это значение?
17 hhhh
 
16.07.19
17:22
(16) всёж таки он не в регистр пишет, а в тч допреквизиты.
18 oqjawa
 
16.07.19
17:23
регистр пустой
19 oqjawa
 
16.07.19
17:23
ни одной записи
20 hhhh
 
16.07.19
17:24
(19) прикалываешься? тч дополнительные реквизиты, какой нахрен регистр?
21 trooba
 
16.07.19
17:30
(20) Он путает доп свойства с доп реквизитами, а они действительно в разных местах
22 oqjawa
 
16.07.19
17:33
(21) и в чем прикол?
23 oqjawa
 
16.07.19
17:34
(22) это может быть как то связано с тем что я немогу загрузить больше 1024 символов?
24 oqjawa
 
16.07.19
17:35
я сейчас серьёзно, не стебу, не язвлю скорее всего реально запутался
25 trooba
 
16.07.19
17:36
(23) Это связано с тем, что доп реквизиты в табличной части объекта расположены, а доп свойства в регистре.
26 oqjawa
 
16.07.19
17:39
ну мне же регистр и нафиг не нужен
27 hhhh
 
16.07.19
17:43
они просто издеваются, у них везде 1024. Номенклатура полное наименование 1024, описание тоже 1024. вот такая вот БСП.
28 DmitriyDI
 
16.07.19
18:25
(18) да, в тч надо смотреть на запись) сохраняется больше 1024?