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

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 879 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 Сейчас в теме
Можно ли При изменении текущей строки делить ее?Обращаться через Элементы.?
Оставьте свое сообщение

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