Имя: Пароль:
1C
1С v8
Помогите с загрузкой из Excel в 1С
, ,
0 shaman_blr
 
07.02.23
14:50
Здравствуйте. Помогите с выгрузкой из excel в 1с.
Есть список: 1 колонка это код , 2 колонка это наименование.

A  фывфывфывв
01  фывфывфывфыв
01.1  фывфывфыв
01.11  фывфывфы
01.11.1  Пфывфывфы
01.11.11  фывфывфыв
01.11.11.100  фывфыфывфы

вот код
Процедура ПрочитатьВыбранныйФайл() Экспорт
    Прогресс=0;
    ТабДок = ПрочитатьТабличныйДокумент();
    Если не ТабДок=null тогда
        КоличествоСтрокТаблицы = ТабДок.ВысотаТаблицы;
        Для НомерСтрокиТаблицы = 2 по 15 цикл            
            
            
            Область = ТабДок.ПолучитьОбласть("R" + Формат(НомерСтрокиТаблицы,"ЧГ=0") + "C1");
            ТекущаяОбласть = Область.ТекущаяОбласть;
            Столбец2 = СокрЛП(ТекущаяОбласть.Текст);
            
            Область = ТабДок.ПолучитьОбласть("R" + Формат(НомерСтрокиТаблицы,"ЧГ=0") + "C2");
            ТекущаяОбласть = Область.ТекущаяОбласть;
            Столбец3 = СокрЛП(ТекущаяОбласть.Текст);
            Сообщить(Столбец2 +"  " + столбец3);
        
        КонецЦикла;
        Прогресс = 100;
        Предупреждение("Выполнено!!!");
        Прогресс = 0;
        
    КонецЕсли;
КонецПроцедуры

Вопрос таков.
Мне нужно чтобы эти поля записались как группа
A  
01  
01.1  
01.11  
01.11.1  
01.11.11

а это строчка последняя 01.11.11.100 чтобы была в группе 01.11.11
1 Злопчинский
 
07.02.23
14:53
то что ты написал - это не "выгрузкой из excel в 1с."
это загрузка из Экселя в 1С.
а то что ты написал - это когда Эксель пишет в 1С.
3 Kassern
 
07.02.23
14:55
(0) СтрРазделить по первой колонке, где разделитель это точка. Обходите массив и создаете нужную иерархию.
4 shaman_blr
 
07.02.23
14:56
(1) описался)
5 Kassern
 
07.02.23
14:56
(4) вас сейчас и тут не правильно поймут без ударения)
6 PR
 
07.02.23
14:59
Сложнее всего понять, что это конец и это уже должен быть элемент, а не группа
Для этого я бы смотрел следующую строку, на предмет того, это уже новая иерархия или нет
7 Kassern
 
07.02.23
15:02
(6) Можно сделать проще
Типа так:
Родитель="";
Для каждого ТекГруппа Из МассивГрупп Цикл
ТекГруппа=ПолучитьГруппу(ТекГруппа,Родитель);
Родитель=ТекГруппа;
КонецЦикла;

Тогда не нужно будет проверять конец это, или нет.
8 PR
 
07.02.23
15:04
(7) И что?
И как понять на каждом этапе, группу создавать или элемент?
9 Kassern
 
07.02.23
15:05
(8) Поиск по имени и родителю. Если нет, то создавать. Для этого и передается родитель в функцию
10 Kassern
 
07.02.23
15:06
(8) а вы про элемент/группа. Как я понял у него в 1 колонке иерархия, а элементы во второй.
11 mistеr
 
07.02.23
15:06
(0) Так чем отличается элемент от группы, если не ограничиваться одним примером?
Формализуй этот критерий, запиши псевдокодом, затем переложи на 1С.
12 Kassern
 
07.02.23
15:06
(10) если это не так, тогда да, нужно свойство передавать, элемент это, или группа.
13 mistеr
 
07.02.23
15:07
(10) Цитата: "1 колонка это код , 2 колонка это наименование"
14 shaman_blr
 
07.02.23
15:08
(10) НЕТ, 1 колонка это код иерархия а 2 это название его
15 PR
 
07.02.23
15:11
(10) Что именно тебе подсказало эту мысль?
У него в первой код, во второй наименование
И всё
16 Kassern
 
07.02.23
15:12
(13) Увидел. Ему тогда нужно как-то определить, что эти строки для группы, а это для элемента.
У вас точками регулируется уровень в иерархии. В этом случае просто проверяете последний ли это элемент массива, если так, это это элемент, иначе это группа.
17 PR
 
07.02.23
15:12
(11) Тем, что он последний в иерархии, понятно же
18 PR
 
07.02.23
15:13
(16) Какого массива?
19 Kassern
 
07.02.23
15:13
(18) СтрРазделить(СтрокаКолонки1,".");
20 Kassern
 
07.02.23
15:14
Единственное, нужно как-то определить, есть ли элементы на 1ом уровне. Если нет, то все просто.
21 mistеr
 
07.02.23
15:18
(17) Мне не понятно. Может там где-то дальше есть еще глубже :)
22 Kassern
 
07.02.23
15:19
(21) Поэтому придется вначале весь файл прочитать, а потом уже определять, где группа, а где элемент)
23 Kassern
 
07.02.23
15:20
Что за изврат делать это в экселе. Неужели так сложно простенький протокол написать на json/xml...
24 Kassern
 
07.02.23
15:26
Ну и следующие ожидаемые косяки, если это не разовая операция:
К примеру 01.11.11.100  фывфыфывфы  переместили в другую группу, следовательно у этой позиции код уже будет 02.21.11.200 К примеру. В этом случае, при загрузке, нафигачите кучу дублей.
25 Kassern
 
07.02.23
15:27
Если бы код у элементов отличался по структуре от групп, то тогда было бы гораздо проще и меньше косяков на выходе.
26 PR
 
07.02.23
16:01
(19) И что?
Как понять, последний элемент в массиве — это группа или элемент?
27 PR
 
07.02.23
16:02
(22) Что мешает смотреть следующую строку?
28 Kassern
 
07.02.23
16:03
(27) А где гарантия что файл упорядочен по группам и нет там такого?

A  фывфывфывв
01  фывфывфывфыв
01.1  фывфывфыв
01.11  фывфывфы
01.11.1  Пфывфывфы
01.11.11  фывфывфыв
01.11.11.100  фывфыфывфы
Б  фывфывфывв
01.11.11.100.50  фывфыфывфы
29 PR
 
07.02.23
16:13
(28) Да там вообще никаких гарантий
Вдруг 1с — это не программа Нуралиева
Вдруг иерархия элементов
Вдруг справочник подчинен другому и нужно еще владельца заполнять
Вдруг пустые строки есть
Вдруг еще триллион высосанных из пальца вдруг
30 Kassern
 
07.02.23
16:18
(27)  (29)  А вот и еще пример
A  Мебель
01  Мебель для дома
01.1  Кухня
01.11  Гарнитуры
01.11.1  Встроенная техника
01.11.1.10  Посудомойка (Элемент в группе "Встроенная техника")
01.11.20 Кухонный гарнитур Эконом (Элемент в группе "Гарнитуры")
01.11.11  Умывальники
01.11.11.100  Смеситель М1 (Элемент)
02  Мебель для Дачи
В общем, если есть элементы не в конечных группах, то тоже будет косяк.
Пускай ТС на своем примере проверяет, какая там иерархия в файле, обратит внимание на порядок, нахождение элементов в группах, а после уже ваяет решение. Подсказок итак много дали.
31 PR
 
07.02.23
16:21
(30) И что здесь такого?
Во всех трех случаях элемент легко вычисляется, потому что после него идет другая ветка групп
32 Kassern
 
07.02.23
16:21
+По-любому в этом файле есть и другие колонки, по которым можно понять элемент это, или группа. Всякие там цены, единицы изменения, штрихкоды и т.д.
33 PR
 
07.02.23
16:21
+(31) Только вместо 11 нужно было написать 1.1
34 Kassern
 
07.02.23
16:24
(31) Это сработает, если нет конечных групп без элементов. Я за годы столько изврата повидал, что там у ТС, только ему и известно.
35 Kassern
 
07.02.23
16:25
(31) Да взять банально A  Мебель  - как понять, это элемент без родителя, или группа?
36 PR
 
07.02.23
16:25
(34) Естественно
Поэтому мы отталкиваемся от написанного в (0), то есть от того, что в конце элемент
37 Kassern
 
07.02.23
16:25
(35) Что скажет в этом случае следующая строчка?)
38 PR
 
07.02.23
16:26
(35) Группа, потому что первая строка
39 PR
 
07.02.23
16:27
(37) Если следующая строка в иерархии текущей, то текущая — это группа
40 Kassern
 
07.02.23
16:27
(39) Ну так у ТС вот так дела обстоят)
A  
01  
01.1
А не в иерархии 01, но почему-то ТС хочет, чтобы она группой стала
41 PR
 
07.02.23
16:28
(40) Блеать, см. (38)
42 PR
 
07.02.23
16:39
(40) А, сорри, не понял сразу
Ну, конкретно про этот тупняк с первой А, а потом 01, 01.1 и т. д. пусть ТС сам ищет истину в своем вермуте
43 Kassern
 
07.02.23
16:39
(41) Вы же понимаете, что это все сраные костыли? Дальше может быть Б и это элемент в корне, а не группа, в которой "блеать" идет 02....
Как вообще можно гадать сцуко по одному элементу и обезличенному тексту?
По уму должно быть на подобии:
{
  "groups": [
    {
      "id": "001",
      "parent_id": "",
      "Name": "Мебель"
    },
    {
      "id": "123",
      "parent_id": "001",
      "Name": "Для кухни"
    }
  ],
  "goods": [
    {
      "id": "01",
      "parent_id": "123",
      "Name": "Стол"
    },
    {
      "id": "02",
      "parent_id": "123",
      "Name": "Стул"
    }
  ]
}

Тогда никаких косяков не будет, разве что коды  групп и элементов могут пересекаться, а в 1с это 1 справочник. Для этого можно таблицу соответствия завести.
Основная теорема систематики: Новые системы плодят новые проблемы.