- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 73
- 74
- 75
- 76
- 77
- 78
Для Каждого ТекСтрокаТовары Из ЭтотОбъект.Товары Цикл
//Товары в резерве на складах
Если ЗначениеЗаполнено(ЭтотОбъект.ЗаказПокупателя) Тогда
ЗапросРезерв = Новый Запрос;
ЗапросРезерв.УстановитьПараметр("Период", КонецДня(ЭтотОбъект.Дата));
ЗапросРезерв.УстановитьПараметр("Склад", ЭтотОбъект.Склад);
ЗапросРезерв.УстановитьПараметр("Номенклатура", ТекСтрокаТовары.Номенклатура);
ЗапросРезерв.УстановитьПараметр("Цвет", ТекСтрокаТовары.Цвет);
ЗапросРезерв.УстановитьПараметр("Регистратор", ЭтотОбъект.ЗаказПокупателя.Ссылка);
ЗапросРезерв.Текст = "ВЫБРАТЬ
| ТоварыВРезервеНаСкладах.Номенклатура,
| isnull(ТоварыВРезервеНаСкладах.Количество, 0) КАК Количество,
| isnull(ТоварыВРезервеНаСкладах.Размер42, 0) КАК Размер42,
| isnull(ТоварыВРезервеНаСкладах.Размер44, 0) КАК Размер44,
| isnull(ТоварыВРезервеНаСкладах.Размер46, 0) КАК Размер46,
| isnull(ТоварыВРезервеНаСкладах.Размер48, 0) КАК Размер48,
| isnull(ТоварыВРезервеНаСкладах.Размер50, 0) КАК Размер50,
| isnull(ТоварыВРезервеНаСкладах.Размер52, 0) КАК Размер52,
| isnull(ТоварыВРезервеНаСкладах.Размер54, 0) КАК Размер54,
| isnull(ТоварыВРезервеНаСкладах.Размер56, 0) КАК Размер56,
| isnull(ТоварыВРезервеНаСкладах.Размер58, 0) КАК Размер58,
| isnull(ТоварыВРезервеНаСкладах.Размер60, 0) КАК Размер60
|ИЗ
| РегистрНакопления.ТоварыВРезервеНаСкладах КАК ТоварыВРезервеНаСкладах
|ГДЕ
| ТоварыВРезервеНаСкладах.ВидДвижения = ЗНАЧЕНИЕ(ВидДвиженияНакопления.Приход)
| ТоварыВРезервеНаСкладах.Период <= &Период
| И ТоварыВРезервеНаСкладах.Регистратор = &Регистратор
| И ТоварыВРезервеНаСкладах.Склад = &Склад
| И ТоварыВРезервеНаСкладах.Номенклатура = &Номенклатура
| И ТоварыВРезервеНаСкладах.Цвет = &Цвет";
ТЗРезерв = ЗапросРезерв.Выполнить().Выгрузить();
Если ЗапросРезерв.Выполнить().Пустой() = Истина Тогда
Иначе
ЗапросСнятие = Новый Запрос;
ЗапросСнятие.УстановитьПараметр("Период", КонецДня(ЭтотОбъект.Дата));
ЗапросСнятие.УстановитьПараметр("Склад", ЭтотОбъект.Склад);
ЗапросСнятие.УстановитьПараметр("Номенклатура", ТекСтрокаТовары.Номенклатура);
ЗапросСнятие.УстановитьПараметр("Цвет", ТекСтрокаТовары.Цвет);
ЗапросСнятие.УстановитьПараметр("ДокументРезерва", ЭтотОбъект.ЗаказПокупателя.Ссылка);
ЗапросСнятие.Текст = "ВЫБРАТЬ
| ТоварыВРезервеНаСкладах.Номенклатура,
| isnull(ТоварыВРезервеНаСкладах.Количество, 0) КАК Количество,
| isnull(ТоварыВРезервеНаСкладах.Размер42, 0) КАК Размер42,
.....
| isnull(ТоварыВРезервеНаСкладах.Размер60, 0) КАК Размер60
|ИЗ
| РегистрНакопления.ТоварыВРезервеНаСкладах КАК ТоварыВРезервеНаСкладах
|ГДЕ
| ТоварыВРезервеНаСкладах.ВидДвижения = ЗНАЧЕНИЕ(ВидДвиженияНакопления.Расход)
| И ТоварыВРезервеНаСкладах.ДокументРезерва = &ДокументРезерва
| И ТоварыВРезервеНаСкладах.Период = &Период
| И ТоварыВРезервеНаСкладах.Склад = &Склад
| И ТоварыВРезервеНаСкладах.Номенклатура = &Номенклатура
| И ТоварыВРезервеНаСкладах.Цвет = &Цвет";
ТЗСнятие = ЗапросСнятие.Выполнить().Выгрузить();
//Товары в резерве на складах
Движение = Движения.ТоварыВРезервеНаСкладах.Добавить();
Движение.ВидДвижения = ВидДвиженияНакопления.Расход;
Движение.Период = Дата;
Движение.Склад = ЭтотОбъект.Склад;
Движение.Номенклатура = ТекСтрокаТовары.Номенклатура;
Движение.ДокументРезерва = ЭтотОбъект.ЗаказПокупателя.Ссылка;
Движение.Цвет = ТекСтрокаТовары.Цвет;
//42
Если ТЗРезерв.Итог("Размер42") - ТЗСнятие.Итог("Размер42") > 0 Тогда
Если ТЗРезерв.Итог("Размер42") - ТЗСнятие.Итог("Размер42") > ТекСтрокаТовары.Количество Тогда
Движение.Размер42 = ТекСтрокаТовары.Размер42;
Иначе
Движение.Размер42 = ТЗРезерв.Итог("Размер42") - ТЗСнятие.Итог("Размер42");
КонецЕсли;
КонецЕсли;
...
//И так до 60го размера
Нашел у себя эту простыню. Чтобы вычислить остатки по резерву - делается запрос по движения со знаком плюс, потом запрос с движениями по минус.
Далее все это дело выгружается в две таблицы значений и высчитывается разность колонок. Вместо простого запроса по регистру остатков) Ну и много чего интересного)