Добрый день, уважаемые форумчани. Прошу помощи
1С:Предприятие 8.3 (8.3.15.1869), "Управление производственным предприятием для Украины", редакция 1.3 (1.3.66.1) , формы обычные (не управляемые)
Задача "массив структурного типа (массив элементов номенклатуры имеет структуру -
"перечень обязательных" характеристик полей ) и по ключу "свойства" имеет вложенный массив другого структурного типа (настроек пользователя) для всех характеристик полей"
Т.е.
есть структура элементов массива (Элт_зн) которая хранит настройки пользователя для каждого типа характеристик номенклатурной единицы - с формы
есть структура обязательных полей элементов номенклатуры, которая хранит в себе по ключу "свойства" заполненный массив всех свойств вместе с настройками пользователя из структуры (Элт_зн)
структура полей номенклатуры находится в массиве номенклатуры.
Т.е. в массиве номенклатуры хранятся элементы имеющие определенные значения каждого поля согласно структуры обязательных полей и по ключу "свойства" массив всех свойств вместе с настройками пользователя для каждого свойства, количество которых может быть разное;
Проблема - "не получается очищать ключ "значения " из массив всех свойств , который хранится по ключу "свойства" каждого элемента массива номенклатуры " в случае перехода но новую единицу номенклатуры (очищается все значения по ключу "свойства" во всех элементах массива номенклатуры- т.е. в тех элементах которые уже были добавлены в массив в том числе, а нужно только очищать только перед добавлением новых элементов в массив номенклатуры). Т.е. чтобы каждый элемент массива номенклатуры содержал свой массив всех свойств с настройками пользователя, без значений свойств прошлых элементов массива.
функция ЗаменаЗначенияпоНазваниювМассиве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 Тогда
номенклат_ед.Добавить(Элт);
конецЕсли;
конеццикла; //обшая таблица