|
Добавление в форму с помощью цикла | ☑ | ||
---|---|---|---|---|
0
The_ka6a4ok
22.09.20
✎
12:37
|
Добрых дней. Есть задача, которая включает в себя добавление в форму нового элемента, элементов много и я хотел реализовать это с помощью цикла, то есть, сперва добавляешь все в массив, потом по длине массива создаешь цикл и соответственно в поля добавляешь элементы, хорошо, что в поля нужно добавлять одни и те же элементы, но проблема в другом, из всего массива в форму добавляется лишь последний элемент массива и я не понимаю почему, дойдет до того, что создам процедуру, которая будет призываться столько раз, сколько элементов массиве(война клонов).
p.s. не знаю как тут код красиво вставить, пока что не знаю, поэтому соре, вот код: Процедура КнопкаВыполнитьНажатие(Кнопка) пров = Справочники.Номенклатура.Выбрать(); //получаю имена товаров ПолучитьКод = Справочники.КлассификаторУКТВЭД.Выбрать(); //Получаю те коды, которые уже существуют в форме, чтобы не было дубликатов Форма = Справочники.КлассификаторУКТВЭД.ПолучитьФормуНовогоЭлемента(); //Получаю форму нового элемента ТестПоле = "#"; //Критерий поиска в строке массив = новый Массив(); //классные массивы - палками не бейте только тест = новый Массив(); тест1 = новый Массив(); тест2 = новый Массив(); Пока пров.Следующий() Цикл //знакомый всем процесс про = пров.ПолучитьОбъект(); Если Найти(про.Наименование, ТестПоле) Тогда массив.Добавить(про.Наименование); //добавляю все элементы прошедшие критерий Обрезание = Найти(про.Наименование, ТестПоле); //Отделяю код от наименования код = Лев(про.Наименование, Обрезание - 1); //присваиваю нужный формат под маску строки формы тест.Добавить(Лев(код, 4) + " " + Сред(код,5,2) + " " + Сред(код, 7, 2) + " " + Сред(код, 9, 2)); //добавляю все это в массив тест1.Добавить(СокрЛ(Прав(про.Наименование, СтрДлина(про.Наименование) - Обрезание))); //это массив наименований тест2.Добавить(код); //массив кодов с проблами, они тоже нужны, пробелы //про.Наименование = "Проверка"; //про.Записать(); //Сообщить(про.Наименование); //Сообщить(массив[25]); //Прервать; Иначе Продолжить; КонецЕсли; КонецЦикла; Сообщить("Кол-во элементов - " + массив.Количество()); //проверки Сообщить("Кол-во обрезанных до # - " + тест.Количество()); Сообщить("Кол-во обрезанных после # - " + тест1.Количество()); БезДублей = УбратьДублиИзМассива(тест); //удаляю дубли, функцию показывать бессмысленно БезДублейПробел = УбратьДублиИзМассива(тест2); Сообщить("Кол-во без дублей - " + БезДублей.Количество()); Пока ПолучитьКод.Следующий() Цикл ПоискЭлемента = БезДублей.Найти(ПолучитьКод.Код); //проверяю, есть ли такой элемент в массиве с нужными кодами, получаю индекс Если ПоискЭлемента = Неопределено Тогда //если нету, проверяю дальше Продолжить; Иначе БезДублей.Удалить(ПоискЭлемента); //если есть, удаляю такой элемент из массива без пробелов и с пробелами соответсвенно БезДублейПробел.Удалить(ПоискЭлемента); КонецЕсли; КонецЦикла; Сообщить("Кол-во элементов на добавление - " + БезДублей.Количество()); //проверяю так ли это Для Элемент = 1 По БезДублей.Количество() Цикл Форма.Открыть(); //открываю форму добавления нового элемента Форма.ЭлементыФормы.Код.Значение = БезДублей[Элемент - 1]; //в первое поле записываю нужный формат кода Форма.ЭлементыФормы.Наименование.Значение = БезДублейПробел[Элемент - 1]; //наименование Форма.ЭлементыФормы.НаименованиеПолное.Значение = БезДублейПробел[Элемент - 1]; //комментарий Форма.Записать(); //сохраняю и записываю Форма.Закрыть(); //закрываю КонецЦикла; КонецПроцедуры |
|||
1
Ёпрст
22.09.20
✎
12:40
|
(0) всё в топку
|
|||
2
Ёпрст
22.09.20
✎
12:40
|
от это, самый адок
Пока пров.Следующий() Цикл //знакомый всем процесс про = пров.ПолучитьОбъект(); |
|||
3
hhhh
22.09.20
✎
12:44
|
(0) Форма.ЭлементыФормы.Наименование.Значение = БезДублейПробел[Элемент - 1]; //наименование
здесь у вас получается все наимнования в одно поле пишете. Значит в итоге получаете последний ээлемент. Предыдущие сначала пишете, потом затираете |
|||
4
The_ka6a4ok
22.09.20
✎
12:49
|
(3) я ведь на начале цикла открыл форму, все нужное записал\сохранил и закрыл форму, новый элемент цикла - новая форма, разве не такая логика, я так понимаю что нет?
|
|||
5
The_ka6a4ok
22.09.20
✎
17:07
|
я разобрался, может кому поможет, в итоге что получалось, элементов много, а форма одна, значит нужно было сделать столько форм сколько и элементов:
Для Элемент = 1 По БезДублей.Количество() Цикл Форма = Справочники.КлассификаторУКТВЭД.ПолучитьФормуНовогоЭлемента(); //Получаю форму нового элемента Форма.Открыть(); //открываю форму добавления нового элемента Форма.ЭлементыФормы.Код.Значение = БезДублей[Элемент - 1]; //в первое поле записываю нужный формат кода Форма.ЭлементыФормы.Наименование.Значение = БезДублейПробел[Элемент - 1]; //наименование Форма.ЭлементыФормы.НаименованиеПолное.Значение = БезДублейПробел[Элемент - 1]; //комментарий Форма.Записать(); //сохраняю и записываю Форма.Закрыть(); //закрываю КонецЦикла; |
|||
6
polosov
22.09.20
✎
17:11
|
(5) Лютейшая дичь.
|
|||
7
FIXXXL
22.09.20
✎
17:15
|
(5) а где добавление элементов?
|
|||
8
The_ka6a4ok
22.09.20
✎
17:28
|
(6) ахахах, юра - 1с-программист, писать в лс
|
|||
9
polosov
22.09.20
✎
17:37
|
(8) Юра, мозги жалко свои, если честно. Я конечно понимаю, новичок и все такое. Мне не под силу стерпеть такие извращения.
|
|||
10
The_ka6a4ok
22.09.20
✎
17:41
|
когда-нибудь я найду нормально решение, но сейчас работает, а значит лучше не трогать (9)
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |