|
Изменить подчиненную запись в непериодического независимого.регистр сведений. | ☑ | ||
---|---|---|---|---|
0
bizon2008
04.06.14
✎
10:55
|
Доброго дня. Есть регистр сведений Штрихкоды, владелец справочник Номенклатуры. При загрузке данным проспали выбор единицы измерений.
То есть поучился шрихкод без единицы измерений. Тут нашел вариант. &НаСервере Процедура ШрихкодУстановкаЕдиницыИзмерения() cпрТовар = Справочники.Номенклатура; Запрос = Новый Запрос; Запрос.Текст = " |ВЫБРАТЬ | Номенклатура.Код, | Номенклатура.Наименование, | Штрихкоды.Штрихкод, | Штрихкоды.ЕдиницаИзмерения |ИЗ | РегистрСведений.Штрихкоды КАК Штрихкоды | ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Номенклатура КАК Номенклатура | ПО Штрихкоды.Владелец = Номенклатура.Ссылка |ГДЕ | Штрихкоды.ЕдиницаИзмерения.Ссылка ЕСТЬ NULL"; РезультатЗапроса = Запрос.Выполнить(); тзТовар = РезультатЗапроса.Выгрузить(); ЭлементыФормы.Товар.СоздатьКолонки(); Для каждого Строка Из тзТовар Цикл ТекТовар = cпрТовар.НайтиПоКоду(Строка.Код).ПолучитьОбъект(); Сообщить(ТекТовар); НаборЗаписей = РегистрыСведений.Штрихкоды.СоздатьНаборЗаписей(); НаборЗаписей.Отбор.Владелец.Установить(ТекТовар.Ссылка); НаборЗаписей.Прочитать(); тзШтрихкод = НаборЗаписей.Выгрузить(); Для Каждого Строка из тзШтрихкод Цикл Сообщить("- " + Строка.Владелец + " - " +Строка.ТипШтрихкода + " - " + Строка.Штрихкод); Строка.ЕдиницаИзмерения = ТекТовар.ЕдиницаХраненияОстатков; КонецЦикла; НаборЗаписей.Загрузить(тзШтрихкод); НаборЗаписей.Записать() КонецПроцедуры Но ошибка, при НаборЗаписей.Записать() Текст ошибки. Штрихкод: 2000000000046 уже имеет владельца "Товара 20". Хелп плиз. |
|||
1
Maxus43
04.06.14
✎
10:59
|
из регистра ШтрихКоды и тяни номенклатуру, поле Владелец. Без соединений со справочником и без кода ерисиархов типа ТекТовар = cпрТовар.НайтиПоКоду(Строка.Код).ПолучитьОбъект();
|
|||
2
Maxus43
04.06.14
✎
11:09
|
что-то типа
Запрос = Новый Запрос; Запрос.Текст = " |ВЫБРАТЬ | Штрихкоды.Владелец, | Штрихкоды.Штрихкод, | Штрихкоды.ЕдиницаИзмерения |ИЗ | РегистрСведений.Штрихкоды КАК Штрихкоды |ГДЕ | Штрихкоды.ЕдиницаИзмерения = Значение(Справочник.ЕдиницыИзмерения.ПустаяСсылка) "; РезультатЗапроса = Запрос.Выполнить(); тзТовар = РезультатЗапроса.Выгрузить(); ЭлементыФормы.Товар.СоздатьКолонки(); Для каждого Строка Из тзТовар Цикл НаборЗаписей = РегистрыСведений.Штрихкоды.СоздатьНаборЗаписей(); НаборЗаписей.Отбор.Владелец.Установить(Строка.Владелец); НаборЗаписей.Прочитать(); Для Каждого СтрокаНабора из НаборЗаписей Цикл СтрокаНабора.ЕдиницаИзмерения = Строка.Владелец.ЕдиницаХраненияОстатков; КонецЦикла; НаборЗаписей.Записать() КонецЦикла; КонецПроцедуры на тестовой погоняй конечно |
|||
3
bizon2008
04.06.14
✎
11:19
|
Угуй. Такое наколякал.
&НаСервере Процедура ШрихкодУстановкаЕдиницыИзмерения() Запрос = Новый Запрос; Запрос.Текст = " |ВЫБРАТЬ | Штрихкоды.Владелец, | Штрихкоды.Штрихкод, | Штрихкоды.ЕдиницаИзмерения, | Штрихкоды.ТипШтрихкода |ИЗ | РегистрСведений.Штрихкоды КАК Штрихкоды |"; тзШтрихкод = Запрос.Выполнить().Выгрузить(); НаборЗаписей = РегистрыСведений.Штрихкоды.СоздатьНаборЗаписей(); НаборЗаписей.Записать(); рсШтрихкоды=РегистрыСведений.Штрихкоды.СоздатьНаборЗаписей(); НомерСтроки=1; Для каждого Строка из тзШтрихкод Цикл НоваяЗапись=рсШтрихкоды.Добавить(); НоваяЗапись.Активность=Истина; НоваяЗапись.Владелец=Строка.Владелец; НоваяЗапись.Штрихкод=Строка.Штрихкод; Если ТипЗнч(Строка.Владелец)=Тип("СправочникСсылка.Номенклатура") Тогда НоваяЗапись.ЕдиницаИзмерения=Строка.Владелец.ЕдиницаХраненияОстатков; Иначе НоваяЗапись.ЕдиницаИзмерения=Справочники.ЕдиницыИзмерения.ПустаяСсылка(); КонецЕсли; НоваяЗапись.ТипШтрихкода=Строка.ТипШтрихкода; НомерСтроки=НомерСтроки+1; КонецЦикла; Попытка рсШтрихкоды.Записать(); Исключение Сообщить(ОписаниеОшибки()); КонецПопытки; Сообщить("Запись закончена"); КонецПроцедуры Но блин, некузяво как регистр туда сюда гонять. |
|||
4
bizon2008
04.06.14
✎
11:21
|
(2) Не, не работает, там проверка на уникальность отрабатывает.
|
|||
5
acsent
04.06.14
✎
11:26
|
делай через менеджер записи а не через набор
|
|||
6
Maxus43
04.06.14
✎
11:36
|
(4) на какую уникальность?
|
|||
7
bizon2008
04.06.14
✎
11:45
|
(6) В регистре сведение такой код.
Если мНеРазрешитьНеуникальныеШтрихкоды Тогда Для Каждого ТекущаяЗапись Из ЭтотОбъект Цикл Если ЗначениеЗаполнено(ТекущаяЗапись.ШтрихКод) Тогда Запрос = Новый Запрос(" |ВЫБРАТЬ ПЕРВЫЕ 1 | РегШтрихкоды.Владелец КАК Владелец, | РегШтрихкоды.ШтрихКод КАК Штрихкод |ИЗ | РегистрСведений.Штрихкоды КАК РегШтрихкоды |ГДЕ | РегШтрихкоды.ШтрихКод = &ШтрихКод |"); Запрос.УстановитьПараметр("ШтрихКод", ТекущаяЗапись.ШтрихКод); РезультатЗапроса = Запрос.Выполнить(); Если Не РезультатЗапроса.Пустой() Тогда Выборка = РезультатЗапроса.Выбрать(); Выборка.Следующий(); Сообщить("Штрихкод: " + Выборка.ШтрихКод + " уже имеет владельца """ + СокрЛП(Выборка.Владелец) + """."); Отказ = Истина; КонецЕсли; КонецЕсли; КонецЦикла; КонецЕсли; |
|||
8
Maxus43
04.06.14
✎
11:54
|
(7) это перед записью стоит, принудительная проверка. У тебя не будет задвоений поидее после этого кода, делай НаборЗаписей.ОбменДанными.Загрузка = Истина;
|
|||
9
bizon2008
04.06.14
✎
11:56
|
(8) И куда это воткнуть?
|
|||
10
Maxus43
04.06.14
✎
11:57
|
НаборЗаписей.ОбменДанными.Загрузка = Истина;
НаборЗаписей.Записать(); |
|||
11
bizon2008
04.06.14
✎
12:02
|
(10) Не. Таже ошибка.
Ладно, хрень с ним, буду реестр целиком перезаписывать. Спасибо. |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |