Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
22 ноя 2024, 17:04

"Обрезка" родителя при длине более 25 символа

Автор beztrud, 01 окт 2017, 20:31

0 Пользователей и 1 гость просматривают эту тему.

beztrud

Здравствуйте! 8.3. Управляемая форма, самописная конфигурация. Делаю выгрузку справочника запросом
   Выборка = Справочники.Номенклатура.Выбрать();
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| *
| ИЗ
| Справочник.Номенклатура КАК Номенклатура";
РезультатЗапроса = Запрос.Выполнить();
ТабЗнач = РезультатЗапроса.Выгрузить();
           Пока Выборка.Следующий() Цикл
Если Выборка.ЭтоГруппа = Ложь Тогда
Если НЕ Выборка.Родитель.Пустая()Тогда
                            СписокРодителей = Новый СписокЗначений;
     Родитель = Выборка.Родитель;
Пока ЗначениеЗаполнено(Родитель)  Цикл   
    СписокРодителей.Добавить(Родитель);
    Родитель = Родитель.Родитель;
// Сообщить(Родитель);
КонецЦикла;  
Массив=СтрРазделить(СписокРодителей,";",Ложь);
Строка="";
Количество=Массив.Количество();
Для ЕЕ=1 По Количество Цикл
     Строка=Строка+Массив[Количество-ЕЕ]+"/";   
     ИтоговаяСтрока = Лев(Строка,СтрДлина(Строка)-1);
КонецЦикла;

Так вот группа, полное наименование которой "Листовой и погонный материалы" превращается в "Листовой и погонный матер...". Так с любой группой, длина которой больше 25 символов. Группы, длина которых менее 25 символов выгружаются нормально. Причем наименования номенклатуры и другие НЕ стандартные реквизиты выгружаются полным наименованием, даже если их длина больше 25 символов, но эти реквизиты не помещены в цикл Пока ЗначениеЗаполнено(Родитель)  Цикл Вопрос. Какие-то ограничения на длину группы или что не так с
Пока ЗначениеЗаполнено(Родитель)  Цикл ?

AIFrame

А каким образом и с чего вы решили, что у вас реквизит ссылочного типа в иерархическом справочнике превращается в строку с длиной 25?
Может у вас просто там, где вы выводите, оно выводится как Представление(Ссылка) с длиной 25? Ну или просто ширины поля не хватает :D
Добавлено: 01 окт 2017, 21:51


Массив=СтрРазделить(СписокРодителей,";",Ложь);
                     Строка="";
                     Количество=Массив.Количество();
                     Для ЕЕ=1 По Количество Цикл
                         Строка=Строка+Массив[Количество-ЕЕ]+"/";   
                         ИтоговаяСтрока = Лев(Строка,СтрДлина(Строка)-1);
                     КонецЦикла;

И вот это лишнее.
Можно куда проще. Без размножения временных массивов.
     Запрос = Новый Запрос;
     Запрос.Текст =
     "ВЫБРАТЬ
     |     _.*
     | ИЗ
     |     Справочник.Номенклатура КАК _";
     Выборка = Запрос.Выполнить().Выбрать();
     Пока Выборка.Следующий() Цикл
         Если НЕ Выборка.ЭтоГруппа И НЕ Выборка.Родитель.Пустая() Тогда
            СтрокаДрева = "";
            ИНД = 1;   
            Родитель = Выборка.Родитель;
            Пока ЗначениеЗаполнено(Родитель)  Цикл   
                СтрокаДрева = ?(ИНД > 1, "/", "") + Родитель.Наименование;
                ИНД = ИНД + 1;
                Родитель = Родитель.Родитель;
            КонецЦикла;
            Сообщить(СтрокаДрева);
        КонецЕсли;
    КонецЦикла;
                                                     

Теги:

Похожие темы (5)

Рейтинг@Mail.ru

Поиск