Имя: Пароль:
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
возьми ради тестирования в консоли запросов - если ее у тебя нет, то самое время разыскать/скачать/установить
Если после левого соединении раскроешь результат по всем записям, попавшим в запрос, то из-за того, что в измерениях Склады есть, должно быть множество записей от разных складов. А если значение по полю склад не учитывается в этом запросе, то совокупный остаток по всем склада сразу должна быть Группировка
Обрати внимание на дубли записей, если остатки актуальны по нескольким складам.