Разложить значение

1. Az18011993 26.03.20 13:22 Сейчас в теме
&НаСервере
Процедура ЗаполнитьТаблицуНаСервере()
    
           
    Запрос = Новый Запрос;
    Запрос.Текст = 
        "ВЫБРАТЬ
        |    Номенклатура.Ссылка КАК Ссылка,
        |    Номенклатура.Артикул КАК Артикул,
        |    Номенклатура.Родитель.Ссылка КАК РодительСсылка
        |ПОМЕСТИТЬ ВТНоменклатура
        |ИЗ
        |    Справочник.Номенклатура КАК Номенклатура
        |;
        |
        |////////////////////////////////////////////////////////////­////////////////////
        |ВЫБРАТЬ
        |    ХарактеристикиНоменклатуры.Ссылка КАК Ссылка
        |ПОМЕСТИТЬ ВТХарактеристики
        |ИЗ
        |    Справочник.ХарактеристикиНоменклатуры КАК ХарактеристикиНоменклатуры
        |;
        |
        |////////////////////////////////////////////////////////////­////////////////////
        |ВЫБРАТЬ
        |    ВТНоменклатура.Ссылка.Артикул КАК Артикул,
        |    ВТНоменклатура.Ссылка.Родитель.Наименование КАК ГруппаНоменклатуры,
        |    ВТНоменклатура.Ссылка КАК Наименование,
        |    ВТХарактеристики.Ссылка.Наименование КАК Размер
        |ИЗ
        |    ВТНоменклатура КАК ВТНоменклатура
        |        ЛЕВОЕ СОЕДИНЕНИЕ ВТХарактеристики КАК ВТХарактеристики
        |        ПО ВТНоменклатура.Ссылка = ВТХарактеристики.Ссылка.Владелец.Ссылка";
    
    //Запрос.УстановитьПараметр("Ссылка", "&Ссылка");        

    РезультатЗапроса = Запрос.Выполнить();
    Таблица = РезультатЗапроса.Выгрузить();
    Для каждого СтрокаТЧ из Таблица цикл
        НоваяСтрока = Объект.КаталогНСИ.Добавить();
        //ЗаполнитьЗначенияСвойств(НоваяСтрока, СтрокаТЧ);
        НоваяСтрока.Размер = СтрокаТЧ.Размер;
        НоваяСтрока.Цвет = СтрокаТЧ.Размер;
        НоваяСтрока.Наименование = СтрокаТЧ.Наименование;
        НоваяСтрока.Артикул = СтрокаТЧ.Артикул;
        НоваяСтрока.ГруппаНоменклатуры = СтрокаТЧ.ГруппаНоменклатуры;
    КонецЦикла;
    //ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
    //
    //Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
    //    // Вставить обработку выборки ВыборкаДетальныеЗаписи
    //КонецЦикла; 
КонецПроцедуры


Показать

В общем написал код для заполнения таблицы,но возникла задача, у меня в строки "Размер" и "Цвет" заполняются значениями(допустим " 46, красный")
Как можно разделить строку,чтобы 46 шло в колонку размер,а красный в колонку цвет?
Знаю что есть функция глРазложить(Стр Знч,Разделитель)
Но как мне ее применить,если у меня заполнение идет на сервере?
По теме из базы знаний
Найденные решения
3. Az18011993 26.03.20 13:52 Сейчас в теме
(2)Да тут дело в том,что я не пойму где мне вызвать функцию расщепления,чтобы все корректно работало
У меня есть значение СтрокаТЧ.Размер
Есть функция глРазложить(Знч Стр,Разделитесь)
Пробовал сделать глРазложить(СтрокаТЧ.Размер, ",");
Но не тут то было,он не знает данную функцию:)
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. koln 26.03.20 13:33 Сейчас в теме
(1) Если конфигурация на БСП, то СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок
3. Az18011993 26.03.20 13:52 Сейчас в теме
(2)Да тут дело в том,что я не пойму где мне вызвать функцию расщепления,чтобы все корректно работало
У меня есть значение СтрокаТЧ.Размер
Есть функция глРазложить(Знч Стр,Разделитесь)
Пробовал сделать глРазложить(СтрокаТЧ.Размер, ",");
Но не тут то было,он не знает данную функцию:)
4. koln 26.03.20 13:57 Сейчас в теме
(3) У Вас есть общий модуль "СтроковыеФункцииКлиентСервер"?
5. Az18011993 26.03.20 13:59 Сейчас в теме
7. koln 26.03.20 14:06 Сейчас в теме
(5) В таком случае, в любом месте конструкции
    Для каждого СтрокаТЧ из Таблица цикл
    КонецЦикла;
, до присвоения значения "НоваяСтрока.Размер" и "НоваяСтрока.Цвет" прописываете строку типа
МассивПодстрок = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(СтрокаТЧ.Размер)

В качестве разделителя в данной функции по умолчанию указана "," Если у Вас другой разделитель, то передаете его в качестве второго параметра.
Затем обходите коллекцию значений полученного массива или, если не хотите использовать "цикл в цикле", присваиваете значения реквизитам "НоваяСтрока.Размер" и "НоваяСтрока.Цвет" используя индекс значений массива.
8. Az18011993 26.03.20 14:18 Сейчас в теме
(7)
МассивПодстрок = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(СтрокаТЧ.Размер)

НоваяСтрока.Размер = МассивПодстрок[индекс]?
9. koln 26.03.20 14:30 Сейчас в теме
(8)Да, но у Вас, судя по скрину, три значения в строке - два числа и текст, и все разделены запятой. Соответственно, вернется массив с тремя значениями. Вероятно, что из значений с индексами 0 и 1 нужно будет строку собрать. Можно с помощью метода глобального контекста СтрСоединить
10. Az18011993 26.03.20 14:32 Сейчас в теме
(9)Да вроде что-то получилось)Это просто тестовая,у меня будет другой разделитель. Но вот вопрос,как избавиться от индексов массива в пустых значениях?
Прикрепленные файлы:
11. Az18011993 26.03.20 14:34 Сейчас в теме
Напишите ваше сообщение
(9)Просто думаю может быть условием?Или можно по-другому
12. koln 26.03.20 14:38 Сейчас в теме
(11) Тут нужно Вам самому уже смотреть, как корректно обработать полученный массив. Например, проверять по количеству элементов в массиве. Я не вижу все варианты, которые могут образоваться. Видел только скрин, по нему и писал информацию.
13. Az18011993 26.03.20 14:42 Сейчас в теме
(12)Да просто когда допустим значение пустое, он в него загоняет номер индекса массива?Это так должно быть?
14. koln 26.03.20 14:55 Сейчас в теме
(13)На сколько я знаю, так быть не должно. Отладчиком посмотрите, что в массиве, в качестве значения в этот момент передается.
16. Az18011993 26.03.20 15:06 Сейчас в теме
Напишите ваше сообщение
(14)Если я не прописываю МассивПодстрок.Добавить();
Причем 3 раза или 2,у меня выдется ошибка)А так вроде работает,просто интересно вообще как это работает то
17. Az18011993 26.03.20 15:07 Сейчас в теме
Напишите ваше сообщение
(14)Так то отладчиком я посмотрел,что да передаются значения в массив(строка разбивается на 3 строки) с индексами 0,1 и 2
18. Az18011993 26.03.20 15:10 Сейчас в теме
Напишите ваше сообщение
(14)А,кажется понял,в общем,если пустое значение он не понимает чем заполнять и приходится прописывать каким значением заполнять массив)
Если я все правильно понял.
19. koln 26.03.20 15:14 Сейчас в теме
(18)Поэтому, предварительно проверяйте по количеству элементов в массиве, например
КоличествоЭлементовМассива = МассивПодстрок.Количество();

