![]() |
|
Программное изменение движений документа при проведении, подписка на событие. | ☑ | ||
---|---|---|---|---|
0
palm1c
11.09.12
✎
10:32
|
Доброе утро.
Есть документ ОтчетПроизводстваЗаСмену. Стоит задача при проведении документа, если определенный реквизит = Истина, подсчитывать сумму всех списанных материалов, и устанавливать эту сумму в плановую себестоимость. Хочется всё это сделать подпиской на событие, чтобы не особо изменять конфигурацию. Спрашиваю советов мудрых, как всё это лучше реализовать. Какую подписку на событие использовать - при проведении документа или при записи регистра? И вообще, можкт быть, для этих целей уже есть какой-нибудь механизм в типовой УТП? Спасибо. |
|||
1
ДенисЧ
11.09.12
✎
10:35
|
Процедура ПриПроведении_СтоимостьГП(Источник, Отказ, РежимПроведения) Экспорт
//Возврат; стрЗАпросЦены = " |ВЫБРАТЬ ТипЦен, Номенклатура, СерияНоменклатуры |ИЗ РегистрСведений.ЦеныНоменклатуры |ГДЕ Период = НАЧАЛОПЕРИОДА(&ВыбДата, ДЕНЬ) |И ТипЦен = &ТипЦены |И Номенклатура = &Номенклатура |И СерияНоменклатуры = &Серия"; ЗАпросЦены = Новый Запрос(стрЗАпросЦены); стрЗапрос = "ВЫБРАТЬ | АУЗ.Затрата, АУЗ.Затрата.ЕдиницаХраненияОстатков КАК Единица, | АУЗ.СерияЗатраты, | СУММА(УчетЗатрат.Количество) КАК Количество, | СУММА(УчетЗатрат.Стоимость) КАК Стоимость |ИЗ | РегистрНакопления.УчетЗатрат КАК УчетЗатрат | ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.АналитикаВидаУчета КАК АВУ | ПО УчетЗатрат.АналитикаВидаУчета = АВУ.Ссылка | ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.АналитикаУчетаЗатрат КАК АУЗ | ПО УчетЗатрат.АналитикаУчетаЗатрат = АУЗ.Ссылка |ГДЕ | УчетЗатрат.Регистратор = &ссылка | И УчетЗатрат.ВидДвижения = ЗНАЧЕНИЕ(ВидДвиженияНакопления.Приход) | И АВУ.РазделУчета = Значение(Перечисление.РазделыУчета.МПЗ) | |СГРУППИРОВАТЬ ПО | АУЗ.Затрата, | АУЗ.СерияЗатраты"; Запрос = Новый Запрос(стрЗАпрос); Запрос.УстановитьПараметр("ссылка", Источник.Ссылка); рез = ЗАпрос.Выполнить(); Если рез.Пустой() Тогда //Сообщить("Нет прихода по МПЗ для " + Источник); Возврат; КОнецЕсли; нз = РегистрыСведений.ЦеныНоменклатуры.СоздатьНаборЗаписей(); нз.Отбор["Регистратор"].Использование = Истина; нз.Отбор["Регистратор"].Значение = Источник.Ссылка; типЦены = Константы.ТипЦенПлановойСебестоимостиНоменклатуры.Получить(); рубли = Константы.ВалютаУправленческогоУчета.Получить(); ЗАпросЦены.УстановитьПараметр("ТипЦены", типЦены); ЗАпросЦены.УстановитьПараметр("ВыбДата", Источник.Дата); выб = рез.Выбрать(); Пока выб.Следующий() Цикл ЗАпросЦены.УстановитьПараметр("Номенклатура", выб.Затрата); ЗАпросЦены.УстановитьПараметр("Серия", выб.СерияЗатраты); рез = Запрос.Выполнить(); Если не Рез.Пустой() Тогда //цены на эту продукцию и серию за этот день уже есть Продолжить; КонецЕсли; запись = нз.Добавить(); запись.Регистратор = Источник.Ссылка; запись.Активность = Истина; запись.Период = Источник.Дата; запись.ТипЦен = типЦены; запись.Номенклатура = выб.Затрата; Запись.СерияНоменклатуры = выб.СерияЗатраты; запись.Валюта = рубли; запись.Цена = выб.Стоимость / выб.Количество; запись.ЕдиницаИзмерения = выб.Единица; КОнецЦИкла; Если нз.Количество() > 0 Тогда нз.Записать(Истина); КонецЕсли; КонецПроцедуры Сильнро ногами не бить, за запросы в цикле, это первая прикидка, ещё не в боевом режиме. |
|||
2
palm1c
11.09.12
✎
10:38
|
(1) Я думал сделать чуть хитрее. Можно считать регистр ПартииТоваров, какую себестоимомть списываем, а потом в движение приход её записать (исправить). И в документ записать. Как-то так можно?
|
|||
3
zladenuw
11.09.12
✎
10:39
|
(1) выб = рез.Выбрать();
Пока выб.Следующий() Цикл ЗАпросЦены.УстановитьПараметр("Номенклатура", выб.Затрата); ЗАпросЦены.УстановитьПараметр("Серия", выб.СерияЗатраты); Передать параметры списком. и получить на выходите таблицу нз и записать ее ? |
|||
4
palm1c
11.09.12
✎
10:39
|
(2) То есть исправить движение приход, записать в него ровно ту себестоимость, которую программа рассчитала для списываемых партий.
|
|||
5
ДенисЧ
11.09.12
✎
10:40
|
(2) Какие партии? У меня РАУЗ...
(3) разумеется. Просто пока не до этого. Когда в бой буду запускать, там ещё много что переделать придётся. |
|||
6
zladenuw
11.09.12
✎
10:41
|
(3) а может даже и 1 запросом. или он будет трудоемкий ? и на выходе также нз и загрузка ее. это так мысли вслух. ход мышление. или правильно :)
|
|||
7
palm1c
11.09.12
✎
10:42
|
Вопрос вот в чём: обработчик подписки события ОбработкаПроведения, уже можно читать движения по этому документу?
|
|||
8
DrShad
11.09.12
✎
10:48
|
(7) можно, я не против
|
|||
9
palm1c
11.09.12
✎
11:01
|
(8) Спасибо.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |