![]() |
![]() |
![]() |
|
Нужна помощь с распределение сумм | ☑ | ||
---|---|---|---|---|
0
ivan123123
26.05.15
✎
14:33
|
Добрый день. Создал процедуру по распределению (см ниже). В ходе распределения образуется расхождение в несколько копеек между базой распределения и суммой распределения.
https://yadi.sk/i/obO9heW-grQG9 Подскажите как это подправить, если можно на конкретном примере. Процедура РаспределениеСчета20(СтруктураШапкиДокумента, Отказ, Ошибки) // ПОДГОТОВКА ПРОВЕДЕНИЯ ПО ДАННЫМ ДОКУМЕНТА ПараметрыПроведения = Документы.РегламентнаяОперация.ПодготовитьПараметрыУчетЗатрат(СтруктураШапкиДокумента, Отказ); Если Отказ Тогда Возврат; КонецЕсли; Запрос = Новый Запрос; Запрос.МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц; Запрос.Текст = "ВЫБРАТЬ | СУММА(ХозрасчетныйОбороты.СуммаОборотДт) КАК СуммаОборотДт, | ПравилаРаспределенияСчета20.ДопНоменклатурнаяГруппа, | СУММА(ХозрасчетныйОбороты.СуммаНУОборотДт) КАК СуммаНУОборотДт |ПОМЕСТИТЬ База |ИЗ | РегистрСведений.ПравилаРаспределенияСчета20 КАК ПравилаРаспределенияСчета20 | ЛЕВОЕ СОЕДИНЕНИЕ РегистрБухгалтерии.Хозрасчетный.Обороты(&ДатаНачало, &ДатаКонец, , Счет = &Счет, , Организация = &Организация, , ) КАК ХозрасчетныйОбороты | ПО ПравилаРаспределенияСчета20.ОснНоменклатурнаяГруппа = ХозрасчетныйОбороты.Субконто1 | |СГРУППИРОВАТЬ ПО | ПравилаРаспределенияСчета20.ДопНоменклатурнаяГруппа |; | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ | ПравилаРаспределенияСчета20.ОснНоменклатурнаяГруппа, | ХозрасчетныйОбороты.СуммаОборотДт / База.СуммаОборотДт КАК Коэфициент, | ПравилаРаспределенияСчета20.ДопНоменклатурнаяГруппа, | ХозрасчетныйОбороты.СуммаНУОборотДт / База.СуммаНУОборотДт КАК КоэфициентНУ |ПОМЕСТИТЬ Коэфициенты |ИЗ | РегистрСведений.ПравилаРаспределенияСчета20 КАК ПравилаРаспределенияСчета20 | ЛЕВОЕ СОЕДИНЕНИЕ РегистрБухгалтерии.Хозрасчетный.Обороты(&ДатаНачало, &ДатаКонец, , Счет = &Счет, , Организация = &Организация, , ) КАК ХозрасчетныйОбороты | ПО ПравилаРаспределенияСчета20.ОснНоменклатурнаяГруппа = ХозрасчетныйОбороты.Субконто1 | ВНУТРЕННЕЕ СОЕДИНЕНИЕ База КАК База | ПО ПравилаРаспределенияСчета20.ДопНоменклатурнаяГруппа = База.ДопНоменклатурнаяГруппа |ГДЕ | ЕСТЬNULL(ХозрасчетныйОбороты.СуммаОборотДт / База.СуммаОборотДт, 0) <> 0 |; | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ | Коэфициенты.ОснНоменклатурнаяГруппа КАК СубконтоДт1, | ХозрасчетныйОбороты.Субконто2 КАК СубконтоДт2, | ХозрасчетныйОбороты.СуммаОборотДт * Коэфициенты.Коэфициент КАК Сумма, | ХозрасчетныйОбороты.Счет КАК СчетДт, | ХозрасчетныйОбороты.Организация, | ХозрасчетныйОбороты.Валюта КАК ВалютаДт, | ХозрасчетныйОбороты.Подразделение КАК ПодразделениеДт, | ХозрасчетныйОбороты.Субконто3 КАК СубконтоДт3, | Коэфициенты.ДопНоменклатурнаяГруппа КАК СубконтоКт1, | ХозрасчетныйОбороты.Субконто2 КАК СубконтоКт2, | ХозрасчетныйОбороты.Субконто3 КАК СубконтоКт3, | ХозрасчетныйОбороты.Подразделение КАК ПодразделениеКт, | ХозрасчетныйОбороты.Валюта КАК ВалютаКт, | ХозрасчетныйОбороты.Счет КАК СчетКт, | ХозрасчетныйОбороты.СуммаНУОборотДт * Коэфициенты.КоэфициентНУ КАК СуммаНУДт, | ХозрасчетныйОбороты.СуммаНУОборотДт * Коэфициенты.КоэфициентНУ КАК СуммаНУКт |ИЗ | Коэфициенты КАК Коэфициенты | ЛЕВОЕ СОЕДИНЕНИЕ РегистрБухгалтерии.Хозрасчетный.Обороты(&ДатаНачало, &ДатаКонец, , Счет = &Счет, , Организация = &Организация, , ) КАК ХозрасчетныйОбороты | ПО Коэфициенты.ДопНоменклатурнаяГруппа = ХозрасчетныйОбороты.Субконто1 |ГДЕ | ЕСТЬNULL(ХозрасчетныйОбороты.СуммаОборотДт * Коэфициенты.Коэфициент, 0) <> 0"; Запрос.УстановитьПараметр("ДатаНачало", СтруктураШапкиДокумента.НачДата); Запрос.УстановитьПараметр("ДатаКонец", СтруктураШапкиДокумента.КонГраница); Запрос.УстановитьПараметр("Организация", СтруктураШапкиДокумента.Организация); Запрос.УстановитьПараметр("Счет", ПланыСчетов.Хозрасчетный.ОсновноеПроизводство); РезультатЗапроса = Запрос.Выполнить(); ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать(); // ФОРМИРОВАНИЕ ДВИЖЕНИЙ Пока ВыборкаДетальныеЗаписи.Следующий() Цикл Проводка = Движения.Хозрасчетный.Добавить(); ЗаполнитьЗначенияСвойств(Проводка, ВыборкаДетальныеЗаписи); Проводка.Регистратор = СтруктураШапкиДокумента.Ссылка; Проводка.Период = СтруктураШапкиДокумента.Дата; Для НомерСубконто = 1 По 3 Цикл // Дт БухгалтерскийУчет.УстановитьСубконто( Проводка.СчетДт, Проводка.СубконтоДт, НомерСубконто, ВыборкаДетальныеЗаписи["СубконтоДт" + НомерСубконто]); // Кт БухгалтерскийУчет.УстановитьСубконто( Проводка.СчетКт, Проводка.СубконтоКт, НомерСубконто, ВыборкаДетальныеЗаписи["СубконтоКт" + НомерСубконто]); КонецЦикла; КонецЦикла; Движения.Хозрасчетный.Записывать = Истина; КонецПроцедуры |
|||
1
kosts
26.05.15
✎
14:36
|
Бросай копейки на самую большую сумму.
|
|||
2
Злопчинский
26.05.15
✎
14:37
|
(0) какой ты хочешь пример?
как решишь делать - так и будет правильно. "НДС от суммы не равен сумме НДС слагаемых" та же самая "проблема". . относи набежавшую погрешность на последнюю операцию |
|||
3
ivan123123
26.05.15
✎
14:38
|
Как это сделать. Что-то не разберусь.
|
|||
4
Cyberhawk
26.05.15
✎
14:39
|
Упорядочь запрос по возрастанию суммы, перед циклом запомни значение "НадоРаспределить", а в цикле:
- накапливай уже распределенную сумму в переменной "УжеРаспределено" - проверяй - если текущая итерация равна количеству строк в запросе, т.е. это последняя итерация, то вместо суммы из выбоки присваивай разницу между "НадоРаспределить" и "УжеРаспределено" |
|||
5
Cyberhawk
26.05.15
✎
14:39
|
+(4) вместо "количеству строк в запросе" следует читать "количеству строк в результате запроса"
|
|||
6
Timon1405
26.05.15
✎
14:41
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |