![]() |
|
v7: Загрузка справочника из excel Мультук, Garykom, zenik, takefive, ЯнСмит, Иваныч1975, eXstyle, d4rkmesa, Fedor-1971, NorthWind, uno-group, Волшебник, Maniac, KuznecovvIvan, ptiz, АгентБезопаснойНацио, Aleksey, Prog_man, ldo6, A_G, bolder, DimVad, GreyK, Олдж, Гость из Мариуполя, глазковыколупыватель, AndreyZhukov, kosmit, Builder, trdm, Amra, Chameleon1980, Fram, ALCAPONA, Kongo2019, maxab72, mishaPH, mmg, Irbis, s_trikozin, 2S, Злопчинский, Arh01, trad, AlexKimp, MWWRuza, Пеленг, Voronve, lucky_
| ☑ | ||
---|---|---|---|---|
0
eXstyle
08.05.25
✎
09:41
|
Здравствуйте. Есть документ excel из которого нужно загрузить группы и элементы.
пример справочника: 100 - группа 1 110 - Группа 2 у которой родитель группа 1 110.105.00 - Элемент 1 у которого родитель группа 2 120 - группа 3 у которой родитель группа 1 120.106.00 - Элемент 2 у которого родитель группа 3 200 - группа 4 210 - Группа 5 у которой родитель группа 4 210.105.00 - Элемент 1 у которого родитель группа 5 220 - группа 6 у которой родитель группа 4 220.106.00 - Элемент 2 у которого родитель группа 6 Процедура Выполнить() ExcelApp = СоздатьОбъект("Excel.Application"); Спр = СоздатьОбъект("Справочник.ОсновныеСредства"); Попытка Workbook = ExcelApp.Workbooks.Open("D:/os1.xlsx"); Лист = Workbook.Sheets(1); Для НомерСтроки = 2 По Лист.UsedRange.Rows.Count Цикл Название = Лист.Cells(НомерСтроки, 2).Value; Код = Лист.Cells(НомерСтроки, 1).Value; //*********Вот как тут прописать обработку?********* КонецЦикла; Workbook.Close(); Исключение КонецПопытки; ExcelApp.Quit(); КонецПроцедуры Подскажите, пожалуйста, как правильно написать обработку. |
|||
1
Волшебник
08.05.25
✎
09:43
|
Переходите на восьмёрку
|
|||
2
Злопчинский
08.05.25
✎
09:48
|
(0) и что именно непонятно?
Ты даже описать иерархию толком не смог. 200 - группа4 - какая нахер это четвертая группа? Это группа на том же уровне иерархии что и группа. При чем здесь счётчик групп? |
|||
3
eXstyle
08.05.25
✎
09:56
|
(2) Группа4 - это условно название группы, а не иерархия. И вместо того, что бы с порога хамить научись внимательно читать, т.к. там расписано нормально что и куда.
|
|||
4
Maniac
08.05.25
✎
09:58
|
(1) на восьмерке - таких загрузок встроенных нет))
|
|||
5
Злопчинский
08.05.25
✎
09:58
|
Прочитал код. Если код короткий - значит группа, если длинный - элемент
Округлил числовое значение кода вниз до сотен. Если округленное совпадает с исходным - группа первого уровня. Не совпадает - группа второго уровня. Создал группу с исходным значение кода. Если группа первого уровня - норм. Если группа второго уровня - по округленному коду нашел группу-родитель, запихнул в родителя для группы второго уровня. Если наткнулся на элемент - вырезал из кода элемента код группы, нашел группу-родитель, записал в родитель элемента. Задача разовая, скорость не важна. Хочешь красиво - можно кэшировать группу после создания, чтобы не искать ее для нижележащей иерархии. Можно с рекурсией нарисовать, можно без. Сиди и пиши. Задавай содержательные вопросы. |
|||
6
Злопчинский
08.05.25
✎
10:00
|
(3) там херня написана, а не нормально. Не хами учителю, выпорю. В такой задаче важны не наименования групп и элементов, а их коды и описание иерархии.
|
|||
7
Злопчинский
08.05.25
✎
10:01
|
Запихивать весь код в Попытку - так себе подход, говнокодом попахивает
|
|||
8
Мультук
гуру
08.05.25
✎
10:51
|
(0)
Начните с написания простейших функций для вашего импорта Затем приходите с готовым кодом. google: 1C 7.7 Функции работы со строками google: 1C 7.7 Создать группу справочника google: 1C 7.7 Найти группу справочника по коду Функция НайтиКодРодителя(код) //Лев , Найти КонецФункции Функция НайтиРодителяПоКоду(код) КонецФункции Функция ЭтоГруппа(код) КонецФункции |
|||
9
Злопчинский
08.05.25
✎
10:55
|
С ЭтоГруппа - может быть интересно ;-)
|
|||
10
uno-group
08.05.25
✎
11:16
|
если 7.7 не знаешь может быть проще обработать сам файл excel разбив его на 2-3. Первый группы. или группы 1 уровня.
2 подгруппы. 3 элементы. Потом его можно стандартными обработками для загрузки справочника из excel загрузить. |
|||
11
Maniac
08.05.25
✎
11:38
|
Могу предложить изврат))
Ставишь восьмерку - берешь готовую загрузку. Грузишь все. А потом из восьмерки в семерку готовое)) |
|||
12
Fedor-1971
08.05.25
✎
11:38
|
(0) для начала определись с видом кода справочника - во всём справочнике или в пределах подчинения
потом, запиши свою эксельку в таблицу значений, отсортируй её по коду и начинай перебирать строки (чисто для твоего примера): 1-й проход создаём группы, где нет в коде точек (по уму, сначала ищем, потом создаём) 2-й проход ищем группу родитель и создаём подчинённую группу 3-й ищем родителей и пишем конечные элементы Собственно, в твоём примере - коды в пределах подчинённости |
|||
13
Maniac
08.05.25
✎
11:39
|
Но зато сто пудово косяков не наделаешь. Хотя бы проверить и увидеть все сможешь.
|
|||
14
Chameleon1980
08.05.25
✎
11:43
|
(11) забыл: + покупаешь поделку известного автора
|
|||
15
Fedor-1971
08.05.25
✎
11:45
|
(13) ни что не мешает вывести на форму обработки таблицу значений с колонками кодов для иерархии и потом создать элементы
|
|||
16
Гость из Мариуполя
гуру
08.05.25
✎
12:41
|
(11) Жека, не в обиду будь сказано, но в 7.7 это (загрузка справочника из Excel) было сделано много лет назад, многократно и разными людьми. Я, если память не отказывает, даже на сайте Белова парочку подобного видел.
(0) автор, навскидку, первое попавшееся (и стоит всего ничего, сравнимо со стоимостью часа работы): https://infostart.ru/marketplace/74800/ (и, кстати, все эти "группа1", "группа2", "группа4" - не оттуда ли, с ИС? Уж больно схожи обозначения, вплоть до... :))) |
|||
17
eXstyle
08.05.25
✎
12:52
|
(11) - Спасибо, без этого хватает изврата=)
(16) - Нет, не оттуда. Вообще это классификатор ОС, которого нет. Вот и озадачили товарищи загрузить его=) Поэтому обозначения условное, но суть та же: Код | Название 100 | Группа1 110 | Подгруппа (Группа2 у которой родитель группа 1) 110.105.00 | Элемент 1 Ну и так далее. Если не совсем корректно изложил, то извиняюсь=) (12) (15) - Вот через ТЗ и начал писать, посмотрим что выйдет=) |
|||
18
Гость из Мариуполя
гуру
08.05.25
✎
13:55
|
Вообще это классификатор ОС
ОКОФ, что ли? хм.. мне мнилось, что в типовой бух 7.7 загрузка ОКОФ имеется из коробки. Но опять же - если память не подводит. |
|||
19
eXstyle
08.05.25
✎
14:24
|
(18) В том то и дело что нету. Типовая конфигурация для РБ.
|
|||
20
uno-group
08.05.25
✎
14:56
|
(19) типовая типовой рознь. в бух была в торг нет или наоборот уже не помню. опять же найти и скачать для РФ 5 минут дела и скопировать отчет
|
|||
21
eXstyle
08.05.25
✎
14:57
|
Все! Всем спасибо! Все сделал через таблицу значений=)
|
|||
22
Волшебник
08.05.25
✎
15:36
|
(21) Покажи программный код
|
|||
23
eXstyle
08.05.25
✎
15:57
|
Может и криво и косо но свою задачу он выполнил.
Если СтрДлина(Код) = 3 Тогда КД = Лев(Код,1); КД= КД + "00"; НКод = Код - КД; Если (НКод = 0) И (Спр.НайтиПоКоду(Код) = 0 )Тогда ТЗ.НоваяСтрока(); ТЗ.Код = Код; ТЗ.Название = Название; Спр.НоваяГруппа(); Спр.Код = ТЗ.Код; Спр.Наименование = Название; Спр.Записать(); Иначе Сообщить("Группа 1 существует"); КонецЕсли; Если (НКод > 0) И (Спр.НайтиПоКоду(Код) = 0) Тогда ННКод = Лев(Код,1) + "00"; ТЗ.НоваяСтрока(); ТЗ.Код = Код; ТЗ.Название = Название; ТЗ.Код2 = ННКод; Спр2 = СоздатьОбъект("Справочник.ОсновныеСредства"); Если Спр2.НайтиПоКоду(ТЗ.Код2) = 1 Тогда Спр.НоваяГруппа(); Спр.Код = ТЗ.Код; Спр.Наименование = Название; Спр.Родитель = Спр2.ТекущийЭлемент(); Спр.Записать(); КонецЕсли; Иначе Сообщить("Группа 2 существует"); КонецЕсли; КонецЕсли; Если (СтрДлина(Код) > 4) И (Спр.НайтиПоКоду(Код) = 0) Тогда ННКод = Лев(Код,1) + "00"; ТЗ.НоваяСтрока(); ТЗ.Код = Код; ТЗ.Название = Название; ТЗ.Код3 = Лев(Код,3); Спр3 = СоздатьОбъект("Справочник.ОсновныеСредства"); Если Спр3.НайтиПоКоду(ТЗ.Код3) = 1 Тогда Спр.Новый(); Спр.Код = ТЗ.Код; Спр.Наименование = Название; Спр.Родитель = Спр3.ТекущийЭлемент(); Спр.Записать(); КонецЕсли; Иначе Сообщить("Элемент существует"); КонецЕсли; |
|||
24
Garykom
гуру
08.05.25
✎
16:55
|
Нельзя полагаться на правильную сортировку строк файла эксель
Что произойдет если группа еще не создана а уже пытаемся создать элемент в этой группе? Надо решать задачу в несколько проходов Сначала создаем группы первого уровня, затем второго и т.д. И уже после групп создаем элементы |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |