[РЕШЕНО] Запрет ввода номенклатуры, помеченной на удаление

Тема в разделе ""1С:Управление торговлей УТ"", создана пользователем roofless, 4 фев 2015.

  1. TopicStarter Overlay
    roofless
    Offline

    roofless Опытный в 1С

    Регистрация:
    27 июн 2014
    Сообщения:
    260
    Симпатии:
    7
    Баллы:
    29
    Всем привет.

    Док-т РеализацияТиУ

    про вводе названия товара строкой, 1с дает выбрать из выпадающего списка элемент, помеченный на удаление и пользователь об этом не узнает.
    в 99% случаев набивают товар именно по названию

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

    нашел вот тут http://forum.infostart.ru/forum26/topic102269/ как примерно, но "подобно" отрабатывает нормально только при вводе полного наименования. а его пользователь не успеет ввести так быстро

    может у кого уже есть рабочий кусок?
  2. TopicStarter Overlay
    roofless
    Offline

    roofless Опытный в 1С

    Регистрация:
    27 июн 2014
    Сообщения:
    260
    Симпатии:
    7
    Баллы:
    29
    в форме после ввода номенклатуры и выборе нужной подхватываю номенклатуру, и запихиваю в запрос, который вернет истину, если пометка стоит
    начал делать вот так
    Код:
    &НаКлиенте
    Процедура ТоварыНоменклатураОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка)
        Значение = ПроверитьНоменклатуруНаПометкуУдаления(ВыбранноеЗначение);
    КонецПроцедуры
    
    &НаСервере
    Функция ПроверитьНоменклатуруНаПометкуУдаления(ВыбранноеЗначение) Экспорт
       
        СтандартнаяОбработка = Ложь;
       
        Запрос = Новый Запрос;
        
        Запрос.Текст =
        "ВЫБРАТЬ
        |   Номенклатура.ПометкаУдаления КАК ПометкаУдаления
        |ИЗ
        |   Справочник.Номенклатура КАК Номенклатура
        |ГДЕ
        |   Номенклатура.НаименованиеПолное = &Текст";
       
        Запрос.УстановитьПараметр("Текст", ВыбранноеЗначение);
           
     
      Выборка = Запрос.Выполнить().Выбрать();
      Выборка.Следующий();
      Результат = Выборка.ПометкаУдаления;
       
        Возврат Результат
        КонецФункции;
    но почему-то "ошибка чтения значения". хотя в консоли запросов всё норм. да и запрос наипростейший
  3. nomad_irk
    Offline

    nomad_irk Гуру в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    7.548
    Симпатии:
    716
    Баллы:
    204
    Ну дык нет в выборке элементов. Сделайте
    Если Выборка.Следующий() Тогда
    ....
  4. TopicStarter Overlay
    roofless
    Offline

    roofless Опытный в 1С

    Регистрация:
    27 июн 2014
    Сообщения:
    260
    Симпатии:
    7
    Баллы:
    29
    не парился бы, но ввожу всё время одну номенклатуру, у которой пометка удаления стоит

    в консоли запросов всё ок, а тут ничего не возвращает. может типы разные..
  5. nomad_irk
    Offline

    nomad_irk Гуру в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    7.548
    Симпатии:
    716
    Баллы:
    204
    Так понимаю, необходимо сделать:

    Запрос.УстановитьПараметр("Текст", ВыбранноеЗначение.НаименованиеПолное);
  6. TopicStarter Overlay
    roofless
    Offline

    roofless Опытный в 1С

    Регистрация:
    27 июн 2014
    Сообщения:
    260
    Симпатии:
    7
    Баллы:
    29
    типы по ходу были разные. привел ВыбранноеЗначение в строку, отрабатывает отлично
  7. TopicStarter Overlay
    roofless
    Offline

    roofless Опытный в 1С

    Регистрация:
    27 июн 2014
    Сообщения:
    260
    Симпатии:
    7
    Баллы:
    29
    ок, задача почти выполнена.
    но не сохраняется значение в поле ввода, обнуляется вне зависимости, есть ли пометка удаления
    Код:
    &НаКлиенте
    Процедура ТоварыНоменклатураОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка)
        РезультатПроверки = ПроверитьНоменклатуруНаПометкуУдаления(ВыбранноеЗначение);
        Если РезультатПроверки=ИСТИНА Тогда
            Предупреждение("Номенклатура помечена на удаление!", 0, "ЗакрытьФорму");
        КонецЕсли;
        Значение = ВыбранноеЗначение;
    КонецПроцедуры
    
    &НаСервере
    Функция ПроверитьНоменклатуруНаПометкуУдаления(ВыбранноеЗначение)
       
        ВыбранноеЗначение = Строка(ВыбранноеЗначение);
        СтандартнаяОбработка = Ложь;
       
        Запрос = Новый Запрос;
       
        Запрос.Текст =
        "ВЫБРАТЬ
        |   Номенклатура.ПометкаУдаления КАК ПометкаУдаления
        |ИЗ
        |   Справочник.Номенклатура КАК Номенклатура
        |ГДЕ
        |   Номенклатура.НаименованиеПолное = &Текст";
       
        Запрос.УстановитьПараметр("Текст", ВыбранноеЗначение);
       
        Выборка = Запрос.Выполнить().Выбрать();
        Выборка.Следующий();
        Результат = Выборка.ПометкаУдаления;
       
        Возврат Результат
    КонецФункции;
    
  8. nomad_irk
    Offline

    nomad_irk Гуру в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    7.548
    Симпатии:
    716
    Баллы:
    204
    Код:
    &НаКлиенте
    Процедура ТоварыНоменклатураОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка)
    СтандартнаяОбработка = Ложь;
    РезультатПроверки = ПроверитьНоменклатуруНаПометкуУдаления(ВыбранноеЗначение);
    ....
    
  9. TopicStarter Overlay
    roofless
    Offline

    roofless Опытный в 1С

    Регистрация:
    27 июн 2014
    Сообщения:
    260
    Симпатии:
    7
    Баллы:
    29
    не помогло
  10. LordMaverick
    Offline

    LordMaverick Профессионал в 1С

    Регистрация:
    17 мар 2014
    Сообщения:
    3.429
    Симпатии:
    372
    Баллы:
    104
    можно скрин где видно момент ввода номеклатуры и список?
  11. TopicStarter Overlay
    roofless
    Offline

    roofless Опытный в 1С

    Регистрация:
    27 июн 2014
    Сообщения:
    260
    Симпатии:
    7
    Баллы:
    29
    1. начинаем вводить номенклатуру
    2015-02-05 09-02-08 Скриншот экрана.png
    2. выбираем значение, поставил точку останова тут
    2.JPG
    в форме выбора почему-то сразу ошибка. это влияет как-то?
    3. после выполнения функции проверки текст редактирования пуст
    3.JPG
    4. сама форма после
    4.JPG
  12. alexburn
    Offline

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

    Регистрация:
    5 янв 2009
    Сообщения:
    14.735
    Симпатии:
    508
    Баллы:
    204
    Видимо потому что СтандартнаяОбработка не используется.
  13. TopicStarter Overlay
    roofless
    Offline

    roofless Опытный в 1С

    Регистрация:
    27 июн 2014
    Сообщения:
    260
    Симпатии:
    7
    Баллы:
    29
    СтандартнаяОбработка = Ложь только при условии, что номенклатура помечена на удаление.
    но почему-то даже если СтандартнаяОбработка = Истина поле ввода очищается

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

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

    Регистрация:
    5 янв 2009
    Сообщения:
    14.735
    Симпатии:
    508
    Баллы:
    204
    А что должно подставиться, если выбран элемент, помеченный на удаление ?
  15. TopicStarter Overlay
    roofless
    Offline

    roofless Опытный в 1С

    Регистрация:
    27 июн 2014
    Сообщения:
    260
    Симпатии:
    7
    Баллы:
    29
    то, что поле ввода очищается при выборе помеченного, было бы нормально. предупреждение же всплывает
    но не при вводе "правильной" номенклатуры
  16. alexburn
    Offline

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

    Регистрация:
    5 янв 2009
    Сообщения:
    14.735
    Симпатии:
    508
    Баллы:
    204
    А запрос корректно вообще отрабатывает ?
    И кстати, Стандартную обработку все-таки в обработчик перенесите, а не в функции устанавливайте.
  17. TopicStarter Overlay
    roofless
    Offline

    roofless Опытный в 1С

    Регистрация:
    27 июн 2014
    Сообщения:
    260
    Симпатии:
    7
    Баллы:
    29
  18. alexburn
    Offline

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

    Регистрация:
    5 янв 2009
    Сообщения:
    14.735
    Симпатии:
    508
    Баллы:
    204
    Если у вас всплывает предупреждение даже при выборе номенклатуры, не помеченной на удаление, то срабатывает условие. Логично ?
  19. TopicStarter Overlay
    roofless
    Offline

    roofless Опытный в 1С

    Регистрация:
    27 июн 2014
    Сообщения:
    260
    Симпатии:
    7
    Баллы:
    29
    спасибо, так работает
    Код:
    &НаКлиенте
    Процедура ТоварыНоменклатураОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка)
       
        РезультатПроверки=ПроверитьНоменклатуруНаПометкуУдаления(ВыбранноеЗначение, СтандартнаяОбработка);
       
        Если РезультатПроверки Тогда
            СтандартнаяОбработка = Ложь;
            Предупреждение("Номенклатура помечена на удаление!", 0, "ЗакрытьФорму");
        КонецЕсли;
    
    КонецПроцедуры
    
    &НаСервере
    Функция ПроверитьНоменклатуруНаПометкуУдаления(ВыбранноеЗначение, СтандартнаяОбработка)
    
    Текст = Строка(ВыбранноеЗначение);
    
    Запрос = Новый Запрос;
    
    Запрос.Текст =
    "ВЫБРАТЬ
    | Номенклатура.ПометкаУдаления КАК ПометкаУдаления
    |ИЗ
    | Справочник.Номенклатура КАК Номенклатура
    |ГДЕ
    | Номенклатура.НаименованиеПолное = &Текст";
    
    Запрос.УстановитьПараметр("Текст", Текст);
    
    Выборка = Запрос.Выполнить().Выбрать();
    Выборка.Следующий();
    Результат = Выборка.ПометкаУдаления;
    
    Возврат Результат
    
    КонецФункции;
    --- Объединение сообщений, 5 фев 2015 ---
    всё работает правильно, предупреждалка появляется в нужный момент.
    после нажатия "ок" поле не очищается, но и значение не выбирается. всё гуд
  20. alexburn
    Offline

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

    Регистрация:
    5 янв 2009
    Сообщения:
    14.735
    Симпатии:
    508
    Баллы:
    204
    Стандартная обработка действует только в пределах обработчика, т.е. процедуры.

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