Имя: Пароль:
1C
1С v8
Включил контроль остатков, но как настроить склады? (в запросе с ОстаткиТоваров)
0 Саша Да Саша
 
29.12.19
11:53
Добрый день,такой вопрос:
Включил контроль остатков,и если по расходной накладной больше,чем по приходной-не будет проведения,но дело в том,что склада 2:основной и магазин,так вот если например поступили товары по приходной на основной(например 10 шт.)можно и из склада-магазина продать 10.
Как настроить контроль по складам?
вот код:


Процедура ОбработкаПроведения(Отказ, Режим)
        
    //  1. Очистка старых движений регистра
    Движения.ОстаткиТоваров.Очистить();
    Движения.ОстаткиТоваров.Записывать = Истина;
    Движения.Записать();
    
    //  2. Получение запросом данных документа и остатков регистра
    Запрос = Новый Запрос;
    Запрос.Текст =
    "ВЫБРАТЬ
    |   СписокТоваров.Номенклатура КАК Номенклатура,
    |   СУММА(СписокТоваров.Количество) КАК Количество
    |ПОМЕСТИТЬ СписокТоваров
    |ИЗ
    |   Документ.РасходнаяНакладная.СписокТоваров КАК СписокТоваров
    |ГДЕ
    |   СписокТоваров.Ссылка = &Ссылка
    |
    |СГРУППИРОВАТЬ ПО
    |   СписокТоваров.Номенклатура
    |
    |ИНДЕКСИРОВАТЬ ПО
    |   Номенклатура
    |;
    |
    |////////////////////////////////////////////////////////////////////////////////
    |ВЫБРАТЬ
    |   СписокТоваров.Номенклатура КАК Номенклатура,
    |   ПРЕДСТАВЛЕНИЕССЫЛКИ(СписокТоваров.Номенклатура) КАК НоменклатураПредставление,
    |   СписокТоваров.Количество КАК Количество,
    |   ЕСТЬNULL(Остатки.КоличествоОстаток, 0) КАК Остаток
    |ИЗ
    |   СписокТоваров КАК СписокТоваров
    |       ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ОстаткиТоваров.Остатки(
    |               &МоментВремени,
    |               Номенклатура В
    |                   (ВЫБРАТЬ
    |                       СписокТоваров.Номенклатура КАК Номенклатура
    |                   ИЗ
    |                       СписокТоваров КАК СписокТоваров)) КАК Остатки
    |       ПО СписокТоваров.Номенклатура = Остатки.Номенклатура";
    Запрос.УстановитьПараметр("Ссылка", Ссылка);
    Запрос.УстановитьПараметр("МоментВремени", МоментВремени());
    РезультатЗапроса = Запрос.Выполнить();
    
    //  3. Обход результатов запроса
    ВыборкаСписокТоваров = РезультатЗапроса.Выбрать();
    
    Пока ВыборкаСписокТоваров.Следующий() Цикл
        
        //  4. Проверка на достаточность товаров
        Дефицит = ВыборкаСписокТоваров.Количество - ВыборкаСписокТоваров.Остаток;
        Если Дефицит>0 Тогда
            Отказ = Истина;
            Сообщение = Новый СообщениеПользователю;
            Сообщение.Текст = "Товара "+ВыборкаСписокТоваров.НоменклатураПредставление+" недостаточно в количестве "+Дефицит+" шт.";
            Сообщение.Сообщить();
        КонецЕсли;
        
        //  5. Переход в начало цикла, если были ошибки
        Если Отказ Тогда
            Продолжить;
        КонецЕсли;
        
        //  6. Выполнение движений в регистры
        Движения.ОстаткиТоваров.Записывать = Истина;
    Для Каждого ТекСтрокаСписокТоваров Из СписокТоваров Цикл
        Движение = Движения.ОстаткиТоваров.Добавить();
        Движение.ВидДвижения = ВидДвиженияНакопления.Расход;
        Движение.Период = Дата;
        Движение.Склад = Склад;
        Движение.Номенклатура = ТекСтрокаСписокТоваров.Номенклатура;
        Движение.Количество = ТекСтрокаСписокТоваров.Количество;
        Движение.Сумма = ТекСтрокаСписокТоваров.Сумма;
    КонецЦикла;

    КонецЦикла;
    
    //  7. Установка флага записи движений в конце транзакции
    Движения.ОстаткиТоваров.Записывать = Истина;
    
    
    
    
КонецПроцедуры
1 Саша Да Саша
 
29.12.19
11:54
Как правильно указать склад в "ИЗ"?
2 craxx
 
29.12.19
11:59
(0) в ЗУП 3.1 нет никаких складов
3 Фрэнки
 
29.12.19
12:03
самое простое - во втором запросе (по остаткам который) поставить условие. Просто в конструкторе запроса уходишь на вкладку условия и ставишь условие на склад.
4 Фрэнки
 
29.12.19
12:04
это с учетом того, что не названа конфигурация. Если называть конфигурацию не нужно, то нужно пользоваться конструктором запросов - он вроде бы на примитивном уровне позволяет учитывать структуры метаданных
5 Саша Да Саша
 
29.12.19
12:11
(3) Там только можно данные из ТЧ выбрать,а склад-обычный реквизит
6 Саша Да Саша
 
29.12.19
12:14
(3) Сори,затупил,спасибо
7 Саша Да Саша
 
29.12.19
12:22
(3) не,пишет мол добавление склада-неоднозначное решение,не работает
8 Фрэнки
 
29.12.19
14:19
(7) ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ОстаткиТоваров.Остатки

Разве в регистре Остатки нет измерения Склад?
9 Саша Да Саша
 
29.12.19
14:31
(8) Есть
10 Фрэнки
 
29.12.19
14:36
И что мешает по этому полю поставить условие уже после Левого соединения?
11 Фрэнки
 
29.12.19
14:41
возьми ради тестирования в консоли запросов - если ее у тебя нет, то самое время разыскать/скачать/установить
Если после левого соединении раскроешь результат по всем записям, попавшим в запрос, то из-за того, что в измерениях Склады есть, должно быть множество записей от разных складов. А если значение по полю склад не учитывается в этом запросе, то совокупный остаток по всем склада сразу должна быть Группировка
Обрати внимание на дубли записей, если остатки актуальны по нескольким складам.
Пользователь не знает, чего он хочет, пока не увидит то, что он получил. Эдвард Йодан