Имя: Пароль:
1C
Админ
Добавление проведения по своему регистру с неоднозначными ключевыми полями
,
0 Midasu
 
11.10.13
11:14
1С 8.1. УТ 10.3.
Документ - "Поступление товаров и услуг".
Задача: заносить в свой регистр данные о поступающий товарах от контрагента, регистр не периодичный, нужно просто, чтобы там хранилась информация о том, что когда-либо поступало от контрагента, без дублирования.
Создаю свой регистр сведений - "ТоварыНаПоступление".
В нём 2 измерения - Контрагент и Номенклатура.
В модуле "Поступление товаров и услуг" в процедуре "Обработка проведения" добавляю:

Движения.ТоварыНаПоступление.Очистить();        
Для Каждого Товар Из Товары Цикл
   Движение = Движения.ТоварыНаПоступление.Добавить();
   Движение.Контрагент = Контрагент;
   Движение.Номенклатура = Товар.Номенклатура;
   Движения.ТоварыНаПоступление.Записать(Истина);
КонецЦикла;    

В итоге при попытке проведения ещё одного документа с таким же контрагентом и номенклатурой выдаёт ошибку о дублировании записей.
Хотелось бы, чтобы он или заменял их или даже не пытался записывать.
Мне нужно проверять наличие такого контрагента-товара перед проведением? Или какими-то простыми настройками можно этого добиться?
1 Godofsin
 
11.10.13
11:15
Тебе нужно проверять
2 Ненавижу 1С
 
гуру
11.10.13
11:15
добавь измерение Поступление
3 Midasu
 
11.10.13
11:23
(2)
Так он для каждого поступления будет дублировать номенклатуру?
Не хотелось бы этого. Такой же я результат могу получить из регистра ТоварыНаСкладах, выбрав только приход.
Хотелось бы, чтобы был самый шустрый регистр.
4 MrStomak
 
11.10.13
11:25
пара вариантов:
1. сделай регистр независимым и допиши обработку удаления движений при распроведении.
2. сделай оборотный регистр накопления
5 exwill
 
11.10.13
11:27
(0) В чем сложность проверки?
6 ДенисЧ
 
11.10.13
11:28
Наложи отбор, прочитай. Если там есть твои данные, то продолжить,
7 Godofsin
 
11.10.13
11:28
(4) Нахера оборотный РН? я так понимаю, единственная цель этого регистра - показать, что этот контрагент является поставщиком этого товара.
8 Лодырь
 
11.10.13
11:30
(3) Без измерения документ будет плохо. Представь что ты отменяешь проведение некого документа, в нем была некая "Номенклатура". Как узнать была она еще в каких то документах или нет?
9 Midasu
 
11.10.13
11:31
(5)
Сложности нет, но я надеялся, что Бориска Нуралиев придумал что-то более стандартизированое, когда ключевые поля становятся ключевыми только при их одновременном совпадении.
10 MrStomak
 
11.10.13
11:32
(7) оборотный РН с этим отлично справится.
11 Midasu
 
11.10.13
11:32
(8)
А мне не надо узнавать по документам.
Мне важен только факт, что товар когда-либо поступал.
Я хочу этот регистр использовать как данные для подбора номенклатуры при следующем поступлении, чтобы не лазить по всему списку, ибо у нас товары чаще всего не меняются от одного контрагента.
12 Лодырь
 
11.10.13
11:35
(11) Еще раз,при отмене проведения, как ты узнаешь удалять товар из регистра или нет?
13 exwill
 
11.10.13
11:36
(9) Он лично ничего не придумывает.
А те, кто должны придумывать за него, уже давно разучились.
14 Midasu
 
11.10.13
11:37
(12)
Ну, я и не буду удалять.
15 Godofsin
 
11.10.13
11:37
(14) Получишь фиктивную инфу
16 Godofsin
 
11.10.13
11:38
Сделают ошибочное проведение поступления на не того контрагента, записи об этом останутся, а по факту он товар не поставлял
17 exwill
 
11.10.13
11:38
(14) Наоборот, ставь проверку наличия при проведении. Тогда при отмене ничего дополнительно делать не надо будет.
18 Лодырь
 
