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

Обрезает строку неограниченной длины

Обрезает строку неограниченной длины
Я
   Mechanik21
 
18.06.20 - 15:10
На форме происходит загрузка текста Устава из макетов разделов.
Для хранения Устава используется таблица СодержаниеРазделов, в которой есть реквизит СодержаниеПункта.
Раньше в объекте формы для каждого раздела существовало по таблице.
Раньше код работал так:
1) В новый табличный документ получался макет с содержанием раздела.
2)Табличный документ с помощью построителя отчета преобразовывался в ТЗ.
3) ТЗ загружалось в соответствующую таблицу раздела: Объект.<РазделУстава>.Загрузить(ТЗ);
Потом сказали, что всё должно быть динамично - переделал на две таблицы (разделы и содержание разделов), чтобы юзер мог сам добавлять разделы и пункты.
Теперь происходит вот что.
1) В новый табличный документ получается макет с содержанием раздела. (так же как раньше)
2)Табличный документ с помощью построителя отчета преобразовывается в ТЗ.(так же как раньше)
3)В новую таблицу значений (ИтоговаяТаблица), никак не привязанную ни к форме ни к объекту, дописываются пункты нового раздела. Различаются по колонке "наименование раздела". Дописываются просто циклом.
4)Итоговая таблица загружается в Табличную часть объекта: Объект.СодержаниеРазделов.Загрузить(ИтоговаяТаблица).

Но если в первом варианте все работало без нареканий, то во втором внезапно содержание пунктов стало обрезаться 525 символами. А у меня есть пункты и по 2000 симв. Строки типа неограниченной длины и в СодержаниеРазделов (указано в свойствах) и в ИтоговойТаблице ( Новый ОписаниеТипов("Строка",,,,Новый КвалификаторыСтроки()) )
В чём может быть причина?
   Ёпрст
 
1 - 18.06.20 - 17:08
(0) а где видно эти содержания пунктов ?
и писать новый квалификтоарстроки не надо
   Ёпрст
 
2 - 18.06.20 - 17:09
достаточно ОписаниеТипов("Строка")
   Ёпрст
 
3 - 18.06.20 - 17:09
или вообще не типизировать, если в запрос не пихаешь
   Mechanik21
 
4 - 19.06.20 - 09:20
(1) сначала указывал Новый ОписаниеТипов("Строка") не помогло
потом Новый ОписаниеТипов("Строка",,,,Новый КвалификаторыСтроки())
потом Новый ОписаниеТипов("Строка",,,,Новый КвалификаторыСтроки(20000))
потом стал проверять квалификаторы строки Новый ОписаниеТипов("" + ТипЗнч(НовоеСодержаниеРазделов.СодержаниеПункта)+ "")
КвалификаторыСтроки.Длина = 0;
КвалификаторыСтроки.ДопустимаяДлина = Переменная
Обрезаться не должно вроде как, а режет
   Галахад
 
5 - 19.06.20 - 09:28
А реквизиты Объект.СодержаниеРазделов какого типа?
   sitex
 
6 - 19.06.20 - 09:29
(0) в Итоговая таблице все нормально все присутствует ?
   Mechanik21
 
7 - 19.06.20 - 09:39
(5) тут конкретно интересен реквизит СодержаниеПункта
у него Тип Строка
Длина 0
НеограниченнаяДлина = Истина
   Mechanik21
 
8 - 19.06.20 - 09:40
(6) в итоговой таблице содержание пункта обрезается до 525 символов в строке
   Mechanik21
 
9 - 19.06.20 - 09:41
(3) изначально вообще не типизировал, только когда заметил и начал копать
   sitex
 
10 - 19.06.20 - 09:43
(8) Тогда от сюда и начни копать. или код покажи. Гадать сложно...
   Mechanik21
 
11 - 19.06.20 - 09:45
Что ещё удалось выяснить:
Эксперимент вот такой проводил: ТипЗнч(Строка.СодержаниеПункта) = ТипЗнч(НовоеСодержаниеРазделов.СодержаниеПункта) выдаёт ложь
ТипЗнч(НовоеСодержаниеРазделов.СодержаниеПункта) = Не определено В два слова
НоваяСтрока = Строка.СодержаниеПункта - записывается всё нормально
А вот если НовоеСодержаниеРазделов.СодержаниеПункта = НоваяСтрока опять режет
   Mechanik21
 
