|
Как создать новый массив со значениями без цикла | ☑ | ||
---|---|---|---|---|
0
timeforlive
03.02.15
✎
13:47
|
Всем привет!
Сразу с примера: Процедура НоваяПроцедура() НовыйМассив = Новый Массив(); НовыйМассив[1].Добавить("значение1"); КонецПроцедуры Таким образом в 1С можно создать массив и добавлять в него значения, но это очень и очень не удобно, особенно, если нужно 1000 значений заполнить руками. Кто-то предложет сделать следующим образом: 1. создать файл Excel, внести туда данные 2. создать обработку, которая считывала бы данные и результатом бы создавала корректные текст Это конечно круто, но мне было проще сделать себе програмку в C#. Вот ссылка, если кому-то поможет (и не только по 1С): https://yadi.sk/d/aB-KPzzAeSCDi После обработки RenameText я для удобства использую программу Microsoft Excel с формулой: ="["&F1&"]" где F1 - это число от 1 до n (т.е. индекс массива) и программой SubLime: 1. скопировать текст 2. найти все TAB-отступы (Find All) - удалить их; П.С. можно средней кнопкой мыши выделять по вертикали текст Вот мой вопрос: можно ли как в C# указать в 1С значения массива без метода Добавить(), пример из C#: string[] str_ = {"знач1", "знач2", "знач3"}; |
|||
1
Cube
03.02.15
✎
13:50
|
(0) СП:
Массив (Array) По количеству элементов Синтаксис: Новый Массив(<КоличествоЭлементов1>,...,<КоличествоЭлементовN>) Параметры: <КоличествоЭлементов1>,...,<КоличествоЭлементовN> (необязательный) Тип: Число. Каждый параметр определяет количество элементов массива в соответствующем измерении. Может задаваться неограниченное количество параметров. Если ни один параметр не указан, то создается одномерный массив с нулевым количеством элементов. Описание: Создает массив из указанного количества элементов. Если задано несколько параметров, то будет создан массив, элементами которого являются массивы (и т.д. в зависимости от количества параметров). Фактически конструктор позволяет создать массивы массивов, которые могут являться аналогом многомерного массива. Пример: // массив с 0 элементами Массив1 = Новый Массив; // массив из 10 элементов, // каждый из которых является массивом из 2 элементов, // каждый из которых является массивом из 4 элементов Массив2 = Новый Массив(10,2,4); |
|||
2
ShoGUN
03.02.15
✎
13:53
|
(0) Нет. Мне, правда странно, что "Добавить" не устраивает, т.к. цикл проще, чем формирование выражения инициализации...
|
|||
3
ShoGUN
03.02.15
✎
13:54
|
А вообще, столбец Excel - это COMSafeArray, с которым можно работать из 1С, в т.ч. и выгружать в массив 1С.
|
|||
4
Rovan
гуру
03.02.15
✎
13:54
|
(0) "можно ли как в C# указать в 1С значения массива без метода Добавить(), пример из C#: "
Если это строки, то в типовых конфах есть функция отвечающая за это что-то типа масс= ИзСтрокиВМассив("Знач1,знач2,знач3"); *** Заполнить одним вызовом весь массив одним значением можно через Таблицу значений ТЗ.ЗаполнитьЗначения(Значение, Колонка); масс = ТЗ.ВыгрузитьКолонку(Колонка); |
|||
5
ShoGUN
03.02.15
✎
13:55
|
http://infostart.ru/public/20090/ - пища для размышления. Всё делается проще.
|
|||
6
nordbox
03.02.15
✎
13:58
|
а почему именно массив а не ТЗ ??
|
|||
7
ktvladimir
03.02.15
✎
14:03
|
кури в строну ЗначениеИзСтрокиВнутр, ЗначениеВСтрокуВнутр, посмотри как выглядит массив в строковом представлении, на дальше сообразишь)
|
|||
8
nordbox
03.02.15
✎
14:10
|
(7) это кому?
|
|||
9
FIXXXL
03.02.15
✎
14:37
|
(0)
Функция РазложитьСтрокуВМассивПодстрок(Знач Стр, Разделитель = ",") Экспорт МассивСтрок = Новый Массив(); Если Разделитель = " " Тогда Стр = СокрЛП(Стр); Пока Истина Цикл Поз = Найти(Стр,Разделитель); Если Поз=0 Тогда МассивСтрок.Добавить(Стр); Возврат МассивСтрок; КонецЕсли; МассивСтрок.Добавить(Лев(Стр,Поз-1)); Стр = СокрЛ(Сред(Стр,Поз)); КонецЦикла; Иначе ДлинаРазделителя = СтрДлина(Разделитель); Пока Истина Цикл Поз = Найти(Стр,Разделитель); Если Поз=0 Тогда МассивСтрок.Добавить(Стр); Возврат МассивСтрок; КонецЕсли; МассивСтрок.Добавить(Лев(Стр,Поз-1)); Стр = Сред(Стр,Поз+ДлинаРазделителя); КонецЦикла; КонецЕсли; КонецФункции // глРазложить |
|||
10
ktvladimir
03.02.15
✎
16:26
|
я к тому, что взять руками написать маленький массив преобразовать его в строку с помощью ЗначениеВСтрокуВнутр
увидеть что структура довольно простая и можно построить свою строку которую при помощи обратной функции ЗначениеИзСтрокиВнутр преобразовать в массив в исходной строке разделители меняем с помощью СтрЗаменить |
|||
11
Зеленый пень
03.02.15
✎
16:32
|
Я один не вкурил, зачем такой велосипед автору?
|
|||
12
ktvladimir
03.02.15
✎
16:32
|
так к примеру массив из 3 букв А, Б И В выглядит как
{"#",51e7a0d2-530b-11d4-b98a-008048da3034, {3, {"S","А"}, {"S","Б"}, {"S","В"} } } пустой массив как {"#",51e7a0d2-530b-11d4-b98a-008048da3034, {0} } итак разрядность получаем с помощью СтрЧислоВхождений делаем замены разделителя небольшие преобразования и получаем строку нужного массива который получаем обратной функцией ЗначениеИзСтрокиВнутр |
|||
13
ktvladimir
03.02.15
✎
16:33
|
как я понял есть строка данных разделенных неким разделитем, которую не обходимо загнать в массив для дальнейшей работы... может я и не прав)
|
|||
14
ShoGUN
03.02.15
✎
16:35
|
(12) Зачем? Зачем это нужно, когда (3)?
|
|||
15
ShoGUN
03.02.15
✎
16:35
|
+(14) Раз уж автор всё равно в эксель полез.
|
|||
16
Krolik Bezobraznik
03.02.15
✎
16:37
|
Автор знает толк в извращениях.
Автор, расскажи задачу то или это вопрос из серии "А что если жабе всунуть в задницу соломинку и надуть, поплывет она или нет?" |
|||
17
ktvladimir
03.02.15
✎
16:47
|
Откель я знаю) может он откажется от экселя. случаи бывают разные. Он предложил свой вариант, я предложил свой. кстати довольно шустрый). Любые вариации интересны тем, что расширяют знания. я к примеру не знал про (3) Не сильный знаток экселя... каждый раз гуглю.... но всегда легко гуглить когда знаешь что искать, так что за 3 спасибо одназначно
|
|||
18
ShoGUN
03.02.15
✎
16:52
|
(17) В (5) Готовая функция, добавь в закладки.
|
|||
19
ktvladimir
03.02.15
✎
17:03
|
ну собственно из 3 это уже проглядывало) Все равно спасибо.
итак соединение с экселем уже не быстрая операция. Смотря какая частота нужна.. ну и в данном случае есть выгрузка в эксель. а бывает зачастую что выгрузка просто в текстовые файлы). я же не знаю как изначально выглядит задача. Может есть некий транспортный файл, который ТС преобразовывает в csv и потом глядит в экселе). Идея (5) отлично, но не стоит зацикливаться одним экселем) |
|||
20
ktvladimir
03.02.15
✎
17:06
|
про эксель. У Вас есть уже опят с такой функцией? как она ведет себя в случае с форматированием? те наличием объединенных ячеек? часто приходят сторонние прайсы в виде экселя где есть объединения ячеек в заголовках, названиях колонок итд
|
|||
21
ShoGUN
03.02.15
✎
17:07
|
(20) Нормально ведёт, при объединении ячеек значение будет в верхней левой, остальные будут показываться пустыми(как и при любом другом методе чтения, собственно).
|
|||
22
ktvladimir
03.02.15
✎
17:17
|
учту в след раз попробую предварительно грузануть в тз.
|
|||
23
Classic
03.02.15
✎
17:27
|
(20)
Эксель зло. |
|||
24
timeforlive
04.02.15
✎
06:35
|
Вот вам задача, это не из серии (16).
Генерация названия. Для того, чтобы создавались из определенных значений (а не из случайных букв \ символов), то нужно создать массив с этими значениями. Так как значения уже есть, но не в корректном для 1С виде, то нужна была обработка. Если появится необходимость, сделаю обработку для выгрузки из Ексель дынных методом: - взять значение из ячейки - поставить ДО или ПОСЛЕ свое значение - следующая ячейка ... (18) а я добавил, спасибо (5) |
|||
25
DrZombi
гуру
04.02.15
✎
06:44
|
(24) >>> поставить ДО или ПОСЛЕ свое значение
Поставь, кто мешает? Но вот для чего лепить компот в (0) в замене текста кода. Ну а коль ты так любишь допиливать Код и далее его выполнять. А не заполнять все нормально и сразу. Вот: Выполнить() Выполнить (Execute) Выполнить (Execute) Синтаксис: Выполнить(<Строка>) Параметры: <Строка> Строка, содержащая текст исполняемого кода. Описание: Позволяет выполнить фрагмент кода, который передается ему в качестве строкового значения. Примечание: В режиме запуска веб-клиент оператор не поддерживается и его вызов игнорируется. |
|||
26
DrZombi
гуру
04.02.15
✎
06:44
|
+(25) Как пользоваться Выполнить, освоишь сам :)
|
|||
27
timeforlive
04.02.15
✎
07:57
|
Хм, интересно. Спасибо.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |