Имя: Пароль:
1C
1С v8
изменение регистра
🠗 (GROOVY 02.11.2015 12:54)
0 potapovi4
 
02.11.15
12:24
добрый день мистчане.Все пытаюсь изменить некое измрение в регистре штрих код вот что набросал
                ТекЗапись = РегистрыСведений.Штрихкоды.СоздатьМенеджерЗаписи();
                ТекЗапись.Владелец         = стр.Номенклатура;
                ТекЗапись.ЕдиницаИзмерения = стр.ЕдиницаИзмерения;
                ТекЗапись.ТипШтрихкода     = ПланыВидовХарактеристик.ТипыШтрихкодов.EAN13;
                ТекЗапись.Качество         = Справочники.Качество.Новый;
                ТекЗапись.Штрихкод         = выбШ.ШтрихКод;
                ТекЗапись.ХарактеристикаНоменклатуры         = стр.ХарактеристикаНоменклатуры;
                ТекЗапись.Прочитать();
                Попытка      
                ТекЗапись.Наличие         = 1 ;
                    ТекЗапись.Записать();
                Исключение
                КонецПопытки;

хочу изменить измерение НАЛИЧИЕ.но ругается что
Штрихкод: 2000004172619 уже имеет владельца
1 Горогуля
 
02.11.15
12:25
понятно
2 VikingKosmo
 
02.11.15
12:26
продолжайте наблбдение
3 VikingKosmo
 
02.11.15
12:26
*наблюдение же
4 RomanYS
 
