1. 1C / Говнокод #19513

    −100

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

    !!!!!!!!!!!!!!!!!!

    Запостил: saturn5, 22 Февраля 2016

    Комментарии (10) RSS

    • ¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡
      Ответить
    • Задолбали уже 1с постить ¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡
      Ответить
      • То ли дело php!
        Ответить
      • Зачем тогда лезешь в ветку 1С?
        Ответить
        • Главную поди читает, там все посты видно (если неинтересные языки в настройках не поотключать).
          Ответить
      • Этот знак не так юзается:

        ¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡Задолбали уже 1с постить!!!!!!!!!!!!!!!!!!
        Ответить
    • > ТипЗнч, ВыбСклад, СокрЛП
      Пх, т прнс?
      Ответить
    • Ладно, чувак не осилил запросы, бывает, но:

      ТаблТовара=Док.Товары.Выгрузить();
      Если ТипЗнч(ТаблТовара)=Тип("ТаблицаЗначений" ) Тогда

      Ну канеш, вдруг в дерево выгрузится.

      Ну и "Возврат Отказ;" до слез пробирает
      Ответить

    Добавить комментарий