|
Удаление записи из регистра сведений | ☑ | ||
---|---|---|---|---|
0
travelekb
06.04.13
✎
22:42
|
Доброго вечера.
Как я уже писал пару раз - я начинающий, потихоньку практикуюсь в 1С 8.2 по вечерам и ночам. Прошу помощи в решении следующего вопроса: У меня есть Регистр сведений, в который записываются статусы (выгружен/не выгружен) выгружена или нет информация по товару в локальную папку на диске. 1. Товар добавляется в систему (приходуется на склад), при проведении документа, ему присваивается статус в этом регистре "не выгружен". 2. После того, как информация о всех товарах на складе выгружается в папку в текстовый файл, статус у товара в этом регистре должен поменяться соответственно на "выгружен", и что самое главное - предыдущий статус "не выгружен" - должен из регистра быть удален. Подскажите как можно это сделать? Последовательность действий я вижу такую: 1. Нужно найти строку в регистре сведений с этим товаром и статусом "не выгружен". 2. Удалить этот статус "не выгружен" у этого товара 3. Добавить новый статус "выгружен". никак не могу понять как подойти к решению. Простите за возможно глупый вопрос. |
|||
1
Staffa
06.04.13
✎
22:45
|
Если все примитивно и просто, то вот так:
1. Создаешь набор записей регистра, накладываешь условие по товару. 2. Удалять записи не нужно 3. У найденных записей по п.1 меняешь ресурс на "Выгружен" и записываешь набор. |
|||
2
travelekb
06.04.13
✎
23:02
|
(1), правильно ли я делаю?
1. Создаешь набор записей регистра, накладываешь условие по товару. Нм = Товар.НоменклатураПокупателя; НаборЗаписей = РегистрыСведений.СтатусыТоваров.СоздатьНаборЗаписей(); НаборЗаписей.Отбор.Номенклатура.Установить(Нм); как на данном шаге в отладчике можно проверить нашлось ли что-то? У меня подозрение, что тут не находит данные из регистра сведений. 2. Хорошо 3. У найденных записей по п.1 меняешь ресурс на "Выгружен" и записываешь набор. тут нужно как то заменить на "выгружен" далее НаборЗаписей.Записать(); верно? |
|||
3
Ksandr
06.04.13
✎
23:06
|
Стр = НаборЗаписей.Добавить();
Стр......... НаборЗаписей.Записать() Если не Прочитать() то новый набор заместит старый |
|||
4
travelekb
06.04.13
✎
23:21
|
никак не пойму, как изменить статус?
набор записей создал, условие по номенклатуре наложил и вроде даже нашлось то, что нужно. А вот как статус сменить не пойму, просто перезаписывает и все тут... |
|||
5
hhhh
06.04.13
✎
23:29
|
ЗаписьНабора.Статус = Перечисления.СтатусыВыгружеНеВыгружен.Выгружен;
|
|||
6
Necessitudo
06.04.13
✎
23:54
|
Нм = Товар.НоменклатураПокупателя;
НаборЗаписей = РегистрыСведений.СтатусыТоваров.СоздатьНаборЗаписей(); НаборЗаписей.Отбор.Номенклатура.Установить(Нм); НаборЗаписей.Прочитать(); Если Не НаборЗаписей.Количество() = 0 Тогда Для Каждого Запись Из НаборЗаписей Цикл Запись.Статус = Перечисления.СтатусыВыгружеНеВыгружен.Выгружен; КонецЦикла; НаборЗаписей.Записать(); КонецЕсли; |
|||
7
Necessitudo
06.04.13
✎
23:59
|
А еще наверное лучше отбор наложить на те записи, которые уже имеют статус Выгружен.
|
|||
8
travelekb
07.04.13
✎
00:08
|
(6), огромное спасибо! Я написал сам почти тоже самое, только, к сожалению, с 2 ошибками.
Вы писали: "А еще наверное лучше отбор наложить на те записи, которые уже имеют статус Выгружен." А подскажите, пожалуйста, как наложить отбор И по номенклатуре, И по статусу "Выгружен" одновременно? Можно ли использовать дважды конструкцию? НаборЗаписей.Отбор.Номенклатура.Установить(Номенклатура); НаборЗаписей.Отбор.Статус.Установить(Статус); |
|||
9
fimanich
07.04.13
✎
00:14
|
(8) можно
|
|||
10
hhhh
07.04.13
✎
00:17
|
отбор только на измерения регистра накладывается
|
|||
11
Necessitudo
07.04.13
✎
00:24
|
(8) Надеюсь, что статус это всё же ресурс:)
|
|||
12
travelekb
07.04.13
✎
00:25
|
(10) да, спасибо. Так и есть. Там как раз два измерения:
"Номенклатура" и "Статус" При попытке записи НаборЗаписей.Записать(); вываливается с ошибкой почему-то, пока не могу понять из-за чего |
|||
13
travelekb
07.04.13
✎
00:26
|
(11) "Статус" - это измерение регистра
|
|||
14
Necessitudo
07.04.13
✎
00:26
|
(12) Ну еще бы. Он ругается на то, что отбор установлен по одним полям, а запись идет по другим:)
|
|||
15
Necessitudo
07.04.13
✎
00:27
|
Нм = Товар.НоменклатураПокупателя;
НаборЗаписей = РегистрыСведений.СтатусыТоваров.СоздатьНаборЗаписей(); НаборЗаписей.Отбор.Номенклатура.Установить(Нм); НаборЗаписей.Отбор.Статус.Установить(Статус); НаборЗаписей.Прочитать(); Если Не НаборЗаписей.Количество() = 0 Тогда Для Каждого Запись Из НаборЗаписей Цикл Запись.Статус = Перечисления.СтатусыВыгружеНеВыгружен.Выгружен; КонецЦикла; НаборЗаписнй.Отбор.Статус.Установить(Перечисления.СтатусыВыгружеНеВыгружен.Выгружен); НаборЗаписей.Записать(); КонецЕсли; |
|||
16
Necessitudo
07.04.13
✎
00:29
|
А вообще на мой взгляд нужно оторвать руки тому, кто сделал статус измерением:) Если будет две одинаковые номенклатуры с разными статусами, счастья будет мало. Особенно если регистр независимый.
|
|||
17
travelekb
07.04.13
✎
00:34
|
Нм = Товар.НоменклатураПокупателя;
НаборЗаписей = РегистрыСведений.СтатусыТоваров.СоздатьНаборЗаписей(); //создали набор записей НаборЗаписей.Отбор.Номенклатура.Установить(Нм); //наложили отбор по номенклатуре НаборЗаписей.Отбор.Статус.Установить(Статус); // дополнительно наложили отбор по статусу НаборЗаписей.Прочитать(); //прочитали Если Не НаборЗаписей.Количество() = 0 Тогда //если записей не ноль, то идем в цикл Для Каждого Запись Из НаборЗаписей Цикл Запись.Статус = Перечисления.СтатусыВыгружеНеВыгружен.Выгружен; //устанавливаем статус "выгружен" КонецЦикла; НаборЗаписнй.Отбор.Статус.Установить(Перечисления.СтатусыВыгружеНеВыгружен.Выгружен); //зачем эта строка? мы же уже изменили статус. Зачем еще раз отбор делать? НаборЗаписей.Записать(); //записываем КонецЕсли; |
|||
18
Necessitudo
07.04.13
✎
00:36
|
Потому что сначала ты поставил отбор на то, что статус имеет значение Перечисления.СтатусыВыгружеНеВыгружен.НеВыгружен. Потом ты обошел записи и поменял измерение статус на Перечисления.СтатусыВыгружеНеВыгружен.Выгружен. Вот у набора записей и шок:)
|
|||
19
Necessitudo
07.04.13
✎
00:37
|
Да, и еще - ты не учел ситуации, когда измерение статус в регистре вообще не заполнено:) Или там стоит запрет незаполненных значений?
|
|||
20
travelekb
07.04.13
✎
00:43
|
(18), спасибо огромное! Я сейчас возьму тайм-аут переварить все это, у меня не так быстро все укладывается :) И еще раз главу по регистрам сведений перечитаю с учетом полученной только что информации. Еще раз спасибо и простите за столь глупые вопросы.
|
|||
21
travelekb
07.04.13
✎
00:53
|
Все запустилось вроде бы, но предыдущий статус "Не выгружен" тоже остался! А я хочу сделать так, чтобы из статусов "Выгружен" и "Не выгружен" всегда был только один, тот который актуальный.
Сейчас получается, мы добавили в регистр сведений еще один (дополнительный) статус товара, а вот как убрать предыдущий (или в общем случае предыдущие, если их несколько)? |
|||
22
Necessitudo
07.04.13
✎
01:11
|
Естественно. Не зря же я бурчал про то, что статус должен быть ресурсом. Конечно, и так можно сейчас вывернуться - но для новичка сложновато будет:-) Посему убери отбор по статусу:-) :-) :-)
|
|||
23
travelekb
07.04.13
✎
01:15
|
Убрал отбор по статусу, выдает ошибку
Error calling context method (Записать) НаборЗаписей.Записать(); because: Record with these key fields exists! я так понимаю причина в том, что два одинаковых статуса быть не может у одного товара |
|||
24
travelekb
07.04.13
✎
11:53
|
Сколько ни пробовал - никак не выходит, получается нужно переводить "Статус" с измерения в ресурс регистра, иначе никак ):
|
|||
25
Necessitudo
07.04.13
✎
12:15
|
Нм = Товар.НоменклатураПокупателя;
СтатусыВыгружеНеВыгружен = Перечисления.СтатусыВыгружеНеВыгружен; НаборЗаписей = РегистрыСведений.СтатусыТоваров.СоздатьНаборЗаписей(); НаборЗаписей.Отбор.Номенклатура.Установить(Нм); НаборЗаписей.Отбор.Статус.Установить(СтатусыВыгружеНеВыгружен.НеВыгружен); НаборЗаписей.Прочитать(); Если Не НаборЗаписей.Количество() = 0 Тогда Для Каждого Запись Из НаборЗаписей Цикл Запись.Статус = СтатусыВыгружеНеВыгружен.Выгружен; КонецЦикла; НаборЗаписей.Отбор.Статус.Установить(СтатусыВыгружеНеВыгружен.Выгружен); НаборЗаписей.Записать(); НаборЗаписей.Отбор.Статус.Установить(СтатусыВыгружеНеВыгружен.НеВыгружен); НаборЗаписей.Очистить(); НаборЗаписей.Записать(); КонецЕсли; |
|||
26
Necessitudo
07.04.13
✎
12:17
|
За что мы так любим регистры сведений - так это за то, что там изкаропки уже будет контроль уникальности по всем измерениям. Я про независимый регистр конечно:)
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |