8.х Запрос к регистру

Тема в разделе "Конфигурирование на платформе "1С:Предприятие 8"", создана пользователем Signal, 30 июн 2009.

  1. TopicStarter Overlay
    Signal
    Offline

    Signal

    Регистрация:
    30 июн 2009
    Сообщения:
    6
    Симпатии:
    0
    Баллы:
    1
    Здравствуйте, подскажите пожалуйста, вот таким запросом получаю остатки на дату документа с отбором по складу и номенклатуре и не даю провестись документу в случае если будет отрицательный остаток на дату документа.

    Помогите сделать чтобы отрицательные остатки контролировались не только на дату документа, но и для всех движений которые идут после данного документа.

    Запрос = Новый Запрос;
    Запрос.УстановитьПараметр("ТекущийДокумент", ЭтотОбъект.Ссылка);
    Запрос.Текст =
    "ВЫБРАТЬ
    | РеализацияТоваровУслугПереченьНоменклатуры.Номенклатура,
    | РеализацияТоваровУслугПереченьНоменклатуры.Количество,
    | ОстаткиНоменклатурыОстатки.КоличествоОстаток
    |ИЗ
    | Документ.РеализацияТоваровУслуг.Товары КАК РеализацияТоваровУслугПереченьНоменклатуры
    | ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыНаСкладах.Остатки(&МоментВремени, Номенклатура В (&СписокНоменклатурыДокумента)) КАК ОстаткиНоменклатурыОстатки
    | ПО РеализацияТоваровУслугПереченьНоменклатуры.Номенклатура = ОстаткиНоменклатурыОстатки.Номенклатура
    | И РеализацияТоваровУслугПереченьНоменклатуры.Склад = ОстаткиНоменклатурыОстатки.Склад
    |ГДЕ
    | РеализацияТоваровУслугПереченьНоменклатуры.Ссылка = &ТекущийДокумент
    |
    |ДЛЯ ИЗМЕНЕНИЯ
    | РегистрНакопления.ТоварыНаСкладах.Остатки";

    КонецЕсли;

    Запрос.УстановитьПараметр("МоментВремени", МоментВремени());
    Запрос.УстановитьПараметр("СписокНоменклатурыДокумента", ЭтотОбъект.Товары.ВыгрузитьКолонку("Номенклатура"));

    Таблица = Запрос.Выполнить().Выгрузить();
    ВыборкаРезультатаЗапроса = Запрос.Выполнить().Выбрать();

    Пока ВыборкаРезультатаЗапроса.Следующий() Цикл
    Если РежимПроведения = РежимПроведенияДокумента.Неоперативный Тогда
    Остаток = ?(ВыборкаРезультатаЗапроса.КоличествоОстаток = Null, 0, ВыборкаРезультатаЗапроса.КоличествоОстаток);
    Если Остаток < ВыборкаРезультатаЗапроса.Количество Тогда
    Сообщить("ТОВАРА << " + СокрЛП(ВыборкаРезультатаЗапроса.Номенклатура) + " >> ИМЕЕТСЯ ТОЛЬКО " + Остаток);
    Отказ = Истина;
    Возврат;
    КонецЕсли;
    КонецЕсли;
    КонецЦикла;
  2. ASh
    Offline

    ASh Опытный в 1С

    Регистрация:
    10 сен 2008
    Сообщения:
    568
    Симпатии:
    0
    Баллы:
    26
    Код:
    Запрос.УстановитьПараметр("МоментВремени", МоментВремени());
    
    
    Замените МоментВремени() на нужные дату и время
    Только практического смысла в этом нет.
  3. TopicStarter Overlay
    Signal
    Offline

    Signal

    Регистрация:
    30 июн 2009
    Сообщения:
    6
    Симпатии:
    0
    Баллы:
    1
    Нет смысла?
    А если такая ситуация:
    Приход на 01.01.01 - 10шт
    Расход1 на 05.01.01 - 8 шт увеличим на 1 и получим конечный остаток -1
    Расход2 на 06.01.01 - 2 шт
    __________________0

    При проверке которую я привел такое возможно
    Хочу сделать чтобы так нельзя было угнать остаток в минус
  4. ASh
    Offline

    ASh Опытный в 1С

    Регистрация:
    10 сен 2008
    Сообщения:
    568
    Симпатии:
    0
    Баллы:
    26
    А если такая ситуация:
    Приход на 01.01.01 - 10шт
    Расход1 на 05.01.01 - 10 шт
    Расход2 на 06.01.01 - 2 шт
    Приход на 07.01.01 - 10шт
    На текущую дату будет положительный остаток давать, хоть 10 в расход от 06 напиши.
  5. vitaly_mnpz
    Offline

    vitaly_mnpz Опытный в 1С

    Регистрация:
    15 фев 2009
    Сообщения:
    267
    Симпатии:
    0
    Баллы:
    26
    А если такая ситуация:
    Приход на 01.01.1990 - 10шт
    Расход1 на 05.01.1991 - 8 шт увеличим на 1 и получим конечный остаток -1
    ... а здесь еще 20000 движений...
    Расход20001 на 06.01.2009 - 2 шт

    Если вы хотите, чтобы у вас документы проводились по паре часов - перебирайте физическую таблицу.
  6. TopicStarter Overlay
    Signal
    Offline

    Signal

    Регистрация:
    30 июн 2009
    Сообщения:
    6
    Симпатии:
    0
    Баллы:
    1
    В том то и дело что мне нельзя чтобы в Расходе от 06 был минус
  7. ASh
    Offline

    ASh Опытный в 1С

    Регистрация:
    10 сен 2008
    Сообщения:
    568
    Симпатии:
    0
    Баллы:
    26
    Для этого достаточно на момент времени документа остатки проверить. А если полный контроль остатков нужен, то всю последовательность оборотов проверять придется после измененного документа.
    P.S. Федя Сумкин написал уже это. Только двумя часами он пугает:)

Поделиться этой страницей