Имя: Пароль:
1C
1С v8
Как правильнее дописать движения по регистру?
,
0 suvolod
 
12.07.12
11:12
Задача: Документ "Установка цен номенклатуры" при своем проведении должен (дополнительно к основному функционалу) создать движения по регистру ПоказательДляРасчетаПремии.

Регистр подчинен регистратору "Установка цен номенклатуры" и, соответственно, если этот документ распроводят, то автоматом должны быть удалены все записи, сделанные текущим документом.

Сам ПоказательДляРасчетаПремии расчитывается от закупочных и/или розничных цен, устанавливаемых документом. Соответственно, мне нужно:

1. Если в документе по товару указаны и закупочные, и розничные цены - взять их из документа
2. Если в документе указаны только закупочные - взять их из документа, а розничные - через обращение к РС ЦеныНоменклатуры
3. Если в документе указаны розничные - тогда закуп взять из регистра, а розницу - из документа.

Чтобы не заморачиваться на такие ветвления, я хотел брать движения напрямую из регистра, но тут засада:

1. Если прописать нужный мне код в подписке ПриПроведении, то в базу движения текущего документа еще не внесены, а значит запрос к регистру даст движения без учета движений текущего документа

2. Если писать движения в обработчик ПриЗаписи, то запись - это не есть проведение... получается, движения по регистру сформируются даже не по проведенному документу. Но даже если на это не обращать внимания (писать движения только если Источник.Проведен = Истина), то остается проблема автоматического удаления записей, если документ распроводиться...

Как правильнее решить такую задачу?
1 фросия
 
12.07.12
11:18
при проведении у тебя уже есть набор записей регистра Цены номенклатуры, ты можешь проанализировать есть там нужные тебе цены, по недостающим сделать запрос к регистру и потом уже формировать движения по следующему регистру
2 фросия
 
12.07.12
11:19
при проведении, После того как у тебя уже есть набор записей регистра Цены номенклатуры, ты можешь проанализировать есть там нужные тебе цены, по недостающим сделать запрос к регистру и потом уже формировать движения по следующему регистру
3 Zero on a dice
 
12.07.12
11:24
подписка - и обезопасить себя от гемора при обновлениях/объединениях
4 suvolod
 
12.07.12
12:37
(1)(2) Это понятно. Не нравиться, что нельзя все одним запросом сделать. Придется выгружать движения из мТаблицаДвижений, затем перебирать их и по недостающим записям делать запросы к базе
5 qwerty09
 
12.07.12
12:41
(4) не перебирай - затолкай ее в запрос и выбирай себе, что вздумается
6 suvolod
 
12.07.12
12:45
так не получиться. если я прицеплю ее к запросу, а в нем по одной номенклатуре будет старая РозничнаяЦена (из базы) и новая РозничнаяЦена - из движений документа - ерунда получиться
7 Фрэнки
 
12.07.12
12:48
(6) если затолкаешь процедуру в подписку на событие, то событие возникает уже постфактум и все данные будут там, где они должны быть по завершению транзакции
8 Фрэнки
 
12.07.12
12:49
(6) никогда подписками на события не пользовался?
9 suvolod
 
12.07.12
13:00
я сейчас и делаю все через подписку. Подписка ПриПроведении возникает до ПриЗаписи, и движения в этот момент в базу еще не записаны. А ПриЗаписи неудобно пользоваться тем, что если на подписаться на это событие, она автоматом не удаляет движения при распроведении документа
10 Фрэнки
 
12.07.12
14:24
(9) ну все правильно. если переписывать наборы движений _после_ транзакций, то и создание и удаление наборов надо цеплять к разным подпискам. Допустим, в подписке ПриПроведении только удалять, а ПриЗаписи только записывать, с контролем того, что документ проведен.
Чтобы обнаруживать ошибки, программист должен иметь ум, которому доставляет удовольствие находить изъяны там, где, казалось, царят красота и совершенство. Фредерик Брукс-младший