Имя: Пароль:
1C
1С v8
Контроль отрицательных остатков
0 Начинающий_13
 
18.09.13
16:54
Здравствуйте
Переделал контроль отр.остатков. (Вроде все работает)
Скажите предусмтрел все ли отказы?

В модуле объекта
Процедура ОбработкаПроведения_РН_Остатки_Материалы(Отказ, Режим)
    
    ПтруктураПараметров = Новый Структура;
    СтруктураПараметров.Вставить("МХ", МХ);
    СтруктураПараметров.Вставить("ИмяДок", "ТМЦ_ПоступлениеВозврат");
    СтруктураПараметров.Вставить("ИмяТЧ", "Материалы");
    СтруктураПараметров.Вставить("ИмяРН", "РН_Остатки_Материалы");

    Результат = Проверки.КонтрольОтрицательныхОстатков(ЭтотОбъект, Ссылка, Дата, СтруктураПараметров, Отказ);

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

КонецПроцедуры


ОбщийМодуль

Функция  КонтрольОтрицательныхОстатков(ЭтотОбъект, Ссылка, Дата, СтруктураПараметров, Отказ) Экспорт
    
    ИмяДок = СтруктураПараметров.ИмяДок;
    ИмяТЧ  = СтруктураПараметров.ИмяТЧ;
    ИмяРН  = СтруктураПараметров.ИмяРН;

   Сам запрос Запрос ......

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

    Возврат Результат;


КонецФункции
1 Alex S D
 
18.09.13
16:57
хреновый код
2 mikecool
 
18.09.13
17:01
по новой моде - сначала пишем движения, а потом проверяем отрицательные остатки
3 shuhard
 
18.09.13
17:04
(0)[Скажите предусмтрел все ли отказы? ]
без указания документооборота и структуры Рг ответ не существует
4 Начинающий_13
 
18.09.13
17:04
Маня не запрос на проверку отрицательных остатков инетересует, а при той структуре которую выложил, все ли отказы на (-)предусмотрел.
5 MaxS
 
18.09.13
17:17
ЗаполнитьЗначенияСвойств(РН, Результат);
как этот код работает? и работает ли?

Пока Результат.Следующий() Цикл
...        
Если  ...(Константы.флКонтрольОтрицательныхОстатков.Получить()= Истина) Тогда
...
При проведении документа константа может измениться? Каждый раз нужно получать её значение?

Сообщить(...
кому? это толстый клиент?
6 Начинающий_13
 
18.09.13
17:24
Если материалы хватает на складе заполняем регистр накопления
Весь алгоритм отрабатывает без проблем. все проверяемся.
ЗаполнитьЗначенияСвойств(РН, Результат);

Про
Если  ...(Константы.флКонтрольОтрицательныхОстатков.Получить()= Истина)
я подумаю над этим может периодической сделаю, хорошее замечание.
7 Начинающий_13
 
18.09.13
17:24
Толстый клиент это
Выдавать глобальные идеи — это удовольствие; искать сволочные маленькие ошибки — вот настоящая работа. Фредерик Брукс-младший