Имя: Пароль:
1C
1С v8
v8: Не могу изменить запись регистра Штрихкоды в рознице 1.0
0 Bubuzon
 
08.09.12
13:48
Написал обработку:
Запрос = Новый Запрос;
 
  ТекстЗапроса = "
  |ВЫБРАТЬ
  |   Номенклатура.Ссылка,
  |   Номенклатура.ЕдиницаХраненияОстатков,
  |   Номенклатура.ЭтоГруппа,
  |   ХарактеристикиНоменклатуры.Ссылка КАК Характеристика
  |ИЗ
  |   Справочник.Номенклатура КАК Номенклатура
  |      ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ХарактеристикиНоменклатуры КАК ХарактеристикиНоменклатуры
  |      ПО Номенклатура.Ссылка = ХарактеристикиНоменклатуры.Владелец
  |ГДЕ
  |   (НЕ Номенклатура.ЭтоГруппа)
  |";
 
 
 
  Запрос.Текст = ТекстЗапроса;
  РЗ = Запрос.Выполнить().Выбрать();
  Пока РЗ.Следующий()Цикл
    Штрих = РегистрыСведений.Штрихкоды.СоздатьНаборЗаписей();
   Штрих.Отбор.Владелец.Установить(РЗ.Ссылка);
   Если (НЕ РЗ.Характеристика =Справочники.ХарактеристикиНоменклатуры.ПустаяСсылка()) ИЛИ (РЗ.Характеристика=Неопределено) Тогда
      Штрих.Отбор.ХарактеристикаНоменклатуры.Установить(РЗ.Характеристика);
   КонецЕсли;
   Штрих.Прочитать();
   Исправлен=0;
   Для каждого Запись из Штрих Цикл;
       Если НЕ Запись.ЕдиницаИзмерения=РЗ.ЕдиницаХраненияОстатков Тогда
         Запись.ЕдиницаИзмерения=РЗ.ЕдиницаХраненияОстатков;
         Исправлен=1;
      КонецЕсли;
   КонецЦикла;
   Если Исправлен=1 Тогда
      Попытка
         Штрих.Записать();
         Сообщить("Записан штрихкод для " + РЗ.Ссылка);
      Исключение
         Сообщить("Не удалось записать регистр "+ОписаниеОшибки());
      КонецПопытки;
   КонецЕсли;
КонецЦикла;

При запуске ругается на то что у записи уже есть владелец, пробовал через Менеджер записи, так там по ключевым полям Владелец и Характеристика запись не выбирает. Где грабли?
1 m-serg74
 
08.09.12
14:05

   Если мНеРазрешитьНеуникальныеШтрихкоды Тогда
       Для Каждого ТекущаяЗапись Из ЭтотОбъект Цикл
           Если ЗначениеЗаполнено(ТекущаяЗапись.ШтрихКод) Тогда
               Запрос = Новый Запрос("
               |ВЫБРАТЬ ПЕРВЫЕ 1
               |    РегШтрихкоды.Владелец КАК Владелец,
               |    РегШтрихкоды.ШтрихКод КАК Штрихкод
               |ИЗ
               |    РегистрСведений.Штрихкоды КАК РегШтрихкоды
               |ГДЕ
               |    РегШтрихкоды.ШтрихКод = &ШтрихКод
               |");

               Запрос.УстановитьПараметр("ШтрихКод", ТекущаяЗапись.ШтрихКод);

               РезультатЗапроса = Запрос.Выполнить();
               Если Не РезультатЗапроса.Пустой() Тогда
                   Выборка = РезультатЗапроса.Выбрать();
                   Выборка.Следующий();

                   Сообщить("Штрихкод: " + Выборка.ШтрихКод + " уже имеет владельца """ + СокрЛП(Выборка.Владелец) + """.");
                   Отказ = Истина;
               КонецЕсли;
           КонецЕсли;
       КонецЦикла;
   КонецЕсли;

2 m-serg74
 
08.09.12
14:05
мНеРазрешитьНеуникальныеШтрихкоды = Не Константы.РазрешитьНеуникальныеШтрихкоды.Получить();
3 m-serg74
 
08.09.12
14:06
вероятно ШК повторяются там и грабли
4 m-serg74
 
08.09.12
14:12
даже не повторяются а просто есть в рег св а они у тебя есть...
надо прочитать гдето запомнить все, в рег. грохнуть набор (Записать), потом твой исправленный набор записывать, или Константу на время Разрешить не уникальные
5 Bubuzon
 
08.09.12
16:08
Видимо придется вытягивать весь регистр в таблицу, грохать его и записывать из таблицы заново с новыми данными.
6 Web00001
 
08.09.12
18:12
(5)Да ну там просто, должно быть, сейчас лезть лениво смотреть, спать надо идти, напиши завтра на почту, посмотрим, на крайняк удали и создай заново, с уже нужными тебе показателями набор записей, да и все. Но махать всем регистром это как то перебор.
зы в (0) код прикольный )
7 m-serg74
 
09.09.12
06:42
(5) на куа весь регистр??? только твой набор отобранный, вроде ж в (4) доступно написал, не?
8 Bubuzon
 
09.09.12
14:15
Все равно тренируюсь на копии, ща попробую что получится
9 Bubuzon
 
09.09.12
19:12
В итоге сделал так:
Запрос = Новый Запрос;
   
   Запросы = "
   |ВЫБРАТЬ
   |    Штрихкоды.Владелец,
   |    Штрихкоды.Штрихкод,
   |    Штрихкоды.ЕдиницаИзмерения,
   |    Штрихкоды.ХарактеристикаНоменклатуры,
   |    Штрихкоды.ТипШтрихкода,
   |    Штрихкоды.ПредставлениеШтрихкода
   |ИЗ
   |    РегистрСведений.Штрихкоды КАК Штрихкоды
   |";
   
   
   
   Запрос.Текст = Запросы;
   ТЗ = Запрос.Выполнить().Выгрузить();
   НаборЗаписей = РегистрыСведений.Штрихкоды.СоздатьНаборЗаписей();
   НаборЗаписей.Записать();
   Штрих=РегистрыСведений.Штрихкоды.СоздатьНаборЗаписей();
   НомерСтроки=1;
   ТЗ.Свернуть("Владелец,Штрихкод,ХарактеристикаНоменклатуры,ТипШтрихкода,ПредставлениеШтрихкода");
   Для каждого Строка из ТЗ Цикл
       НоваяЗапись=Штрих.Добавить();
       НоваяЗапись.Активность=Истина;
       НоваяЗапись.Владелец=Строка.Владелец;
       НоваяЗапись.Штрихкод=Строка.Штрихкод;
       Если ТипЗнч(Строка.Владелец)=Тип("СправочникСсылка.Номенклатура") Тогда
           НоваяЗапись.ЕдиницаИзмерения=Строка.Владелец.ЕдиницаХраненияОстатков;
       Иначе
           НоваяЗапись.ЕдиницаИзмерения=Справочники.ЕдиницыИзмерения.ПустаяСсылка();
       КонецЕсли;
       НоваяЗапись.ХарактеристикаНоменклатуры=Строка.ХарактеристикаНоменклатуры;
       НоваяЗапись.ТипШтрихкода=Строка.ТипШтрихкода;
       НоваяЗапись.ПредставлениеШтрихкода=Строка.ПредставлениеШтрихкода;
       НомерСтроки=НомерСтроки+1;
   КонецЦикла;
   Попытка
       Штрих.Записать();
   Исключение
       Сообщить(ОписаниеОшибки());
   КонецПопытки;
   Сообщить("Запись закончена");
Закон Брукера: Даже маленькая практика стоит большой теории.