- 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
//
//Функция проверяет наличие товара на складе для проведения документа
Функция СверкаОстатковТовараПоСкладу(Док)Экспорт
Отказ=Ложь;
ВыбСклад="";
ЗаказВРеализации=неопределено;
ЭтоЗаказ=Ложь;
Если ТипЗнч(Док)=Тип("ДокументСсылка.ЗаказПокупателя") Тогда
ВыбСклад=Док.СкладГруппа;
ЭтоЗаказ=Истина;
ИначеЕсли ТипЗнч(Док)=Тип("ДокументСсылка.РеализацияТоваровУслуг") Тогда
ВыбСклад=Док.Склад;
Если СокрЛП(Док.Сделка)<>"" Тогда
Если ТипЗнч(Док.Сделка)=Тип("ДокументСсылка.ЗаказПокупателя") Тогда
ЗаказВРеализации=Док.Сделка;
КонецЕсли;
КонецЕсли;
Иначе
Возврат Отказ;
КонецЕсли;
ТаблТовара=Док.Товары.Выгрузить();
Если ТипЗнч(ТаблТовара)=Тип("ТаблицаЗначений") Тогда
СписокНом=ТаблТовара.ВыгрузитьКолонку("Номенклатура");
Если ЭтоЗаказ ИЛИ ЗаказВРеализации=неопределено Тогда //Заказ или реализация не на основании заказа
Запрос=Новый Запрос;
Запрос.Текст="ВЫБРАТЬ
| ТоварыНаСкладахОстатки.Номенклатура,
| СУММА(ТоварыНаСкладахОстатки.КоличествоОстаток) КАК КоличествоОстаток
|ИЗ
| РегистрНакопления.ТоварыНаСкладах.Остатки(&КонДата, Склад = &Склад) КАК ТоварыНаСкладахОстатки
|ГДЕ
| ТоварыНаСкладахОстатки.Номенклатура В ИЕРАРХИИ(&Номенклатура)
|
|СГРУППИРОВАТЬ ПО
| ТоварыНаСкладахОстатки.Номенклатура";
Запрос.УстановитьПараметр("Номенклатура",СписокНом);
Запрос.УстановитьПараметр("КонДата",Док.Дата);
Запрос.УстановитьПараметр("Склад",ВыбСклад);
Рез=Запрос.Выполнить().Выгрузить();
ТаблТовара.Свернуть("Номенклатура,ЕдиницаИзмерения,Коэффициент","Количество");
Для каждого Стр из ТаблТовара Цикл
СтрОстаток=Рез.Найти(Стр.Номенклатура,"Номенклатура");
Если СтрОстаток=Неопределено Тогда //Нет остатка товара
Сообщить("Остаток товара: "+СокрЛП(Стр.Номенклатура)+" на складе: "+СокрЛП(ВыбСклад)+" =0");
Отказ=Истина;
// Прервать;
Иначе
Остаток=СтрОстаток.КоличествоОстаток;
Если Остаток<(Стр.Количество*Стр.Коэффициент)Тогда
Сообщить("Остаток товара: "+СокрЛП(Стр.Номенклатура)+" на складе: "+СокрЛП(ВыбСклад)+" ="+СокрЛП(Остаток)+" требуется ="+СокрЛП(Стр.Количество*Стр.Коэффициент));
Отказ=Истина;
КонецЕсли;
КонецЕсли;
КонецЦикла;
Иначе //Реализация на основании заказа
ТаблТовара.Свернуть("Номенклатура,ЕдиницаИзмерения,Коэффициент","Количество");
ТоварВЗаказе=ЗаказВРеализации.Товары.Выгрузить();
Для каждого Стр из ТаблТовара Цикл
СтрЗаказ=ТоварВЗаказе.Найти(Стр.Номенклатура,"Номенклатура");
Если СтрЗаказ=Неопределено Тогда //Нет остатка товара
Сообщить("Требуется: "+СокрЛП(Стр.Номенклатура)+" "+СокрЛП(Стр.Количество*Стр.Коэффициент)+" в заказе: "+" =0 "+СокрЛП(Стр.Номенклатура.ЕдиницаХраненияОстатков));
Отказ=Истина;
// Прервать;
Иначе
Остаток=(СтрЗаказ.Количество*СтрЗаказ.Коэффициент);
Если Остаток<(Стр.Количество*Стр.Коэффициент)Тогда
Сообщить("Требуется: "+СокрЛП(Стр.Номенклатура)+" "+СокрЛП(Стр.Количество*Стр.Коэффициент)+" в заказе: "+" = "+СокрЛП(Остаток)+" "+СокрЛП(Стр.Номенклатура.ЕдиницаХраненияОстатков));
Отказ=Истина;
КонецЕсли;
КонецЕсли;
КонецЦикла;
КонецЕсли;
КонецЕсли;
Возврат Отказ;
КонецФункции
cykablyad 22.02.2016 20:08 # +2
3_dar 22.02.2016 21:50 # 0
3_dar 22.02.2016 21:51 # +1
saturn5 23.02.2016 10:41 # +3
bormand 23.02.2016 10:51 # 0
bormand 23.02.2016 10:52 # +4
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡Задолбали уже 1с постить!!!!!!!!!!!!!!!!!!
cykablyad 23.02.2016 12:08 # +5
Steve_Brown 24.02.2016 14:32 # 0
bormand 22.02.2016 23:19 # +3
Пх, т прнс?
HomoAlbus 24.02.2016 12:31 # 0
ТаблТовара=Док.Товары.Выгрузить();
Если ТипЗнч(ТаблТовара)=Тип("ТаблицаЗначений" ) Тогда
Ну канеш, вдруг в дерево выгрузится.
Ну и "Возврат Отказ;" до слез пробирает