8.х Проверка на минусовой остаток

Тема в разделе "Отчеты и обработки для "1С:Предприятие 8"", создана пользователем prog_22, 5 авг 2013.

  1. TopicStarter Overlay
    prog_22
    Offline

    prog_22 Опытный в 1С

    Регистрация:
    31 окт 2012
    Сообщения:
    171
    Симпатии:
    0
    Баллы:
    26
    Добрый день ребята!

    Подскажите пожалуйста, есть регистр накопления "Остатки номенклатуры"

    и документ "расход товаров"

    нужно поставить предупреждение на отрицательный остаток, т. е. при проведении должен выдавать предупреждение


    нашел шаблон

    Код:
    роцедура ПередЗаписью(Отказ, ПараметрыЗаписи)
    Если  
    Тогда
    Предупреждение("При проведении возникнет отрицательный остаток");
    Отказ=Истина;
    Возврат;
    КонецЕсли;
    
    
    
    КонецПроцедуры
    
  2. La Navidad
    Offline

    La Navidad Опытный в 1С

    Регистрация:
    25 дек 2012
    Сообщения:
    203
    Симпатии:
    1
    Баллы:
    26
    Самое главное вы нашли. Вам осталось только организовать проверку остатков, хватает или нет. Пишите запрос к регистру накопления.
  3. TopicStarter Overlay
    prog_22
    Offline

    prog_22 Опытный в 1С

    Регистрация:
    31 окт 2012
    Сообщения:
    171
    Симпатии:
    0
    Баллы:
    26
    Ну вот на проверке остатка я и остановился. Не знаю как правильно прописать что если остаток регистра < количества строки тч документа
  4. TopicStarter Overlay
    prog_22
    Offline

    prog_22 Опытный в 1С

    Регистрация:
    31 окт 2012
    Сообщения:
    171
    Симпатии:
    0
    Баллы:
    26
    Как написать? Пример может у кого есть..
  5. TopicStarter Overlay
    prog_22
    Offline

    prog_22 Опытный в 1С

    Регистрация:
    31 окт 2012
    Сообщения:
    171
    Симпатии:
    0
    Баллы:
    26
    нашел вот что:

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

    все названия документов, реквизитов совпадают, но пишет ошибку




    {Документ.РасходнаяНакладная.Форма.ФормаДокумента1.Форма(43)}: Ошибка при вызове метода контекста (Выполнить)
    Результат = Запрос.Выполнить();
    по причине:
    {(30, 16)}: Синтаксическая ошибка "ИЗ"
    <<?>>ИЗ
  6. TopicStarter Overlay
    prog_22
    Offline

    prog_22 Опытный в 1С

    Регистрация:
    31 окт 2012
    Сообщения:
    171
    Симпатии:
    0
    Баллы:
    26
    Код:
    ИЗ
    |	  ДокТЧ КАК ДокТЧ)) КАК ОстаткиНоменклатурыОстатки

    Получается тут ошибка, не пойму почему
  7. Annie
    Offline

    Annie Опытный в 1С Команда форума

    Регистрация:
    10 фев 2010
    Сообщения:
    949
    Симпатии:
    23
    Баллы:
    29
    Ггг,
    Код:
    Запрос = Новый Запрос;
    Запрос.Текст =
    "ВЫБРАТЬ
    |   РасходнаяНакладнаяСписокНоменклатуры.Номенклатура КАК Номенклатура,
    |   СУММА(РасходнаяНакладнаяСписокНоменклатуры.Количество) КАК Количество
    |	 ПОМЕСТИТЬ ДокТЧ
    |ИЗ
    |   Документ.РасходнаяНакладная.СписокНоменклатуры КАК РасходнаяНакладнаяСписокНоменклатуры
    |ГДЕ
    |   РасходнаяНакладнаяСписокНоменклатуры.Ссылка = &Ссылка
    // |   И РасходнаяНакладнаяСписокНоменклатуры.Номенклатура.ВидНоменклатуры <> &Услуга
    |
    |СГРУППИРОВАТЬ ПО
    |   РасходнаяНакладнаяСписокНоменклатуры.Номенклатура
    |
    |
    |ИНДЕКСИРОВАТЬ ПО
    |   Номенклатура
    |
    |;
    |
    |////////////////////////////////////////////////////////////////////////////////
    |ВЫБРАТЬ
    |   ОстаткиНоменклатурыОстатки.Номенклатура,
    |   ОстаткиНоменклатурыОстатки.КоличествоОстаток КАК КоличествоНаСкладе
    |ИЗ
    |   РегистрНакопления.ОстаткиНоменклатуры.Остатки(
    |	  ,
    |	  (Номенклатура) В
    |	  (ВЫБРАТЬ
    //ТУТ НЕ НУЖНА ЗАПЯТАЯ, вы выбираете только 1 поле Номенклатура
    //|	  ДокТЧ.Номенклатура,
    |	  ДокТЧ.Номенклатура
    |	
    |	  ИЗ
    |	  ДокТЧ КАК ДокТЧ)) КАК ОстаткиНоменклатурыОстатки
    |ГДЕ
    |   ОстаткиНоменклатурыОстатки.КоличествоОстаток < 0";
    Запрос.УстановитьПараметр("Ссылка", Ссылка);
    Запрос.УстановитьПараметр("Услуга", Перечисления.ВидыНоменклатуры.Услуга);
    Результат = Запрос.Выполнить();
    
    
  8. TopicStarter Overlay
    prog_22
    Offline

    prog_22 Опытный в 1С

    Регистрация:
    31 окт 2012
    Сообщения:
    171
    Симпатии:
    0
    Баллы:
    26
    спасибо!))
  9. TopicStarter Overlay
    prog_22
    Offline

    prog_22 Опытный в 1С

    Регистрация:
    31 окт 2012
    Сообщения:
    171
    Симпатии:
    0
    Баллы:
    26
    а можно еще вопрос? Чтоб в управляемом режиме работало - что нужно?

    Ошибка на
    Код:
    Запрос.УстановитьПараметр("Ссылка", Ссылка);

    В синтаксис помощнике написано , что доступность сервер.

    ставлю &НаСервере - все равно эта ошибка
  10. Annie
    Offline

    Annie Опытный в 1С Команда форума

    Регистрация:
    10 фев 2010
    Сообщения:
    949
    Симпатии:
    23
    Баллы:
    29
    Где вы исполняете этот код?
  11. TopicStarter Overlay
    prog_22
    Offline

    prog_22 Опытный в 1С

    Регистрация:
    31 окт 2012
    Сообщения:
    171
    Симпатии:
    0
    Баллы:
    26
    в модуле формы
  12. Annie
    Offline

    Annie Опытный в 1С Команда форума

    Регистрация:
    10 фев 2010
    Сообщения:
    949
    Симпатии:
    23
    Баллы:
    29
    Код:
    Запрос.УстановитьПараметр("Ссылка", Объект.Ссылка);
    Но если документ еще не записан, такая проверка не верна
    Почему бы вам эту проверку не сделать в ОбработкеПроведения? Документ будете записывать всегда, но если остатка не хватает или нет, то не проводите.
  13. TopicStarter Overlay
    prog_22
    Offline

    prog_22 Опытный в 1С

    Регистрация:
    31 окт 2012
    Сообщения:
    171
    Симпатии:
    0
    Баллы:
    26
    Ошибок не выдаёт, но сообщение при проведении в минус не выдаётся(
  14. Annie
    Offline

    Annie Опытный в 1С Команда форума

    Регистрация:
    10 фев 2010
    Сообщения:
    949
    Симпатии:
    23
    Баллы:
    29
    О чем я и говорю, проверка такая будет не корректна, перенесите проверку в модуль объекта в процедуру ОбработкаПроведения
  15. TopicStarter Overlay
    prog_22
    Offline

    prog_22 Опытный в 1С

    Регистрация:
    31 окт 2012
    Сообщения:
    171
    Симпатии:
    0
    Баллы:
    26
    Перенес, только вот проблема теперь: при первом проведении он в регистр записывает минус количество, и только при повторном проведении он выдает это сообщение о нехватке этого количества , и не позволяет проводить
  16. Annie
    Offline

    Annie Опытный в 1С Команда форума

    Регистрация:
    10 фев 2010
    Сообщения:
    949
    Симпатии:
    23
    Баллы:
    29
    Вам бы почитать статейку о новой методике проведения, по-моему, это ваш случай. Наберите в поисковике "новая методика проведения"
    Я могу вам показать на примере, как по новой методике можно сделать
    1. То, что в ТЧ расходной накладной пишете сразу в регистр(ы), без проверки
    2. Затем вот эту свою проверку вставляете,
    3. Если в результате проверки остатка нет или не хватает, то отказываетесь от проведения
  17. TopicStarter Overlay
    prog_22
    Offline

    prog_22 Опытный в 1С

    Регистрация:
    31 окт 2012
    Сообщения:
    171
    Симпатии:
    0
    Баллы:
    26
    Спасибо,почитал про новую методику, поправил код, и все работает!

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