работа с массивами структурного типа

1. SvetaS2014 02.01.24 16:10 Сейчас в теме
Задача "массив структурного типа (массив элементов номенклатуры имеет структуру -
"перечень обязательных" характеристик полей ) и по ключу "свойства" имеет вложенный массив другого структурного типа (настроек пользователя) для всех характеристик полей"
Т.е.
есть структура элементов массива (Элт_зн) которая хранит настройки пользователя для каждого типа характеристик номенклатурной единицы - с формы

есть структура обязательных полей элементов номенклатуры, которая хранит в себе по ключу "свойства" заполненный массив всех свойств вместе с настройками пользователя из структуры (Элт_зн)

структура полей номенклатуры находится в массиве номенклатуры.

Т.е. в массиве номенклатуры хранятся элементы имеющие определенные значения каждого поля согласно структуры обязательных полей и по ключу "свойства" массив всех свойств вместе с настройками пользователя для каждого свойства, количество которых может быть разное;

Проблема - "не получается очищать ключ "значения " из массив всех свойств , который хранится по ключу "свойства" каждого элемента массива номенклатуры " в случае перехода но новую единицу номенклатуры (очищается все значения по ключу "свойства" во всех элементах массива номенклатуры- т.е. в тех элементах которые уже были добавлены в массив в том числе, а нужно только очищать только перед добавлением новых элементов в массив номенклатуры)

функция ЗаменаЗначенияпоНазваниювМассиве2(мсМассив,МсНазвание,МсЗначение,Мскод) Экспорт
	 перем кк;
	   кк=0;
	 Для Каждого Стр Из мсМассив Цикл
		 Если 	((Стр.код	= СокрЛП(Мскод) )  и (СтрДлина(Строка(Стр.значение))=0)) тогда 
			   Стр.значение= МсЗначение;
		 конецесли;
		 
     конеццикла;
    
	возврат  мсМассив;
конецфункции
функция ЗаменаЗначенияпоНазваниювМассиве3(мсМассив,МсНазвание,МсЗначение,Мскод) Экспорт
	 перем кк;
	   кк=0;
	 Для Каждого Стр Из мсМассив Цикл
		 Если 	(( Стр.наименование	= СокрЛП(МсНазвание))  и (СтрДлина(Строка(Стр.значение))=0)) тогда 
			   Стр.значение= МсЗначение;
		 конецесли;
		 
     конеццикла;
    
	возврат  мсМассив;
конецфункции


функция ОчиститьЗначенияпоНазваниювМассиве(мсМассив) Экспорт
	 перем кк;
	   кк=0;
	 Для Каждого Стр Из мсМассив Цикл
		 
			   Стр.значение="";
				 
     конеццикла;
    
	возврат  мсМассив;
конецфункции

Показать

	 мас_настроек=  ОпределитьПоляПользователя(ТЗ_показа);
            	  Для Каждого Строка из мас_настроек Цикл
			                   Элт_зн = Новый Структура("код,наименование,выбор,код_п,значение");
			                   Элт_зн.код = Строка.код;	
			                   Элт_зн.наименование =СокрЛП(Строка.наименование);
			                   Элт_зн.выбор = Строка.выбор;
                                           Элт_зн.код_п = Строка.код_п;
					   Элт_зн.значение = "";
                               если    ПоискНазваниявМассиве(мас_свойств,Элт_зн.наименование)=0 тогда
                                  мас_свойств.Добавить(Элт_зн);
			      конецесли; 
	              конеццикла;	   
								   
          конецесли;	
			 
						 
			 
			 
			Для Каждого Стр Из Tabb Цикл    //обшая таблица
			   если ПоискЗнМассиве2(мас_свойств,"Код",Стр.код)=0 тогда       // в случае если код поменялся очищаем массив
				
				  мас_свойств=ОчиститьЗначенияпоНазваниювМассиве(мас_свойств); 
               КонецЕсли;
				 СтруктураОтбора = Новый Структура;
                 СтруктураОтбора.Вставить("код", Стр.код);
                 найден_ном_ед = Tabb.НайтиСтроки(СтруктураОтбора);
				 
				     Для Каждого строка_ном Из найден_ном_ед Цикл    // выборка по одному коду
						 
						 Элт = Новый Структура ("артикул,код,наименование,рис,менеджер,файл,вес,SKU,родитель,вид_номенклатуры,сылка_картинка"); 
  						 Элт.артикул=строка_ном.Артикул;
                         Элт.код=строка_ном.Код;
                         Элт.наименование =  СокрЛП(строка_ном.Наименование);
                         Элт.рис= строка_ном.ОсновноеИзображение;
                         Элт.менеджер= строка_ном.ОтветственныйМенеджерЗаПокупки;
                         Элт.файл= строка_ном.ОсновноеИзображение.ИмяФайла;
                         Элт.вес =  строка_ном.Вес;
                         Элт.SKU=строка_ном.НоменклатурныеГруппы; 
                         Элт.родитель=строка_ном.Родитель;
                         Элт.вид_номенклатуры =  строка_ном.ВидНоменклатуры;
                         Элт.сылка_картинка =строка_ном.ОсновноеИзображение;
																		 
						 если     ПоискЗнМассиве2(мас_свойств,"Код",Стр.код)=0 тогда  
	  
								 мас_свойств=ЗаменаЗначенияпоНазваниювМассиве2(мас_свойств,СокрЛП(строка_ном[НомК_Свойство_n]),строка_ном[НомК_ЗначениеСвойство],СокрЛП(строка_ном[НомК_СвойствоКод]));
			                     мас_свойств=ЗаменаЗначенияпоНазваниювМассиве3(мас_свойств,"Код",строка_ном.Код,"");
								 мас_свойств=ЗаменаЗначенияпоНазваниювМассиве3(мас_свойств,"Артикул",строка_ном.Артикул,"");
								 мас_свойств=ЗаменаЗначенияпоНазваниювМассиве3(мас_свойств,"наименование",СокрЛП(строка_ном.Наименование),"");
								 мас_свойств=ЗаменаЗначенияпоНазваниювМассиве3(мас_свойств,"ОтветственныйМенеджерЗаПокупки",строка_ном.ОтветственныйМенеджерЗаПокупки,"");
								 мас_свойств=ЗаменаЗначенияпоНазваниювМассиве3(мас_свойств,"Вес",строка_ном.Вес,"");
								 мас_свойств=ЗаменаЗначенияпоНазваниювМассиве3(мас_свойств,"SKU",строка_ном.НоменклатурныеГруппы,"");
								 мас_свойств=ЗаменаЗначенияпоНазваниювМассиве3(мас_свойств,"Родитель",строка_ном.Родитель,"");
								 мас_свойств=ЗаменаЗначенияпоНазваниювМассиве3(мас_свойств,"вид_номенклатуры",строка_ном.ВидНоменклатуры,"");

						 иначеесли  ПоискЗнМассиве2(мас_свойств,"Код",Стр.код)=1 тогда 
								 мас_свойств=ЗаменаЗначенияпоНазваниювМассиве2(мас_свойств,СокрЛП(строка_ном[НомК_Свойство_n]),строка_ном[НомК_ЗначениеСвойство],СокрЛП(строка_ном[НомК_СвойствоКод]));
 
						конецесли;
  
						 my_мас_свойств=СкопироватьМассив(мас_свойств);
						 
                         Элт.Вставить("свойства",my_мас_свойств);
						 
			         конеццикла;         // выборка по одному коду
										
				     Если ПоискЗнМассиве(номенклат_ед,Элт.Код)=0 Тогда
				                   номенклат_ед.Добавить(Элт);
					 конецЕсли;
			
			конеццикла;    //обшая таблица
		 
	
Показать
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. user2033930 02.01.24 19:32 Сейчас в теме
Будьте добры научиться терминологии.
"массив структурного типа
1. Не бывает массива структурного типа. Бывает массив, элементами которого являются структуры.
структура элементов массива
2. Не бывает структуры элементов массива. Бывает структура, в значениях элементах которых содержатся массивы.
структура полей номенклатуры находится в массиве номенклатуры.
3. Про это вообще не знаю как прокомментировать.
Проблема - "не получается очищать ключ "значения "
4. Нельзя очистить ключ значения. можно удалить удалить целиком элемент КлючИЗначение.

И вообще какой-то непонятный поток сознания. Вам таким же языком задачи ставят?
3. SvetaS2014 02.01.24 19:45 Сейчас в теме
мне не нужно удалить ключ, мне нужно чтобы данные правильно записались... Вы поумнее ничего не могли ответить?
4. Sashares 35 02.01.24 21:16 Сейчас в теме
(3)Вас просят нормально сформулировать проблему чтобы вам же помочь. Вместо этого вы еще и ноете что вам не так отвечают? Отличная тактика. Продолжайте в том же духе.
5. user1880116 02.01.24 21:18 Сейчас в теме
(3)
Вы поумнее ничего не могли ответить?
Ой, всё!

Продирайтесь сами через вашу "постановку". Подивимся.
Оставьте свое сообщение

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