Вход | Регистрация
 

проверка на наличие записи в регистре сведений

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


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

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

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

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

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

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

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

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

(15) Одно это обновлять если есть запись.
Ну или все.
Как будет по коду?
   Cyberhawk
 
17 - 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
Определись с измерениями. Прочитай. Проверь выбран или нет. Потом иди дальше
   falselight
 
20 - 22.05.19 - 08:15
Подскажите пожалуйста, как из этого собрать правильный код?


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

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

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

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

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

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


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

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

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

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

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

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


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

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

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


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

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

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

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

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

в 2 этапа делай. 2-й этап ты уже сделал в (0).
   falselight
 
60 - 22.05.19 - 10:53
Этот блок не верный, подскажите как поправить.
        Если Не Рез.Пустой() Тогда
            Выборка = Рез.Выбрать();
            Пока Выборка.Следующий() Цикл
                НаборЗаписей = РегистрыСведений.КодыТоваровПодключаемогоОборудованияOffline.СоздатьНаборЗаписей(); 
                НаборЗаписей.Отбор.ПравилоОбмена.Установить(Выборка.ПравилоОбмена);
                НаборЗаписей.Отбор.Код.Установить(Выборка.Код);
                НаборЗаписей.Прочитать();
                //

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

                НаборЗаписей.Записать();
            КонецЦикла;


Идет ошибка

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

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

не получится поменять поле отбора
 Запись.Код            = ТекСтрока.SKU;


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

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

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

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

                НаборЗаписей.Записать();
            КонецЦикла;


Так?

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

                НаборЗаписей.Записать();
            КонецЦикла;
        Иначе


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

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

                НаборЗаписей.Записать();
   falselight
 
93 - 22.05.19 - 14:38
можно делать отбор по регистру?
   falselight
 
94 - 22.05.19 - 14:42
По реквизиту то есть
   falselight
 
95 - 22.05.19 - 14:42
по ресурсу
   Cyberhawk
 
96 - 22.05.19 - 17:15
"брать номенклатуру и менять у неё план обмена и код" // Картинку сделай что на входе, что на выходе должно быть для случая нескольких записей с одной и той же номенклаткрой


Список тем форума
Рекламное место пустует  Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.