Индекс не должен выходить за пределы. Т.е. если у вас всего два элемента в массиве, то элемент с индексом 2 найден не будет, т.к. есть только элементы с индексами 0 и 1.
6. Az18011993 26.03.20 14:00 Сейчас в теме
Напишите ваше сообщение
(4)В общем мне нужно поделить это значение на два и перенести части так как на скриншоте
Прикрепленные файлы:
15. Az18011993 26.03.20 15:03 Сейчас в теме
Для каждого СтрокаТЧ из Таблица цикл
        НоваяСтрока = Объект.КаталогНСИ.Добавить();
        МассивПодстрок = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(СтрокаТЧ.Размер);
        МассивПодстрок.Добавить("");
        МассивПодстрок.Добавить("");
        МассивПодстрок.Добавить("");
        //ЗаполнитьЗначенияСвойств(НоваяСтрока, СтрокаТЧ);
        НоваяСтрока.Размер = МассивПодстрок[0]+ МассивПодстрок[1];
        НоваяСтрока.Цвет = МассивПодстрок[2];
        НоваяСтрока.Наименование = СтрокаТЧ.Наименование;
        НоваяСтрока.Артикул = СтрокаТЧ.Артикул;
        НоваяСтрока.ГруппаНоменклатуры = СтрокаТЧ.ГруппаНоменклатуры;
    КонецЦикла;

Показать

Просто не понял как работает
МассивПодстрок.Добавить
Без этой конструкции выдает ошибку.
20. koln 26.03.20 15:15 Сейчас в теме
(15)Тут ничего не нужно добавлять, а только использовать данные, которые вернулись в массиве.
21. Az18011993 26.03.20 15:20 Сейчас в теме
(20)Ну я пробовал без добавления,походу если характеристика отсутствует(цвет,размер) он выдет ошибку,а заполнять чем то нужно)Я думаю поэтому выдавало ошибку,что выходит за пределы массива
22. harmer 1 26.03.20 15:22 Сейчас в теме
Получение значения свойств характеристики из наименования - это очень плохое решение. Воспользуйтесь тем, что значения всех свойств характеристик уже хранятся в базе.
Например, в Управлении торговлей следующий запрос вернет цвета всех характеристик.


ВЫБРАТЬ
ХарактеристикиНоменклатурыДополнительныеРеквизиты.Ссылка КАК Ссылка,
ХарактеристикиНоменклатурыДополнительныеРеквизиты.Свойство КАК Свойство,
ХарактеристикиНоменклатурыДополнительныеРеквизиты.Значение КАК Значение
ИЗ
Справочник.ХарактеристикиНоменклатуры.ДополнительныеРеквизиты КАК ХарактеристикиНоменклатурыДополнительныеРеквизиты
ГДЕ
ХарактеристикиНоменклатурыДополнительныеРеквизиты.Свойство = &СвойствоЦвет


Аналогичным образом можно получить все размеры.

Соединяя полученные две таблицы с самой характеристикой, Вы получите значения свойств как отдельные колонки в таблице.
Прикрепленные файлы:
23. Az18011993 26.03.20 15:40 Сейчас в теме
(22)В Розницы,они вроде хранятся не в ДополнительныхРеквизитах
25. harmer 1 26.03.20 15:49 Сейчас в теме
(23) Ну не могут значения свойств храниться только в наименовании характеристики.

Розница 2.2:
Прикрепленные файлы:
26. Az18011993 26.03.20 16:10 Сейчас в теме
Напишите ваше сообщение
(25)Ваш запрос у меня не работает в Рознице,точнее там пустые значения(
А так да...Оказывается что-то хранится)Буду думать.
Спасибо
27. infosoft-v 958 28.03.20 09:25 Сейчас в теме
(22) очень правильный совет. Я бы ещё к вышеуказанному разместил реквизиты Цвет, Размер в доп реквизитах а не в доп полях и настроил шаблоны формирования наименования характеристики. Пример настройки тут https://drip-center.ru/articles/shablon-naimenovaniy-dlya-harakteristik-nomenklatury-v-1sut-8/
24. Az18011993 26.03.20 15:41 Сейчас в теме
Можно ли При изменении текущей строки делить ее?Обращаться через Элементы.?
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот