Имя: Пароль:
1C
 
проверка на наличие записи в регистре сведений
,
0 falselight
 
22.05.19
07:23
Есть непериодический, независимый регистр сведений.
В него идет запись.
Подскажите пожалуйста как проверить есть ли в нем уже запись с данной номенклатурой или нет.
Если нет создавать по новой.
А если есть, обновлять поле код.


        КодСКУ                = РегистрыСведений.КодыТоваровПодключаемогоОборудованияOffline.СоздатьМенеджерЗаписи();
        КодСКУ.Код            = ТекСтрока.SKU;
        КодСКУ.Активность   = Истина;
        КодСКУ.Используется = Истина;
        КодСКУ.Номенклатура = Ном.Ссылка;
        Если ТекСтрока.Период = "" тогда
            ТекСтрока.Период = ТекущаяДата();
        КонецЕсли;
        КодСКУ.Период = ТекСтрока.Период;
        КодСКУ.Записать(Истина);
1 catena
 
22.05.19
07:28
Проверять не надо.

РегистрСведенийМенеджерЗаписи.<Имя регистра сведений> (InformationRegisterRecordManager.<Имя регистра сведений>)
Записать (Write)
Синтаксис:

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

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

Тип: Булево.
Определяет режим замещения существующей записи с тем же набором значений измерений регистра и с тем же периодом (для периодических регистров). Истина - если запись регистра сведений с таким набором существует, то выполняется замещение; Ложь - запись будет дописана к уже существующим в информационной базе записям.
Значение по умолчанию: Истина.
2 falselight
 
22.05.19
07:32
(1) А как по коду будет? Не совсем понятно.
Подскажите пожалуйста вы более опытна!

Как делать проверку на наличие уже записи по номенклатуре в регистре?
3 breezee
 
22.05.19
07:33
(2) Запросом
4 catena
 
22.05.19
07:34
(2)Перечитайте внимательно мой ответ, параметр Замещать указывает, будет ли найдена и заменена запись, если она существует.
5 falselight
 
22.05.19
07:34
(4) а проверять запросом?
6 catena
 
22.05.19
07:35
(5)Перечитайте внимательно мой ответ, параметр Замещать указывает, будет ли найдена и заменена запись, если она существует.
7 Лодырь
 
22.05.19
07:36
Проверять необходимость записи надо пачкой, а не для каждой номенклатуры. А потом писать только необходимое любым из способов.
8 falselight
 
22.05.19
07:39
(7) Как пачкой?
9 falselight
 
22.05.19
07:40
(7) подскажите по коду пожалуйста
10 Мимохожий Однако
 
22.05.19
07:42
(0) В СП есть пример кода
11 falselight
 
22.05.19
07:52
вот запрос

ВЫБРАТЬ
    КодыТоваровПодключаемогоОборудованияOffline.ПравилоОбмена КАК ПравилоОбмена,
    КодыТоваровПодключаемогоОборудованияOffline.Код КАК Код,
    КодыТоваровПодключаемогоОборудованияOffline.Номенклатура КАК Номенклатура,
    КодыТоваровПодключаемогоОборудованияOffline.Характеристика КАК Характеристика,
    КодыТоваровПодключаемогоОборудованияOffline.Упаковка КАК Упаковка,
    КодыТоваровПодключаемогоОборудованияOffline.Используется КАК Используется
ИЗ
    РегистрСведений.КодыТоваровПодключаемогоОборудованияOffline КАК КодыТоваровПодключаемогоОборудованияOffline
ГДЕ
    КодыТоваровПодключаемогоОборудованияOffline.Номенклатура = &Номенклатура

УПОРЯДОЧИТЬ ПО
    КодыТоваровПодключаемогоОборудованияOffline.Номенклатура.Наименование
12 falselight
 
22.05.19
07:52
(10) как его найти?
13 Mankubus
 
22.05.19
08:01
(12) не надо тебе ничего проверять. просто записывай и все. если запись уже есть - она перезапишется
14 Мимохожий Однако
 
22.05.19
08:03
(12) Ctrl-F1 и в поиск
15 Cyberhawk
 
22.05.19
08:06
"если есть, обновлять поле код" // А другие поля обновлять не надо?
16 falselight
 
22.05.19
08:07
(14) Да ничего так нет!!!!!!

(15) Одно это обновлять если есть запись.
Ну или все.
Как будет по коду?
17 Cyberhawk
 
22.05.19
08:07
Ну у тебя же в нулевом посте код приведен, не работает что ли?
18 Мимохожий Однако
 
22.05.19
08:12
(16) Не ори
РегистрСведенийМенеджерЗаписи.<Имя регистра сведений> (InformationRegisterRecordManager.<Имя регистра сведений>)
Прочитать (Read)
Синтаксис:

Прочитать()
Описание:

Считывает запись регистра сведений по установленным значениям ключевых полей, включая разделители с уровнем разделения НезависимоИСовместно, в состав которых входит регистр. При этом, если указать значение разделителя, отличное от используемого в сеансе или не указать не используемое в сеансе, Выбран вернет Ложь.

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

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

Курс = РегистрыСведений.КурсыВалют.СоздатьМенеджерЗаписи();
Курс.Валюта = ВыбВалюта;
Курс.Период = ТекущаяДата();
Курс.Прочитать();

РегистрСведенийМенеджерЗаписи.<Имя регистра сведений> (InformationRegisterRecordManager.<Имя регистра сведений>)
Выбран (Selected)
Синтаксис:

Выбран()
Возвращаемое значение:

Тип: Булево.
Истина - запись выбрана, Ложь - в противном случае.
Описание:

Определяет, считана запись или нет.

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

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

Если Не Курс.Выбран() Тогда
    Предупреждение(НСтр("ru = 'Курс не считан';"
     + " en = 'Rate is not read.'"));
КонецЕсли;

еще накидать? За тебя думать сложно
19 Мимохожий Однако
 
22.05.19
08:13
Определись с измерениями. Прочитай. Проверь выбран или нет. Потом иди дальше
20 falselight
 
22.05.19
08:15
Подскажите пожалуйста, как из этого собрать правильный код?


        ЗапросСКУ    = Новый Запрос;
        ЗапросСКУ.Текст = "
            |ВЫБРАТЬ
            |    КодыТоваровПодключаемогоОборудованияOffline.ПравилоОбмена КАК ПравилоОбмена,
            |    КодыТоваровПодключаемогоОборудованияOffline.Код КАК Код,
            |    КодыТоваровПодключаемогоОборудованияOffline.Номенклатура КАК Номенклатура,
            |    КодыТоваровПодключаемогоОборудованияOffline.Характеристика КАК Характеристика,
            |    КодыТоваровПодключаемогоОборудованияOffline.Упаковка КАК Упаковка,
            |    КодыТоваровПодключаемогоОборудованияOffline.Используется КАК Используется
            |ИЗ
            |    РегистрСведений.КодыТоваровПодключаемогоОборудованияOffline КАК КодыТоваровПодключаемогоОборудованияOffline
            |ГДЕ
            |    КодыТоваровПодключаемогоОборудованияOffline.Номенклатура = &Номенклатура
            |
            |УПОРЯДОЧИТЬ ПО
            |    КодыТоваровПодключаемогоОборудованияOffline.Номенклатура.Наименование";
        ЗапросСКУ.УстановитьПараметр("Номенклатура", Ном.Ссылка);
        Рез = ЗапросСКУ.Выполнить();
        Если Не Рез.Пустой() Тогда
            
        Иначе
            
        КонецЕсли;
        КодСКУ                = РегистрыСведений.КодыТоваровПодключаемогоОборудованияOffline.СоздатьМенеджерЗаписи();
        КодСКУ.Код            = ТекСтрока.SKU;
        КодСКУ.Активность   = Истина;
        КодСКУ.Используется = Истина;
        КодСКУ.Номенклатура = Ном.Ссылка;
        Если ТекСтрока.Период = "" тогда
            ТекСтрока.Период = ТекущаяДата();
        КонецЕсли;
        КодСКУ.Период = ТекСтрока.Период;
        КодСКУ.Записать(Истина);
21 Cyberhawk
 
22.05.19
08:16
Нужно тяму напрягать
22 falselight
 
22.05.19
08:16
(17) Он дубли делает. Нужно с проверкой делать.
Записывать новую строку или переписывать существующую.
23 Cyberhawk
 
22.05.19
08:17
(22) Покажи то что ты называешь дублями на картинке
24 Cyberhawk
 
22.05.19
08:18
Пади период разный просто
25 Мимохожий Однако
 
22.05.19
08:28
(22) В твоём коде не хватает методов Прочитать() и  Выбран()
До сих пор не разобрался какие измерения в регистре и по каким измерениям надо отобрать Запись регистра.
Впрочем, я повторяюсь.
26 falselight
 
