8.х УНФ Загрузка номенклатуры из *.xls

Тема в разделе ""1С:Управление небольшой фирмой УНФ"", создана пользователем Sett, 21 май 2013.

  1. TopicStarter Overlay
    Sett
    Offline

    Sett Опытный в 1С

    Регистрация:
    4 апр 2013
    Сообщения:
    127
    Симпатии:
    0
    Баллы:
    26
    Здравствуйтесм.!
    Скажите, а как загружая номенклатуру типовыми обработками сохранить иерархию? Есть файл в экселе и в нем номенклатура сгруппирована (см. приложение). Можно как-то загрузить ее таким образом, чтобы создались и группы и элементы в этих группах?
    Пробовал загрузить типовой обработкой в УНФ "ЗагрузкаИзЭлектронной таблицы" дык там надо файл в csv сохранять (разделитель <,>) и проставлять разделители.
    А типовая обработка "zagruzkadannykhiztablichnogodokumenta.8.2.epf" вообще сначала ругалась (план счетов не понравился ей), этот кусок закомментарил и все загрузилось, но без групп а в кучу.

    Вложения:

    • Скрин.jpg
      Скрин.jpg
      Размер файла:
      118,2 КБ
      Просмотров:
      58
  2. Tiger86
    Offline

    Tiger86 Модераторы Команда форума Модератор

    Регистрация:
    24 мар 2011
    Сообщения:
    6.407
    Симпатии:
    108
    Баллы:
    104
    Штатно - не вкурсе, а так теоретически можно подредактировать ее, по определенному условию распознавать групппы.
  3. Azamat
    Offline

    Azamat Опытный в 1С

    Регистрация:
    29 июл 2011
    Сообщения:
    271
    Симпатии:
    0
    Баллы:
    26
    Свою обработку написать, где делаешь проверку если единица измерения не заполнена, значит это папка иначе элемент, а родителя присваиваешь последнюю созданную папку
  4. TopicStarter Overlay
    Sett
    Offline

    Sett Опытный в 1С

    Регистрация:
    4 апр 2013
    Сообщения:
    127
    Симпатии:
    0
    Баллы:
    26
    Да наверное придется писать..
    Кстати, а как можно програмно узнать родителя в excel листе, если структура файла, такая, как в первом сообщении?
    Проверять на наличие ед. изм. не катит, ибо в файле и в справочнике иерархия групп и элементов.
    Пробегусь (программно) по всему документу, найду там только группы и создам их в справочнике. А потом еще раз пробегусь по документу и элементы создам с родителями ранее созданными..
    Ведь так?!
  5. Tiger86
    Offline

    Tiger86 Модераторы Команда форума Модератор

    Регистрация:
    24 мар 2011
    Сообщения:
    6.407
    Симпатии:
    108
    Баллы:
    104
    сразу в один проход все делайте. Примерно так
    идем по строкам сверху вниз.
    Перем Родитель = "";
    Считали строку ексель - смотрим есть ли ед.изм, если нет, то создаем Группу (если Не Родитель = "", тогда задаем у элемента родителя), тут же присваиваем ссылку на созданный элемент нашей переменной Родитель = ТекущийЭлементСсылка; Если задана единица измерения, то создаем элемент и обнуляем родителя Родитель = "";Переходим к ледующей строке и все повторяем.


    Зачем десять раз обходить файл?
  6. TopicStarter Overlay
    Sett
    Offline

    Sett Опытный в 1С

    Регистрация:
    4 апр 2013
    Сообщения:
    127
    Симпатии:
    0
    Баллы:
    26
    Судя по единицам измерения нельзя однозначно судить элемент нам встретился или группа.
    Может есть в экселе какой-нить метод типа
    Код:
    ExcelЛист.Cells(1, 2).Value.Parent
    который вернет ячейку родителя?
    Ведь группировки же придумали какие-то..
  7. Tiger86
    Offline

    Tiger86 Модераторы Команда форума Модератор

    Регистрация:
    24 мар 2011
    Сообщения:
    6.407
    Симпатии:
    108
    Баллы:
    104
    не могу сказать - не сталкивалась, а почему неьзя однозначно судить по единицам измерения? судя по вашей картинке - дела именно так обстоят... да и в справочнике врядли у группы вы ставите единицы измерения
  8. TopicStarter Overlay
    Sett
    Offline

    Sett Опытный в 1С

    Регистрация:
    4 апр 2013
    Сообщения:
    127
    Симпатии:
    0
    Баллы:
    26
    Извиняюсь - скриншот не совсем показателен.. там дальше есть элемент с ед.измерения в подчинении у него несколько элементов.
  9. Tiger86
    Offline

    Tiger86 Модераторы Команда форума Модератор

    Регистрация:
    24 мар 2011
    Сообщения:
    6.407
    Симпатии:
    108
    Баллы:
    104
    тогда советую посмотреть еще реквизит с единицами измерения в справочнике доступен ли для групп
  10. TopicStarter Overlay
    Sett
    Offline

    Sett Опытный в 1С

    Регистрация:
    4 апр 2013
    Сообщения:
    127
    Симпатии:
    0
    Баллы:
    26
    Пробую определить последнего родителя сравнивая цвета ячеек.
    Очень криво выглядит и еще хуже работает. группы создаются, но те так, как в документе. Подскажите? наверное алгоритм не верный.

    Код:
     Для Строка = 6 По ExcelПоследняяСтрока Цикл
    Номен=ExcelЛист.Cells(Строка, 2).Value;
    ЕИ=ExcelЛист.Cells(Строка, 3).Value;
    Ф=Строка-1;														  
    РодНомен="";
    Пока Ф>=5 Цикл					//тут ф типа итератор думаю пробежать от тек.строки снизу вверх пок
    Если ExcelЛист.Cells(Ф, 2).Interior.ColorIndex<>ExcelЛист.Cells(Строка, 2).Interior.ColorIndex Тогда //тут смотрим цвета обоих ячеек и если они различны - значит нашли родителя
    РодНомен=ExcelЛист.Cells(Ф, 2).Value;
    Прервать;
    Иначе
    Ф=Ф-1;															//тут  уменьшаем ф чтобы цикл снизу вверх был
    КонецЕсли;  
    КонецЦикла;
    Если Справочники.Номенклатура.НайтиПоНаименованию(СокрЛП(Номен))=Справочники.Номенклатура.ПустаяСсылка() Тогда
    Если ЕИ=Неопределено Тогда
    НГ=Справочники.Номенклатура.СоздатьГруппу();
    НГ.Наименование=СокрЛП(Номен);
    РодНГ=Справочники.Номенклатура.НайтиПоНаименованию(СокрЛП(РодНомен));
    Если РодНГ=Неопределено Тогда
    НГ.Родитель=Справочники.Номенклатура.ПустаяСсылка();
    Иначе
    НГ.Родитель=?(РодНГ.ЭтоГруппа,РодНГ,Справочники.Номенклатура.ПустаяСсылка());
    КонецЕсли;
    Попытка
    НГ.Записать();
    Сообщить("Создана группа "+НГ.Наименование);
    Исключение
    Сообщить(ОписаниеОшибки());
    КонецПопытки;
    Иначе
    НЭЛ=Справочники.Номенклатура.СоздатьЭлемент();
    НЭЛ.Наименование=СокрЛП(Номен);
    РодНЭЛ=Справочники.Номенклатура.НайтиПоНаименованию(СокрЛП(РодНомен));
    НЭЛ.ЕдиницаИзмерения=Справочники.КлассификаторЕдиницИзмерения.шт;
    НЭЛ.НаименованиеПолное=СокрЛП(Номен);
    НЭЛ.НоменклатурнаяГруппа=Справочники.НоменклатурныеГруппы.ОсновнаяГруппа;
    НЭЛ.ТипНоменклатуры=Перечисления.ТипыНоменклатуры.Запас;
    НЭЛ.СпособПополнения=Перечисления.СпособыПополненияЗапасов.Закупка;
    НЭЛ.МетодОценки=Перечисления.МетодОценкиЗапасов.ПоСредней;
    НЭЛ.СчетУчетаЗапасов=ПланыСчетов.Управленческий.ТоварыПродукция;
    НЭЛ.СчетУчетаЗатрат=ПланыСчетов.Управленческий.КоммерческиеРасходы;
    НЭЛ.СтавкаНДС=Справочники.СтавкиНДС.НайтиПоНаименованию("Без НДС");
    НЭЛ.Склад=Справочники.СтруктурныеЕдиницы.ОсновнойСклад;
    РодНЭЛ=Справочники.Номенклатура.НайтиПоНаименованию(СокрЛП(РодНомен));
    Если РодНЭЛ=Неопределено Тогда
    НЭЛ.Родитель=Справочники.Номенклатура.ПустаяСсылка();
    Иначе  
    НЭЛ.Родитель=?(РодНЭЛ.ЭтоГруппа,РодНЭЛ,Справочники.Номенклатура.ПустаяСсылка());
    КонецЕсли;
    Попытка
    НЭЛ.Записать();
    Сообщить("Создан элемент "+НЭЛ.Наименование);
    Исключение
    Сообщить(ОписаниеОшибки());
    Прервать;
    КонецПопытки;
    КонецЕсли;
    КонецЕсли;
    КонецЦикла;
    
    Цикл в цикле, конечно, ботва..
    А пока ничего умного не идет в голову

Поделиться этой страницей