7.7 Классификатор ОКОФ 2017в 1С ПУБ, редакция 2.8

Тема в разделе "Общие вопросы "1С:Предприятие 7.7"", создана пользователем ProfforG, 15 мар 2017.

  1. TopicStarter Overlay
    ProfforG
    Offline

    ProfforG Опытный в 1С

    Регистрация:
    31 окт 2011
    Сообщения:
    149
    Симпатии:
    2
    Баллы:
    29
    Всем доброго времени суток!

    Ситуация: Есть 1С ПУБ, есть старый справочник ОКОФ, в обновлениях конфы классификатор старый, а мне нужен новый ОКОФ 2017 и его необходимо в базу прогрузить.

    Может есть у кого какие наработки? И было бы неплохо сам классификатор в файлике актуальный.
    Есть вот такой: см. во вложении, не знаю, актуальный или нет.

    Во франч отписался, они никак ответить не могут.

    Товарищи, что делать то?

    Вложения:

    • okof.rar
      Размер файла:
      222,1 КБ
      Просмотров:
      25
    Последнее редактирование: 15 мар 2017
  2. Хряк
    Offline

    Хряк Профессионал в 1С

    Регистрация:
    26 сен 2007
    Сообщения:
    1.546
    Симпатии:
    59
    Баллы:
    54
    ну, чё сказать...
    не пробовал из последнего обновления загрузить?

    если и там старый, то увы...
    Последнее редактирование: 16 мар 2017
  3. TopicStarter Overlay
    ProfforG
    Offline

    ProfforG Опытный в 1С

    Регистрация:
    31 окт 2011
    Сообщения:
    149
    Симпатии:
    2
    Баллы:
    29
    Помозговал вечерком... Буду пробовать новый классификатор спарсить из xml => Справочник ОКОФ в ПУБ, если удачно всё получится, выложу сюда обработку... =)
    --- Объединение сообщений, 16 мар 2017 ---
    не, в последнем релизе старый классификатор, в таком формате: хх_ххххххх
  4. Бухгалтерский угодник
    Offline

    Бухгалтерский угодник Администраторы Команда форума Администратор

    Регистрация:
    29 дек 2008
    Сообщения:
    22.453
    Симпатии:
    523
    Баллы:
    204
    Вот обработка загрузки их XML. ВНИМАНИЕ! Количество уровней справочника д.б. 10

    Вложения:

    • xml_okof.rar
      Размер файла:
      13,2 КБ
      Просмотров:
      49
    Vetei нравится это.
  5. Vetei
    Offline

    Vetei

    Регистрация:
    13 янв 2009
    Сообщения:
    6
    Симпатии:
    0
    Баллы:
    1
    уровней было 4 поставил 10, всё равно появляется ошибка
    Файл.Загрузить(ИмяФайла);
    {D:\1\ИМПОРТОКОФ.ERT(92)}: : xsi:nil attribute on element 'legal-ref' is invalid.
    [ <legal-ref xmlns="urn:uuid:4c9a8080-e11c-11dc-a7e6-0002a5d5c51b" xsi:nil="true"/> (error position = 84)]
    система server 2008r2 x64
    Последнее редактирование: 23 мар 2017
  6. TopicStarter Overlay
    ProfforG
    Offline

    ProfforG Опытный в 1С

    Регистрация:
    31 окт 2011
    Сообщения:
    149
    Симпатии:
    2
    Баллы:
    29
    товарищи, переписываю обработку на DOM. Пока начальство оторвало от задачи.
    Vetei нравится это.
  7. Бухгалтерский угодник
    Offline

    Бухгалтерский угодник Администраторы Команда форума Администратор

    Регистрация:
    29 дек 2008
    Сообщения:
    22.453
    Симпатии:
    523
    Баллы:
    204
    У вас проблемы с V7PLUS.DLL
  8. TopicStarter Overlay
    ProfforG
    Offline

    ProfforG Опытный в 1С

    Регистрация:
    31 окт 2011
    Сообщения:
    149
    Симпатии:
    2
    Баллы:
    29
    Попытался через выложенную обработку загрузить (предварительно увеличил уровни вложенности), загрузка не состоялась, посыпались ошибки.
    Решил свою написать, чтоб не сидеть в ожидании чуда, посмотрев как работает текущая.
  9. TopicStarter Overlay
    ProfforG
    Offline

    ProfforG Опытный в 1С

    Регистрация:
    31 окт 2011
    Сообщения:
    149
    Симпатии:
    2
    Баллы:
    29
    Может у кого-то есть и классификатор в xml ОКОФ 2017 года новый?
    С ошибками разобрался в старой обработке (обработка была под другую структуру xml-файла)
  10. Vetei
    Offline

    Vetei

    Регистрация:
    13 янв 2009
    Сообщения:
    6
    Симпатии:
    0
    Баллы:
    1
    вот

    Вложения:

    • okof.zip
      Размер файла:
      271,3 КБ
      Просмотров:
      35
  11. TopicStarter Overlay
    ProfforG
    Offline

    ProfforG Опытный в 1С

    Регистрация:
    31 окт 2011
    Сообщения:
    149
    Симпатии:
    2
    Баллы:
    29
    обработка не под этот файл) у меня такой же файл классификатора.

    Ладно, перепишем обработку)
  12. Vetei
    Offline

    Vetei

    Регистрация:
    13 янв 2009
    Сообщения:
    6
    Симпатии:
    0
    Баллы:
    1
    ещё такой нашёл

    Вложения:

    • okof_82.zip
      Размер файла:
      435,3 КБ
      Просмотров:
      21
  13. TopicStarter Overlay
    ProfforG
    Offline

    ProfforG Опытный в 1С

    Регистрация:
    31 окт 2011
    Сообщения:
    149
    Симпатии:
    2
    Баллы:
    29
    а это старый классификатор =)
  14. Vetei
    Offline

    Vetei

    Регистрация:
    13 янв 2009
    Сообщения:
    6
    Симпатии:
    0
    Баллы:
    1
    но с ним обработка выложенная Угодником отработала на ура )
  15. Vetei
    Offline

    Vetei

    Регистрация:
    13 янв 2009
    Сообщения:
    6
    Симпатии:
    0
    Баллы:
    1
    из бухгалтерии 7 выдрал
    содержит в себе новый классификатор Принят и введен в действие Приказом Росстандарта от 12.12.2014 г. N 2018-ст. Действует с 01.01.2017

    Вложения:

    • okof.zip
      Размер файла:
      212 КБ
      Просмотров:
      44
    Последнее редактирование: 29 мар 2017
  16. TopicStarter Overlay
    ProfforG
    Offline

    ProfforG Опытный в 1С

    Регистрация:
    31 окт 2011
    Сообщения:
    149
    Симпатии:
    2
    Баллы:
    29
    воу воу воу!
    Руки дошли!

    Практически сделал обработку под xml из 8.3.

    Где я не так делаю?! подскажите, товарищи...

    Код:
    i = 0;
        Анализатор=СоздатьОбъект("AddIn.XMLParser");
        Файл = Анализатор.СоздатьПоследовательноСчитываемыйДокумент();
        Файл.СвязатьСФайлом(ИмяФайла);
        ТипТега = Файл.Спуститься();
        Пока ТипТега <> 4 Цикл
            Если ТипТега <> 1 Тогда
                ТипТега = Файл.Следующий();
                Продолжить;
            КонецЕсли;
           
            ИмяТега = Файл.СвойстваТекущегоУзла.Имя;
           
            Если ИмяТега = "group" Тогда
                АтрибутТега = Файл.СвойстваТекущегоУзла.НаименованиеАтрибута(0);
                ЗначениеАтрибутаGroup = СокрЛП(Файл.СвойстваТекущегоУзла.ЗначениеАтрибута(0));
               
                Если ЗначениеАтрибутаGroup = "ОК 013-2014" Тогда
                    ЗначениеАтрибутаGroup = "ОК_013-2014";
                КонецЕсли;
               
                Если (АтрибутТега = "code") И (ЗначениеАтрибутаGroup = "ОК 013-94") Тогда
                    Прервать;
                Иначе
                    ЗначениеУровняВложенностиУзла = Файл.СвойстваТекущегоУзла.Уровень-2;
                    
                    Сообщить(ЗначениеАтрибутаGroup + " - " + ЗначениеУровняВложенностиУзла);
                    i = i + 1;
                    ТЗ.НоваяСтрока();
                    ТЗ.УстановитьЗначение(i,"Код",ЗначениеАтрибутаGroup);
                    ТЗ.УстановитьЗначение(i,"УровеньВложенности",ЗначениеУровняВложенностиУзла);
                       
                КонецЕсли;
               
            КонецЕсли;
           
            Если ИмяТега = "desc" Тогда
           
                ЗначениеТегаDesc = Файл.ТекущийЭлементВВидеОбъекта().Значение;
                Сообщить(ЗначениеТегаDesc);
                ТЗ.УстановитьЗначение(i,"Наименование",ЗначениеТегаDesc);
               
            КонецЕсли;
           
            Если ИмяТега = "group" Тогда
                Если Файл.ТекущийЭлементВВидеОбъекта().КоличествоПодчиненных() > 0 Тогда
                    Группа = 1;
                Иначе
                    Группа = 0;
                КонецЕсли;
                ТЗ.УстановитьЗначение(i,"Группа",Группа);   
            КонецЕсли;
           
            //Если ИмяТега = "amort-group" Тогда
            //    Сообщить(ИмяТега + " = " + Файл.СвойстваТекущегоУзла.ЗначениеАтрибута(0));
            //КонецЕсли;
           
            ТипТега = Файл.Спуститься();
    
            //СпрОКОФ.НоваяГруппа();
            //СпрОКОФ.УстановитьАтрибут("Код",ЗначениеАтрибутаGroup);
            //СпрОКОФ.УстановитьАтрибут("Наименование",ЗначениеТегаDesc);
            //СпрОКОФ.Записать();
           
        КонецЦикла;
    Если выполняю этот код, то выводится только 1 строка в ТЗ и с колонка "Наименование" пустая.
    Если вот это убираю: Файл.ТекущийЭлементВВидеОбъекта().КоличествоПодчиненных() , то создаётся ТЗ и полностью заполняется, но без параметра "Группа аль Элемент".

    Хотя вот это: Файл.ТекущийЭлементВВидеОбъекта().Значение - работает норм.

    Не могу понять почему так происходит, пособите, пжлст!

    Параметр "Группа" нужен для того чтобы в справочнике ОКОФ можно было ориентироваться "Группа" или "Элемент" создаётся.
  17. Бухгалтерский угодник
    Offline

    Бухгалтерский угодник Администраторы Команда форума Администратор

    Регистрация:
    29 дек 2008
    Сообщения:
    22.453
    Симпатии:
    523
    Баллы:
    204
    Зачем вам в цикле 2 условия по тегу "группа"?
  18. TopicStarter Overlay
    ProfforG
    Offline

    ProfforG Опытный в 1С

    Регистрация:
    31 окт 2011
    Сообщения:
    149
    Симпатии:
    2
    Баллы:
    29
    Я экспериментировал уже, это последний вариант. Изначально было так: Файл.ТекущийЭлементВВидеОбъекта().КоличествоПодчиненных я запихивал в 1 условие Тег=Group
  19. bear488
    Offline

    bear488

    Регистрация:
    9 июл 2015
    Сообщения:
    6
    Симпатии:
    0
    Баллы:
    1
    Взял за основу вариант выше.
    Тоже столкнулся с количеством подчиненных узлов.
    Вот мой вариант:

    //======================================================================
    Процедура ЧтениеУзлов(xmlDoc, Узел, Уровень=0,ТЗ,i)

    ЧислоДетей=Узел.childNodes.length;

    Для Инд=1 По ЧислоДетей Цикл


    ТекУзел= Узел.childNodes.item(Инд-1);
    Если ТекУзел.nodeType<>1 Тогда
    Продолжить;
    КонецЕсли;

    Группа = 0;
    Если ТекУзел.baseName = "group" Тогда

    КоличествоПодчиненныхГруппе = 0;
    Для Инд2=1 По ТекУзел.childNodes.length Цикл
    Если ТекУзел.childNodes.item(Инд2-1).baseName = "amort-group" Тогда
    Продолжить;
    КонецЕсли;
    КоличествоПодчиненныхГруппе = КоличествоПодчиненныхГруппе + 1;
    КонецЦикла;

    Если КоличествоПодчиненныхГруппе <> 1 Тогда
    Группа = 1;
    КонецЕсли;

    АтрибутТега = ТекУзел.attributes.item(0).nodename;
    ЗначениеАтрибутаGroup = СокрЛП(ТекУзел.attributes.item(0).value);
    КонтрольноеЧисло = ТекУзел.attributes.item(1).value;
    КодРодителя = СокрЛП(ТекУзел.parentNode.attributes.item(0).value);



    Если (АтрибутТега = "code") И (ЗначениеАтрибутаGroup = "ОК 013-94") Тогда
    Прервать;
    Иначе


    i = i + 1;
    ТЗ.НоваяСтрока();
    ТЗ.УстановитьЗначение(i,"Код",ЗначениеАтрибутаGroup);
    ТЗ.УстановитьЗначение(i,"УровеньВложенности",Уровень);
    ТЗ.УстановитьЗначение(i,"Группа",Группа);
    ТЗ.УстановитьЗначение(i,"КонтрольноеЧисло",КонтрольноеЧисло);
    ТЗ.УстановитьЗначение(i,"КодРодителя",КодРодителя);

    КонецЕсли;
    КонецЕсли;

    Если ТекУзел.baseName = "desc" Тогда

    ЗначениеТегаDesc = СокрЛП(ТекУзел.childNodes.item(0).text);
    ТЗ.УстановитьЗначение(i,"Наименование",ЗначениеТегаDesc);

    КонецЕсли;

    Если ТекУзел.baseName = "amort-group" Тогда

    АмортизационнаяГруппа = Перечисление.АмортизационныеГруппы.ЗначениеПоНомеру(ТекУзел.attributes.item(0).value);
    ТЗ.УстановитьЗначение(i,"АмортизационнаяГруппа",АмортизационнаяГруппа);

    КонецЕсли;

    ЧтениеУзлов(xmlDoc, ТекУзел, Уровень+1,ТЗ,i);

    КонецЦикла;

    КонецПроцедуры // ЧтениеУзлов

    //======================================================================
    Процедура ЗаписатьЭлементы(ТЗ)

    ОКОФ = СоздатьОбъект("Справочник.ОбщероссийскийКлассификаторОсновныхФондов");
    СпОКОФ = СоздатьОбъект("Справочник.ОбщероссийскийКлассификаторОсновныхФондов");
    СпОКОФРодители = СоздатьОбъект("Справочник.ОбщероссийскийКлассификаторОсновныхФондов");

    ТЗ.ВыбратьСтроки();
    Пока ТЗ.ПолучитьСтроку() = 1 Цикл

    //Первая группа
    Если ТЗ.Код = "ОК 013-2014" Тогда
    Продолжить;
    КонецЕсли;

    Код = ТЗ.Код;

    Если СпОКОФ.НайтиПоКоду(Код) = 0 Тогда

    Если ТЗ.Группа = 1 Тогда
    ОКОФ.НоваяГруппа();
    Иначе
    ОКОФ.Новый();
    КонецЕсли;

    ОКОФ.Наименование = ТЗ.Наименование;
    ОКОФ.Код = Код;

    Если ТЗ.Группа = 0 Тогда
    ОКОФ.КонтрольноеЧисло = ТЗ.КонтрольноеЧисло;
    ОКОФ.АмортизационнаяГруппа =ТЗ.АмортизационнаяГруппа;
    КонецЕсли;

    Если Код <> "ОК_013-2014" Тогда
    Если СпОКОФРодители.НайтиПоКоду(ТЗ.КодРодителя) = 1 Тогда
    ОКОФ.Родитель = СпОКОФРодители.ТекущийЭлемент();
    КонецЕсли;
    КонецЕсли;

    ОКОФ.Записать();

    Состояние("Записан элемент с кодом "+Код+"");

    КонецЕсли;

    КонецЦикла;

    Предупреждение("Импорт ОКОФ успешно завершена!");

    КонецПроцедуры // ЗаписатьРодителей

    //======================================================================
    Процедура Сформировать()

    ТЗ = СоздатьОбъект("ТаблицаЗначений");
    ТЗ.НоваяКолонка("Код");
    ТЗ.НоваяКолонка("КодРодителя");
    ТЗ.НоваяКолонка("УровеньВложенности");
    ТЗ.НоваяКолонка("Наименование");
    ТЗ.НоваяКолонка("Группа");
    ТЗ.НоваяКолонка("АмортизационнаяГруппа");
    ТЗ.НоваяКолонка("КонтрольноеЧисло");

    xmlDoc = СоздатьОбъект("Microsoft.XMLDOM");
    xmlDoc.Load(ИмяФайлаДанных);
    RootNode = xmlDoc.DocumentElement;

    i = 0;
    ЧтениеУзлов(xmlDoc, RootNode, 0,ТЗ,i);

    xmlDoc=0;

    ЗаписатьЭлементы(ТЗ);

    КонецПроцедуры

    Вложения:

    • ОКОФ.rar
      Размер файла:
      13,2 КБ
      Просмотров:
      9
  20. TopicStarter Overlay
    ProfforG
    Offline

    ProfforG Опытный в 1С

    Регистрация:
    31 окт 2011
    Сообщения:
    149
    Симпатии:
    2
    Баллы:
    29
    Всё гораздо проще)

    Вот файл ОКОФ с новыми изменениями. Грузим его стандартной обработкой.

    Вложения:

    • OKOF.TXT
      Размер файла:
      1,6 МБ
      Просмотров:
      32

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