Вход | Регистрация
 
1С:Предприятие :: 1С:Предприятие 8 общая

Заполнение доп. реквизитов через обработку Загрузка данных из ТД

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

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

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

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

КонецЦикла;

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


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

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

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

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

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


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

КонецЦикла; 

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

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

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

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


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

КонецЦикла; 

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

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


Список тем форума
Рекламное место пустует  Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.