![]() |
![]() |
![]() |
|
Ошибка при закрытии месяца в УНФ. | ☑ | ||
---|---|---|---|---|
0
Zombi
16.06.25
✎
07:51
|
В УНФ при закрытии месяца получили такую ошибку:
Ошибка при выполнении операции над данными: Microsoft OLE DB Driver for SQL Server: Ошибка арифметического переполнения при преобразовании numeric к типу данных numeric. HRESULT=80040E57, SQLSrvr: SQLSTATE=22003, state=8, Severity=10, native=8115, line=1 Нашел запрос, на котором валится ошибка. Документ закрытие месяца, процедура РешитьСЛУ(). Просмотрел все таблицы в менеджере таблиц запроса, никаких больших сумм не увидел. Сделал запрос по регистрам запасы, продажи, тоже не увидел больших сумм. В запросе пробовал изменить "КАК ЧИСЛО(23, 10)" на "КАК ЧИСЛО(32, 10)". Не помогло. Что еще можно посмотреть/сделать? |
|||
1
Zombi
16.06.25
✎
07:52
|
Типовой текст запроса из процедуры РешитьСЛУ():
ВЫБРАТЬ РАЗЛИЧНЫЕ ТаблицаВозвратов.Организация КАК Организация, ТаблицаВозвратов.СтруктурнаяЕдиница КАК СтруктурнаяЕдиница, ТаблицаВозвратов.СчетУчета КАК СчетУчета, ТаблицаВозвратов.Номенклатура КАК Номенклатура, ТаблицаВозвратов.Характеристика КАК Характеристика, ТаблицаВозвратов.Партия КАК Партия, ТаблицаВозвратов.ЗаказПокупателя КАК ЗаказПокупателя, ТаблицаВозвратов.ЗаказНаПроизводство КАК ЗаказНаПроизводство, ТаблицаВозвратов.НомерУзла КАК НомерУзла, ТаблицаВозвратов.КоличествоРаспределено КАК Количество, ТаблицаВозвратов.СуммаБезНДСРаспределено КАК СуммаБезНДС, ТаблицаВозвратов.СуммаРаспределено КАК Сумма, ТаблицаВозвратов.ДокументПродажи КАК ДокументПродажи ПОМЕСТИТЬ УчетЗатратВозвраты ИЗ &ТаблицаВозвратов КАК ТаблицаВозвратов ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ УчетЗапасовИЗатрат.Организация КАК Организация, УчетЗапасовИЗатрат.КоррСтруктурнаяЕдиница КАК СтруктурнаяЕдиница, УчетЗапасовИЗатрат.КоррСчетУчета КАК СчетУчета, УчетЗапасовИЗатрат.КоррНоменклатура КАК Номенклатура, УчетЗапасовИЗатрат.КоррХарактеристика КАК Характеристика, УчетЗапасовИЗатрат.КоррПартия КАК Партия, УчетЗапасовИЗатрат.КоррЗаказПокупателя КАК ЗаказПокупателя, УчетЗапасовИЗатрат.КоррЗаказНаПроизводство КАК ЗаказНаПроизводство, УзлыКорректировкиСтоимостиСписания.НомерУзла КАК НомерУзла, СУММА(ВЫБОР КОГДА УчетЗапасовИЗатрат.ВидДвижения = ЗНАЧЕНИЕ(ВидДвиженияНакопления.Расход) И НЕ УчетЗапасовИЗатрат.Возврат ТОГДА УчетЗапасовИЗатрат.Количество КОГДА УчетЗапасовИЗатрат.ВидДвижения = ЗНАЧЕНИЕ(ВидДвиженияНакопления.Приход) И УчетЗапасовИЗатрат.Возврат ТОГДА -УчетЗапасовИЗатрат.Количество ИНАЧЕ 0 КОНЕЦ) КАК Количество, СУММА(ВЫРАЗИТЬ(ВЫБОР КОГДА УчетЗапасовИЗатрат.ВидДвижения = ЗНАЧЕНИЕ(ВидДвиженияНакопления.Расход) И НЕ УчетЗапасовИЗатрат.Возврат ТОГДА УчетЗапасовИЗатрат.СуммаБезНДС КОГДА УчетЗапасовИЗатрат.ВидДвижения = ЗНАЧЕНИЕ(ВидДвиженияНакопления.Приход) И УчетЗапасовИЗатрат.Возврат ТОГДА -УчетЗапасовИЗатрат.СуммаБезНДС ИНАЧЕ 0 КОНЕЦ КАК ЧИСЛО(23, 10))) КАК СуммаБезНДС, СУММА(ВЫРАЗИТЬ(ВЫБОР КОГДА УчетЗапасовИЗатрат.ВидДвижения = ЗНАЧЕНИЕ(ВидДвиженияНакопления.Расход) И НЕ УчетЗапасовИЗатрат.Возврат ТОГДА УчетЗапасовИЗатрат.Сумма КОГДА УчетЗапасовИЗатрат.ВидДвижения = ЗНАЧЕНИЕ(ВидДвиженияНакопления.Приход) И УчетЗапасовИЗатрат.Возврат ТОГДА -УчетЗапасовИЗатрат.Сумма ИНАЧЕ 0 КОНЕЦ КАК ЧИСЛО(23, 10))) КАК Сумма, СУММА(ВЫРАЗИТЬ(ВЫБОР КОГДА УчетЗапасовИЗатрат.ВидДвижения = ЗНАЧЕНИЕ(ВидДвиженияНакопления.Расход) И НЕ УчетЗапасовИЗатрат.Возврат ТОГДА УчетЗапасовИЗатрат.СуммаИнт КОГДА УчетЗапасовИЗатрат.ВидДвижения = ЗНАЧЕНИЕ(ВидДвиженияНакопления.Приход) И УчетЗапасовИЗатрат.Возврат ТОГДА -УчетЗапасовИЗатрат.СуммаИнт ИНАЧЕ 0 КОНЕЦ КАК ЧИСЛО(23, 10))) КАК СуммаИнт, СУММА(ВЫРАЗИТЬ(ВЫБОР КОГДА УчетЗапасовИЗатрат.ВидДвижения = ЗНАЧЕНИЕ(ВидДвиженияНакопления.Расход) И НЕ УчетЗапасовИЗатрат.Возврат ТОГДА УчетЗапасовИЗатрат.СуммаБезНДСИнт КОГДА УчетЗапасовИЗатрат.ВидДвижения = ЗНАЧЕНИЕ(ВидДвиженияНакопления.Приход) И УчетЗапасовИЗатрат.Возврат ТОГДА -УчетЗапасовИЗатрат.СуммаБезНДСИнт ИНАЧЕ 0 КОНЕЦ КАК ЧИСЛО(23, 10))) КАК СуммаБезНДСИнт ПОМЕСТИТЬ УчетЗатратБезУчетаВозвратов ИЗ РегистрНакопления.Запасы КАК УчетЗапасовИЗатрат ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.УзлыКорректировкиСтоимостиСписания КАК УзлыКорректировкиСтоимостиСписания ПО (УзлыКорректировкиСтоимостиСписания.Регистратор = &Регистратор) И УчетЗапасовИЗатрат.Организация = УзлыКорректировкиСтоимостиСписания.Организация И УчетЗапасовИЗатрат.СтруктурнаяЕдиница = УзлыКорректировкиСтоимостиСписания.СтруктурнаяЕдиница И УчетЗапасовИЗатрат.СчетУчета = УзлыКорректировкиСтоимостиСписания.СчетУчета И УчетЗапасовИЗатрат.Номенклатура = УзлыКорректировкиСтоимостиСписания.Номенклатура И УчетЗапасовИЗатрат.Характеристика = УзлыКорректировкиСтоимостиСписания.Характеристика И УчетЗапасовИЗатрат.Партия = УзлыКорректировкиСтоимостиСписания.Партия И УчетЗапасовИЗатрат.ЗаказПокупателя = УзлыКорректировкиСтоимостиСписания.ЗаказПокупателя И УчетЗапасовИЗатрат.ЗаказНаПроизводство = УзлыКорректировкиСтоимостиСписания.ЗаказНаПроизводство ГДЕ УчетЗапасовИЗатрат.Период МЕЖДУ &ДатаНач И &ДатаКон И УчетЗапасовИЗатрат.Организация = &Организация И НЕ УчетЗапасовИЗатрат.ФиксированнаяСтоимость СГРУППИРОВАТЬ ПО УчетЗапасовИЗатрат.Организация, УчетЗапасовИЗатрат.КоррСтруктурнаяЕдиница, УчетЗапасовИЗатрат.КоррСчетУчета, УчетЗапасовИЗатрат.КоррНоменклатура, УчетЗапасовИЗатрат.КоррХарактеристика, УчетЗапасовИЗатрат.КоррПартия, УчетЗапасовИЗатрат.КоррЗаказПокупателя, УчетЗапасовИЗатрат.КоррЗаказНаПроизводство, УзлыКорректировкиСтоимостиСписания.НомерУзла ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ УчетЗатрат.Организация КАК Организация, УчетЗатрат.СтруктурнаяЕдиница КАК СтруктурнаяЕдиница, УчетЗатрат.СчетУчета КАК СчетУчета, УчетЗатрат.Номенклатура КАК Номенклатура, УчетЗатрат.Характеристика КАК Характеристика, УчетЗатрат.Партия КАК Партия, УчетЗатрат.ЗаказПокупателя КАК ЗаказПокупателя, УчетЗатрат.ЗаказНаПроизводство КАК ЗаказНаПроизводство, УчетЗатрат.НомерУзла КАК НомерУзла, СУММА(УчетЗатрат.Количество) КАК Количество, СУММА(УчетЗатрат.СуммаБезНДС) КАК СуммаБезНДС, СУММА(УчетЗатрат.Сумма) КАК Сумма, СУММА(УчетЗатрат.СуммаИнт) КАК СуммаИнт, СУММА(УчетЗатрат.СуммаБезНДСИнт) КАК СуммаБезНДСИнт ПОМЕСТИТЬ УчетЗатрат ИЗ (ВЫБРАТЬ УчетЗатратЗаВычетомВозвратов.Организация КАК Организация, УчетЗатратЗаВычетомВозвратов.СтруктурнаяЕдиница КАК СтруктурнаяЕдиница, УчетЗатратЗаВычетомВозвратов.СчетУчета КАК СчетУчета, УчетЗатратЗаВычетомВозвратов.Номенклатура КАК Номенклатура, УчетЗатратЗаВычетомВозвратов.Характеристика КАК Характеристика, УчетЗатратЗаВычетомВозвратов.Партия КАК Партия, УчетЗатратЗаВычетомВозвратов.ЗаказПокупателя КАК ЗаказПокупателя, УчетЗатратЗаВычетомВозвратов.ЗаказНаПроизводство КАК ЗаказНаПроизводство, УчетЗатратЗаВычетомВозвратов.НомерУзла КАК НомерУзла, УчетЗатратЗаВычетомВозвратов.Количество КАК Количество, УчетЗатратЗаВычетомВозвратов.СуммаБезНДС КАК СуммаБезНДС, УчетЗатратЗаВычетомВозвратов.Сумма КАК Сумма, УчетЗатратЗаВычетомВозвратов.СуммаИнт КАК СуммаИнт, УчетЗатратЗаВычетомВозвратов.СуммаБезНДСИнт КАК СуммаБезНДСИнт ИЗ УчетЗатратБезУчетаВозвратов КАК УчетЗатратЗаВычетомВозвратов ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ УчетЗатратВозвраты.Организация, УчетЗатратВозвраты.СтруктурнаяЕдиница, УчетЗатратВозвраты.СчетУчета, УчетЗатратВозвраты.Номенклатура, УчетЗатратВозвраты.Характеристика, УчетЗатратВозвраты.Партия, УчетЗатратВозвраты.ЗаказПокупателя, УчетЗатратВозвраты.ЗаказНаПроизводство, УчетЗатратВозвраты.НомерУзла, УчетЗатратВозвраты.Количество, УчетЗатратВозвраты.СуммаБезНДС, УчетЗатратВозвраты.Сумма, 0, 0 ИЗ УчетЗатратВозвраты КАК УчетЗатратВозвраты ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ УчетЗатратВозвраты.Организация, НЕОПРЕДЕЛЕНО, ЗНАЧЕНИЕ(ПланСчетов.Управленческий.ПустаяСсылка), ЗНАЧЕНИЕ(Справочник.Номенклатура.ПустаяСсылка), ЗНАЧЕНИЕ(Справочник.ХарактеристикиНоменклатуры.ПустаяСсылка), ЗНАЧЕНИЕ(Справочник.ПартииНоменклатуры.ПустаяСсылка), ЗНАЧЕНИЕ(Документ.ЗаказПокупателя.ПустаяСсылка), ЗНАЧЕНИЕ(Документ.ЗаказНаПроизводство.ПустаяСсылка), УчетЗатратВозвраты.НомерУзла, -УчетЗатратВозвраты.Количество, -УчетЗатратВозвраты.СуммаБезНДС, -УчетЗатратВозвраты.Сумма, 0, 0 ИЗ УчетЗатратВозвраты КАК УчетЗатратВозвраты) КАК УчетЗатрат СГРУППИРОВАТЬ ПО УчетЗатрат.Организация, УчетЗатрат.СтруктурнаяЕдиница, УчетЗатрат.СчетУчета, УчетЗатрат.Номенклатура, УчетЗатрат.Характеристика, УчетЗатрат.Партия, УчетЗатрат.ЗаказПокупателя, УчетЗатрат.ЗаказНаПроизводство, УчетЗатрат.НомерУзла ИНДЕКСИРОВАТЬ ПО Организация, СтруктурнаяЕдиница, СчетУчета, Номенклатура, Характеристика, Партия, ЗаказПокупателя, ЗаказНаПроизводство, НомерУзла |
|||
2
Zombi
16.06.25
✎
07:57
|
Пользователи сказали экспериментировали и создавали какой то документ с девятками в поле "Сумма", но потом удалили его. Ну и я тоже не вижу ни документа такого, ни движений в регистрах. ТИИ делал, не помогло.
|
|||
3
Гена
гуру
16.06.25
✎
08:34
|
Забавно... как что не так - сразу ТиИ )))
УНФ отличается от других конфигураций тем, что в закрытии месяца для расчёта себестоимости в запросах используется переменная СуммаКвадратовОтклонений Можете проверить глобальным поиском. Что это означает? Это означает, что на входе в средние квадраты обязаны быть только положительные величины. Иначе результат будет в геометрической прогрессии расходиться вместо схождения, например при отрицательных остатках в каком-нибудь используемом РН. По арифметике. Раскачается +/- до бесконечности. Но так как в кибернетике отсутствует бесконечность, то на каком-то этапе для какого-то физического сектора на диске выйдет: Ошибка арифметического переполнения при преобразовании numeric к типу данных numeric Вывод: Ищите отрицательные остатки, запросом гляньте что там с минусом и исправьте проблему. |
|||
4
maxab72
16.06.25
✎
08:49
|
Не, СуммаКвадратовОтклонений во-первых равна ((ТаблицаРешений.Сумма) - (УзлыКорректировкиСтоимостиСписания.Сумма + ВременнаятаблицаРешений.Сумма)) * ((ТаблицаРешений.Сумма) - (УзлыКорректировкиСтоимостиСписания.Сумма + ВременнаятаблицаРешений.Сумма)), то есть это реально квадрат, а он может быть отрицательным, если только в расчете мы получим комплексные числа. Во-вторых, СуммаКвадратовОтклонений напрямую с регистрами остатков не связана. Надо искать в другом месте.
|
|||
5
Гена
гуру
16.06.25
✎
08:53
|
(4) Спорим на штуку рублей?
Кто разобьёт? ) |
|||
6
Zombi
16.06.25
✎
09:06
|
Отрицательного количества в остатках регистра запасы нет. Есть небольшие минусы по сумме у некоторых позиций. Не из за этого же.
|
|||
7
Гена
гуру
16.06.25
✎
09:11
|
(6) Легко же проверить: уберите принудительно минусы на начало месяца и перепроведите Закрытие.
|
|||
8
maxab72
16.06.25
✎
09:15
|
(5) здесь скорее другое. В запросе значения преобразуют в формат 23.10 (к дробной части стандартного формата 15.2 накинули 8 знаков для точности, а так как в регистре УзлыКорректировкиСтоимостиСписания реквизиты с суммами имеют тип 23.10 (фактически 22.10 + знак)). и их соединяют с некоей расчетной таблицей, ТаблицаВозвратов, где результат может быть задан как 23.10 (неотрицательное). То при использовании при заполнении ТаблицаВозвратов в какой либо строке числа с полностью заполненным реквизитом мы и получим переполнение.
То есть надо копать заполнение временной таблицы ТаблицаВозвратов. |
|||
9
Zombi
16.06.25
✎
09:28
|
(7) Убрал все минусы. Проблема осталась
|
|||
10
maxab72
16.06.25
✎
09:31
|
(9) посмотри в отладчике таблицуВозвратов, какие там значения, нет ли чего больше положенного.
|
|||
11
Zombi
16.06.25
✎
09:35
|
(10) Вроде ничего подозрительного:
|
|||
12
Гена
гуру
16.06.25
✎
09:43
|
(9) Не верю:
Ошибка при закрытии месяца (УНФ) |
|||
13
Zombi
16.06.25
✎
09:54
|
Ну в регистре запасы и затраты сейчас нет вообще отрицательных значений по количеству или сумме:
|
|||
14
Kongo2019
17.06.25
✎
08:44
|
Ну так чем дело закончилось нашел? Очень интересно же.
|
|||
15
Гипервизор
17.06.25
✎
08:50
|
(14) Ну всё ясно же по скрину в (13). Надо Windows активировать. )
|
|||
16
Zombi
17.06.25
✎
10:07
|
(14) Ищу когда время есть. У меня в этой конторе не так много часов по договору и другие задачи есть.
|
|||
17
Zombi
17.06.25
✎
12:32
|
Повозился сегодня с сабжем нашел что на 4 итерации одна из 4 тысяч строк в ВТ "ТаблицаРешений" разрастается до большой суммы. Связывазывается эта таблица с РС "УзлыКорректировкиСтоимостиСписания". Запросом в этом регистре что то поймать не получилось, записи в нем существуют в момент расчета себестоимости. Нашел процедуру, где формируются записи этого РС и по номеру узла из виртуальной таблицы нашел, по какой номенклатуре и характеристике раздувается сумма. Открыл по ним РН "Запасы" и увидел такую картину: была отгрузка, потом возврат от клиента и возврат поставщику. Если отменить проведение последней расходной накладной(которая возврат поставщику), месяц закрывается, ошибок нет. Если снова провести этот документ, закрытие месяца опять выдает ошибку (0). Скрин РН "Запасы":
|
|||
18
Kuzmich123
17.06.25
✎
12:44
|
Прям тоже слежу за темой и переживаю )))
(17) Попробуй создать вручную полностью аналогичный возврат поставщику. |
|||
19
Zombi
17.06.25
✎
13:10
|
(18) Создал. Такая же ошибка.
|
|||
20
Гена
гуру
17.06.25
✎
13:37
|
(19) А давайте проверим одно свойство МНК (метод наименьших квадратов) для почти линейных систем.
Исправьте вручную -434.31 в регистре под последней РН 1629 на 100 вверх или вниз, или побольше. Цель - начальное значение не должно совпадать суммарно с 8434.31, т.е. с самой собой как конечной целью итераций, куда они стремятся. А то мы сразу начинаем с верного значения, а неплохо бы начать поодаль. Теперь как? |
|||
21
Гена
гуру
17.06.25
✎
13:43
|
Гипотеза такая: если функция имеет локальный экстремум недалеко от корня, а первое приближение находится вблизи этого экстремума, то касательная к графику может быть почти горизонтальной, а точка пересечения её с осью x — далеко и от экстремума, и от корня. В этом случае МНК раскачается в итерациях до бесконечности.
А у нас первое приближение 8434.31 вообще совпадает с корнем. |
|||
22
Zombi
17.06.25
✎
13:54
|
(20) Сделал, месяц закрылся. Убрал корректировку, ошибка вернулась.
|
|||
23
Гена
гуру
17.06.25
✎
13:58
|
(22) дык... убирать ничего и не надо...
А какую сумму влепили вместо -434.31 ? |
|||
24
Zombi
17.06.25
✎
14:32
|
(23) Я не вместо, я корректировкой регистра добавил запись приход с такими же измерениями и суммой 100
|
|||
25
Zombi
17.06.25
✎
14:35
|
А чем черевато? Себестоимость не правильная будет по этой позиции же?
|
|||
26
Гена
гуру
17.06.25
✎
14:44
|
(24) Давайте доведём эксперимент до конца. Уменьшайте дельту. Ловите два резонанса слева и справа, начиная с которых начинает возрастать маятник итераций.
|
|||
27
Zombi
18.06.25
✎
08:14
|
(26) С утра методом тыка проверял, изменяя корректировку влево и вправо. Результат: расчет себестоимости при корректировке влево проходит уже при 434.30, а вправо только на 435.11. Все что в этой дельте, выдает ошибку (0). Оставил в итоге корректировку влево на 1 копейку и закрытие месяца эту 1 копейку скорректировало.
|
|||
28
Гена
гуру
18.06.25
✎
08:38
|
(27) Хорошо. Хоть и долго. Четыре с минусом )
Закругляйте в ветке своё исследование несимметричного овражка в МНК выводом и рекомендацией. Вывод какой? |
|||
29
Гена
гуру
18.06.25
✎
08:45
|
Первый вывод: maxab72 был прав и если бы пошёл на спор, то сейчас я бы ему отстегнул 1000 рублей )
А так - фигушки ) Отрицательные остатки оказались не при чём. Просто в прошлой ветке, когда красноту убирали, то случайно, но полезно, убрали какую-то номенклатуру со дна овражка. |
|||
30
maxab72
18.06.25
✎
09:03
|
(29) я грешил на ТаблицаВозвратов, а оказалось, что надо копать ТаблицаРешений. Так что каждый остался бы при своих. Но вывод, что закрытие месяца через системы уравнений это зло, так как используемый метод может в любой момент нарваться на такие данные и все сломается. Надо слать как ошибку в техподдержку 100%.
|
|||
31
Zombi
18.06.25
✎
09:05
|
(28) Спасибо Вам за помощь. Вы где взяли такую золотую голову?)) Обязательство и право сделать выводы тоже Вам уступлю, пожалуй. Я пас.
|
|||
32
Zombi
18.06.25
✎
09:07
|
Кстати, я тоже в (0) накосячил. Ошибку выдает вот этот запрос:
ВЫБРАТЬ УзлыКорректировкиСтоимостиСписания.НомерУзла КАК НомерУзла, СУММА(ВЫРАЗИТЬ(ВЫБОР КОГДА УзлыКорректировкиСтоимостиСписания.Количество <> 0 ТОГДА (ВЫРАЗИТЬ(ТаблицаРешений.СуммаБезНДС КАК ЧИСЛО(23, 10))) * ВЫБОР КОГДА УчетЗатрат.Количество = 0 ТОГДА ВЫРАЗИТЬ(УчетЗатрат.СуммаБезНДС КАК ЧИСЛО(23, 10)) ИНАЧЕ ВЫРАЗИТЬ(УчетЗатрат.Количество КАК ЧИСЛО(23, 10)) КОНЕЦ / (ВЫРАЗИТЬ(УзлыКорректировкиСтоимостиСписания.Количество КАК ЧИСЛО(23, 10))) ИНАЧЕ 0 КОНЕЦ КАК ЧИСЛО(23, 10))) КАК СуммаБезНДС, СУММА(ВЫРАЗИТЬ(ВЫБОР КОГДА УзлыКорректировкиСтоимостиСписания.Количество <> 0 ТОГДА (ВЫРАЗИТЬ(ТаблицаРешений.Сумма КАК ЧИСЛО(23, 10))) * ВЫБОР КОГДА УчетЗатрат.Количество = 0 ТОГДА ВЫРАЗИТЬ(УчетЗатрат.Сумма КАК ЧИСЛО(23, 10)) ИНАЧЕ ВЫРАЗИТЬ(УчетЗатрат.Количество КАК ЧИСЛО(23, 10)) КОНЕЦ / (ВЫРАЗИТЬ(УзлыКорректировкиСтоимостиСписания.Количество КАК ЧИСЛО(23, 10))) ИНАЧЕ 0 КОНЕЦ КАК ЧИСЛО(23, 10))) КАК Сумма, СУММА(ВЫРАЗИТЬ(ВЫБОР КОГДА УзлыКорректировкиСтоимостиСписания.Количество <> 0 ТОГДА (ВЫРАЗИТЬ(ТаблицаРешений.СуммаИнт КАК ЧИСЛО(23, 10))) * ВЫБОР КОГДА УчетЗатрат.Количество = 0 ТОГДА ВЫРАЗИТЬ(УчетЗатрат.СуммаИнт КАК ЧИСЛО(23, 10)) ИНАЧЕ ВЫРАЗИТЬ(УчетЗатрат.Количество КАК ЧИСЛО(23, 10)) КОНЕЦ / (ВЫРАЗИТЬ(УзлыКорректировкиСтоимостиСписания.Количество КАК ЧИСЛО(23, 10))) ИНАЧЕ 0 КОНЕЦ КАК ЧИСЛО(23, 10))) КАК СуммаИнт, СУММА(ВЫРАЗИТЬ(ВЫБОР КОГДА УзлыКорректировкиСтоимостиСписания.Количество <> 0 ТОГДА (ВЫРАЗИТЬ(ТаблицаРешений.СуммаБезНДСИнт КАК ЧИСЛО(23, 10))) * ВЫБОР КОГДА УчетЗатрат.Количество = 0 ТОГДА ВЫРАЗИТЬ(УчетЗатрат.СуммаБезНДСИнт КАК ЧИСЛО(23, 10)) ИНАЧЕ ВЫРАЗИТЬ(УчетЗатрат.Количество КАК ЧИСЛО(23, 10)) КОНЕЦ / (ВЫРАЗИТЬ(УзлыКорректировкиСтоимостиСписания.Количество КАК ЧИСЛО(23, 10))) ИНАЧЕ 0 КОНЕЦ КАК ЧИСЛО(23, 10))) КАК СуммаБезНДСИнт ПОМЕСТИТЬ ВременнаяТаблицаРешений ИЗ РегистрСведений.УзлыКорректировкиСтоимостиСписания КАК УзлыКорректировкиСтоимостиСписания ЛЕВОЕ СОЕДИНЕНИЕ УчетЗатрат КАК УчетЗатрат ЛЕВОЕ СОЕДИНЕНИЕ ТаблицаРешений КАК ТаблицаРешений ПО УчетЗатрат.НомерУзла = ТаблицаРешений.НомерУзла ПО УзлыКорректировкиСтоимостиСписания.Организация = УчетЗатрат.Организация И УзлыКорректировкиСтоимостиСписания.СтруктурнаяЕдиница = УчетЗатрат.СтруктурнаяЕдиница И УзлыКорректировкиСтоимостиСписания.СчетУчета = УчетЗатрат.СчетУчета И УзлыКорректировкиСтоимостиСписания.Номенклатура = УчетЗатрат.Номенклатура И УзлыКорректировкиСтоимостиСписания.Характеристика = УчетЗатрат.Характеристика И УзлыКорректировкиСтоимостиСписания.Партия = УчетЗатрат.Партия И УзлыКорректировкиСтоимостиСписания.ЗаказПокупателя = УчетЗатрат.ЗаказПокупателя И УзлыКорректировкиСтоимостиСписания.ЗаказНаПроизводство = УчетЗатрат.ЗаказНаПроизводство СГРУППИРОВАТЬ ПО УзлыКорректировкиСтоимостиСписания.НомерУзла ИНДЕКСИРОВАТЬ ПО НомерУзла ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ СУММА((ЕСТЬNULL(ТаблицаРешений.СуммаБезНДС, 0) - (УзлыКорректировкиСтоимостиСписания.СуммаБезНДС + ЕСТЬNULL(ВременнаяТаблицаРешений.СуммаБезНДС, 0))) * (ЕСТЬNULL(ТаблицаРешений.СуммаБезНДС, 0) - (УзлыКорректировкиСтоимостиСписания.СуммаБезНДС + ЕСТЬNULL(ВременнаяТаблицаРешений.СуммаБезНДС, 0)))) КАК СуммаБезНДСКвадратовОтклонений, СУММА((ЕСТЬNULL(ТаблицаРешений.Сумма, 0) - (УзлыКорректировкиСтоимостиСписания.Сумма + ЕСТЬNULL(ВременнаяТаблицаРешений.Сумма, 0))) * (ЕСТЬNULL(ТаблицаРешений.Сумма, 0) - (УзлыКорректировкиСтоимостиСписания.Сумма + ЕСТЬNULL(ВременнаяТаблицаРешений.Сумма, 0)))) КАК СуммаКвадратовОтклонений ИЗ РегистрСведений.УзлыКорректировкиСтоимостиСписания КАК УзлыКорректировкиСтоимостиСписания ЛЕВОЕ СОЕДИНЕНИЕ ВременнаяТаблицаРешений КАК ВременнаяТаблицаРешений ПО (ВременнаяТаблицаРешений.НомерУзла = УзлыКорректировкиСтоимостиСписания.НомерУзла) ЛЕВОЕ СОЕДИНЕНИЕ ТаблицаРешений КАК ТаблицаРешений ПО (ТаблицаРешений.НомерУзла = УзлыКорректировкиСтоимостиСписания.НомерУзла) |
|||
33
Гена
гуру
18.06.25
✎
09:32
|
(31) Ваши бы слова - да тёще в уши. Если б только слышали её эпитеты, которыми я как ёжик утыкан )
(30) "При своих" - это мне нравится. Как молодой повеса ждет свиданья С какой-нибудь развратницей лукавой Иль дурой, им обманутой, так я Весь день минуты ждал, когда сойду В подвал мой тайный, к верным сундукам. Счастливый день! Могу сегодня я В шестой сундук (в сундук ещё неполный) Горсть золота накопленного всыпать. |
|||
34
Гена
гуру
18.06.25
✎
10:10
|
Ладно. Лирику в сторону. Давайте доведём код до ума, пока все данные под рукой. Мы же не будем впадать в такую пошлость как жаловаться на разрабочиков 1С на Ньютона, с его градиентным спуском.
Сообразите как добавить, не знаю, через Попытку/Исключение или ещё как-то: если разбег итераций переваливает, ну скажем, за миллиард, то добавляем по данной номенклатуре +/- рублишко. И идём на начало, на вход, естественно, а не продолжаем миллиардить. |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |