8.х Лимит

Тема в разделе "Конфигурирование на платформе "1С:Предприятие 8"", создана пользователем Эмиль0690, 25 дек 2015.

  1. TopicStarter Overlay
    Эмиль0690
    Offline

    Эмиль0690 Опытный в 1С

    Регистрация:
    3 фев 2014
    Сообщения:
    290
    Симпатии:
    2
    Баллы:
    29
    Добрый день !
    Нужен ваша помощь!
    Хочу получить долг контрагента с рег накоплени и с рег сведение лимиты т.е при отгрузки товара было проверка лимит долга и текущий задолженность
    код в модуле документа
    Код:
    Процедура ОбработкаПроведения(Отказ, Режим)
        //{{__КОНСТРУКТОР_ДВИЖЕНИЙ_РЕГИСТРОВ
        // Данный фрагмент построен конструктором.
        // При повторном использовании конструктора, внесенные вручную изменения будут утеряны!!!
        //
        Запрос = Новый Запрос;
        Запрос.Текст = "ВЫБРАТЬ
                       |    ВзаиморасчетыПоКонтрагентамОстатки.ОстатокNCОстаток,
                       |    ЛимитыСрезПоследних.Лимит
                       |ИЗ
                       |    РегистрНакопления.ВзаиморасчетыПоКонтрагентам.Остатки КАК ВзаиморасчетыПоКонтрагентамОстатки,
                       |    РегистрСведений.Лимиты.СрезПоследних КАК ЛимитыСрезПоследних";
       
                      
        Запрос.УстановитьПараметр("Клиент", Контрагент);
        Запрос.УстановитьПараметр("Лимит", Лимит);
       
        Результат = Запрос.Выполнить();
        ВыборкаДетальныеЗаписи = Результат.Выбрать();
       
        Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
            Если ВыборкаДетальныеЗаписи.ОстатокNCОстаток < Лимит Тогда
                Сообщить("Сумма отгрузки превышает задолженность! Сумма задолжености: "+Строка(ВыборкаДетальныеЗаписи.ОстатокNCОстаток)); //"Сумма лимит: "+Строка(ВыборкаДетальныеЗаписи.Лимит));
                Отказ = Истина;
            КонецЕсли;
        КонецЦикла;
    
           
    КонецПроцедуры
    
    но выдает ошибку не могу разобраться

    Код:
    {Документ.РозничнаяПродажа.МодульОбъекта(17,37)}: Переменная не определена (Лимит)
        Запрос.УстановитьПараметр("Лимит", <<?>>Лимит); (Проверка: Сервер)
    {Документ.РозничнаяПродажа.МодульОбъекта(23,50)}: Переменная не определена (Лимит)
            Если ВыборкаДетальныеЗаписи.ОстатокNCОстаток < <<?>>Лимит Тогда (Проверка: Сервер)
    
  2. nomad_irk
    Offline

    nomad_irk Гуру в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    7.554
    Симпатии:
    716
    Баллы:
    204
    Лимит должен быть реквизитом объекта.
  3. TopicStarter Overlay
    Эмиль0690
    Offline

    Эмиль0690 Опытный в 1С

    Регистрация:
    3 фев 2014
    Сообщения:
    290
    Симпатии:
    2
    Баллы:
    29
    Значить нужно создать еще один реквизит с названием Лимит?
    что то не понял, я же получаю лимит из регистр сведение...
    объясните пожалуйста по подробнее!
  4. nomad_irk
    Offline

    nomad_irk Гуру в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    7.554
    Симпатии:
    716
    Баллы:
    204
    Так вы ж делаете(правда, пока не понятно для чего):

    Код:
    Запрос.УстановитьПараметр("Лимит", Лимит);
    Следовательно, значение переменной Лимит должно быть определено. В модуле объекта это может быть только реквизит объекта или глобальная/локальная переменная.

    Далее по коду вы проверяете остаток, возвращенный вам запросом с Лимитом:

    Код:
    Если ВыборкаДетальныеЗаписи.ОстатокNCОстаток < Лимит Тогда
    В данном случае, все тоже самое - значение лимита должно быть определено.
  5. TopicStarter Overlay
    Эмиль0690
    Offline

    Эмиль0690 Опытный в 1С

    Регистрация:
    3 фев 2014
    Сообщения:
    290
    Симпатии:
    2
    Баллы:
    29
    Добавил нового реквизита Лимит все теперь ошибок нет но и не проверяет
    upload_2015-12-26_17-9-55.png

    что теперь нужно делать где я ошибся????
    --- Объединение сообщений, 26 дек 2015 ---
    проверил по точки остановки лимита нет т.е показывает ноль (0)
    но лимит есть и при провести закрыть по всем клиентам показывает одно и тоже сообщение за должености-10 721,73
    upload_2015-12-26_17-21-50.png
    Последнее редактирование: 26 дек 2015
  6. TDU2000
    Offline

    TDU2000

    Регистрация:
    27 дек 2015
    Сообщения:
    6
    Симпатии:
    0
    Баллы:
    1
    У Вас в запросе таблицы не связаны, нужно сделать соединение (левое или внутреннее) по полю "Контрагент", т.е. добавить к запросу строки примерно такие:
    ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.Лимиты.СрезПоследних КАК ЛимитыСрезПоследних
    ПО ВзаиморасчетыПоКонтрагентамОстатки.Контрагент = ЛимитыСрезПоследних.Контрагент
    Тогда напротив остатка задолженности по контрагенту будет лимит по контрагенту
  7. TopicStarter Overlay
    Эмиль0690
    Offline

    Эмиль0690 Опытный в 1С

    Регистрация:
    3 фев 2014
    Сообщения:
    290
    Симпатии:
    2
    Баллы:
    29
    Код:
    Запрос = Новый Запрос;
        Запрос.Текст = "ВЫБРАТЬ
                       |    ВзаиморасчетыПоКонтрагентамОстатки.ОстатокNCОстаток,
                       |    ЛимитыСрезПоследних.Лимит
                       |ИЗ
                       |    РегистрНакопления.ВзаиморасчетыПоКонтрагентам.Остатки КАК ВзаиморасчетыПоКонтрагентамОстатки
                       |        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.Лимиты.СрезПоследних КАК ЛимитыСрезПоследних
                       |        ПО ВзаиморасчетыПоКонтрагентамОстатки.Клиент = ЛимитыСрезПоследних.Лимит";
       
                      
        Запрос.УстановитьПараметр("Клиент", Контрагент);
        Запрос.УстановитьПараметр("Лимит", Лимит);
       
        Результат = Запрос.Выполнить();
        ВыборкаДетальныеЗаписи = Результат.Выбрать();
       
        Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
            Если ВыборкаДетальныеЗаписи.ОстатокNCОстаток < Лимит Тогда
                Сообщить("Сумма отгрузки превышает задолженность! Сумма задолжености: "+Строка(ВыборкаДетальныеЗаписи.ОстатокNCОстаток)); //"Сумма лимит: "+Строка(ВыборкаДетальныеЗаписи.Лимит));
                Отказ = Истина;
            КонецЕсли;
        КонецЦикла;
    
    получаю только клиента а лимит и задолженности нету и при записать закрыть сообщает кучу задолженности
    отъять все неправильно
    upload_2015-12-27_15-5-7.png
    --- Объединение сообщений, 27 дек 2015 ---
    upload_2015-12-27_15-10-12.png
    куда я должен вставить галку или еще что то?
    --- Объединение сообщений, 27 дек 2015 ---
    все варианты перепробовал все равно не получается
    upload_2015-12-27_15-13-32.png
    Последнее редактирование: 27 дек 2015
  8. TDU2000
    Offline

    TDU2000

    Регистрация:
    27 дек 2015
    Сообщения:
    6
    Симпатии:
    0
    Баллы:
    1
    Связь нужно делать по полю одинакового типа, в регистре взаиморасчетов поле клиент, скорее всего имеет тип СправочникСсылка.Контрагенты, соответственно нужно соединять нужно по полю регистра лимиты такого же типа СправочникСсылка.Контрагенты. Для отбора по конкретному контрагенту, нужно передавать значение для параметра виртуальной таблицы. У Вас соединение указано Контрагент = Лимит, поле "Лимит" какого типа?
  9. TopicStarter Overlay
    Эмиль0690
    Offline

    Эмиль0690 Опытный в 1С

    Регистрация:
    3 фев 2014
    Сообщения:
    290
    Симпатии:
    2
    Баллы:
    29
    Лимит тип = Число
    upload_2015-12-28_9-48-36.png

    Код:
    Запрос = Новый Запрос;
        Запрос.Текст = "ВЫБРАТЬ
                       |    ВзаиморасчетыПоКонтрагентамОстатки.ОстатокNCОстаток,
                       |    ЛимитыСрезПоследних.Лимит
                       |ИЗ
                       |    РегистрНакопления.ВзаиморасчетыПоКонтрагентам.Остатки КАК ВзаиморасчетыПоКонтрагентамОстатки
                       |        ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.Лимиты.СрезПоследних КАК ЛимитыСрезПоследних
                       |        ПО ВзаиморасчетыПоКонтрагентамОстатки.Клиент = ЛимитыСрезПоследних.Клиент";
       
                      
        Запрос.УстановитьПараметр("Клиент", Контрагент);
        Запрос.УстановитьПараметр("Лимит", Лимит);
       
        Результат = Запрос.Выполнить();
        ВыборкаДетальныеЗаписи = Результат.Выбрать();
       
        Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
            Если ВыборкаДетальныеЗаписи.ОстатокNCОстаток < Лимит Тогда
                Сообщить("Сумма отгрузки превышает задолженность! Сумма задолжености: "+Строка(ВыборкаДетальныеЗаписи.ОстатокNCОстаток)); //"Сумма лимит: "+Строка(ВыборкаДетальныеЗаписи.Лимит));
                Отказ = Истина;
            КонецЕсли;
        КонецЦикла;
    а теперь ваще ноль внимание даже ошибок нет и не сообщает сообщение...
  10. alexburn
    Offline

    alexburn Модераторы Команда форума Модератор

    Регистрация:
    5 янв 2009
    Сообщения:
    14.750
    Симпатии:
    509
    Баллы:
    204
    Запрос.УстановитьПараметр("Клиент", Контрагент);
    Где вы устанавливаете параметр Контрагент ?? В запросе вы не отбираете по этому значению.
  11. TopicStarter Overlay
    Эмиль0690
    Offline

    Эмиль0690 Опытный в 1С

    Регистрация:
    3 фев 2014
    Сообщения:
    290
    Симпатии:
    2
    Баллы:
    29
    так?
    Код:
    Запрос = Новый Запрос;
        Запрос.Текст = "ВЫБРАТЬ
                       |    ВзаиморасчетыПоКонтрагентамОстатки.Клиент,
                       |    ВзаиморасчетыПоКонтрагентамОстатки.ОстатокNCОстаток,
                       |    ЛимитыСрезПоследних.Лимит
                       |ИЗ
                       |    РегистрНакопления.ВзаиморасчетыПоКонтрагентам.Остатки КАК ВзаиморасчетыПоКонтрагентамОстатки
                       |        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.Лимиты.СрезПоследних КАК ЛимитыСрезПоследних
                       |        ПО ВзаиморасчетыПоКонтрагентамОстатки.Клиент = ЛимитыСрезПоследних.Клиент";
       
                      
        Запрос.УстановитьПараметр("Клиент", Контрагент);
        Запрос.УстановитьПараметр("Лимит", Лимит);
       
        Результат = Запрос.Выполнить();
        ВыборкаДетальныеЗаписи = Результат.Выбрать();
       
        Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
            Если ВыборкаДетальныеЗаписи.ОстатокNCОстаток < Лимит Тогда
                Сообщить("Сумма отгрузки превышает задолженность! Сумма задолжености: "+Строка(ВыборкаДетальныеЗаписи.ОстатокNCОстаток)); //"Сумма лимит: "+Строка(ВыборкаДетальныеЗаписи.Лимит));
                Отказ = Истина;
            КонецЕсли;
        КонецЦикла;
    
    не работает((
  12. TopicStarter Overlay
    Эмиль0690
    Offline

    Эмиль0690 Опытный в 1С

    Регистрация:
    3 фев 2014
    Сообщения:
    290
    Симпатии:
    2
    Баллы:
    29
    кто нибудь подскажите что дальше делать?
  13. alexburn
    Offline

    alexburn Модераторы Команда форума Модератор

    Регистрация:
    5 янв 2009
    Сообщения:
    14.750
    Симпатии:
    509
    Баллы:
    204
    Вам уже подсказали! Устанавливайте параметр в запросе по отбору:
    ГДЕ ВзаиморасчетыПоКонтрагентамОстатки.Клиент = &Клиент
    Или опять все за вас делать ???
  14. TopicStarter Overlay
    Эмиль0690
    Offline

    Эмиль0690 Опытный в 1С

    Регистрация:
    3 фев 2014
    Сообщения:
    290
    Симпатии:
    2
    Баллы:
    29
    Код:
        Запрос = Новый Запрос;
        Запрос.Текст = "ВЫБРАТЬ
                       |    ВзаиморасчетыПоКонтрагентамОстатки.Клиент,
                       |    ВзаиморасчетыПоКонтрагентамОстатки.ОстатокNCОстаток,
                       |    ЛимитыСрезПоследних.Лимит
                       |ИЗ
                       |    РегистрСведений.Лимиты.СрезПоследних КАК ЛимитыСрезПоследних
                       |        ПОЛНОЕ СОЕДИНЕНИЕ РегистрНакопления.ВзаиморасчетыПоКонтрагентам.Остатки КАК ВзаиморасчетыПоКонтрагентамОстатки
                       |        ПО (ВзаиморасчетыПоКонтрагентамОстатки.Клиент = ЛимитыСрезПоследних.Клиент)
                       |ГДЕ
                       |    ВзаиморасчетыПоКонтрагентамОстатки.Клиент = &Клиент";
    
    вот не работаееет ((
    нечего за меня не надо сделать, просто подскажите
  15. alexburn
    Offline

    alexburn Модераторы Команда форума Модератор

    Регистрация:
    5 янв 2009
    Сообщения:
    14.750
    Симпатии:
    509
    Баллы:
    204
    Отладчиком смотрите, может у вас кривой запрос.
    ВзаиморасчетыПоКонтрагентамОстатки.ОстатокNCОстаток - Это еще что за хрень ? Запрос вообще работает ???
  16. TopicStarter Overlay
    Эмиль0690
    Offline

    Эмиль0690 Опытный в 1С

    Регистрация:
    3 фев 2014
    Сообщения:
    290
    Симпатии:
    2
    Баллы:
    29
    :)ОстатокNCОстаток
    нет не работает
  17. TopicStarter Overlay
    Эмиль0690
    Offline

    Эмиль0690 Опытный в 1С

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

    alexburn Модераторы Команда форума Модератор

    Регистрация:
    5 янв 2009
    Сообщения:
    14.750
    Симпатии:
    509
    Баллы:
    204
    Консоль запросов в помощь.
  19. TDU2000
    Offline

    TDU2000

    Регистрация:
    27 дек 2015
    Сообщения:
    6
    Симпатии:
    0
    Баллы:
    1
    Выполните Ваш запрос в консоли запросов. Посмотрите содержимое временных таблиц, присутствуют ли в них вообще записи. Судить сложно только по одному тексту запроса, исходных данных базы мы не видим... Зачем в запрос передается параметр "Ссылка", предполагался отбор по документу?
  20. TopicStarter Overlay
    Эмиль0690
    Offline

    Эмиль0690 Опытный в 1С

    Регистрация:
    3 фев 2014
    Сообщения:
    290
    Симпатии:
    2
    Баллы:
    29
    Добрый день!
    изменил код помогите мне разобраться пожалуйста!
    Код:
    // ВТОРОЙ ВАРИАНТ 22222222222222222
        Запрос=Новый Запрос;
        Запрос.Текст = "ВЫБРАТЬ
        |    РозничнаяПродажа.Контрагент,
        |    СУММА(РозничнаяПродажа.СуммаПродажиNC) КАК СуммаПродажиNC
        |ПОМЕСТИТЬ Клиенты
        |ИЗ
        |    Документ.РозничнаяПродажа КАК РозничнаяПродажа
        |
        |СГРУППИРОВАТЬ ПО
        |    РозничнаяПродажа.Контрагент
        |;
        |
        |////////////////////////////////////////////////////////////////////////////////
        |ВЫБРАТЬ
        |    ВзаиморасчетыПоКонтрагентамОстатки.Клиент,
        |    ВзаиморасчетыПоКонтрагентамОстатки.ОстатокNCОстаток
        |ПОМЕСТИТЬ Взаиморасчеты
        |ИЗ
        |    РегистрНакопления.ВзаиморасчетыПоКонтрагентам.Остатки(&Момент, Клиент = &Клиент) КАК ВзаиморасчетыПоКонтрагентамОстатки
        |;
        |
        |////////////////////////////////////////////////////////////////////////////////
        |ВЫБРАТЬ
        |    ЛимитыСрезПоследних.Клиент,
        |    ЛимитыСрезПоследних.Лимит
        |ПОМЕСТИТЬ Лимиты
        |ИЗ
        |    РегистрСведений.Лимиты.СрезПоследних(&Момент, Клиент = &Клиент) КАК ЛимитыСрезПоследних
        |;
        |
        |////////////////////////////////////////////////////////////////////////////////
        |ВЫБРАТЬ
        |    Клиенты.Контрагент,
        |    Клиенты.СуммаПродажиNC,
        |    ЕСТЬNULL(Взаиморасчеты.ОстатокNCОстаток, 0) КАК ОстатокNCОстаток,
        |    ЕСТЬNULL(Лимиты.Лимит, 0) КАК Лимит
        |ИЗ
        |    Клиенты КАК Клиенты
        |        ЛЕВОЕ СОЕДИНЕНИЕ Взаиморасчеты КАК Взаиморасчеты
        |        ПО Клиенты.Контрагент = Взаиморасчеты.Клиент
        |        ЛЕВОЕ СОЕДИНЕНИЕ Лимиты КАК Лимиты
        |        ПО Клиенты.Контрагент = Лимиты.Клиент";
      
      
        Запрос.УстановитьПараметр("Клиент", Контрагент);
        Запрос.УстановитьПараметр("Момент", МоментВремени());
        //Запрос.УстановитьПараметр("Ссылка", Ссылка);
      
        Результат = Запрос.Выполнить();
      
        ВыборкаДетальныеЗаписи = Результат.Выбрать();
      
        //Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
          
            Если ВыборкаДетальныеЗаписи.Следующий() Тогда
                ПланируемыйДолг = ВыборкаДетальныеЗаписи.СуммаПродажиNC + ВыборкаДетальныеЗаписи.ОстатокNCОстаток;  
                Если ПланируемыйДолг > ВыборкаДетальныеЗаписи.Лимит Тогда
                    Сообщить(("Превышен размер задолженности!  Сумма задолжености: "+Строка(ВыборкаДетальныеЗаписи.ОстатокNCОстаток)));
                    Отказ = Истина;
                КонецЕсли;  
            КонецЕсли;
        //КонецЦикла;
        //Запрос=Новый Запрос;
    ошибки нет но во время проведение проверяет не то что мне нужно
    [​IMG]
Похожие темы
  1. Arseni
    Ответов:
    1
    Просмотров:
    966
  2. bolonka
    Ответов:
    1
    Просмотров:
    697
  3. vovakent
    Ответов:
    4
    Просмотров:
    2.121
  4. gor242
    Ответов:
    6
    Просмотров:
    747
Загрузка...

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