|
Как в массиве оставить только различные элементы? | ☑ | ||
---|---|---|---|---|
0
suvolod
19.06.12
✎
20:31
|
Вроде простая задачка, а с ходу решить не мог.
Есть Массив, в котором хранятся структуры вида ТекДанные=Новый Структура; ТекДанные.Вставить("Наименование", СокрЛП(Элем77.Наименование)); ТекДанные.Вставить("ЭтоГруппа", ЭтоГруппа); ТекДанные.Вставить("Родитель", СокрЛП(Элем77.Родитель.ТекущийЭлемент().Наименование)); это обязательные поля структуры.. + могут быть дополнительные поля (ИНН, КПП и т.д.), если текущая структура хранит данные о Элементе справочника (а не группе). Массив на самом деле создается Через ТЗ.ВыгрузитьКолонку(...), и в нем могут среди элементов появиться дубли. Не могу понять, как быстрее правильнее его очистить от этих дубликатов. Хотел запросом, нечто вроде: "ВЫБРАТЬ Различные * ПОМЕСТИТЬ ВремТаб ИЗ &ТЗ КАК ТЗ" .. ну и дальше, но ругается на Различные.. |
|||
1
Пеппи
19.06.12
✎
20:36
|
в смысле ругается? покажи запрос. Скорее всего ты неправильно запрос пишешь.
|
|||
2
Fragster
гуру
19.06.12
✎
20:38
|
ТМП = ТЗ.Скопировать(...)
ТМП.Свернуть(...) Массив = ТМП.ВыгрузитьКолонку(...) |
|||
3
НастоящееИмя
19.06.12
✎
20:38
|
а если ТЗ свернуть()
|
|||
4
suvolod
19.06.12
✎
20:41
|
(1) да нет, вроде правильно..
здесь скорее всего дело в несовместимости оператора "*" и Различные. Даже если отойти от моей задачи и в консоли запросов набрать запрос, например, ВЫБРАТЬ РАЗЛИЧНЫЕ * ИЗ Справочник.Контрагенты КАК Контрагенты; ... то та-же ошибка вылезет: В запросе с предложениями РАЗЛИЧНЫЕ или ОБЪЕДИНИТЬ нельзя использовать поля неограниченной длины |
|||
5
Пеппи
19.06.12
✎
20:48
|
(4) используй Выразить и ограничь длину этим длину
|
|||
6
suvolod
19.06.12
✎
20:51
|
проблема в том, что мне не понятно, на какую длину она ругается... В структуре только поля, полученные через СокрЛП, т.е. имеют ограниченную длину, так?
кроме этого, сами структуры разные.. в смысле в одной может быть только три поля, в другой - три обязательных + 4 дополнительных. |
|||
7
suvolod
19.06.12
✎
20:55
|
ладно, видимо запросом сделать это действительно не получиться. попробую объектную модель (ТЗ.Свернуть)
|
|||
8
guevara74
19.06.12
✎
21:02
|
На самом деле надо в таблице значений ЯВНО определить типы колонок через ОписаниеТипов. Тогда загрузится нормально. И в запросе указывать не * а название полей. И сначала целиком грузаните таблицу а потом из нее делайте Выбрать различные
|
|||
9
m-serg74
19.06.12
✎
21:05
|
(0) а зачем массив структур, может проще таб. знач, с определенным набором колонок?
|
|||
10
m-serg74
19.06.12
✎
21:09
|
и вот это - "ТекДанные=Новый Структура" с точки зрения 1С будет генерировать новый объект, и даже если элементы двух структур будут идентичными, Структура1 всегда будет не равна Структура2
|
|||
11
ПесняПроЗайцев
19.06.12
✎
21:11
|
массив передать в запрос и выбрать различные.)
|
|||
12
m-serg74
19.06.12
✎
21:13
|
(11) да зачем? если он из ТЗ получает этот массив, отчего просто как в (2) не свернуть ТЗ?
|
|||
13
m-serg74
19.06.12
✎
21:15
|
а вообще ТС что то не договаривает
|
|||
14
ПесняПроЗайцев
19.06.12
✎
21:24
|
(13) да сам не знает, чего хочет.)
|
|||
15
chaplin-che
19.06.12
✎
21:32
|
Запрос не поймет никогда объект типа "структура", чеза херня тут написана. Поди пихает таблицу с необъявленным описанием типа в параметр запроса как таблицы.
|
|||
16
suvolod
19.06.12
✎
21:36
|
(10) Здесь вы оказались правы. Сейчас потестил, и понял что проглядел этот момент. Получается, хочешь-не хочешь придется определять структуру с максимально возможным количеством полей, даже если реально (для групп) будет использоваться всего три
|
|||
17
DrShad
19.06.12
✎
21:41
|
да что за бредовая ТЗ со структурами внутри? может задача изначально решается по-другому и проще?
|
|||
18
suvolod
19.06.12
✎
21:48
|
Делаю универсальную обработку переноса справочников из 7.7 в 8.2. (про КД2 знаю, но в данном случае не использовал).
Мне надо перенести иерархию. для этого сделал ТЗ, в каждой строке "сидит" элемент и его родители. Например, если Элем77.Уровень()=4, то он будет сидеть в колонке "А4", его родитель - в колонке "А3", родитель родителя - в колонке "А2" и т.д. Соответственно, когда весь справочник обработан (и создана ТЗ со всеми родителями), я поочередно обрабатываю ее колонки, начиная с "А1",что соответствует корневым элементам. Таким образом, обрабатывая далее остальные колонки ("А2","А3" и т.д), мы можем гарантировать, что все родители элементов из этих колонок уже существуют (созданы на предыдущем шаге итерации) Вот такая задачка... |
|||
19
DrShad
19.06.12
✎
21:49
|
неверное решение, про рекурсию слышал?
|
|||
20
suvolod
19.06.12
✎
21:50
|
Слышал. И даже сделал. Но она менее читабельна.
|
|||
21
suvolod
19.06.12
✎
21:51
|
и когда надо быстро переделать обработку под новую задачу (перегрузку какой-нибудь самописной конфы), полдня уходит на то, чтобы вспомнить код/разобраться где-что поправить.
|
|||
22
DrShad
19.06.12
✎
21:52
|
(21) лажа все, ничего никуда не уходит, если написать действительно грамотно
|
|||
23
DrShad
19.06.12
✎
21:54
|
т.е. даже из таблицы с двумя колонками, где в первой элемент, а во второй родитель, я тебе всегда загружу полную иерархию элементов и гарантированно верно
|
|||
24
DrShad
19.06.12
✎
21:55
|
а теперь давай начнем по порядку
через что работает твоя обработка? |
|||
25
suvolod
19.06.12
✎
21:56
|
не спорю :).. У меня не рекурсивная функция была, а Цикл
Пока Родитель.Уровень()>1 //создаем нового родителя Родитель=Родитель.Родитель и т.д. Через Com к семерке подключаюсь |
|||
26
DrShad
19.06.12
✎
21:57
|
ща, погодь, если через COM я те кину функцию, которая обходом по элементам создаст тебе всех родителей
|
|||
27
suvolod
19.06.12
✎
22:00
|
Спасибо, интересно будет посмотреть. В любом случае надо будет дописывать новую обработку.. Первая редакция сегодня умерла с сообщением "неверный формат хранилища данных", после того как на работе моргнул свет. Так что у нас уже первый час ночи, а приходиться переписывать
|
|||
28
DrShad
19.06.12
✎
22:03
|
твое мыло говорят не существует :)
|
|||
29
suvolod
19.06.12
✎
22:05
|
chromo sobaka mail.ru
|
|||
30
DrShad
19.06.12
✎
22:07
|
лови, давно писал, но действует безотказно
|
|||
31
Песец
19.06.12
✎
22:08
|
//Удаляет повторяющиеся элементы массива.
Функция УдалитьПовторяющиесяЭлементыМассива(Массив, НеИспользоватьНеопределено = Ложь) Экспорт Бухгалтерия предприятия КОРП, редакция 2.0 |
|||
32
suvolod
19.06.12
✎
22:10
|
Поймал, спасибо :). Буду смотреть
|
|||
33
DrShad
19.06.12
✎
22:13
|
(31) по сабжу не удалит!
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |