|   |   | 
| 
 | Проверка отрицательных остатков при проведении документа | ☑ | ||
|---|---|---|---|---|
| 0
    
        19710715 11.01.20✎ 16:48 | 
        Добрый день всем.
 Столкнулся с такой проблемой. Взял для своей задачи из книги Радченко "Практическое пособие разработчика" такой пример для проверки отрицательных остатков на складе после проведения документа непосредственно в процедуре его проведения. После движений по регистру идет запрос: Если Режим = РежимПроведенияДокумента.Оперативный Тогда // Проверить отрицательные остатки Запрос3 = Новый Запрос; Запрос3.МенеджерВременныхТаблиц = МенеджерВТ; Запрос3.Текст = "ВЫБРАТЬ | ОстаткиМатериаловОстатки.Материал, | ОстаткиМатериаловОстатки.КоличествоОстаток |ИЗ | РегистрНакопления.ОстаткиМатериалов.Остатки( ,Материал В | (ВЫБРАТЬ | НоменклатураДокумента.Номенклатура | ИЗ | НоменклатураДокумента) | И Склад = &Склад) | КАК ОстаткиМатериаловОстатки |ГДЕ | ОстаткиМатериаловОстатки.КоличествоОстаток < 0"; Запрос3.УстановитьПараметр("Склад", Склад); РезультатЗапроса = Запрос3.Выполнить(); ТЗ = РезультатЗапроса.Выгрузить(); // для контроля ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать(); Пока ВыборкаДетальныеЗаписи.Следующий() Цикл Сообщение = Новый СообщениеПользователю(); Сообщение.Текст = "Не хватает " + Строка(- ВыборкаДетальныеЗаписи.КоличествоОстаток) + " единиц материала """ + ВыборкаДетальныеЗаписи.Материал + """"; Сообщение.Сообщить(); Отказ = Истина; КонецЦикла; КонецЕсли; В итоге отрицательные остатки не выявляются при их явном наличии (формирую отчет после процедуры проведения), но если я делаю этот же запрос из консоли, отрицательные остатки выявляются. Подозреваю, что дело в моменте времени, в который производится проверка. Такое впечатление, что она производится до его окончательного проведения. | |||
| 1
    
        ДенисЧ 11.01.20✎ 17:06 | 
        А движения-то созданные записал до проверки?     | |||
| 2
    
        19710715 11.01.20✎ 17:23 | 
        Да,
 Движения.ОстаткиМатериалов.Записывать = Истина; Но похоже дело в другом. Там для расчета стоимости материалов по среднему значению чуть ранее: // Запишем пустые наборы записей, чтобы читать остатки без учета данных в документе Движения.СтоимостьМатериалов.Записать(); Движения.ОстаткиМатериалов.Записать(); А уже потом после движений проверка отрицательных остатков, но в итоге без учета данного документа. Неужели ошибка в книге? Если убираю Движения.ОстаткиМатериалов.Записать(); то остатки контролируются нормально, но стоимость будет расчитываться криво. Может все-таки надо после расчета стоимости и после движений и до контроля остатков снова записать? | |||
| 3
    
        GROOVY 11.01.20✎ 17:31 | 
        (2) Да, за это обычно убивают :)     | |||
| 4
    
        19710715 11.01.20✎ 17:49 | 
        Точно в этом дело. Не ожидал такой подставы от Радченко. 
 Единственное не пойму? Без принудительного Движения.ОстаткиМатериалов.Записать(); движения записываются только по окончании процедуры проведения если не было Отказ = Истина; ? А для чего тогда Движения.ОстаткиМатериалов.Записывать = Истина; ? | |||
| 5
    
        19710715 11.01.20✎ 17:59 | 
        Там еще по третьему регистру движения присутствуют но нигде нет
 Движения.Продажи.Записать(); , но документ в итоге по данному регистру проводится нормально. В чем тогда дело? | |||
| 6
    
        ДенисЧ 11.01.20✎ 18:07 | 
        (5) А по третьему регистру никто остатки не считает в транзакции проведения. Вот и не записывают явно. И они платформенно записываются по завершении транзакции.
 ЗЫ, Может, ты учебник почитаешь, а не методом тыка изучать будешь? | |||
| 7
    
        19710715 11.01.20✎ 18:17 | 
        Так я его и читаю. Только его неплохо сначала автору почитать и ошибки исправить,чтоб других в заблуждение не вводить.     | |||
| 8
    
        GROOVY 11.01.20✎ 18:21 | 
        (7) Почитай учебники. Есть кучка видеоуроков... Ну правда.     | |||
| 9
    
        19710715 11.01.20✎ 18:44 | 
        Правда? Не, что то тут не то.
 Я уже ранее написал: Если убираю запись пустых наборов записей перед контролем остатков Движения.ОстаткиМатериалов.Записать(); то остатки контролируются нормально. То есть до окончания транзакции без принудительной записи движения по данному регистру, эти движения участвуют в контроле и значит каким то образом записаны. Так что вопрос о необходимости явно записывать остается. | |||
| 10
    
        quest 11.01.20✎ 22:31 | 
        (7) точно! требуй возврата денег за то что вообще это читать начал.     | |||
| 11
    
        Злопчинский 12.01.20✎ 13:31 | 
        xt вы стебетесь? дали бы ответ по существу     | |||
| 12
    
        astrawalk 12.01.20✎ 13:44 | 
        (11) Ответ по-существу. Забыть о контроле отрицательных остатков, как о полностью высосанной из пальца ерунде.     | |||
| 13
    
        Cyberhawk 13.01.20✎ 07:33 | 
        "Взял для своей задачи из книги Радченко "Практическое пособие разработчика" такой пример для проверки отрицательных остатков на складе после проведения документа" // Ссылку давай на конкретное место в этой книге https://its.1c.ru/db/pubdevguide83     | 
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |