|
проверка на наличие записи в регистре сведений | ☑ | ||
---|---|---|---|---|
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
|
"брать номенклатуру и менять у неё план обмена и код" // Картинку сделай что на входе, что на выходе должно быть для случая нескольких записей с одной и той же номенклаткрой
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |