Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
09 мая 2025, 10:17

Функция РешитьСЛУ() в УНФ

Автор sali, 18 фев 2025, 14:29

0 Пользователей и 1 гость просматривают эту тему.

sali

LexaK, но раньше то работало! без вмешательств

LexaK

Цитата: sali от 20 фев 2025, 07:20LexaK, но раньше то работало! без вмешательств
без полной картины, трудно ставить диагноз вашему гм... коду

попробуйте изменить точность расчетов, например так

     КОНЕЦ КАК ЧИСЛО(25, 3))) КАК Сумма
если помогло нажмите: Спасибо!

sali

LexaK, менял я точность расчетов. не помогало
для полноты картины могу всю функцию отправить. отправить?

sali

@LexaK, // Решает систему линейных уравнений
//
// Параметры:
// Нет.
//
// Возвращаемое значение:
//  Булево - флаг нахождения решения.
//
Функция РешитьСЛУ()

Запрос = Новый Запрос();
Запрос.МенеджерВременныхТаблиц = ДополнительныеСвойства.ДляПроведения.СтруктураВременныеТаблицы.МенеджерВременныхТаблиц;
Запрос.УстановитьПараметр("ДатаНач", ДополнительныеСвойства.ДляПроведения.НачальнаяДатаПериода);
Запрос.УстановитьПараметр("ДатаКон", ДополнительныеСвойства.ДляПроведения.КонечнаяДатаПериод);
Запрос.УстановитьПараметр("Регистратор", Ссылка);
Запрос.УстановитьПараметр("ПустойСчет", ДополнительныеСвойства.ДляПроведения.ПустойСчет);
Запрос.УстановитьПараметр("Организация", ДополнительныеСвойства.ДляПроведения.Организация);

ТекущееОтклонение = 1;
ТребуемаяТочность = 0.00001;
КоличествоИтераций = 0;

// Подготовим таблицу перемещений и списаний за отчетный период. Возвраты
// текущего периода отрабатываются как обычные перемещения.
Запрос.Текст =
"ВЫБРАТЬ
| УчетЗапасовИЗатрат.Организация КАК Организация,
| УчетЗапасовИЗатрат.СтруктурнаяЕдиница КАК СтруктурнаяЕдиница,
| УчетЗапасовИЗатрат.СчетУчета КАК СчетУчета,
| УчетЗапасовИЗатрат.Номенклатура КАК Номенклатура,
| УчетЗапасовИЗатрат.Характеристика КАК Характеристика,
| УчетЗапасовИЗатрат.Партия КАК Партия,
| УчетЗапасовИЗатрат.ЗаказПокупателя КАК ЗаказПокупателя,
| УчетЗапасовИЗатрат.ЗаказНаПроизводство КАК ЗаказНаПроизводство,
| УчетЗапасовИЗатрат.ЗаказПродажи КАК ЗаказПродажи,
| УчетЗапасовИЗатрат.ДокументПродажи КАК ДокументПродажи,
| -СУММА(УчетЗапасовИЗатрат.Количество) КАК Количество,
| -СУММА(УчетЗапасовИЗатрат.Сумма) КАК Сумма
|ПОМЕСТИТЬ УчетЗатратВозвратыТекПериода
|ИЗ
| РегистрНакопления.Запасы КАК УчетЗапасовИЗатрат
|ГДЕ
| УчетЗапасовИЗатрат.Организация = &Организация
| И УчетЗапасовИЗатрат.Период МЕЖДУ &ДатаНач И &ДатаКон
| И УчетЗапасовИЗатрат.ВидДвижения = ЗНАЧЕНИЕ(ВидДвиженияНакопления.Расход)
| И УчетЗапасовИЗатрат.Возврат
| И НЕ УчетЗапасовИЗатрат.ФиксированнаяСтоимость
| И УчетЗапасовИЗатрат.ДокументПродажи <> НЕОПРЕДЕЛЕНО
| И КОНЕЦПЕРИОДА(УчетЗапасовИЗатрат.ДокументПродажи.Дата, МЕСЯЦ) = КОНЕЦПЕРИОДА(УчетЗапасовИЗатрат.Период, МЕСЯЦ)
|
|СГРУППИРОВАТЬ ПО
| УчетЗапасовИЗатрат.Организация,
| УчетЗапасовИЗатрат.СтруктурнаяЕдиница,
| УчетЗапасовИЗатрат.СчетУчета,
| УчетЗапасовИЗатрат.Номенклатура,
| УчетЗапасовИЗатрат.Характеристика,
| УчетЗапасовИЗатрат.Партия,
| УчетЗапасовИЗатрат.ЗаказПокупателя,
| УчетЗапасовИЗатрат.ЗаказНаПроизводство,
| УчетЗапасовИЗатрат.ЗаказПродажи,
| УчетЗапасовИЗатрат.ДокументПродажи
|
|ИНДЕКСИРОВАТЬ ПО
| ДокументПродажи,
| Организация,
| СтруктурнаяЕдиница,
| СчетУчета,
| Номенклатура,
| Характеристика,
| Партия,
| ЗаказПокупателя,
| ЗаказНаПроизводство,
| ЗаказПродажи
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
| УчетЗатратВозвратыТекПериода.Организация КАК Организация,
| УчетЗатратВозвратыТекПериода.СтруктурнаяЕдиница КАК СтруктурнаяЕдиница,
| УчетЗатратВозвратыТекПериода.СчетУчета КАК СчетУчета,
| УчетЗатратВозвратыТекПериода.Номенклатура КАК Номенклатура,
| УчетЗатратВозвратыТекПериода.Характеристика КАК Характеристика,
| УчетЗатратВозвратыТекПериода.Партия КАК Партия,
| УчетЗатратВозвратыТекПериода.ЗаказПокупателя КАК ЗаказПокупателя,
| УчетЗатратВозвратыТекПериода.ЗаказНаПроизводство КАК ЗаказНаПроизводство,
| УзлыКорректировкиСтоимостиСписания.НомерУзла КАК НомерУзла,
| СУММА(ЕСТЬNULL(УчетЗапасовИЗатрат.Количество, 0)) КАК КоличествоПродано,
| СУММА(ЕСТЬNULL(УчетЗапасовИЗатрат.Сумма, 0)) КАК СуммаПродано,
| УчетЗатратВозвратыТекПериода.Количество КАК КоличествоВозврат,
| УчетЗатратВозвратыТекПериода.Сумма КАК СуммаВозврат,
| УчетЗатратВозвратыТекПериода.ДокументПродажи КАК ДокументПродажи
|ПОМЕСТИТЬ УчетЗатратВозвратыПоРезервам
|ИЗ
| УчетЗатратВозвратыТекПериода КАК УчетЗатратВозвратыТекПериода
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.Запасы КАК УчетЗапасовИЗатрат
| ПО УчетЗатратВозвратыТекПериода.ДокументПродажи = УчетЗапасовИЗатрат.ДокументПродажи
| И УчетЗатратВозвратыТекПериода.Организация = УчетЗапасовИЗатрат.Организация
| И УчетЗатратВозвратыТекПериода.Номенклатура = УчетЗапасовИЗатрат.Номенклатура
| И УчетЗатратВозвратыТекПериода.Характеристика = УчетЗапасовИЗатрат.Характеристика
| И УчетЗатратВозвратыТекПериода.Партия = УчетЗапасовИЗатрат.Партия
| И УчетЗатратВозвратыТекПериода.ЗаказПродажи = УчетЗапасовИЗатрат.ЗаказПродажи
| И УчетЗатратВозвратыТекПериода.ЗаказПродажи = УчетЗапасовИЗатрат.ЗаказПокупателя
| И (УчетЗапасовИЗатрат.ЗаказПокупателя <> ЗНАЧЕНИЕ(Документ.ЗаказПокупателя.ПустаяСсылка))
| И (УчетЗапасовИЗатрат.ЗаказНаПроизводство = ЗНАЧЕНИЕ(Документ.ЗаказНаПроизводство.ПустаяСсылка))
| И (НЕ УчетЗапасовИЗатрат.Возврат)
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.УзлыКорректировкиСтоимостиСписания КАК УзлыКорректировкиСтоимостиСписания
| ПО (УзлыКорректировкиСтоимостиСписания.Регистратор = &Регистратор)
| И (УчетЗапасовИЗатрат.Организация = УзлыКорректировкиСтоимостиСписания.Организация)
| И (УчетЗапасовИЗатрат.СтруктурнаяЕдиница = УзлыКорректировкиСтоимостиСписания.СтруктурнаяЕдиница)
| И (УчетЗапасовИЗатрат.СчетУчета = УзлыКорректировкиСтоимостиСписания.СчетУчета)
| И (УчетЗапасовИЗатрат.Номенклатура = УзлыКорректировкиСтоимостиСписания.Номенклатура)
| И (УчетЗапасовИЗатрат.Характеристика = УзлыКорректировкиСтоимостиСписания.Характеристика)
| И (УчетЗапасовИЗатрат.Партия = УзлыКорректировкиСтоимостиСписания.Партия)
| И (УчетЗапасовИЗатрат.ЗаказПокупателя = УзлыКорректировкиСтоимостиСписания.ЗаказПокупателя)
| И (УчетЗапасовИЗатрат.ЗаказПокупателя <> ЗНАЧЕНИЕ(Документ.ЗаказПокупателя.ПустаяСсылка))
| И (УчетЗапасовИЗатрат.ЗаказНаПроизводство = ЗНАЧЕНИЕ(Документ.ЗаказНаПроизводство.ПустаяСсылка))
|ГДЕ
| УчетЗапасовИЗатрат.ЗаказПокупателя <> ЗНАЧЕНИЕ(Документ.ЗаказПокупателя.ПустаяСсылка)
| И УчетЗапасовИЗатрат.ЗаказНаПроизводство = ЗНАЧЕНИЕ(Документ.ЗаказНаПроизводство.ПустаяСсылка)
|СГРУППИРОВАТЬ ПО
| УчетЗатратВозвратыТекПериода.Организация,
| УчетЗатратВозвратыТекПериода.СтруктурнаяЕдиница,
| УчетЗатратВозвратыТекПериода.СчетУчета,
| УчетЗатратВозвратыТекПериода.Номенклатура,
| УчетЗатратВозвратыТекПериода.Характеристика,
| УчетЗатратВозвратыТекПериода.Партия,
| УчетЗатратВозвратыТекПериода.ЗаказПокупателя,
| УчетЗатратВозвратыТекПериода.ЗаказНаПроизводство,
| УзлыКорректировкиСтоимостиСписания.НомерУзла,
| УчетЗатратВозвратыТекПериода.Количество,
| УчетЗатратВозвратыТекПериода.Сумма,
| УчетЗатратВозвратыТекПериода.ДокументПродажи
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
| УчетЗатратВозвратыТекПериода.Организация КАК Организация,
| УчетЗатратВозвратыТекПериода.СтруктурнаяЕдиница КАК СтруктурнаяЕдиница,
| УчетЗатратВозвратыТекПериода.СчетУчета КАК СчетУчета,
| УчетЗатратВозвратыТекПериода.Номенклатура КАК Номенклатура,
| УчетЗатратВозвратыТекПериода.Характеристика КАК Характеристика,
| УчетЗатратВозвратыТекПериода.Партия КАК Партия,
| УчетЗатратВозвратыТекПериода.ЗаказПокупателя КАК ЗаказПокупателя,
| УчетЗатратВозвратыТекПериода.ЗаказНаПроизводство КАК ЗаказНаПроизводство,
| УзлыКорректировкиСтоимостиСписания.НомерУзла КАК НомерУзла,
| СУММА(ЕСТЬNULL(УчетЗапасовИЗатрат.Количество, 0)) КАК КоличествоПродано,
| СУММА(ЕСТЬNULL(УчетЗапасовИЗатрат.Сумма, 0)) КАК СуммаПродано,
| УчетЗатратВозвратыТекПериода.Количество КАК КоличествоВозврат,
| УчетЗатратВозвратыТекПериода.Сумма КАК СуммаВозврат,
| УчетЗатратВозвратыТекПериода.ДокументПродажи КАК ДокументПродажи
|ПОМЕСТИТЬ УчетЗатратВозвратыСвободные
|ИЗ
| УчетЗатратВозвратыТекПериода КАК УчетЗатратВозвратыТекПериода
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.Запасы КАК УчетЗапасовИЗатрат
| ПО УчетЗатратВозвратыТекПериода.ДокументПродажи = УчетЗапасовИЗатрат.ДокументПродажи
| И УчетЗатратВозвратыТекПериода.Организация = УчетЗапасовИЗатрат.Организация
| И УчетЗатратВозвратыТекПериода.Номенклатура = УчетЗапасовИЗатрат.Номенклатура
| И УчетЗатратВозвратыТекПериода.Характеристика = УчетЗапасовИЗатрат.Характеристика
| И УчетЗатратВозвратыТекПериода.Партия = УчетЗапасовИЗатрат.Партия
| И УчетЗатратВозвратыТекПериода.ЗаказПродажи = УчетЗапасовИЗатрат.ЗаказПродажи
| И (УчетЗапасовИЗатрат.ЗаказПокупателя = ЗНАЧЕНИЕ(Документ.ЗаказПокупателя.ПустаяСсылка))
| И (УчетЗапасовИЗатрат.ЗаказНаПроизводство = ЗНАЧЕНИЕ(Документ.ЗаказНаПроизводство.ПустаяСсылка))
| И (НЕ УчетЗапасовИЗатрат.Возврат)
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.УзлыКорректировкиСтоимостиСписания КАК УзлыКорректировкиСтоимостиСписания
| ПО (УзлыКорректировкиСтоимостиСписания.Регистратор = &Регистратор)
| И (УчетЗапасовИЗатрат.Организация = УзлыКорректировкиСтоимостиСписания.Организация)
| И (УчетЗапасовИЗатрат.СтруктурнаяЕдиница = УзлыКорректировкиСтоимостиСписания.СтруктурнаяЕдиница)
| И (УчетЗапасовИЗатрат.СчетУчета = УзлыКорректировкиСтоимостиСписания.СчетУчета)
| И (УчетЗапасовИЗатрат.Номенклатура = УзлыКорректировкиСтоимостиСписания.Номенклатура)
| И (УчетЗапасовИЗатрат.Характеристика = УзлыКорректировкиСтоимостиСписания.Характеристика)
| И (УчетЗапасовИЗатрат.Партия = УзлыКорректировкиСтоимостиСписания.Партия)
| И (УчетЗапасовИЗатрат.ЗаказПокупателя = УзлыКорректировкиСтоимостиСписания.ЗаказПокупателя)
| И (УчетЗапасовИЗатрат.ЗаказПокупателя = ЗНАЧЕНИЕ(Документ.ЗаказПокупателя.ПустаяСсылка))
| И (УчетЗапасовИЗатрат.ЗаказНаПроизводство = ЗНАЧЕНИЕ(Документ.ЗаказНаПроизводство.ПустаяСсылка))
|ГДЕ
| УчетЗапасовИЗатрат.ЗаказПокупателя = ЗНАЧЕНИЕ(Документ.ЗаказПокупателя.ПустаяСсылка)
| И УчетЗапасовИЗатрат.ЗаказНаПроизводство = ЗНАЧЕНИЕ(Документ.ЗаказНаПроизводство.ПустаяСсылка)
|
|СГРУППИРОВАТЬ ПО
| УчетЗатратВозвратыТекПериода.Организация,
| УчетЗатратВозвратыТекПериода.СтруктурнаяЕдиница,
| УчетЗатратВозвратыТекПериода.СчетУчета,
| УчетЗатратВозвратыТекПериода.Номенклатура,
| УчетЗатратВозвратыТекПериода.Характеристика,
| УчетЗатратВозвратыТекПериода.Партия,
| УчетЗатратВозвратыТекПериода.ЗаказПокупателя,
| УчетЗатратВозвратыТекПериода.ЗаказНаПроизводство,
| УзлыКорректировкиСтоимостиСписания.НомерУзла,
| УчетЗатратВозвратыТекПериода.Количество,
| УчетЗатратВозвратыТекПериода.Сумма,
| УчетЗатратВозвратыТекПериода.ДокументПродажи
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
| УчетЗатратВозвраты.Организация КАК Организация,
| УчетЗатратВозвраты.СтруктурнаяЕдиница КАК СтруктурнаяЕдиница,
| УчетЗатратВозвраты.СчетУчета КАК СчетУчета,
| УчетЗатратВозвраты.Номенклатура КАК Номенклатура,
| УчетЗатратВозвраты.Характеристика КАК Характеристика,
| УчетЗатратВозвраты.Партия КАК Партия,
| УчетЗатратВозвраты.ЗаказПокупателя КАК ЗаказПокупателя,
| УчетЗатратВозвраты.ЗаказНаПроизводство КАК ЗаказНаПроизводство,
| УчетЗатратВозвраты.НомерУзла КАК НомерУзла,
| УчетЗатратВозвраты.КоличествоПродано КАК КоличествоПродано,
| УчетЗатратВозвраты.СуммаПродано КАК СуммаПродано,
| УчетЗатратВозвраты.КоличествоВозврат КАК КоличествоВозврат,
| УчетЗатратВозвраты.СуммаВозврат КАК СуммаВозврат,
| 0 КАК КоличествоРаспределено,
| 0 КАК СуммаРаспределено,
| УчетЗатратВозвраты.ДокументПродажи КАК ДокументПродажи
|ИЗ
| (ВЫБРАТЬ
| УчетЗатратВозвраты.Организация КАК Организация,
| УчетЗатратВозвраты.СтруктурнаяЕдиница КАК СтруктурнаяЕдиница,
| УчетЗатратВозвраты.СчетУчета КАК СчетУчета,
| УчетЗатратВозвраты.Номенклатура КАК Номенклатура,
| УчетЗатратВозвраты.Характеристика КАК Характеристика,
| УчетЗатратВозвраты.Партия КАК Партия,
| УчетЗатратВозвраты.ЗаказПокупателя КАК ЗаказПокупателя,
| УчетЗатратВозвраты.ЗаказНаПроизводство КАК ЗаказНаПроизводство,
| УчетЗатратВозвраты.НомерУзла КАК НомерУзла,
| УчетЗатратВозвраты.КоличествоПродано КАК КоличествоПродано,
| УчетЗатратВозвраты.СуммаПродано КАК СуммаПродано,
| УчетЗатратВозвраты.КоличествоВозврат КАК КоличествоВозврат,
| УчетЗатратВозвраты.СуммаВозврат КАК СуммаВозврат,
| УчетЗатратВозвраты.ДокументПродажи КАК ДокументПродажи
| ИЗ
| УчетЗатратВозвратыСвободные КАК УчетЗатратВозвраты
|
| ОБЪЕДИНИТЬ ВСЕ
|
| ВЫБРАТЬ
| УчетЗатратВозвраты.Организация,
| УчетЗатратВозвраты.СтруктурнаяЕдиница,
| УчетЗатратВозвраты.СчетУчета,
| УчетЗатратВозвраты.Номенклатура,
| УчетЗатратВозвраты.Характеристика,
| УчетЗатратВозвраты.Партия,
| УчетЗатратВозвраты.ЗаказПокупателя,
| УчетЗатратВозвраты.ЗаказНаПроизводство,
| УчетЗатратВозвраты.НомерУзла,
| УчетЗатратВозвраты.КоличествоПродано,
| УчетЗатратВозвраты.СуммаПродано,
| УчетЗатратВозвраты.КоличествоВозврат,
| УчетЗатратВозвраты.СуммаВозврат,
| УчетЗатратВозвраты.ДокументПродажи
| ИЗ
| УчетЗатратВозвратыПоРезервам КАК УчетЗатратВозвраты) КАК УчетЗатратВозвраты
|
|УПОРЯДОЧИТЬ ПО
| НомерУзла
|ИТОГИ ПО
| Организация,
| СтруктурнаяЕдиница,
| СчетУчета,
| Номенклатура,
| Характеристика,
| Партия,
| ДокументПродажи,
| СуммаВозврат,
| КоличествоВозврат";

РезультатЗапроса = Запрос.ВыполнитьПакет();

ТаблицаВозвратов = РезультатЗапроса[3].Выгрузить();

ТаблицаВозвратов.Очистить();

ОбходПоОрганизация = РезультатЗапроса[3].Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
Пока ОбходПоОрганизация.Следующий() Цикл
ОбходПоСтруктурнаяЕдиница = ОбходПоОрганизация.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
Пока ОбходПоСтруктурнаяЕдиница.Следующий() Цикл
ОбходПоСчетУчета = ОбходПоСтруктурнаяЕдиница.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
Пока ОбходПоСчетУчета.Следующий() Цикл
ОбходПоНоменклатура = ОбходПоСчетУчета.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
Пока ОбходПоНоменклатура.Следующий() Цикл
ОбходПоХарактеристика = ОбходПоНоменклатура.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
Пока ОбходПоХарактеристика.Следующий() Цикл
ОбходПоПартия = ОбходПоХарактеристика.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
Пока ОбходПоПартия.Следующий() Цикл
ОбходПоДокументПродажи = ОбходПоПартия.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
Пока ОбходПоДокументПродажи.Следующий() Цикл
ОбходПоСуммаВозврат = ОбходПоДокументПродажи.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
Пока ОбходПоСуммаВозврат.Следующий() Цикл
ОбходПоКоличествоВозврат = ОбходПоСуммаВозврат.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
Пока ОбходПоКоличествоВозврат.Следующий() Цикл
КоличествоОсталосьРаспределить = ОбходПоКоличествоВозврат.КоличествоВозврат;
СуммаОсталосьРаспределить = ОбходПоКоличествоВозврат.СуммаВозврат;
ВыборкаДетальныеЗаписи = ОбходПоКоличествоВозврат.Выбрать();
Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
Если КоличествоОсталосьРаспределить > 0 Тогда
НоваяСтрока = ТаблицаВозвратов.Добавить();
ЗаполнитьЗначенияСвойств(НоваяСтрока, ВыборкаДетальныеЗаписи);
Если КоличествоОсталосьРаспределить <= ВыборкаДетальныеЗаписи.КоличествоПродано Тогда
НоваяСтрока.КоличествоРаспределено = КоличествоОсталосьРаспределить;
КоличествоОсталосьРаспределить = 0;
НоваяСтрока.СуммаРаспределено = СуммаОсталосьРаспределить;
СуммаОсталосьРаспределить = 0;
Иначе
НоваяСтрока.КоличествоРаспределено = ВыборкаДетальныеЗаписи.КоличествоПродано;
КоличествоОсталосьРаспределить = КоличествоОсталосьРаспределить - ВыборкаДетальныеЗаписи.КоличествоПродано;
НоваяСтрока.СуммаРаспределено = ВыборкаДетальныеЗаписи.СуммаПродано;
СуммаОсталосьРаспределить = СуммаОсталосьРаспределить - ВыборкаДетальныеЗаписи.СуммаПродано;
КонецЕсли;
КонецЕсли;
КонецЦикла;
КонецЦикла;
КонецЦикла;
КонецЦикла;
КонецЦикла;
КонецЦикла;
КонецЦикла;
КонецЦикла;
КонецЦикла;
КонецЦикла;

Запрос.УстановитьПараметр("ТаблицаВозвратов", ТаблицаВозвратов);

Запрос.Текст =
"ВЫБРАТЬ РАЗЛИЧНЫЕ
| ТаблицаВозвратов.Организация КАК Организация,
| ТаблицаВозвратов.СтруктурнаяЕдиница КАК СтруктурнаяЕдиница,
| ТаблицаВозвратов.СчетУчета КАК СчетУчета,
| ТаблицаВозвратов.Номенклатура КАК Номенклатура,
| ТаблицаВозвратов.Характеристика КАК Характеристика,
| ТаблицаВозвратов.Партия КАК Партия,
| ТаблицаВозвратов.ЗаказПокупателя КАК ЗаказПокупателя,
| ТаблицаВозвратов.ЗаказНаПроизводство КАК ЗаказНаПроизводство,
| ТаблицаВозвратов.НомерУзла КАК НомерУзла,
| ТаблицаВозвратов.КоличествоРаспределено КАК Количество,
| ТаблицаВозвратов.СуммаРаспределено КАК Сумма,
| ТаблицаВозвратов.ДокументПродажи КАК ДокументПродажи
|ПОМЕСТИТЬ УчетЗатратВозвраты
|ИЗ
| &ТаблицаВозвратов КАК ТаблицаВозвратов
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
| УчетЗапасовИЗатрат.Организация КАК Организация,
| УчетЗапасовИЗатрат.КоррСтруктурнаяЕдиница КАК СтруктурнаяЕдиница,
| УчетЗапасовИЗатрат.КоррСчетУчета КАК СчетУчета,
| УчетЗапасовИЗатрат.КоррНоменклатура КАК Номенклатура,
| УчетЗапасовИЗатрат.КоррХарактеристика КАК Характеристика,
| УчетЗапасовИЗатрат.КоррПартия КАК Партия,
| УчетЗапасовИЗатрат.КоррЗаказПокупателя КАК ЗаказПокупателя,
| УчетЗапасовИЗатрат.КоррЗаказНаПроизводство КАК ЗаказНаПроизводство,
| УзлыКорректировкиСтоимостиСписания.НомерУзла КАК НомерУзла,
| СУММА(ВЫБОР
| КОГДА УчетЗапасовИЗатрат.ВидДвижения = ЗНАЧЕНИЕ(ВидДвиженияНакопления.Расход)
| И НЕ УчетЗапасовИЗатрат.Возврат
| ТОГДА УчетЗапасовИЗатрат.Количество
| КОГДА УчетЗапасовИЗатрат.ВидДвижения = ЗНАЧЕНИЕ(ВидДвиженияНакопления.Приход)
| И УчетЗапасовИЗатрат.Возврат
| ТОГДА -УчетЗапасовИЗатрат.Количество
| ИНАЧЕ 0
| КОНЕЦ) КАК Количество,
| СУММА(ВЫРАЗИТЬ(ВЫБОР
| КОГДА УчетЗапасовИЗатрат.ВидДвижения = ЗНАЧЕНИЕ(ВидДвиженияНакопления.Расход)
| И НЕ УчетЗапасовИЗатрат.Возврат
| ТОГДА УчетЗапасовИЗатрат.Сумма
| КОГДА УчетЗапасовИЗатрат.ВидДвижения = ЗНАЧЕНИЕ(ВидДвиженияНакопления.Приход)
| И УчетЗапасовИЗатрат.Возврат
| ТОГДА -УчетЗапасовИЗатрат.Сумма
| ИНАЧЕ 0
| КОНЕЦ КАК ЧИСЛО(23, 10))) КАК Сумма
|ПОМЕСТИТЬ УчетЗатратБезУчетаВозвратов
|ИЗ
| РегистрНакопления.Запасы КАК УчетЗапасовИЗатрат
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.УзлыКорректировкиСтоимостиСписания КАК УзлыКорректировкиСтоимостиСписания
| ПО (УзлыКорректировкиСтоимостиСписания.Регистратор = &Регистратор)
| И УчетЗапасовИЗатрат.Организация = УзлыКорректировкиСтоимостиСписания.Организация
| И УчетЗапасовИЗатрат.СтруктурнаяЕдиница = УзлыКорректировкиСтоимостиСписания.СтруктурнаяЕдиница
| И УчетЗапасовИЗатрат.СчетУчета = УзлыКорректировкиСтоимостиСписания.СчетУчета
| И УчетЗапасовИЗатрат.Номенклатура = УзлыКорректировкиСтоимостиСписания.Номенклатура
| И УчетЗапасовИЗатрат.Характеристика = УзлыКорректировкиСтоимостиСписания.Характеристика
| И УчетЗапасовИЗатрат.Партия = УзлыКорректировкиСтоимостиСписания.Партия
| И УчетЗапасовИЗатрат.ЗаказПокупателя = УзлыКорректировкиСтоимостиСписания.ЗаказПокупателя
| И УчетЗапасовИЗатрат.ЗаказНаПроизводство = УзлыКорректировкиСтоимостиСписания.ЗаказНаПроизводство
|ГДЕ
| УчетЗапасовИЗатрат.Период МЕЖДУ &ДатаНач И &ДатаКон
| И УчетЗапасовИЗатрат.Организация = &Организация
| И НЕ УчетЗапасовИЗатрат.ФиксированнаяСтоимость
|
|СГРУППИРОВАТЬ ПО
| УчетЗапасовИЗатрат.Организация,
| УчетЗапасовИЗатрат.КоррСтруктурнаяЕдиница,
| УчетЗапасовИЗатрат.КоррСчетУчета,
| УчетЗапасовИЗатрат.КоррНоменклатура,
| УчетЗапасовИЗатрат.КоррХарактеристика,
| УчетЗапасовИЗатрат.КоррПартия,
| УчетЗапасовИЗатрат.КоррЗаказПокупателя,
| УчетЗапасовИЗатрат.КоррЗаказНаПроизводство,
| УзлыКорректировкиСтоимостиСписания.НомерУзла
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
| УчетЗатрат.Организация КАК Организация,
| УчетЗатрат.СтруктурнаяЕдиница КАК СтруктурнаяЕдиница,
| УчетЗатрат.СчетУчета КАК СчетУчета,
| УчетЗатрат.Номенклатура КАК Номенклатура,
| УчетЗатрат.Характеристика КАК Характеристика,
| УчетЗатрат.Партия КАК Партия,
| УчетЗатрат.ЗаказПокупателя КАК ЗаказПокупателя,
| УчетЗатрат.ЗаказНаПроизводство КАК ЗаказНаПроизводство,
| УчетЗатрат.НомерУзла КАК НомерУзла,
| СУММА(УчетЗатрат.Количество) КАК Количество,
| СУММА(УчетЗатрат.Сумма) КАК Сумма
|ПОМЕСТИТЬ УчетЗатрат
|ИЗ
| (ВЫБРАТЬ
| УчетЗатратЗаВычетомВозвратов.Организация КАК Организация,
| УчетЗатратЗаВычетомВозвратов.СтруктурнаяЕдиница КАК СтруктурнаяЕдиница,
| УчетЗатратЗаВычетомВозвратов.СчетУчета КАК СчетУчета,
| УчетЗатратЗаВычетомВозвратов.Номенклатура КАК Номенклатура,
| УчетЗатратЗаВычетомВозвратов.Характеристика КАК Характеристика,
| УчетЗатратЗаВычетомВозвратов.Партия КАК Партия,
| УчетЗатратЗаВычетомВозвратов.ЗаказПокупателя КАК ЗаказПокупателя,
| УчетЗатратЗаВычетомВозвратов.ЗаказНаПроизводство КАК ЗаказНаПроизводство,
| УчетЗатратЗаВычетомВозвратов.НомерУзла КАК НомерУзла,
| УчетЗатратЗаВычетомВозвратов.Количество КАК Количество,
| УчетЗатратЗаВычетомВозвратов.Сумма КАК Сумма
| ИЗ
| УчетЗатратБезУчетаВозвратов КАК УчетЗатратЗаВычетомВозвратов
|
| ОБЪЕДИНИТЬ ВСЕ
|
| ВЫБРАТЬ
| УчетЗатратВозвраты.Организация,
| УчетЗатратВозвраты.СтруктурнаяЕдиница,
| УчетЗатратВозвраты.СчетУчета,
| УчетЗатратВозвраты.Номенклатура,
| УчетЗатратВозвраты.Характеристика,
| УчетЗатратВозвраты.Партия,
| УчетЗатратВозвраты.ЗаказПокупателя,
| УчетЗатратВозвраты.ЗаказНаПроизводство,
| УчетЗатратВозвраты.НомерУзла,
| УчетЗатратВозвраты.Количество,
| УчетЗатратВозвраты.Сумма
| ИЗ
| УчетЗатратВозвраты КАК УчетЗатратВозвраты
|
| ОБЪЕДИНИТЬ ВСЕ
|
| ВЫБРАТЬ
| УчетЗатратВозвраты.Организация,
| НЕОПРЕДЕЛЕНО,
| ЗНАЧЕНИЕ(ПланСчетов.Управленческий.ПустаяСсылка),
| ЗНАЧЕНИЕ(Справочник.Номенклатура.ПустаяСсылка),
| ЗНАЧЕНИЕ(Справочник.ХарактеристикиНоменклатуры.ПустаяСсылка),
| ЗНАЧЕНИЕ(Справочник.ПартииНоменклатуры.ПустаяСсылка),
| ЗНАЧЕНИЕ(Документ.ЗаказПокупателя.ПустаяСсылка),
| ЗНАЧЕНИЕ(Документ.ЗаказНаПроизводство.ПустаяСсылка),
| УчетЗатратВозвраты.НомерУзла,
| -УчетЗатратВозвраты.Количество,
| -УчетЗатратВозвраты.Сумма
| ИЗ
| УчетЗатратВозвраты КАК УчетЗатратВозвраты) КАК УчетЗатрат
|
|СГРУППИРОВАТЬ ПО
| УчетЗатрат.Организация,
| УчетЗатрат.СтруктурнаяЕдиница,
| УчетЗатрат.СчетУчета,
| УчетЗатрат.Номенклатура,
| УчетЗатрат.Характеристика,
| УчетЗатрат.Партия,
| УчетЗатрат.ЗаказПокупателя,
| УчетЗатрат.ЗаказНаПроизводство,
| УчетЗатрат.НомерУзла
|
|ИНДЕКСИРОВАТЬ ПО
| Организация,
| СтруктурнаяЕдиница,
| СчетУчета,
| Номенклатура,
| Характеристика,
| Партия,
| ЗаказПокупателя,
| ЗаказНаПроизводство,
| НомерУзла";


Запрос.ВыполнитьПакет();

// Итерационно ищем решение системы линейных уравнений, пока отклонение не
// будет меньше требуемого или не будет выполнено 100 итераций расчета.
Пока (ТекущееОтклонение > ТребуемаяТочность * ТребуемаяТочность) И (КоличествоИтераций < 100) Цикл

КоличествоИтераций = КоличествоИтераций + 1;

// Следующая итерация расчета.
Запрос.Текст =
"ВЫБРАТЬ
| УзлыКорректировкиСтоимостиСписания.НомерУзла КАК НомерУзла,
| СУММА(ВЫРАЗИТЬ(ВЫБОР
| КОГДА УзлыКорректировкиСтоимостиСписания.Количество <> 0
| ТОГДА ТаблицаРешений.Сумма * ВЫБОР
| КОГДА УчетЗатрат.Количество = 0
| ТОГДА УчетЗатрат.Сумма
| ИНАЧЕ УчетЗатрат.Количество
| КОНЕЦ / УзлыКорректировкиСтоимостиСписания.Количество
| ИНАЧЕ 0
| КОНЕЦ КАК ЧИСЛО(23, 10))) КАК Сумма
|ПОМЕСТИТЬ ВременнаяТаблицаРешений
|ИЗ
| РегистрСведений.УзлыКорректировкиСтоимостиСписания КАК УзлыКорректировкиСтоимостиСписания
| ЛЕВОЕ СОЕДИНЕНИЕ УчетЗатрат КАК УчетЗатрат
| ЛЕВОЕ СОЕДИНЕНИЕ ТаблицаРешений КАК ТаблицаРешений
| ПО УчетЗатрат.НомерУзла = ТаблицаРешений.НомерУзла
| ПО УзлыКорректировкиСтоимостиСписания.Организация = УчетЗатрат.Организация
| И УзлыКорректировкиСтоимостиСписания.СтруктурнаяЕдиница = УчетЗатрат.СтруктурнаяЕдиница
| И УзлыКорректировкиСтоимостиСписания.СчетУчета = УчетЗатрат.СчетУчета
| И УзлыКорректировкиСтоимостиСписания.Номенклатура = УчетЗатрат.Номенклатура
| И УзлыКорректировкиСтоимостиСписания.Характеристика = УчетЗатрат.Характеристика
| И УзлыКорректировкиСтоимостиСписания.Партия = УчетЗатрат.Партия
| И УзлыКорректировкиСтоимостиСписания.ЗаказПокупателя = УчетЗатрат.ЗаказПокупателя
| И УзлыКорректировкиСтоимостиСписания.ЗаказНаПроизводство = УчетЗатрат.ЗаказНаПроизводство
|ГДЕ
| УзлыКорректировкиСтоимостиСписания.Регистратор = &Регистратор
|
|СГРУППИРОВАТЬ ПО
| УзлыКорректировкиСтоимостиСписания.НомерУзла
|
|ИНДЕКСИРОВАТЬ ПО
| НомерУзла
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
| СУММА(ВЫРАЗИТЬ((ЕСТЬNULL(ТаблицаРешений.Сумма, 0) - (УзлыКорректировкиСтоимостиСписания.Сумма + ЕСТЬNULL(ВременнаяТаблицаРешений.Сумма, 0))) * (ЕСТЬNULL(ТаблицаРешений.Сумма, 0) - (УзлыКорректировкиСтоимостиСписания.Сумма + ЕСТЬNULL(ВременнаяТаблицаРешений.Сумма, 0))) КАК ЧИСЛО(23, 10))) КАК СуммаКвадратовОтклонений
|ИЗ
| РегистрСведений.УзлыКорректировкиСтоимостиСписания КАК УзлыКорректировкиСтоимостиСписания
| ЛЕВОЕ СОЕДИНЕНИЕ ВременнаяТаблицаРешений КАК ВременнаяТаблицаРешений
| ПО (ВременнаяТаблицаРешений.НомерУзла = УзлыКорректировкиСтоимостиСписания.НомерУзла)
| ЛЕВОЕ СОЕДИНЕНИЕ ТаблицаРешений КАК ТаблицаРешений
| ПО (ТаблицаРешений.НомерУзла = УзлыКорректировкиСтоимостиСписания.НомерУзла)
|ГДЕ
| УзлыКорректировкиСтоимостиСписания.Регистратор = &Регистратор";