22.05.19
08:29
(25) Подскажите пожалуйста как их использовать в этом коде?
27 falselight
 
22.05.19
08:32
(25) Зачем читать если мне нужно или добавить новую или переписать существующую?
28 catena
 
22.05.19
08:34
(22)Значит измерения другие. Структура регистра какая?
29 catena
 
22.05.19
08:34
(27)Гениально. Чтобы с чем-то сравнить, это что-то надо сперва прочитать.
30 falselight
 
22.05.19
08:35
31 falselight
 
22.05.19
08:36
В (20) я же запрос сделал, он либо пусто либо нет.
Обновить записи или создать.
32 falselight
 
22.05.19
08:37
Напишите пожалуйста пример?
А я надосуге на тестовой базе сам со всем разберусь и вызубрю.
33 catena
 
22.05.19
08:49
(32)Ты только обещаешь
34 Мимохожий Однако
 
22.05.19
08:51
(27) Запись читают, чтобы определить есть она или нет и включить отбор. Без отбора рискуешь потерять весь регистр. Это азы. Аксиома, так сказать.
35 Мимохожий Однако
 
22.05.19
08:52
(32) Ты только пишешь или еще читать умеешь? Или читать не обязательно,то что тебе писали выше? АБАЛДЕТЬ
36 falselight
 
22.05.19
08:56
Я не спал 2 ночи.
37 falselight
 
22.05.19
08:59
(34) По ресурсу можно делать отбор? Или только по измерениям?
38 Мимохожий Однако
 
22.05.19
09:01
(37) Ты уже сделал запрос по ресурсу. В выборке должны быть все измерения. Вот по ним и отбирай.
PS. А лучше поспи. Утро вечере мудренее.
39 falselight
 
22.05.19
09:03
(38) Структура регистра в http://joxi.ru/4AkMw4vuo0ZxXm

Я не знаю что это, но отбирать нужно по номенклатуре. Измерения не особо нужны
Точнее нужно менять код измерения если есть запись.

Мне нужно сделать. Спать ночью буду.
40 Cyberhawk
 
22.05.19
09:04
Ты на 1слансере что ли подрабатываешь?
41 Мимохожий Однако
 
22.05.19
09:06
(39) Нужен отбор. И измерения нужны. По номенклатуре находишь записи запросом к регистру. В поля запроса выбираешь ВСЕ измерения. При прохождении выборки, делаешь отбор по полученным значениям измерений, а потом уже то, что тебе надо делаешь.
42 falselight
 
22.05.19
09:16
Подскажите пожалуйста, все ли так?

        ЗапросСКУ    = Новый Запрос;
        ЗапросСКУ.Текст = "
            |ВЫБРАТЬ
            |    КодыТоваровПодключаемогоОборудованияOffline.ПравилоОбмена  КАК ПравилоОбмена,
            |    КодыТоваровПодключаемогоОборудованияOffline.Код            КАК Код,
            |    КодыТоваровПодключаемогоОборудованияOffline.Номенклатура   КАК Номенклатура,
            |    КодыТоваровПодключаемогоОборудованияOffline.Характеристика КАК Характеристика,
            |    КодыТоваровПодключаемогоОборудованияOffline.Упаковка       КАК Упаковка,
            |    КодыТоваровПодключаемогоОборудованияOffline.Используется   КАК Используется
            |ИЗ
            |    РегистрСведений.КодыТоваровПодключаемогоОборудованияOffline КАК КодыТоваровПодключаемогоОборудованияOffline
            |ГДЕ
            |    КодыТоваровПодключаемогоОборудованияOffline.Номенклатура = &Номенклатура
            |
            |УПОРЯДОЧИТЬ ПО
            |    КодыТоваровПодключаемогоОборудованияOffline.Номенклатура.Наименование";
        ЗапросСКУ.УстановитьПараметр("Номенклатура", Ном.Ссылка);
        Рез = ЗапросСКУ.Выполнить();
        Если Не Рез.Пустой() Тогда
            Выборка = Рез.Выбрать();
            Пока Выборка.Следующий() Цикл
                НаборЗаписей = РегистрыСведений.КодыТоваровПодключаемогоОборудованияOffline.СоздатьНаборЗаписей();
                НаборЗаписей.Отбор.Номенклатура.Установить(Выборка.ПравилоОбмена);
                НаборЗаписей.Отбор.Номенклатура.Установить(Выборка.Код);
                НаборЗаписей.Прочитать();
                //
                НоваяЗапись                = НаборЗаписей.Добавить();
                НоваяЗапись.ПравилоОбмена  = Выборка.ПравилоОбмена;
                НоваяЗапись.Код            = ТекСтрока.SKU;
                КодСКУ.Активность          = Истина;
                КодСКУ.Используется        = Истина;
                КодСКУ.Номенклатура        = Ном.Ссылка;
                Если ТекСтрока.Период = "" тогда
                    ТекСтрока.Период = ТекущаяДата();
                КонецЕсли;
                КодСКУ.Период = ТекСтрока.Период;
                //
                НаборЗаписей.Записать();
            КонецЕсли;
        Иначе
            КодСКУ                = РегистрыСведений.КодыТоваровПодключаемогоОборудованияOffline.СоздатьМенеджерЗаписи();
            КодСКУ.Код            = ТекСтрока.SKU;
            КодСКУ.Активность   = Истина;
            КодСКУ.Используется = Истина;
            КодСКУ.Номенклатура = Ном.Ссылка;
            Если ТекСтрока.Период = "" тогда
                ТекСтрока.Период = ТекущаяДата();
            КонецЕсли;
            КодСКУ.Период = ТекСтрока.Период;
            КодСКУ.Записать(Истина);
        КонецЕсли;
43 Cyberhawk
 
22.05.19
09:20
Семь рез отмерь - один раз отрежь
44 falselight
 
22.05.19
09:26
Так нормально?


        ЗапросСКУ    = Новый Запрос;
        ЗапросСКУ.Текст = "
            |ВЫБРАТЬ
            |    КодыТоваровПодключаемогоОборудованияOffline.ПравилоОбмена  КАК ПравилоОбмена,
            |    КодыТоваровПодключаемогоОборудованияOffline.Код            КАК Код,
            |    КодыТоваровПодключаемогоОборудованияOffline.Номенклатура   КАК Номенклатура,
            |    КодыТоваровПодключаемогоОборудованияOffline.Характеристика КАК Характеристика,
            |    КодыТоваровПодключаемогоОборудованияOffline.Упаковка       КАК Упаковка,
            |    КодыТоваровПодключаемогоОборудованияOffline.Используется   КАК Используется
            |ИЗ
            |    РегистрСведений.КодыТоваровПодключаемогоОборудованияOffline КАК КодыТоваровПодключаемогоОборудованияOffline
            |ГДЕ
            |    КодыТоваровПодключаемогоОборудованияOffline.Номенклатура = &Номенклатура
            |
            |УПОРЯДОЧИТЬ ПО
            |    КодыТоваровПодключаемогоОборудованияOffline.Номенклатура.Наименование";
        ЗапросСКУ.УстановитьПараметр("Номенклатура", Ном.Ссылка);
        Рез = ЗапросСКУ.Выполнить();
        Если Не Рез.Пустой() Тогда
            Выборка = Рез.Выбрать();
            Пока Выборка.Следующий() Цикл
                НаборЗаписей = РегистрыСведений.КодыТоваровПодключаемогоОборудованияOffline.СоздатьНаборЗаписей();
                НаборЗаписей.Отбор.Номенклатура.Установить(Выборка.ПравилоОбмена);
                НаборЗаписей.Отбор.Номенклатура.Установить(Выборка.Код);
                НаборЗаписей.Прочитать();
                //
                Для каждого Запись из НаборЗаписей Цикл                
                    Запись.ПравилоОбмена  = Выборка.ПравилоОбмена;
                    Запись.Код            = ТекСтрока.SKU;
                    Запись.Активность     = Истина;
                    Запись.Используется   = Истина;
                    Запись.Номенклатура   = Ном.Ссылка;
                    Если ТекСтрока.Период = "" тогда
                        ТекСтрока.Период = ТекущаяДата();
                    КонецЕсли;
                    Запись.Период = ТекСтрока.Период;
                КонецЦикла;
                //
                НаборЗаписей.Записать();
            КонецЦикла;
        Иначе
            КодСКУ                = РегистрыСведений.КодыТоваровПодключаемогоОборудованияOffline.СоздатьМенеджерЗаписи();
            КодСКУ.Код            = ТекСтрока.SKU;
            КодСКУ.Активность   = Истина;
            КодСКУ.Используется = Истина;
            КодСКУ.Номенклатура = Ном.Ссылка;
            Если ТекСтрока.Период = "" тогда
                ТекСтрока.Период = ТекущаяДата();
            КонецЕсли;
            КодСКУ.Период = ТекСтрока.Период;
            КодСКУ.Записать(Истина);
        КонецЕсли;
45 Serg_1960
 
22.05.19
09:30
Не тупите :( У Вас уже глаз замылился - не видите, что бессвязный бред несёте :)

Копипаста, тля: нельзя в отбор "Номенклатура" вставлять значение "ПравилоОбмена" и тут же следующей строкой кода это значение изменяется на "Код". Щепетильнее нада:

НаборЗаписей.Отбор.ПравилоОбмена.Установить(Выборка.ПравилоОбмена);
НаборЗаписей.Отбор.Код.Установить(Выборка.Код);
46 Cyberhawk
 
22.05.19
09:32
Один хрен ему не поможет, когда запрос не вернул результат. Надо вернуться на один уровень назад - к постановке.
47 falselight
 
22.05.19
09:34
(45) Спасибо, это просто опечатка.

Вот так нормально ?


        ЗапросСКУ    = Новый Запрос;
        ЗапросСКУ.Текст = "
            |ВЫБРАТЬ
            |    КодыТоваровПодключаемогоОборудованияOffline.ПравилоОбмена  КАК ПравилоОбмена,
            |    КодыТоваровПодключаемогоОборудованияOffline.Код            КАК Код,
            |    КодыТоваровПодключаемогоОборудованияOffline.Номенклатура   КАК Номенклатура,
            |    КодыТоваровПодключаемогоОборудованияOffline.Характеристика КАК Характеристика,
            |    КодыТоваровПодключаемогоОборудованияOffline.Упаковка       КАК Упаковка,
            |    КодыТоваровПодключаемогоОборудованияOffline.Используется   КАК Используется
            |ИЗ
            |    РегистрСведений.КодыТоваровПодключаемогоОборудованияOffline КАК КодыТоваровПодключаемогоОборудованияOffline
            |ГДЕ
            |    КодыТоваровПодключаемогоОборудованияOffline.Номенклатура = &Номенклатура
            |
            |УПОРЯДОЧИТЬ ПО
            |    КодыТоваровПодключаемогоОборудованияOffline.Номенклатура.Наименование";
        ЗапросСКУ.УстановитьПараметр("Номенклатура", Ном.Ссылка);
        Рез = ЗапросСКУ.Выполнить();
        Если Не Рез.Пустой() Тогда
            Выборка = Рез.Выбрать();
            Пока Выборка.Следующий() Цикл
                НаборЗаписей = РегистрыСведений.КодыТоваровПодключаемогоОборудованияOffline.СоздатьНаборЗаписей();
                НаборЗаписей.Отбор.ПравилоОбмена.Установить(Выборка.ПравилоОбмена);
                НаборЗаписей.Отбор.Код.Установить(Выборка.Код);
                НаборЗаписей.Прочитать();
                //
                Для каждого Запись из НаборЗаписей Цикл                
                    Запись.ПравилоОбмена  = Выборка.ПравилоОбмена;
                    Запись.Код            = ТекСтрока.SKU;
                    Запись.Активность     = Истина;
                    Запись.Используется   = Истина;
                    Запись.Номенклатура   = Ном.Ссылка;
                    Если ТекСтрока.Период = "" тогда
                        ТекСтрока.Период = ТекущаяДата();
                    КонецЕсли;
                    Запись.Период = ТекСтрока.Период;
                КонецЦикла;
                //
                НаборЗаписей.Записать();
            КонецЦикла;
        Иначе
            КодСКУ                = РегистрыСведений.КодыТоваровПодключаемогоОборудованияOffline.СоздатьМенеджерЗаписи();
            КодСКУ.Код            = ТекСтрока.SKU;
            КодСКУ.Активность   = Истина;
            КодСКУ.Используется = Истина;
            КодСКУ.Номенклатура = Ном.Ссылка;
            Если ТекСтрока.Период = "" тогда
                ТекСтрока.Период = ТекущаяДата();
            КонецЕсли;
            КодСКУ.Период = ТекСтрока.Период;
            КодСКУ.Записать(Истина);
        КонецЕсли;
48 falselight
 
22.05.19
09:35
(46) Запрос не вернул результат, выполняеся вот это.


    Иначе
            КодСКУ                = РегистрыСведений.КодыТоваровПодключаемогоОборудованияOffline.СоздатьМенеджерЗаписи();
            КодСКУ.Код            = ТекСтрока.SKU;
            КодСКУ.Активность   = Истина;
            КодСКУ.Используется = Истина;
            КодСКУ.Номенклатура = Ном.Ссылка;
            Если ТекСтрока.Период = "" тогда
                ТекСтрока.Период = ТекущаяДата();
            КонецЕсли;
            КодСКУ.Период = ТекСтрока.Период;
            КодСКУ.Записать(Истина);
        КонецЕсли;
49 Мимохожий Однако
 
22.05.19
09:40
ОФФ. Не в коня корм
50 Serg_1960
 
22.05.19
09:50
(46)Угу, автору уже говорили и не раз, но он не слышит.Точнее слышать - слышит, но не понимает :)

Автор, в Вашем регистре есть два измерения - это "ПравилоОбмена" и "Код". Именно вокруг этих двух значений запрос делается (ну, или отбор строится).

А поиск записей регистра по ресурсу регистра может вернуть Вам много ненужного мусора и далеко не факт, что в результате Вы получите нужное Вам. Это всё равно что спросить "Сколько время?" предполагая услышать точное московское время, а в ответ услышать - "Осталось мало". Ибо спрашиваемый не так Вас понял. Русский язык он такой богатый :) Платформа тоже Вас не понимает :))

PS: читайте желтые книжки или гуглите как работать с регистрами сведений.
https://pro1c8.ru/programmnaya-rabota-registr-svedenij/
51 falselight
 
22.05.19
10:13
(50) Мне нужно запрос делать по номенклатуре!!!!!!!!!!!!!!!!!!!!!!!!!!!
Зачем мне эти 2 измерения????
52 Cyberhawk
 
22.05.19
10:14
Как говорится, "не хочешь, а придется" (с)
53 Cyberhawk
 
22.05.19
10:15
(50) Пофиг на то что он может получить несколько записей. Это у него вроде отработает, пох надо оно или не надо.
Я намекал на то что когда в результате запроса пусто, значения для измерений ему неоткуда уже взять и будет болт.
54 falselight
 
22.05.19
10:16
(52) Смотрите, это делается для того что бы обновлять коды в регистре, по номенклатуре
коды есть, а их нужно заменять!!!!!!!!!

То есть эти 2 измерения вообще роли не играют!
55 falselight
 
22.05.19
10:17
(53) В случае (48) есть код, а план обмена не нужен, он пустой!
56 hhhh
 
22.05.19
10:20
(55) возьми ты другую задачу, что ты херню какую-то постоянно выбираешь. То ЗУП, то вот это теперь.
57 Cyberhawk
 
22.05.19
10:22
"эти 2 измерения вообще роли не играют" // См. (52)
58 Мимохожий Однако
 
22.05.19
10:25
(54) Опять орёшь...))
Чтобы скорректировать запись регистра, её надо получить.
А для этого нужен отбор по измерениям.
Запрос по ресурсам (в данном случае Номенклатура) позволяет получить выборку, но не позволяет спозиционироваться на записи регистра, если она существует.
..
На пальцах. У тебя есть ключи, которые подходят к разным дверям. Есть ключи, которые открывают несколько дверей. Вопрос, как тебе найти нужный ключ для двери?
59 hhhh
 
22.05.19
10:27
(54) тебе нужно выполнить 2 пункта: удаление существующего СКУ, и добавление нового.

в 2 этапа делай. 2-й этап ты уже сделал в (0).
60 falselight
 
22.05.19
10:53
Этот блок не верный, подскажите как поправить.

        Если Не Рез.Пустой() Тогда
            Выборка = Рез.Выбрать();
            Пока Выборка.Следующий() Цикл
                НаборЗаписей = РегистрыСведений.КодыТоваровПодключаемогоОборудованияOffline.СоздатьНаборЗаписей();
                НаборЗаписей.Отбор.ПравилоОбмена.Установить(Выборка.ПравилоОбмена);
                НаборЗаписей.Отбор.Код.Установить(Выборка.Код);
                НаборЗаписей.Прочитать();
                //
                Для каждого Запись из НаборЗаписей Цикл                
                    Запись.ПравилоОбмена  = Выборка.ПравилоОбмена;
                    Запись.Код            = ТекСтрока.SKU;
                    Запись.Активность     = Истина;
                    Запись.Используется   = Истина;
                    Запись.Номенклатура   = Ном.Ссылка;
                    Если ТекСтрока.Период = "" тогда
                        ТекСтрока.Период = ТекущаяДата();
                    КонецЕсли;
                    Запись.Период = ТекСтрока.Период;
                КонецЦикла;
                //
                НаборЗаписей.Записать();
            КонецЦикла;


Идет ошибка

{ВнешняяОбработка.ЗагрузкаНоменклатурыИзРозницы_0_1.Форма.Форма.Форма(238)}: Ошибка при вызове метода контекста (Записать)
                НаборЗаписей.Записать();
по причине:
Запись не верна! Значение поля не соответствует установленному отбору: КодыТоваровПодключаемогоОборудованияOffline: тест, 107 (Регистр сведений: Коды товаров подключаемого оборудования offline; Поле: Код)

по причине:
Запись не верна! Значение поля не соответствует установленному отбору: КодыТоваровПодключаемогоОборудованияOffline: тест, 107 (Регистр сведений: Коды товаров подключаемого оборудования offline; Поле: Код)
61 hhhh
 
22.05.19
10:57
(60) я же тебе написал в (59), ты вообще действительно не читатель.

не получится поменять поле отбора

Запись.Код            = ТекСтрока.SKU;


только через удаление старой и добавление новой записи.
62 Cyberhawk
 
22.05.19
10:58
(61) Гонишь
63 falselight
 
22.05.19
11:00
(61) Как так! Не согласен!!!!!!

ТТам есть дубли номенклатуры вот их нужно будет удалять.

А это по манюалам все решается!!!!!
64 falselight
 
22.05.19
11:03
Подскажите как это решить?
Ошибка что в (60), в отладчике видно
что отбор установили один, на код, а записывается другой, вот и ошибка, как тут быть?
65 falselight
 
22.05.19
11:03
66 hhhh
 
22.05.19
11:05
(63) ну, (62) знает. Я свое мнение высказал.
67 hhhh
 
22.05.19
11:08
(63) можете еще целиком прочитать регистр, без отбора. И проставить нужные коды для номенклатур.
68 Cyberhawk
 
22.05.19
11:28
После строки "Запись.Код" устанавливаешь отбор на код по значению из кавычек
69 falselight
 
22.05.19
11:30
(68)

                Для каждого Запись из НаборЗаписей Цикл                
                    Запись.ПравилоОбмена  = Выборка.ПравилоОбмена;
                    Запись.Код            = ТекСтрока.SKU;
                    Запись.Активность     = Истина;
                    Запись.Используется   = Истина;
                    Запись.Номенклатура   = Ном.Ссылка;
                    Если ТекСтрока.Период = "" тогда
                        ТекСтрока.Период = ТекущаяДата();
                    КонецЕсли;
                    Запись.Период = ТекСтрока.Период;
                    НаборЗаписей.Отбор.Код.Установить(Выборка.Код);
                КонецЦикла;
                //
                НаборЗаписей.Записать();
            КонецЦикла;


Так?

(67) Там задача эта будет делаться периодически. Нужно сделать пока как есть.
70 falselight
 
22.05.19
11:31
(68) Понял вот так

                Для каждого Запись из НаборЗаписей Цикл                
                    Запись.ПравилоОбмена  = Выборка.ПравилоОбмена;
                    Запись.Код            = ТекСтрока.SKU;
                    НаборЗаписей.Отбор.Код.Установить(Запись.Код);
                    Запись.Активность     = Истина;
                    Запись.Используется   = Истина;
                    Запись.Номенклатура   = Ном.Ссылка;
                    Если ТекСтрока.Период = "" тогда
                        ТекСтрока.Период = ТекущаяДата();
                    КонецЕсли;
                    Запись.Период = ТекСтрока.Период;
                КонецЦикла;
                //
                НаборЗаписей.Записать();
            КонецЦикла;
        Иначе


Пробую
71 hhhh
 
22.05.19
11:34
(68) старый ску останется. У него так и есть сейчас. Дубли, два ску на одну номенклатуру. Надо удалять.
72 Cyberhawk
 
22.05.19
11:59
(70) Них*я себе, ты понял. Молодец. Я не верил.
73 Cyberhawk
 
22.05.19
12:02
(71) Скорее всего ты прав, и в (62) Я погорячился ) Использовал такой подход чтобы заполнять значения незаполненных измерений в подписке на запись набора записей. Щас проверю, что там со старой записью в этом случае происходит.
74 Cyberhawk
 
22.05.19
12:06
+(73) Проверил: при интерактивной записи в регистр старая запись не остается
75 Cyberhawk
 
22.05.19
12:12
+(74) Щас программно проверю)
76 Cyberhawk
 
22.05.19
12:20
+(75) Проверил программно: да, старая запись остается. (71) Спс за науку, неинтерактивный сценарий не рассматривал просто
77 Cyberhawk
 
22.05.19
12:29
А, ну понятно: форма записи содержит свойство "ИсходныйКлючЗаписи", который содержит "старый" отбор (на момент открытия формы). И при интерактивной записи из формы сначала попадаем в событие записи пустого набора с этим исходным ("старым") ключом, а потом уже вторая запись набора с новым ключом и новыми значениями, в т.ч. и измерений.
При программном создании, чтении и записи набора собитие записи одно.
78 Cyberhawk
 
22.05.19
12:33
79 falselight
 
22.05.19
12:41
так как правильно сделать? можно пример кода?
80 Cyberhawk
 
22.05.19
12:42
А вот если через МЗ программно писать, то все тип-топ - значение измерения за один проход изменяется.
Только главное добиться, чтобы МЗ был считан (выбран), т.е. установить значения измерений существующей записи.
81 Cyberhawk
 
22.05.19
12:43
+(80) "за один проход" имею в виду в коде вызов метода "Записать". Технически это выливается в два события записи НЗ.
82 falselight
 
22.05.19
12:50
Подскажите по коду
83 Cyberhawk
 
22.05.19
12:53
Через запись двух НЗ тебе надо.
Вариант с МЗ для изменения значений измерений катит только если ты можешь вмешаться в отбор НЗ, а это только в событии регистра.
84 novichok79
 
22.05.19
12:59
(0) я думал это элементарщина. как вы работаете с 1С, если не знаете таких базовых вещей?
85 falselight
 
22.05.19
13:01
Ок, как удалить как записать?
86 falselight
 
22.05.19
13:01
Если не удалять он дублируется!!!!
87 hhhh
 
22.05.19
13:05
(86) поройся в своих темах, ты это уже делал много раз.
88 falselight
 
22.05.19
13:08
(87) Не нарыться там (
89 falselight
 
22.05.19
13:12
Что бы не было задвоенный, как в регистре все делать по одной номенклатуре учитывая что это ресурс
там просто сейчас все затроено я не пойму как грузить, что бы одна и та же номенклатура всегда оставалась
90 falselight
 
22.05.19
13:31
Смотрите, сейчас идет загрузка, новый код по номенклатуре что уже есть
там может быть её несколько с разными кодами и разными плапнами обмена
так вот
отбор делается на одну из них
как делать отбо по всем планам обмена и всем кодам и записывать один?
91 falselight
 
22.05.19
13:41
Задача такая. В регистре, брать номенклатуру и менять у неё план обмена и код,
как такую задачу сделать.
Получается нужно делать отбор по ресурсу, а менять измерения.
92 falselight
 
22.05.19
14:32
При таком подходе, по коду проходит, но запись не обновляется.

        Если Не Рез.Пустой() Тогда
            Выборка = Рез.Выбрать();
            Пока Выборка.Следующий() Цикл
                НаборЗаписей = РегистрыСведений.КодыТоваровПодключаемогоОборудованияOffline.СоздатьНаборЗаписей();
                НаборЗаписей.Отбор.Номенклатура.Установить(Выборка.Номенклатура);
                НаборЗаписей.Прочитать();
                //
                Для каждого Запись из НаборЗаписей Цикл                
                    Запись.ПравилоОбмена  = Выборка.ПравилоОбмена;
                    Запись.Код            = ТекСтрока.SKU;
                    Запись.Активность     = Истина;
                    Запись.Используется   = Истина;
                    Запись.Номенклатура   = Ном.Ссылка;
                    Если ТекСтрока.Период = "" тогда
                        ТекСтрока.Период = ТекущаяДата();
                    КонецЕсли;
                    Запись.Период = ТекСтрока.Период;
                КонецЦикла;
                //
                НаборЗаписей.Записать();
93 falselight
 
22.05.19
14:38
можно делать отбор по регистру?
94 falselight
 
22.05.19
14:42
По реквизиту то есть
95 falselight
 
22.05.19
14:42
по ресурсу
96 Cyberhawk
 
22.05.19
17:15
"брать номенклатуру и менять у неё план обмена и код" // Картинку сделай что на входе, что на выходе должно быть для случая нескольких записей с одной и той же номенклаткрой
2 + 2 = 3.9999999999999999999999999999999...