8.х Запись данных в реквизит справочника

Тема в разделе "Конфигурирование на платформе "1С:Предприятие 8"", создана пользователем Poverina, 26 ноя 2014.

  1. TopicStarter Overlay
    Poverina
    Offline

    Poverina

    Регистрация:
    14 фев 2014
    Сообщения:
    31
    Симпатии:
    0
    Баллы:
    1
    Здравствуйте. Из регистра сведений берутся данные через срез последних (цена), которая должна заносится в колонку справочника Номенклатура.

    Код:
    // выше идёт получение цены из РС
    Выборка = РезультатЗапроса.Выбрать();
    
       Спр = Справочники.Номенклатура.Выбрать();
       
         Пока Спр.Следующий() Цикл
             НоменклатураОбъект = Спр.ПолучитьОбъект();
           Если НоменклатураОбъект.ЭтоГруппа=0 Тогда        
             Пока Выборка.Следующий() Цикл     
               НоменклатураОбъект.Цена = Выборка.Цена;
               НоменклатураОбъект.Записать();
               Сообщить(Строка(Выборка.Номенклатура) + " : " + Выборка.Цена);
             КонецЦикла;
           КонецЕсли;      
         КонецЦикла;
    
    В Сообщения выводится номенклатура/цена, а вот в справочник цена не заносится:

    http://www.screencapture.ru/file/908Ae3C3

    Помогите пожалуйста.
  2. nomad_irk
    Offline

    nomad_irk Гуру в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    7.548
    Симпатии:
    716
    Баллы:
    204
    К чему такие сложнлсти с выборками, из таблицы среза последних берите номенклатуру и в реквизит присваивайте значение цены
  3. TopicStarter Overlay
    Poverina
    Offline

    Poverina

    Регистрация:
    14 фев 2014
    Сообщения:
    31
    Симпатии:
    0
    Баллы:
    1
    Можно пример кода
  4. KrivosheevEV
    Offline

    KrivosheevEV Новичок в 1С

    Регистрация:
    3 мар 2014
    Сообщения:
    35
    Симпатии:
    2
    Баллы:
    4
    В запросе нужно получить ссылку на объект справочника.
    НовыйОбъект = Выборка.Ссылка.ПолучитьОбъект();
    НовыйОБъект.Реквизит = ЗначениеРеквизита;
    НовыйОБъект.Записать();

    И, судя по приведённому примеру кода, вы должны понимать, что получать новый (создаваемый) элемент объекта необходимо каждый раз, а не единожды.
  5. nomad_irk
    Offline

    nomad_irk Гуру в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    7.548
    Симпатии:
    716
    Баллы:
    204
    Код:
    .......
    Выборка = РезультатЗапроса.Выбрать();
    
    Пока Выборка.Следующий() Цикл
    НоменклатураОбъект = Выборка.Номенклатура.ПолучитьОбъект();
    НоменклатураОбъект.Цена = Выборка.Цена;
    НоменклатураОбъект.Записать();
    Сообщить(Строка(Выборка.Номенклатура) + " : " + Выборка.Цена);
    КонецЦикла;
    Poverina нравится это.
  6. TopicStarter Overlay
    Poverina
    Offline

    Poverina

    Регистрация:
    14 фев 2014
    Сообщения:
    31
    Симпатии:
    0
    Баллы:
    1
    Спасибо, получилось
  7. LordMaverick
    Offline

    LordMaverick Профессионал в 1С

    Регистрация:
    17 мар 2014
    Сообщения:
    3.429
    Симпатии:
    372
    Баллы:
    104
    а можно узнать причину такого действия?

    видеть цену при подборе?
  8. TopicStarter Overlay
    Poverina
    Offline

    Poverina

    Регистрация:
    14 фев 2014
    Сообщения:
    31
    Симпатии:
    0
    Баллы:
    1
    В документе Заказ при выборе номенклатуры цена проставляется из справочника Номенклатура
  9. alexburn
    Offline

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

    Регистрация:
    5 янв 2009
    Сообщения:
    14.735
    Симпатии:
    508
    Баллы:
    204
    А регистр чем плох?
    Как актуальную цену будете получать, открывать и записывать номенклатуру ?
    --- Объединение сообщений, 26 ноя 2014 ---
    Ведь чтобы цена бралась из справочника, она каким-то образом должна туда попасть, верно ? И чтобы она изменилась, нужно что-то сделать, верно ?
  10. TopicStarter Overlay
    Poverina
    Offline

    Poverina

    Регистрация:
    14 фев 2014
    Сообщения:
    31
    Симпатии:
    0
    Баллы:
    1
    У меня есть документ Установка цен, который заносит изменение цены в регистр ))
  11. alexburn
    Offline

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

    Регистрация:
    5 янв 2009
    Сообщения:
    14.735
    Симпатии:
    508
    Баллы:
    204
    Вы не поняли сути. При каком событии цена в справочнике будет изменяться ?
  12. 1cUserAndrew
    Offline

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

    Регистрация:
    27 май 2010
    Сообщения:
    4.948
    Симпатии:
    149
    Баллы:
    104
    Правильнее - при выборе номенклатуры брать цену из регистра.

    Из регистра записывать цену в справочник, чтобы потом из справочника записывать ее в документ - мягко говоря, не правильно )
  13. LordMaverick
    Offline

    LordMaverick Профессионал в 1С

    Регистрация:
    17 мар 2014
    Сообщения:
    3.429
    Симпатии:
    372
    Баллы:
    104
    для этих целей пользуют регистр, который вы кстати ведёте и заполняете
    из него берут правильное значение на дату, а не лохматое непонятное чего из справочника
  14. TopicStarter Overlay
    Poverina
    Offline

    Poverina

    Регистрация:
    14 фев 2014
    Сообщения:
    31
    Симпатии:
    0
    Баллы:
    1
    Так?)

    Код:
    &НаКлиенте
    Процедура ТоварыНаименованиеПриИзменении(Элемент)
        СтрТаб = Элементы.Товары.ТекущиеДанные;
        СтрТаб.Цена=ПолучитьЦену(СтрТаб.Наименование,Объект.Дата);
    КонецПроцедуры
    
    &НаСервереБезКонтекста
    Функция ПолучитьЦену(Товар,ТекДата)
        ОтборЦены = Новый Структура("Номенклатура", Товар);
        ЗначениеРесурсов =
        РегистрыСведений.ЦеныНоменклатуры.ПолучитьПоследнее(ТекДата, ОтборЦены);
        Возврат ЗначениеРесурсов.Цена;
    КонецФункции
    
  15. LordMaverick
    Offline

    LordMaverick Профессионал в 1С

    Регистрация:
    17 мар 2014
    Сообщения:
    3.429
    Симпатии:
    372
    Баллы:
    104
    там есть СрезПоследних
  16. 1cUserAndrew
    Offline

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

    Регистрация:
    27 май 2010
    Сообщения:
    4.948
    Симпатии:
    149
    Баллы:
    104
    Да, можно так...как вариант.
    Или запросом...

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