12 - 19.06.20 - 09:47
[CODE]Для каждого Строка Из ТЗ Цикл
        НовоеСодержаниеРазделов = ТЗСодержаниеРазделов.Добавить();
        НовоеСодержаниеРазделов.Использовать = Строка.Использовать;
        НовоеСодержаниеРазделов.НаименованиеРаздела = Строка.НаименованиеРаздела;
        НовоеСодержаниеРазделов.НомерПунктаВУставе = Строка.НомерПунктаВУставе;
        
        //СодержаниеПунктаБуфер = Строка.СодержаниеПункта;

        
        //Проверка = ТипЗнч(НовоеСодержаниеРазделов.СодержаниеПункта) = ТипЗнч(Строка.СодержаниеПункта);

        
        НовоеСодержаниеРазделов.СодержаниеПункта = СодержаниеПунктаБуфер//обрезается вот здесь

        
        //Тип = Новый ОписаниеТипов("" + ТипЗнч(НовоеСодержаниеРазделов.СодержаниеПункта)+ "");

        //ЗаполнитьЗначенияСвойств(НовоеСодержаниеРазделов, Строка);

    КонецЦикла;
[/CODE]
   Mechanik21
 
13 - 19.06.20 - 09:49
ТЗ это таблица раздела, преобразованная из макета. Здесь всё нормально.
ТЗСодержаниеРазделов - ТЗ объявлена в коде, локальная переменная. В неё дописывается каждый раздел
   dka80
 
14 - 19.06.20 - 09:59
(13) код объявления ТЗСодержаниеРазделов покажи
   Mechanik21
 
15 - 19.06.20 - 10:01
(14) Изначально это была одна строка
ТЗСодержаниеРазделов = Новый ТаблицаЗначений;
 потом к ней добавилось
// добавим в таблицу значений колонки

ТЗСодержаниеРазделов.Колонки.Добавить("Использовать", Новый ОписаниеТипов("Булево")); 
ТЗСодержаниеРазделов.Колонки.Добавить("НаименованиеРаздела", Новый ОписаниеТипов("Строка",,,,Новый КвалификаторыСтроки()));
ТЗСодержаниеРазделов.Колонки.Добавить("НомерПунктаВУставе", Новый ОписаниеТипов("Строка",,,, Новый КвалификаторыСтроки(10)));
ТЗСодержаниеРазделов.Колонки.Добавить("СодержаниеПункта", Новый ОписаниеТипов("Строка")); с вариациями из (4) 

кстати первые данные в неё добавляются копированием
ТЗСодержаниеРазделов = ТЗОбщиеПоложения.Скопировать();

вдруг важно
   dka80
 
16 - 19.06.20 - 10:02
И да, вместо вот этого
НовоеСодержаниеРазделов.Использовать = Строка.Использовать;
НовоеСодержаниеРазделов.НаименованиеРаздела = Строка.НаименованиеРаздела;
НовоеСодержаниеРазделов.НомерПунктаВУставе = Строка.НомерПунктаВУставе;
НовоеСодержаниеРазделов.СодержаниеПункта = Строка.СодержаниеПункта;

лучше написать ЗаполнитьЗначенияСвойств(НовоеСодержаниеРазделов, Строка)
   sitex
 
17 - 19.06.20 - 10:02
(12) НовоеСодержаниеРазделов.СодержаниеПункта если режет именно в 525,  то явно указано именно значение где то.
   dka80
 
18 - 19.06.20 - 10:03
(15) ТЗСодержаниеРазделов.Колонки.Добавить("СодержаниеПункта");
   sitex
 
19 - 19.06.20 - 10:06
(15) Переименуй на время "СодержаниеПункта" в "СодержаниеПункта1" и посмотри что туда по длине падет.
   Mechanik21
 
20 - 19.06.20 - 10:18
В общем выяснилось.
Это из-за копирования.
В первой таблице, которую добавляю в Итоговую копированием самый длинный пункт как раз 525 символов.
Переписал на цикл первую таблицу - резать перестало
Всем спасибо!

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