02.11.15
12:27
потому что

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

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

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

                    Сообщить("Штрихкод: " + Выборка.ШтрихКод + " уже имеет владельца """ + СокрЛП(Выборка.Владелец) + """.");
                    Отказ = Истина;
                КонецЕсли;
            КонецЕсли;
        КонецЦикла;
    КонецЕсли;
5 RomanYS
 
02.11.15
12:29
(0) и у РС нельзя изменить измерение:
надо удалить старую запись и создать новую
6 Timon1405
 
02.11.15
12:32
(5) оО Вот это поворот
РегистрСведенийМенеджерЗаписи.<Имя регистра сведений> (InformationRegisterRecordManager.<Имя регистра сведений>)
Записать (Write)
Синтаксис:

Записать(<Замещать>)
Параметры:

<Замещать> (необязательный)

Тип: Булево.
Определяет режим замещения существующей записи с тем же набором значений измерений регистра и с тем же периодом (для периодических регистров). Истина - если запись регистра сведений с таким набором существует, то выполняется замещение; Ложь - запись будет дописана к уже существующим в информационной базе записям.
Значение по умолчанию: Истина.
Описание:

Записывает в базу данных запись регистра сведений с текущими значениями свойств. Если запись регистра сведений была предварительно считана из базы данных, то при выполнении метода сначала считанная запись удаляется, а затем производится запись измененной записи. С помощью параметра <Замещать> регулируется, будет ли метод замещать запись, если в момент выполнения метода существует другая (исключая считанную) запись с такими же значениями измерений регистра и с таким же периодом для периодических регистров.

Доступность:

Сервер, толстый клиент, внешнее соединение, мобильное приложение(сервер).
Примечание:

При вызове с параметром <Замещать> равным Ложь после записи в информационную базу запись очищается.
Пример:

Курс.Записать();
7 potapovi4
 
02.11.15
12:36
(6)в моем случае я ведь вроде пытаюсь заместить запись?
8 potapovi4
 
02.11.15
12:38
(6) от чего тогда руагется что есть такой уже штрих код?
9 lera01
 
02.11.15
12:40
Погляди Обработчик ПередЗаписью в модуле набора записей регистра сведений Штрихкоды
10 Timon1405
 
02.11.15
12:41
(8) как насчет 1) озвучить конфу 2) погуглить хоть что-нибудь
v8: Штрихкод: уже имеет владельца! Как Можно проверить наличие Штрихкода у Владельца.
11 potapovi4
 
02.11.15
12:43
(9)поглядел.как выкрутится из ситуации?
(10)УТ.гуглил.и набора записей использовал и менеджер .ну неполучается.
12 potapovi4
 
02.11.15
12:48
(10) по данной ссылке проблема не решена.
13 lera01
 
02.11.15
12:53
(11) Или константу Разрешить неуникальные штрихкоды (что стремно), или в режиме загрузки данных попробовать или сначала прочитать данные записи, потом ее стереть и по-новой записать с нужными изменениями.
14 GROOVY
 
модератор
02.11.15
12:54
(12)  Нафига плодить ветки?
15 D_E_S_131
 
02.11.15
12:54
В (5) уже был готовый ответ.
16 potapovi4
 
02.11.15
12:55
(14)извините.но никак не могу решить данную задачу.
17 potapovi4
 
02.11.15
12:56
(15) а вот (6) как бы доказывает что можно
18 Горогуля
 
02.11.15
12:59
(16) всё правильно, успешность решения напрямую зависит от количества веток. не останавливайся
19 potapovi4
 
02.11.15
13:01
(18) вмсто того чтобы пинать лучше бы помогли.сами то наверное родились и сразу начали все правильно писать
20 Горогуля
 
02.11.15
13:05
(19) код написать? лениво
21 potapovi4
 
02.11.15
13:14
(20) так написал бы,если бы знал как из ситуации выйти.отключать проверку уникальности штрих кодов не хотелось бы и процедуру менять в модуле набора
22 potapovi4
 
02.11.15
13:19
////////////////////////////////////////////////////////
                ТекЗапись = РегистрыСведений.Штрихкоды.СоздатьМенеджерЗаписи();
                ТекЗапись.Владелец         = стр.Номенклатура;
                ТекЗапись.ЕдиницаИзмерения = стр.ЕдиницаИзмерения;
                ТекЗапись.ТипШтрихкода     = ПланыВидовХарактеристик.ТипыШтрихкодов.EAN13;
                ТекЗапись.Качество         = Справочники.Качество.Новый;
                ТекЗапись.Штрихкод         = выбШ.ШтрихКод;
                ТекЗапись.ХарактеристикаНоменклатуры         = стр.ХарактеристикаНоменклатуры;
                ТекЗапись.Прочитать();
                 Если ТекЗапись.Выбран() Тогда
                Попытка      
                ТекЗапись.Наличие         = 1 ;
                    ТекЗапись.Записать();
                Исключение
                КонецПопытки;
                КонецЕсли;    

сделал так вроде работает но не все записи меняет.хотя результата определенного добился
23 potapovi4
 
02.11.15
13:22
хотя пожалуй это я не то сморозил.кароче код работает но не все записи меняет
24 lera01
 
02.11.15
14:21
а если попробовать
...
                Если ТекЗапись.Выбран() Тогда
                Попытка      
                ТекЗапись.Наличие         = 1 ;
                    ТекЗапись.Записать();
                Исключение
ТекЗапись.Удалить();///нашли и стерли, теперь опять запишем
              ТекЗапись = РегистрыСведений.Штрихкоды.СоздатьМенеджерЗаписи();
                ТекЗапись.Владелец         = стр.Номенклатура;
                ТекЗапись.ЕдиницаИзмерения = стр.ЕдиницаИзмерения;
                ТекЗапись.ТипШтрихкода     = ПланыВидовХарактеристик.ТипыШтрихкодов.EAN13;
                ТекЗапись.Качество         = Справочники.Качество.Новый;
                ТекЗапись.Штрихкод         = выбШ.ШтрихКод;
                ТекЗапись.ХарактеристикаНоменклатуры         = стр.ХарактеристикаНоменклатуры;
                    ТекЗапись.Записать();

                КонецПопытки;