Имя: Пароль:
1C
1С v8
Обрезает строку неограниченной длины
0 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
или вообще не типизировать, если в запрос не пихаешь
4 Mechanik21
 
19.06.20
09:20
(1) сначала указывал Новый ОписаниеТипов("Строка") не помогло
потом Новый ОписаниеТипов("Строка",,,,Новый КвалификаторыСтроки())
потом Новый ОписаниеТипов("Строка",,,,Новый КвалификаторыСтроки(20000))
потом стал проверять квалификаторы строки Новый ОписаниеТипов("" + ТипЗнч(НовоеСодержаниеРазделов.СодержаниеПункта)+ "")
КвалификаторыСтроки.Длина = 0;
КвалификаторыСтроки.ДопустимаяДлина = Переменная
Обрезаться не должно вроде как, а режет
5 Галахад
 
гуру
19.06.20
09:28
А реквизиты Объект.СодержаниеРазделов какого типа?
6 sitex
 
naïve
19.06.20
09:29
(0) в Итоговая таблице все нормально все присутствует ?
7 Mechanik21
 
19.06.20
09:39
(5) тут конкретно интересен реквизит СодержаниеПункта
у него Тип Строка
Длина 0
НеограниченнаяДлина = Истина
8 Mechanik21
 
19.06.20
09:40
(6) в итоговой таблице содержание пункта обрезается до 525 символов в строке
9 Mechanik21
 
19.06.20
09:41
(3) изначально вообще не типизировал, только когда заметил и начал копать
10 sitex
 
naïve
19.06.20
09:43
(8) Тогда от сюда и начни копать. или код покажи. Гадать сложно...
11 Mechanik21
 
19.06.20
09:45
Что ещё удалось выяснить:
Эксперимент вот такой проводил: ТипЗнч(Строка.СодержаниеПункта) = ТипЗнч(НовоеСодержаниеРазделов.СодержаниеПункта) выдаёт ложь
ТипЗнч(НовоеСодержаниеРазделов.СодержаниеПункта) = Не определено В два слова
НоваяСтрока = Строка.СодержаниеПункта - записывается всё нормально
А вот если НовоеСодержаниеРазделов.СодержаниеПункта = НоваяСтрока опять режет
12 Mechanik21
 
19.06.20
09:47
[CODE]Для каждого Строка Из ТЗ Цикл
        НовоеСодержаниеРазделов = ТЗСодержаниеРазделов.Добавить();
        НовоеСодержаниеРазделов.Использовать = Строка.Использовать;
        НовоеСодержаниеРазделов.НаименованиеРаздела = Строка.НаименованиеРаздела;
        НовоеСодержаниеРазделов.НомерПунктаВУставе = Строка.НомерПунктаВУставе;
        
        //СодержаниеПунктаБуфер = Строка.СодержаниеПункта;
        
        //Проверка = ТипЗнч(НовоеСодержаниеРазделов.СодержаниеПункта) = ТипЗнч(Строка.СодержаниеПункта);
        
        НовоеСодержаниеРазделов.СодержаниеПункта = СодержаниеПунктаБуфер;//обрезается вот здесь
        
        //Тип = Новый ОписаниеТипов("" + ТипЗнч(НовоеСодержаниеРазделов.СодержаниеПункта)+ "");
        //ЗаполнитьЗначенияСвойств(НовоеСодержаниеРазделов, Строка);
    КонецЦикла;
[/CODE]
13 Mechanik21
 
19.06.20
09:49
ТЗ это таблица раздела, преобразованная из макета. Здесь всё нормально.
ТЗСодержаниеРазделов - ТЗ объявлена в коде, локальная переменная. В неё дописывается каждый раздел
14 dka80
 
19.06.20
09:59
(13) код объявления ТЗСодержаниеРазделов покажи
15 Mechanik21
 
19.06.20
10:01
(14) Изначально это была одна строка
ТЗСодержаниеРазделов = Новый ТаблицаЗначений;
потом к ней добавилось
// добавим в таблицу значений колонки
ТЗСодержаниеРазделов.Колонки.Добавить("Использовать", Новый ОписаниеТипов("Булево"));
ТЗСодержаниеРазделов.Колонки.Добавить("НаименованиеРаздела", Новый ОписаниеТипов("Строка",,,,Новый КвалификаторыСтроки()));
ТЗСодержаниеРазделов.Колонки.Добавить("НомерПунктаВУставе", Новый ОписаниеТипов("Строка",,,, Новый КвалификаторыСтроки(10)));
ТЗСодержаниеРазделов.Колонки.Добавить("СодержаниеПункта", Новый ОписаниеТипов("Строка")); с вариациями из (4)

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

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

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