11.10.13
11:39
(14) Ок, неверно занесли товар, или не на того контрагента. В итоге навсегда остались неверные записи.
19 MrStomak
 
11.10.13
11:42
(17) это медленно...
20 Defender aka LINN
 
11.10.13
12:12
Сделать регистр периодическим
21 exwill
 
11.10.13
12:20
(19) В смысле? Долго код писать?
22 Midasu
 
11.10.13
12:22
(20)
Делать периодическим - куча ненужных записей, лишний вес, лишнее время на обработку.
(21)
Будет проведение ещё более долгим.
23 exwill
 
11.10.13
12:24
(22) Моментальным оно будет. Один запрос к не очень большому регистру.
24 Midasu
 
11.10.13
12:25
(10)
Хм, ну, оборотный я сделал.
Он дублирует записи по каждой накладной.
Т.е. впринципе в моей ситуации всё-равно, что если бы я сделал регистр сведений с периодичностью по позиции регистратора.
Мне надо, чтобы записей была как можно меньше.
25 Defender aka LINN
 
11.10.13
12:25
(22) А, типа, то, что ты пытаешься сделать - это что-то другое, да?
Что будешь делать, если отменят проведение документа с первым поступлением товара? Перепроведешь все последующие, чтобы в непонятном регистре, без которого 99,9% пользователей спокойно обходятся, записи на место встали?
26 Midasu
 
11.10.13
12:26
(23)
Похоже, единственный вариант.
Чуть большая задержка при проведении лучше задержки при подборе в периодичном регистре.
27 МойКодУныл
 
11.10.13
12:27
(0)>Хотелось бы, чтобы он или заменял их или даже не пытался записывать.

Писать через менеджер записи, он автоматом перезапишет при совпадении ключевых полей.
28 exwill
 
11.10.13
12:27
(24) В модуле проведения делай записи не по таб. части, а по результату запроса. Вот и все решение.
29 Defender aka LINN
 
11.10.13
12:27
(27) На подчиненном регистре не взлетит
30 Defender aka LINN
 
11.10.13
12:27
(28) См. про отмену проведения
31 exwill
 
11.10.13
12:28
(30) См. в свой мозг!
Отмена будет работать штатно.
32 MrStomak
 
11.10.13
12:29
(24) записи дублируются, но таблица оборотов - нет, из неё всё будет быстро доставаться. Плюс решается проблема отмены проведения.
33 1Сергей
 
11.10.13
12:30
(24) Дублирующие записи - это не проблема, а защита от гемороя. Просто надо уметь правильно брать данные из этого регистра (см Срез последних)
34 Midasu
 
11.10.13
12:30
(28)
Да не, дубли не из позиций приходной накладной, а дубли получаются если провести ещё одну такую же накладную.
Вобщем, буду проверять при проведении, есть в регистре или нету.
35 Midasu
 
11.10.13
12:31
(33)
Мне лучше геморой, чем регистр весом в несколько раз больше.
Я же говорю, такие же данные я мог бы и из стандартного получить. Я не собираюсь изобретать велосипед, у меня просто регистр для других целей.
36 1Сергей
 
11.10.13
12:32
(34) это не правильно.
37 МойКодУныл
 
11.10.13
12:32
(30) в(0) такого не было)) я следую ТЗ.
(31) Отмена проведения? как это. Если регистр независимый - не отработает. А если подчинен регистратору - слишком много записей и не было бы проблемы с неуникальными записями как в (0)
38 Михаил Козлов
 
11.10.13
12:35
(0) В типовых РС "Номенклатура контрагентов" не подходит?
39 Midasu
 
11.10.13
12:37
(38)
Зобавно. Не думал о таком.
Ну, на данный момент регистр пустой.
Через какую константу включается?
40 exwill
 
11.10.13
12:40
(37) Регистр подчинен регистратору.
При проведении вносятся только уникальные записи.
При отмене проведения записи (если они есть) удаляются.
41 Midasu
 
11.10.13
13:05
(38)
Всё, понял.
>>То есть можно ввести информацию о том, как называется данная позиция номенкла­туры в информационной базе поставщика.
>>Эта информация будет записана и регистр сведений Номенклатура контрагентов при записи цен.
Совсем для других целей используется.