8.х Регистр накопления - редактировать

Тема в разделе "Конфигурирование на платформе "1С:Предприятие 8"", создана пользователем Sergey-911, 17 окт 2010.

  1. TopicStarter Overlay
    Sergey-911
    Offline

    Sergey-911

    Регистрация:
    1 авг 2007
    Сообщения:
    36
    Симпатии:
    0
    Баллы:
    1
    Доброе время суток уважаемые.
    Мне необходимо в определенной строке регистра накопления одно значение заменить на другое. Для этого я выполняю запрос
    Код:
    Запрос = Новый Запрос;
    Запрос.Текст =
    "ВЫБРАТЬ
    |	ТоварыВРезервеНаСкладах.Номенклатура,
    |	ТоварыВРезервеНаСкладах.ОстатокРезервов,
    |	ТоварыВРезервеНаСкладах.Регистратор,
    |	ТоварыВРезервеНаСкладах.РегистраторТоваровНаСкладах
    |ИЗ
    |	РегистрНакопления.ТоварыВРезервеНаСкладах КАК ТоварыВРезервеНаСкладах
    |ГДЕ
    |	ТоварыВРезервеНаСкладах.Регистратор = &РегистраторРезерваТоваров"
    ;
    
    РегистраторРезерваТоваров = "Бронирование 000000009 от 27.09.2010 0:00:00";	
    Запрос.УстановитьПараметр("РегистраторРезерваТоваров", РегистраторРезерваТоваров);
    
    
    А дальше - не могу разобраться :angry:
    Попытался так:
    Код:
    ВыборкаРезультатаЗапроса = Запрос.Выполнить().Выбрать();
    РегистраторТоваровНаСкладах = "Расход 000000009 от 17.10.2010 17:13:55";
    ВыборкаРезультатаЗапроса["РегистраторТоваровНаСкладах"] = РегистраторТоваровНаСкладах;
    
    
    Пишет:
    Код:
    Ошибка при выполнении обработчика - '{Документ.Расход(36)}: Поле объекта недоступно для записи (РегистраторТоваровНаСкладах)'
    по причине:
    {Документ.Расход(36)}: Поле объекта недоступно для записи (РегистраторТоваровНаСкладах)
    
    
    Как мне изменить результат запроса? :D
  2. mialord
    Offline

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

    Регистрация:
    31 июл 2009
    Сообщения:
    5.400
    Симпатии:
    40
    Баллы:
    54
    Здраствуйте!
    Что это было :angry: :D :D
    Кто так с регистрами работает, всю методологию 1С за 5 минут коту под хвост :D
    Код:
    НаборЗаписей = РегистрыНакопления.ТоварыВРезервеНаСкладах.СоздатьНаборЗаписей();
    НаборЗаписей.Отбор.Регистратор = МойРегистратор;
    НаборЗаписейПрочитать();
    
    Для каждого Запись из НаборЗаписей Цикл
    Запись.РегистраторТоваровНаСкладах = ТутЗначениеСоответствубщегоТипа;
    КонецЦикла;
    НаборЗаписей.Записать(истина);
    
    
    
    Писал на ходу, но общий принцип думаю понятен, в любом случае синтаксис-помощник Вам в руки.

    Как оказалось я Вам на вопрос уже отвечал.
    пост
    Удачи!
  3. TopicStarter Overlay
    Sergey-911
    Offline

    Sergey-911

    Регистрация:
    1 авг 2007
    Сообщения:
    36
    Симпатии:
    0
    Баллы:
    1
    Спасибо mialord.
    Попробовал Ваш вариант. При выполнении строки кода
    Код:
    НаборЗаписей.Отбор.Регистратор = РегистраторРезерваТоваров;
    
    
    выдается сообщение
    Код:
    Ошибка при выполнении обработчика - '{Документ.Расход(92)}: Поле объекта недоступно для записи (Регистратор)'
    по причине:
    {Документ.Расход(92)}: Поле объекта недоступно для записи (Регистратор)
    
    
    Может что нетак делаю ?
    Код:
    
    НаборЗаписей = РегистрыНакопления.ТоварыВРезервеНаСкладах.СоздатьНаборЗаписей();
    НаборЗаписей.Отбор.Регистратор = РегистраторРезерваТоваров;
    НаборЗаписей.Прочитать();
    Для каждого Запись из НаборЗаписей Цикл 
    Запись.РегистраторТоваровНаСкладах = РегистраторТоваровНаСкладах;
    КонецЦикла;
    НаборЗаписей.Записать(истина);
    
    
    :angry:
  4. sergey
    Offline

    sergey Курильщик

    Регистрация:
    13 апр 2006
    Сообщения:
    365
    Симпатии:
    0
    Баллы:
    26
    неверно прописан отбор
    Код:
    НаборЗаписей = РегистрыНакопления.ТоварыВРезервеНаСкладах.СоздатьНаборЗаписей();
    Отбор=Новый Структура;
    Отбор.Вставить("Регистратор", РегистраторРезерваТоваров);
    НаборЗаписей.Прочитать();
    Для каждого Запись из НаборЗаписей Цикл 
    Запись.РегистраторТоваровНаСкладах = РегистраторТоваровНаСкладах;
    КонецЦикла;
    НаборЗаписей.Записать(истина);
    
    
  5. sergey
    Offline

    sergey Курильщик

    Регистрация:
    13 апр 2006
    Сообщения:
    365
    Симпатии:
    0
    Баллы:
    26
    даже нет, ошибся, вот так:
    Код:
    НаборЗаписей = РегистрыНакопления.ТоварыВРезервеНаСкладах.СоздатьНаборЗаписей();
    Док = НаборЗаписей.Отбор.Регистратор;
    Док.Установить(РегистраторРезерваТоваров);
    НаборЗаписей.Прочитать();
    Для каждого Запись из НаборЗаписей Цикл 
    Запись.РегистраторТоваровНаСкладах = РегистраторТоваровНаСкладах;
    КонецЦикла;
    НаборЗаписей.Записать(истина);
    
    
  6. DrBlack
    Offline

    DrBlack Опытный в 1С

    Регистрация:
    8 янв 2010
    Сообщения:
    79
    Симпатии:
    1
    Баллы:
    29
    Мне кажется более уместно открыть документ (раз у вас уже есть ссылка), изменить и перепровести, дабы не произошло что-нибудь при перепроведениии =)
    Код:
    СсылкаДок=МойДокумент.ИмяДокумента.НайтиПоКоду(КодДокумента).Ссылка.ПолучитьОбъект;
    СсылкаДок.ИмяПоля = ТребуемоеЗначение;
    СсылкаДок.Записать(РежимЗаписиДокумента.Проведение);
    
    для редактирования документа, обязательно требуется получить объект, как конкретно по ссылке полчить объект, я не знаю, поэтому учтите, что при использовании этого кода, возможен вариант когда номера документов совпадают!
  7. TopicStarter Overlay
    Sergey-911
    Offline

    Sergey-911

    Регистрация:
    1 авг 2007
    Сообщения:
    36
    Симпатии:
    0
    Баллы:
    1
    Спасибо Sergey - сработало! :angry:
    А относительно запроса
    Код:
    Запрос = Новый Запрос;
    Запрос.Текст =
    "ВЫБРАТЬ
    |	ТоварыВРезервеНаСкладах.Номенклатура,
    |	ТоварыВРезервеНаСкладах.ОстатокРезервов,
    |	ТоварыВРезервеНаСкладах.Регистратор,
    |	ТоварыВРезервеНаСкладах.РегистраторТоваровНаСкладах
    |ИЗ
    |	РегистрНакопления.ТоварыВРезервеНаСкладах КАК ТоварыВРезервеНаСкладах
    |ГДЕ
    |	ТоварыВРезервеНаСкладах.Регистратор = &РегистраторРезерваТоваров"
    ;
    
    Запрос.УстановитьПараметр("РегистраторРезерваТоваров", РегистраторРезерваТоваров);
    Результат=Запрос.Выполнить();
    
    
    всеже можно применить вышеуказанное?
  8. sergey
    Offline

    sergey Курильщик

    Регистрация:
    13 апр 2006
    Сообщения:
    365
    Симпатии:
    0
    Баллы:
    26
    Так вы же по сути этот запрос УЖЕ заменили обращением к регистру через НаборЗаписей.

    Т.е. тоже отобрали из регистра все записи с регистратором "РегистраторРезерваТоваров" и записали в этих записях значение "РегистраторТоваровНаСкладах".

    Зачем вам теперь запрос? Или он по тексту для чего-то еще нужен?
  9. TopicStarter Overlay
    Sergey-911
    Offline

    Sergey-911

    Регистрация:
    1 авг 2007
    Сообщения:
    36
    Симпатии:
    0
    Баллы:
    1
    Я счел, что запрос будет возвращать выборку быстрее, чем обращением к регистру через НаборЗаписей. Вот только не знаю, как изменить данные в регистре накопления посредством запроса. Но все-равно, огромное спасибо! :angry: Если возможно - пояснитье, как редактировать данные в запросе.
  10. sergey
    Offline

    sergey Курильщик

    Регистрация:
    13 апр 2006
    Сообщения:
    365
    Симпатии:
    0
    Баллы:
    26
    Пожалуйста.
    В запросе (в том виде как он предложен), как я понимаю, и пусть меня исправят, если я не прав, никак!
    Обращение через НаборЗаписей - это по сути своей тоже запрос с отбором по значению, только реализованный в другой форме. И, имхо, разница в производительности, если она и есть, будет достаточно мала.
  11. mialord
    Offline

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

    Регистрация:
    31 июл 2009
    Сообщения:
    5.400
    Симпатии:
    40
    Баллы:
    54
    Sergey-911, с чео Вы так сочли? Гду Вы видели чтобы так правили регистры, а тем более что так будет быстрее, Вам пример показали, всё, им и пользуйтесь, не придумывайте тут и почитайте книгу "Профессиональная разработка..."

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