|
Запись движений в регистр (Округления) | ☑ | ||
---|---|---|---|---|
0
informts
30.08.13
✎
09:24
|
Есть некая сумма распределения, которая пропорционально весу номенклатуры распределяется. Все вычисления делаются в запросе и загружаются в таблицу движений. Все хорошо, но иногда вылазит разница на 2-3 копейки. Как можно обойти этот момент, только перебирать в цикле и считать отклонение??
|
|||
1
Wobland
30.08.13
✎
09:25
|
нужно осмыслить генезис разницы
|
|||
2
Irbis
30.08.13
✎
09:26
|
Последнее движение не рассчитывать, а закрывать на весь остаток.
|
|||
3
informts
30.08.13
✎
09:32
|
Движения.Отгрузка.Загрузить(ТаблицаДвижений);
Как тут последнее движение получишь? |
|||
4
informts
30.08.13
✎
09:33
|
Только в цикле если перебирать? а не хотелось бы...
|
|||
5
Irbis
30.08.13
✎
09:35
|
(3) Значит в ТаблицаДвижений
или открыть РегистрНакопленияНаборЗаписей.<Имя регистра накопления> (AccumulationRegisterRecordSet.<Имя регистра накопления>) Количество (Count) Синтаксис: Количество() Возвращаемое значение: Тип: Число. Описание: Получает количество записей в наборе. Пример: Сообщить("Записей в наборе - " ) + НаборЗаписей.Количество()); |
|||
6
Maxus43
30.08.13
✎
09:36
|
тут простая математика, в типовой УПП 1.2 например считается в коде, но с той же ошибкой, ошибкой округления
|
|||
7
Serg_1960
30.08.13
✎
09:39
|
Есть три штуки какой-то хрени по цене... да не важно по какой цене. А теперь попробуй распределить 100 рублей на сумму этой хрени... и получи удовольствие от осознания своего бессилия :))
|
|||
8
kiruha
30.08.13
✎
09:45
|
Есть много способов вешать отклонение на записи.
В свое время упорядочивал по сумме и кидал по копейке на самые большие У каждого свои минусы. Лучше разрядность ресурса увеличить |
|||
9
Maxus43
30.08.13
✎
09:46
|
(8) с ценой не наувеличиваешся. Точность 2 знака после запятой
|
|||
10
kiruha
30.08.13
✎
09:47
|
Если нет возможности - распределять в табличной части - далее пусть пользователь ручками правит, если не нравится что то
|
|||
11
masenshi
30.08.13
✎
10:10
|
(0) Делаешь подзапрос к своему запросу и закидываешь разницу между суммой округленных значений и стоимостью до округления на максимальную номенклатуру (в подзапросе ее и получишь). Прокатит если номенклатура не повторяется или сгруппирована. А иначе дальше думать к чему привязать копейки.
|
|||
12
roman52
30.08.13
✎
10:16
|
мимокрокодил, в ЗУПе:
Общий модуль ЗаполнениеРегламентированнойОтчетности Процедура ОкруглитьСлагаемыеПоСумме(Данные, ИмяКолонки, Сумма, Точность = 0, ИмяКлюча = "ФизЛицо") Экспорт |
|||
13
masenshi
30.08.13
✎
10:30
|
(11)
вот накалякал 100% рабочий пример ВЫБРАТЬ "Ном1" КАК Номенклатура, 1.22 КАК Вес , 100 КАК Стоимость, 2.47 КАК ВесВсего ПОМЕСТИТЬ а ОБЪЕДИНИТЬ ВЫБРАТЬ "Ном2" КАК Номенклатура, 0.85 КАК Вес , 100 КАК Стоимость, 2.47 КАК ВесВсего ОБЪЕДИНИТЬ ВЫБРАТЬ "Ном3" КАК Номенклатура, 0.4 КАК Вес , 100 КАК Стоимость, 2.47 КАК ВесВсего ; ВЫБРАТЬ а.Номенклатура, а.Вес/а.ВесВсего * а.Стоимость КАК Цена, //расределяю ВЫРАЗИТЬ(а.Вес/а.ВесВсего * а.Стоимость КАК ЧИСЛО(15,2)) КАК ЦенаОкр, //если суммируем то будет не 100 а 99,99 а.Стоимость ПОМЕСТИТЬ подзапрос ИЗ а КАК а ; ВЫБРАТЬ МАКСИМУМ(а.Номенклатура) КАК Номенклатура, СУММА(ЦенаОкр) КАК СтоимостьОкр, а.Стоимость - СУММА(ЦенаОкр) КАК Разница //Вот она наша копейка ПОМЕСТИТЬ б ИЗ подзапрос КАК а СГРУППИРОВАТЬ ПО а.Стоимость ; ВЫБРАТЬ а.Номенклатура, а.Цена, а.ЦенаОкр + ЕСТЬNULL(б.Разница, 0) КАК ЦенаОкрПравильно, // ЕСТЬNULL использовать обязательно а.Стоимость ИЗ подзапрос КАК а ЛЕВОЕ СОЕДИНЕНИЕ б КАК б ПО а.Номенклатура = б.Номенклатура |
|||
14
kiruha
30.08.13
✎
11:00
|
(13)
А если там много позиций и накопится не один десяток копеек ? |
|||
15
masenshi
30.08.13
✎
11:17
|
(14) Все копейки разнесутся. Я лишь показал самый простой пример чтобы было максимально понятно.
Если много позиций, то они могут быть сгруппированы при распределении стоимости. Так я делал. |
|||
16
masenshi
30.08.13
✎
11:19
|
(14) имел ввиду если дублируется номенклатура, то она может быть сгруппирована, а если много уникальных позиций, то какая может быть проблема? Миллион позиций - миллион копеек?
|
|||
17
informts
30.08.13
✎
11:33
|
Пока сделал так, после записи в регистр посчитал отклонение и на первую строку записи кинул отклонение.
|
|||
18
kiruha
30.08.13
✎
11:54
|
(17)
Кидай по копейке - так лучше 5 копеек отклонение - на первые 5 позиций по копейке |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |