8.х Изменить запись в регистре сведений

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

  1. TopicStarter Overlay
    rockedit
    Offline

    rockedit Опытный в 1С

    Регистрация:
    6 дек 2010
    Сообщения:
    120
    Симпатии:
    0
    Баллы:
    26
    Здравствуйте!
    Никак не могу решить следующую проблему. В Рознице есть регистр сведений - "Штрихкоды". Мне нужно в уже существующих записях данного регистра поменять значение его измерения - "ЕдиницаИзмерения" на новое.
    Перепробовал кучу способов - проблема одна и та же, при записи выдает ошибку - невозможно записать, т.к. уже есть владелец с таким именем.
    Последний вариант
    Код:
    Запись1 = РегистрыСведений.Штрихкоды.СоздатьНаборЗаписей();
    Запись1.Отбор.Владелец.Установить(НоменклатураСсылка);
    Запись1.Отбор.ТипШтрихкода.Установить( ПланыВидовХарактеристик.ТипыШтрихкодов.EAN13);
    Запись1.Отбор.Штрихкод.Установить(Штрихкод) ;
    Запись1.Прочитать();
    Сообщить(Запись1.Количество());
    Для каждого строка из Запись1 Цикл
    Запрос = Новый Запрос;
    Запрос.Текст = "ВЫБРАТЬ
    | ЕдиницыИзмерения.Ссылка,
    | ЕдиницыИзмерения.Наименование
    |ИЗ
    | Справочник.ЕдиницыИзмерения КАК ЕдиницыИзмерения
    |ГДЕ
    | ЕдиницыИзмерения.ЕдиницаПоКлассификатору = &ЕдПоКл
    | И ЕдиницыИзмерения.Владелец = &номенклатура
    | И ЕдиницыИзмерения.ПометкаУдаления = ЛОЖЬ";
    
    Запрос.УстановитьПараметр("ЕдПоКл",Ед);
    Запрос.УстановитьПараметр("номенклатура",НоменклатураСсылка); 
    Выборка = Запрос.Выполнить().Выбрать();
    Если Выборка.Следующий() Тогда
    строка.ЕдиницаИзмерения = Выборка.Ссылка;
    КонецЕсли;
    КонецЦикла;
    Запись1.Записать();
    
    Заранее всем спасибо!
  2. alexburn
    Offline

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

    Регистрация:
    5 янв 2009
    Сообщения:
    14.735
    Симпатии:
    508
    Баллы:
    204
    Запрос в цикле -- это жесть :))))))), сто раз уже обсуждалось, не нужно так кодить!
  3. TopicStarter Overlay
    rockedit
    Offline

    rockedit Опытный в 1С

    Регистрация:
    6 дек 2010
    Сообщения:
    120
    Симпатии:
    0
    Баллы:
    26
    Знаю. Это черновой вариант. Но вопрос не в том где размещать запрос)
    Мне сейчас главное чтоб запись изменилась, а потом уже буду код в порядок приводить
  4. alexburn
    Offline

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

    Регистрация:
    5 янв 2009
    Сообщения:
    14.735
    Симпатии:
    508
    Баллы:
    204
    Простите, а где у вас идет запись в Запись1 ?
  5. TopicStarter Overlay
    rockedit
    Offline

    rockedit Опытный в 1С

    Регистрация:
    6 дек 2010
    Сообщения:
    120
    Симпатии:
    0
    Баллы:
    26
    Имеете ввиду метод Добавить()? или что?
    Код:
     строка.ЕдиницаИзмерения = Выборка.Ссылка;
    Вот так я пытаюсь ихменить значение.
    Запись идет в последней строчке.
    Ошибка такая
  6. alexburn
    Offline

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

    Регистрация:
    5 янв 2009
    Сообщения:
    14.735
    Симпатии:
    508
    Баллы:
    204
    Да, Добавить(), по идее, если он у вас отобрал записи, то должен их перезаписать.
  7. TopicStarter Overlay
    rockedit
    Offline

    rockedit Опытный в 1С

    Регистрация:
    6 дек 2010
    Сообщения:
    120
    Симпатии:
    0
    Баллы:
    26
    пробовал использовать метод добавить(). Аналогичная ошибка
    Может, если не сложно привести пример? наверное я неправильно что-то делал.
  8. alexburn
    Offline

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

    Регистрация:
    5 янв 2009
    Сообщения:
    14.735
    Симпатии:
    508
    Баллы:
    204
    РС периодический, подчиненный регистратору ?
  9. TopicStarter Overlay
    rockedit
    Offline

    rockedit Опытный в 1С

    Регистрация:
    6 дек 2010
    Сообщения:
    120
    Симпатии:
    0
    Баллы:
    26
    Не переодический, но подчиненый регистратору

    Я подумал, что если выгрузить все данные регистра в таблицу, в ней исправить, регистр очистить и все загрузить обратно, уже исправленное. Я понимаю, вариант так себе, но может заработает
  10. alexburn
    Offline

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

    Регистрация:
    5 янв 2009
    Сообщения:
    14.735
    Симпатии:
    508
    Баллы:
    204
    Если подчинен регистратору, то и нужно перезаписывать по регистратору.

    Вот, небольшой примерчик по замещению в РС:
    Код:
    // Добавление записей в регистр, подчиненный регистратору (замещение)
    НаборЗаписей = РегистрыСведений.ЛимитыВозвратнойТары.СоздатьНаборЗаписей();
    НаборЗаписей.Отбор.Регистратор.Установить(ВыбранныйРегистратор);
    НоваяЗапись = НаборЗаписей.Добавить();
    НоваяЗапись.Период = ВыбранныйРегистратор.Дата;
    НоваяЗапись.Номенклатура = ВыбраннаяНоменклатура;
    НоваяЗапись.ДоговорКонтрагента = ВыбранныйДоговор;
    НоваяЗапись.ЛимитПоставщика = 50;
    НаборЗаписей.Записать();
  11. TopicStarter Overlay
    rockedit
    Offline

    rockedit Опытный в 1С

    Регистрация:
    6 дек 2010
    Сообщения:
    120
    Симпатии:
    0
    Баллы:
    26
    Буду пробовать. Спасибо!
  12. TopicStarter Overlay
    rockedit
    Offline

    rockedit Опытный в 1С

    Регистрация:
    6 дек 2010
    Сообщения:
    120
    Симпатии:
    0
    Баллы:
    26
    Скажите, а если по одному регистратору 2 и более записей? т.е. ситауция такая. Измерений - 5. регистратор это измерение номенклатура. И собственно для одной номенклатуры может быть несколько штрихкодов(которые тоже измерение) . Получается что для одной номенклатуры может быть выбрано несколько записей. В этом случае нужно как то по особенному действовать?
  13. alexburn
    Offline

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

    Регистрация:
    5 янв 2009
    Сообщения:
    14.735
    Симпатии:
    508
    Баллы:
    204
    Регистратор - это системное поле, в него данные пишутся автоматически и контролируются системой. Главное чтобы ресурсы различались ибо произойдет банальная перезапись существующих.
    Что по поводу номенклатуры - ШК может быть несколько у одной номенклатурной позиции, там уже используется измерение - Характеристика.
  14. TopicStarter Overlay
    rockedit
    Offline

    rockedit Опытный в 1С

    Регистрация:
    6 дек 2010
    Сообщения:
    120
    Симпатии:
    0
    Баллы:
    26
    Я извиняюсь очень, но дал ложную информацию( Регистр сведений - независимый.
  15. alexburn
    Offline

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

    Регистрация:
    5 янв 2009
    Сообщения:
    14.735
    Симпатии:
    508
    Баллы:
    204
    Ну вот, для независимого:
    Код:
    НаборЗаписей = РегистрыСведений.ЗначенияСвойств.СоздатьНаборЗаписей();
    НаборЗаписей.Отбор.Номенклатура.Установить(ТекущаяНоменклатура);
    НаборЗаписей.Отбор.Свойство.Установить(ТекущееСвойство);
    НоваяЗапись = НаборЗаписей.Добавить();
    НоваяЗапись. Номенклатура = ТекущаяНоменклатура;
    НоваяЗапись.Свойство = ТекущееСвойство;
    НоваяЗапись.Значение = ТекущееЗначение;
    НаборЗаписей.Записать();
  16. vartanet
    Offline

    vartanet Опытный в 1С Команда форума

    Регистрация:
    16 ноя 2010
    Сообщения:
    2.698
    Симпатии:
    15
    Баллы:
    29
    а я вообще недолюбливаю набор записей (один раз грохнул весь регистр). предпочитаю работать с менеджером конкретной записи.
  17. alexburn
    Offline

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

    Регистрация:
    5 янв 2009
    Сообщения:
    14.735
    Симпатии:
    508
    Баллы:
    204
    Менеджер вроде как для регистратора используется.
  18. vartanet
    Offline

    vartanet Опытный в 1С Команда форума

    Регистрация:
    16 ноя 2010
    Сообщения:
    2.698
    Симпатии:
    15
    Баллы:
    29
    как раз наоборот - только для независимых регистров используется..
  19. alexburn
    Offline

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

    Регистрация:
    5 янв 2009
    Сообщения:
    14.735
    Симпатии:
    508
    Баллы:
    204
    Вот для этого и используется Отбор, чтоб не "грохать" весь регистр.
  20. TopicStarter Overlay
    rockedit
    Offline

    rockedit Опытный в 1С

    Регистрация:
    6 дек 2010
    Сообщения:
    120
    Симпатии:
    0
    Баллы:
    26
    Собственно все таже ошибка(
    код такой пишу
    Код:
    Процедура ИсправитьШтрихкоды()
    Форма = ЭтотОбъект.ПолучитьФорму("Форма1");
    Форма.Открыть();
    
    Запрос = Новый Запрос;
    Запрос.Текст = "ВЫБРАТЬ
    | Штрихкоды.Владелец,
    | Штрихкоды.Штрихкод,
    | Номенклатура.ЕдиницаХраненияОстатков КАК Ед,
    | Штрихкоды.ХарактеристикаНоменклатуры,
    | Штрихкоды.ТипШтрихкода,
    | Штрихкоды.ПредставлениеШтрихкода
    |ИЗ
    | РегистрСведений.Штрихкоды КАК Штрихкоды
    |  ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Номенклатура КАК Номенклатура
    |  ПО Штрихкоды.Владелец = Номенклатура.Ссылка";
    Выгрузка = Запрос.Выполнить().Выгрузить();	 
    для каждого строка из Выгрузка Цикл
    НаборЗаписей = РегистрыСведений.Штрихкоды.СоздатьНаборЗаписей();
    НаборЗаписей.Отбор.Владелец.Установить(строка.Владелец);
    НаборЗаписей.Отбор.Штрихкод.Установить(строка.Штрихкод);
    НоваяЗапись = НаборЗаписей.Добавить();
    НоваяЗапись.Владелец = строка.Владелец;
    НоваяЗапись.ЕдиницаИзмерения = строка.Ед;
    НоваяЗапись.ТипШтрихкода = строка.ТипШтрихкода;
    НоваяЗапись.ПредставлениеШтрихкода = строка.ПредставлениеШтрихкода;
    НоваяЗапись.ХарактеристикаНоменклатуры = строка.ХарактеристикаНоменклатуры;
    НоваяЗапись.Штрихкод = строка.Штрихкод;
    НаборЗаписей.Записать();
    Форма.ЭлементыФормы.Индикатор1.Значение = Форма.ЭлементыФормы.Индикатор1.Значение + 1;
    КонецЦикла;
    
    КонецПроцедуры
    
Похожие темы
  1. Berezin
    Ответов:
    4
    Просмотров:
    764
  2. Pentыch
    Ответов:
    9
    Просмотров:
    2.046
  3. MyNameNoName
    Ответов:
    2
    Просмотров:
    334
  4. Peroman
    Ответов:
    9
    Просмотров:
    746
  5. alexser94
    Ответов:
    1
    Просмотров:
    324
Загрузка...

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