МассивРезультатов = Запрос.ВыполнитьПакет(); 
Результат = МассивРезультатов[1];

СтароеОтклонение = ТекущееОтклонение;
Если Результат.Пустой() Тогда
ТекущееОтклонение = 0; // отклонений нет
Иначе
Выборка = Результат.Выбрать();
Выборка.Следующий();

// Определим текущее отклонение от решения.
ТекущееОтклонение = ?(Выборка.СуммаКвадратовОтклонений = NULL, 0, Выборка.СуммаКвадратовОтклонений);
КонецЕсли;

Запрос.Текст =
"УНИЧТОЖИТЬ ТаблицаРешений
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
| УзлыКорректировкиСтоимостиСписания.НомерУзла КАК НомерУзла,
| УзлыКорректировкиСтоимостиСписания.Сумма + ЕСТЬNULL(ВременнаяТаблицаРешений.Сумма, 0) КАК Сумма
|ПОМЕСТИТЬ ТаблицаРешений
|ИЗ
| РегистрСведений.УзлыКорректировкиСтоимостиСписания КАК УзлыКорректировкиСтоимостиСписания
| ЛЕВОЕ СОЕДИНЕНИЕ ВременнаяТаблицаРешений КАК ВременнаяТаблицаРешений
| ПО (ВременнаяТаблицаРешений.НомерУзла = УзлыКорректировкиСтоимостиСписания.НомерУзла)
|ГДЕ
| УзлыКорректировкиСтоимостиСписания.Регистратор = &Регистратор
|
|ИНДЕКСИРОВАТЬ ПО
| НомерУзла
|;
|
|////////////////////////////////////////////////////////////////////////////////
|УНИЧТОЖИТЬ ВременнаяТаблицаРешений";

Запрос.ВыполнитьПакет(); 



КонецЦикла;

Возврат Истина;

КонецФункции // РешитьСЛУ()

ошибка выходит вот здесь МассивРезультатов = Запрос.ВыполнитьПакет(); 


LexaK

Цитата: sali от 20 фев 2025, 10:41ошибка выходит вот здесь
Код Выделить Развернуть
    МассивРезультатов = Запрос.ВыполнитьПакет(); 



а сам текст ошибки ?
если помогло нажмите: Спасибо!

sali

LexaK, по второму кругу пойдем?
ОбщаяКартинка.Информация: Имя не уникально!
Ошибка при вызове метода контекста (ВыполнитьПакет)
{Документ.ЗакрытиеМесяца.МодульОбъекта(1302)}:                     МассивРезультатов = Запрос.ВыполнитьПакет(); 
{Документ.ЗакрытиеМесяца.МодульОбъекта(2547)}:        РешениеНайдено = РешитьСЛУ();
{Документ.ЗакрытиеМесяца.МодульОбъекта(2852)}:    КорректировкаСписанияУчетЗатрат(ВидОперации, ТаблицаОшибок, Отказ);
{Документ.ЗакрытиеМесяца.МодульОбъекта(5424)}:        РассчитатьФактическуюСебестоимостьВыпуска(Отказ, "РасчетФактическойСебестоимости", ТаблицаОшибок);
{Обработка.ЗакрытиеМесяца.МодульМенеджера(2202)}:    ДокОбъект.Записать(РежимЗаписиДокумента.Проведение);
{Обработка.ЗакрытиеМесяца.МодульМенеджера(72)}:        ВыполнитьОперациюЗакрытияМесяца(СтруктураПараметров, Операция, ДокументЗакрытияМесяца);
{(1)}:Обработки.ЗакрытиеМесяца.ВыполнитьЗакрытиеМесяца(Параметры[0],Параметры[1])
{ОбщийМодуль.ОбщегоНазначения.Модуль(5113)}:    Выполнить ИмяМетода + "(" + ПараметрыСтрока + ")";
{ОбщийМодуль.ДлительныеОперации.Модуль(1036)}:        ОбщегоНазначения.ВыполнитьМетодКонфигурации(ИмяПроцедуры, ПараметрыВызова);
{ОбщийМодуль.ДлительныеОперации.Модуль(1026)}:        ВызватьПроцедуру(ВсеПараметры.ИмяПроцедуры, ВсеПараметры.ПараметрыПроцедуры);
по причине:
Ошибка выполнения запроса
по причине:
Ошибка при выполнении операции над данными:
Ошибка SQL: Переполнение поля
по причине:
Ошибка SQL: Переполнение поля

Снимок экрана (147).png

sali


LexaK

хм, к тому=же и сернулись переполнение поля...
а посмотрите что у вас в == ТаблицаРешений
в самом начале?
еще до цикла, как раз Пакет приходился.
после выполнения первого запроса, в отладчике, в окне выражений.
если помогло нажмите: Спасибо!

sali


antoneus

Ну, еще чуть-чуть осталось :)

ДополнительныеСвойства.ДляПроведения.СтруктураВременныеТаблицы.МенеджерВременныхТаблиц.Таблицы[3].ПолучитьДанные().Выгрузить()

Теги:

Похожие темы (5)

Рейтинг@Mail.ru

Поиск