|   |   | 
| 
 | 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 | 
        Нельзя полагаться на правильную сортировку строк файла эксель
 Что произойдет если группа еще не создана а уже пытаемся создать элемент в этой группе? Надо решать задачу в несколько проходов Сначала создаем группы первого уровня, затем второго и т.д. И уже после групп создаем элементы | 
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |