8.х Загрузка с екселя в справочник "Номенклатура"

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

  1. TopicStarter Overlay
    ILDARIAN
    Offline

    ILDARIAN Опытный в 1С

    Регистрация:
    6 янв 2013
    Сообщения:
    131
    Симпатии:
    1
    Баллы:
    29
    Добрый день!

    Пишу обработку загрузки номенклатуры с екселя.

    При заполнении поля "Базовая единица измерения" , если не находит по наименованию, то создает новую, и при этом ругается что код не уникален, программно код никак не устанавливается. Как сделать так чтобы он создавался уникальным ? вот этот код

    Код:
    //Проверяем нашло ли еденицу измерения, если нет, то создаем её и записываем в реквизит
    НайденнаяЕденицаИзмерения = Справочники.КлассификаторЕдиницИзмерения.НайтиПоНаименованию(ЕдИзм,Истина);
    СозданнаяЕденицаИзмерения = Справочники.КлассификаторЕдиницИзмерения.СоздатьЭлемент();
    
    Если НЕ НайденнаяЕденицаИзмерения.Пустая()  Тогда
    Номенклатура.БазоваяЕдиницаИзмерения = НайденнаяЕденицаИзмерения.Ссылка;
    Иначе
    СозданнаяЕденицаИзмерения.Наименование = ЕдИзм;
    СозданнаяЕденицаИзмерения.Записать();
    Номенклатура.БазоваяЕдиницаИзмерения = СозданнаяЕденицаИзмерения.Ссылка;
    КонецЕсли;
    
    конфигурация УТП
  2. nickpugachev
    Offline

    nickpugachev Профессионал в 1С Команда форума

    Регистрация:
    28 май 2012
    Сообщения:
    3.266
    Симпатии:
    131
    Баллы:
    104
    вызвать метод УстановитьНовыйКод() у созданного элемента справочника.

    у классификатора код не устанавливается автоматически, поскольку классификатор этот не внутренний для предприятия.
  3. TopicStarter Overlay
    ILDARIAN
    Offline

    ILDARIAN Опытный в 1С

    Регистрация:
    6 янв 2013
    Сообщения:
    131
    Симпатии:
    1
    Баллы:
    29
    проблема не решилась, дело в том, что классификаторе код имеет длину "3" и элемент с кодом "999" уже есть. Нужно как-то устанавливать код, чтобы оно не искало максимальное значение, а брало то значение, которое не находит в классификаторе
  4. nickpugachev
    Offline

    nickpugachev Профессионал в 1С Команда форума

    Регистрация:
    28 май 2012
    Сообщения:
    3.266
    Симпатии:
    131
    Баллы:
    104
    тогда устанавливайте в качестве кода первые три символа наименования этой единицы измерения

    ну и сделайте еще две вещи
    1. уберите второй параметр (Истина) в поиске единицы по наименованию, иначе у вас единицы "шт", "Шт" - это разные единицы получатся.
    2. первый параметр - засунуть в функцию СокрЛП, чтобы убрать лишние пробелы

    вообще стоило бы вам сначала сделать какое-то соответствие загружаемых единиц и вашего справочника, потому что если грузить его как вы делаете - в нем получится каша страшная, что не есть правильно
  5. TopicStarter Overlay
    ILDARIAN
    Offline

    ILDARIAN Опытный в 1С

    Регистрация:
    6 янв 2013
    Сообщения:
    131
    Симпатии:
    1
    Баллы:
    29
    Увеличил длину кода, все загрузилось нормально. появилась другая проблема. Нужно затянуть с екселя "вес" номенклатуры, который записывается в реквизит табличного поля "Еденицы измерения", которое имеет тип "СправочникСписок.ЕдиницыИзмерения" . При записи элемента справочника нужно добавить туда строчку, в которой есть реквизит "вес" и заполнить его.
    ----------
    Строчка появляется автоматически если нажать кнопку "записать". После этого можно заполнять "вес".

    Вопрос: "Как вызвать процедуру записи?"

    Пробовал получить объект через ссылку и записать его. Результата не дало.

    Код:
    Номенклатура = Справочники.Номенклатура.СоздатьЭлемент();
    
    Номенклатура.Записать();
    
    
    Объект = Номенклатура.Ссылка.ПолучитьОбъект();
    Объект.Записать();
    
    табличное поле находится на третей вкладке слева

    на форме элемента номенклатуры
  6. afinogen
    Offline

    afinogen Опытный в 1С

    Регистрация:
    28 фев 2011
    Сообщения:
    160
    Симпатии:
    0
    Баллы:
    26
    Я могу ошибаться но не является ли справочник "ЕдиницыИзмерения" подчиненным справочнику "Номенклатура" ,т.е. номенклатура является владельцем?
    если так то вам этот код
    Код:
      Объект = Номенклатура.Ссылка.ПолучитьОбъект();
    Объект.Записать();
    не нужен, а нужно после записи номенклатуры создавать новый элемент справкочника ЕдиницыИзмерения где владелец = ваша новая записанная номенклатура, и только после того как запишите новый элемент справочника единицы измерения только тогда он отобразится на форме номенклатуры
  7. TopicStarter Overlay
    ILDARIAN
    Offline

    ILDARIAN Опытный в 1С

    Регистрация:
    6 янв 2013
    Сообщения:
    131
    Симпатии:
    1
    Баллы:
    29
    Код:
    Номенклатура.Записать();
    
    
    НовВес = Справочники.ЕдиницыИзмерения.СоздатьЭлемент();
    НовВес.Владелец = Номенклатура.Ссылка;
    НовВес.Коэффициент = 1;
    НовВес.Вес = Вес;
    НовВес.Записать();
    
    Номенклатура.Записать();
    заполнил все реквизиты, записал элемент, потом этот код. Единица измерения не создается

    в справочнике "номенклатура" строчка не появляется с весом.
  8. Tiger86
    Offline

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

    Регистрация:
    24 мар 2011
    Сообщения:
    6.407
    Симпатии:
    108
    Баллы:
    104
    1. своим кодом вы создали элемент не в справочнике Номенклатура, а в справочнике ЕдиницыИзмерения. С чего бы элементу в Номенклатуре появиться?
    2. зачем 2 раза записывать Номенклатура (это ведь элемент справочника Номенклатура так?)?
  9. alexburn
    Offline

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

    Регистрация:
    5 янв 2009
    Сообщения:
    14.735
    Симпатии:
    508
    Баллы:
    204
    Чтобы прописать владельца у единиц. А второй раз видимо для того, чтобы отобразился в ТЧ справочника :)))), но нужно добавлять, а не записывать:)
  10. TopicStarter Overlay
    ILDARIAN
    Offline

    ILDARIAN Опытный в 1С

    Регистрация:
    6 янв 2013
    Сообщения:
    131
    Симпатии:
    1
    Баллы:
    29
    нужно было заполнить "Наименование" в единицах измерения. Все заработало.

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