| 
    
        
     
     | 
    
  | 
Контроль отрицательных остатков | ☑ | ||
|---|---|---|---|---|
| 
    0
    
        rowflag    
     09.11.12 
            ✎
    12:32 
 | 
         
        При создании дока и первом проведении все работает. Отрицательные остатки контролируются.
  
        Если же открыть созданный док и нажать "Провести и закрыть", то выдает ошибку. Срабатывает отказ. Как доработать? Модуль объекта: // регистр ОстаткиНаСкладах Расход Движения.ОстаткиНаСкладах.Записывать = Истина; Для Каждого ТекСтрокаТЧСписок Из ТЧСписок Цикл Движение = Движения.ОстаткиНаСкладах.Добавить(); Движение.ВидДвижения = ВидДвиженияНакопления.Расход; Движение.Период = Дата; Движение.Наименование = ТекСтрокаТЧСписок.Наименование; Движение.Склад = СкладИсточник; Движение.Количество = 1; Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | ОстаткиНаСкладахОстатки.КоличествоОстаток |ИЗ | РегистрНакопления.ОстаткиНаСкладах.Остатки КАК ОстаткиНаСкладахОстатки |ГДЕ | ОстаткиНаСкладахОстатки.Наименование = &Наименование | И ОстаткиНаСкладахОстатки.Склад = &Склад"; Запрос.УстановитьПараметр("Наименование", ТекСтрокаТЧСписок.Наименование); Запрос.УстановитьПараметр("Склад", СкладИсточник); Результат = Запрос.Выполнить(); ВыборкаДетальныеЗаписи = Результат.Выбрать(); ЕстьНулевойОстаток = Истина; Пока ВыборкаДетальныеЗаписи.Следующий() Цикл ЕстьНулевойОстаток = Ложь; Если ВыборкаДетальныеЗаписи.КоличествоОстаток = 1 Тогда ОстатокРавенЕдинице = Истина; Иначе ОстатокРавенЕдинице = Ложь; // Сообщить("Остаток " + ТекСтрокаТЧСписок.Наименование + " равен " + ВыборкаДетальныеЗаписи.КоличествоОстаток + ". Проведение документа невозможно. Необходимо проверить предыдущие операции. Остаток может быть либо 0 либо 1."); КонецЕсли; КонецЦикла; Если ЕстьНулевойОстаток Тогда ПроводитьНельзя = Истина; ИначеЕсли ОстатокРавенЕдинице Тогда ПроводитьНельзя = Ложь; Иначе ПроводитьНельзя = Истина; КонецЕсли; КонецЦикла; //}}__КОНСТРУКТОР_ДВИЖЕНИЙ_РЕГИСТРОВ Если ПроводитьНельзя Тогда Отказ = Истина; КонецЕсли;  | 
|||
| 
    1
    
        zak555    
     09.11.12 
            ✎
    12:34 
 | 
         
        > Движение.Количество = 1;
  
        это что ?  | 
|||
| 
    2
    
        Wobland    
     09.11.12 
            ✎
    12:34 
 | 
         
        >ОстатокРавенЕдинице
  
        а почему именно единице? почему вы сказали не килограмм, не тонна, а именно фунт?  | 
|||
| 
    3
    
        Spieluhr    
     09.11.12 
            ✎
    12:34 
 | 
         
        на курсы 1С идти нужно, узнать про параметры виртуальных таблиц и МоментВремени     
         | 
|||
| 
    4
    
        Wobland    
     09.11.12 
            ✎
    12:35 
 | 
         
        и вообще, такие забавы с булевыми переменными как в конце - это грязно и низко     
         | 
|||
| 
    5
    
        zak555    
     09.11.12 
            ✎
    12:35 
 | 
         
        (0) это типовая УТ ?     
         | 
|||
| 
    6
    
        Spieluhr    
     09.11.12 
            ✎
    12:35 
 | 
         
        (5) похоже на задание при приеме на работу     
         | 
|||
| 
    7
    
        Wobland    
     09.11.12 
            ✎
    12:36 
 | 
         
        ГДЕ
  
        | ОстаткиНаСкладахОстатки.Наименование = &Наименование о, боже!  | 
|||
| 
    8
    
        Wobland    
     09.11.12 
            ✎
    12:36 
 | 
         
        +(7) две разных тубаретки будет, что делать станешь?     
         | 
|||
| 
    9
    
        Web00001    
     09.11.12 
            ✎
    12:36 
 | 
         
        (5)Очень похоже, что это типовое УГ     
         | 
|||
| 
    10
    
        zak555    
     09.11.12 
            ✎
    12:37 
 | 
         
        (6) значит оно провалено     
         | 
|||
| 
    11
    
        Wobland    
     09.11.12 
            ✎
    12:37 
 | 
         
        (0) в общем, диагноз такой: переписывать всё заново     
         | 
|||
| 
    12
    
        zak555    
     09.11.12 
            ✎
    12:38 
 | 
         
        в 7ке ипали за запрос в цикле, а тут...     
         | 
|||
| 
    13
    
        Web00001    
     09.11.12 
            ✎
    12:39 
 | 
         
        (7) и это рядом с 
  
        | И ОстаткиНаСкладахОстатки.Склад = &Склад"; вот как он разделил, там по наименованию, а тут по ссылке  | 
|||
| 
    14
    
        rowflag    
     09.11.12 
            ✎
    12:39 
 | 
         
        (скажите лучше чем отличается первое проведение от второго (когда док открыли и заново провели))     
         | 
|||
| 
    15
    
        rowflag    
     09.11.12 
            ✎
    12:40 
 | 
         
        Наименование имеет тип Справочник.ссылка.     
         | 
|||
| 
    16
    
        Cunni    
     09.11.12 
            ✎
    12:40 
 | 
         
        (14) удалить движения?     
         | 
|||
| 
    17
    
        Spieluhr    
     09.11.12 
            ✎
    12:41 
 | 
         
        (14) а хоть одно свое предположение есть?     
         | 
|||
| 
    18
    
        shuhard    
     09.11.12 
            ✎
    12:41 
 | 
         
        (14) а чё, так не понятно, что в останках сидят движения самого документа ?     
         | 
|||
| 
    19
    
        Wobland    
     09.11.12 
            ✎
    12:41 
 | 
         
        (15) браво!     
         | 
|||
| 
    20
    
        rowflag    
     09.11.12 
            ✎
    12:43 
 | 
         
        Почему тогда при таком варианте все проходит нормально?
  
        // регистр ОстаткиНаСкладах Приход Движения.ОстаткиНаСкладах.Записывать = Истина; Для Каждого ТекСтрокаТЧСписок Из ТЧСписок Цикл Движение = Движения.ОстаткиНаСкладах.Добавить(); Движение.ВидДвижения = ВидДвиженияНакопления.Приход; Движение.Период = Дата; Движение.Наименование = ТекСтрокаТЧСписок.Наименование; Движение.Склад = СкладНазначения; Движение.Количество = ТекСтрокаТЧСписок.Количество; КонецЦикла; //}}__КОНСТРУКТОР_ДВИЖЕНИЙ_РЕГИСТРОВ движения.ОстаткиНаСкладах.Записать(); // Создать менеджер временных таблиц МенеджерВТ = Новый МенеджерВременныхТаблиц; Запрос = Новый Запрос; // Укажем, какой менеджер временных таблиц использует этот запрос Запрос.МенеджерВременныхТаблиц = МенеджерВТ; Запрос.Текст = "ВЫБРАТЬ | картриджи_Отправка_в_филиалТЧСписок.Наименование |ПОМЕСТИТЬ НоменклатураДокумента |ИЗ | Документ.картриджи_Отправка_в_филиал.ТЧСписок КАК картриджи_Отправка_в_филиалТЧСписок |ГДЕ | картриджи_Отправка_в_филиалТЧСписок.Ссылка = &Ссылка"; Запрос.УстановитьПараметр("Ссылка", Ссылка); Результат = Запрос.Выполнить(); // для отладки // ТЗ - Таблица Значений. Отладка - промотр результата запроса - Временной Таблицы ТЗ = ДанныеВнутреннейТаблицыЗапроса(Запрос,"НоменклатураДокумента"); Если Режим = РежимПроведенияДокумента.Оперативный Тогда //проверить отрицательные остатки Запрос1 = Новый Запрос; Запрос1.МенеджерВременныхТаблиц = МенеджерВТ; Запрос1.Текст = "ВЫБРАТЬ | ОстаткиНаСкладахОстатки.КоличествоОстаток, | ОстаткиНаСкладахОстатки.Наименование, | ОстаткиНаСкладахОстатки.Склад |ИЗ | РегистрНакопления.ОстаткиНаСкладах.Остатки( | , | Наименование В | (ВЫБРАТЬ | НоменклатураДокумента.Наименование | ИЗ | НоменклатураДокумента) | И Склад = &Склад) КАК ОстаткиНаСкладахОстатки |ГДЕ | ОстаткиНаСкладахОстатки.КоличествоОстаток < 0"; //Запрос.УстановитьПараметр("Наименование", "" + Наим + ""); //Запрос.УстановитьПараметр("Склад", "" + Скл + ""); Запрос1.УстановитьПараметр("Склад", СкладИсточник); Результат = Запрос1.Выполнить(); ТЗ = Результат.Выгрузить(); ВыборкаДетальныеЗаписи = Результат.Выбрать(); пока ВыборкаДетальныеЗаписи.Следующий() Цикл //Сообщение = новый СообщениеПользователю(); //Сообщение.Текст = "Количество - " + Строка(ВыборкаДетальныеЗаписи.Количество()); //Сообщение.Сообщить(); Сообщение = Новый СообщениеПользователю(); Сообщение.Текст = "Остаток " + ВыборкаДетальныеЗаписи.наименование + " = " + Строка(ВыборкаДетальныеЗаписи.КоличествоОстаток); Сообщение.Сообщить(); Отказ = Истина; КонецЦикла;  | 
|||
| 
    21
    
        Web00001    
     09.11.12 
            ✎
    12:44 
 | 
         
        (14) тем что в первом случае у документа еще нет движений а во втором есть?
  
        (15) Что??? Ну что же вы курите а? Как такое изящное решение пришло в голову?  | 
|||
| 
    22
    
        Cunni    
     09.11.12 
            ✎
    12:44 
 | 
         
        он троллит, не ведитесь.     
         | 
|||
| 
    23
    
        Cunni    
     09.11.12 
            ✎
    12:45 
 | 
         
        (22) во всяком случае я на это надеюсь, что он просто троллит...     
         | 
|||
| 
    24
    
        Гефест    
     09.11.12 
            ✎
    12:46 
 | 
         
        (20) Контроль отрицательных остатков при приходе - это мощно!     
         | 
|||
| 
    25
    
        rowflag    
     09.11.12 
            ✎
    12:46 
 | 
         
        (21) Какое решение?     
         | 
|||
| 
    26
    
        rowflag    
     09.11.12 
            ✎
    12:46 
 | 
         
        (24) расход выше - не скопировал.     
         | 
|||
| 
    27
    
        zak555    
     09.11.12 
            ✎
    12:49 
 | 
         
        Очистить(); Записать();     
         | 
|||
| 
    28
    
        Spieluhr    
     09.11.12 
            ✎
    12:49 
 | 
         
        (25) решение написали в (16), (18) и (21)     
         | 
|||
| 
    29
    
        Serg_1960    
     09.11.12 
            ✎
    12:49 
 | 
         
        (0) Описание ошибок займёт строк больше, чем сам... эээ... алгоритмом это назвать нельзя.     
         | 
|||
| 
    30
    
        samozvanec    
     09.11.12 
            ✎
    12:51 
 | 
         
        (0) аххах выложи еще кода пожалуйста     
         | 
|||
| 
    31
    
        rowflag    
     09.11.12 
            ✎
    12:51 
 | 
         
        (16)(18)(21) Спасибо!     
         | 
|||
| 
    32
    
        rowflag    
     09.11.12 
            ✎
    17:11 
 | 
         
        А всего то надо было в свойствах дока - Движения - Удаление движений поставить "Автоматически" (стояло "Автоматически, при про отмене удаления")     
         | 
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |