Заказы на доработку 1С (сервис удаленной работы)

Хранилище

База знаний
Неназначенных незавершенных заказов: 1
Бесплатные отчеты, обработки, конфигурации, внешние компоненты для 1С Статьи, описание работы, методики по работе с 1С

Здравствуйте, гость ( Вход | Зарегистрироваться )



> работа с массивами структурного типа          
Svetas_2024 Подменю пользователя
сообщение 02.01.24, 15:27
Сообщение #1

Общительный
**
Группа: Пользователи
Сообщений: 48
Спасибо сказали: 0 раз
Рейтинг: 0

Добрый день, уважаемые форумчани. Прошу помощи
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 Тогда
                                   номенклат_ед.Добавить(Элт);
                     конецЕсли;
            
            конеццикла;    //обшая таблица

andr_andrey Подменю пользователя
сообщение 02.01.24, 21:30
Сообщение #2

Почти ветеран
Иконка группы
Группа: Местный
Сообщений: 626
Спасибо сказали: 166 раз
Рейтинг: 130.8

Svetas_2024 @ Сегодня, 15:27 * ,
Возможно, если бы вы перефразировали "массив структурного типа" на понятия из области задачи/процесса, то можно было бы вам помочь.
Скорее всего, использование массива при поиске и сопоставлении - не самое правильное решение, возможно лучше использовать другие подходящие коллекции.


Signature
#define private public
enum BOOL { FALSE, TRUE, FILENOTFOUND } is made my day

Не нашли ответа на свой вопрос?
Зарегистрируйтесь и задайте новый вопрос.


Ответить Новая тема
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 

RSS Текстовая версия Сейчас: 28.04.24, 0:02
1С Предприятие 8.3, 1С Предприятие 8.2, 1С Предприятие 8.1, 1С Предприятие 8.0, 1С Предприятие 7.7, Литература 1С, Общие вопросы по администрированию 1С, Методическая поддержка 1С - всё в одном месте: на Украинском 1С форуме!