Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Почему не ищет поиск в таблице значений !
Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 > Программисту > Программирование в 1С Предприятие 8.2 > Программирование обычных форм 1С 8.2 и не интерфейсной логики
Zink
Выполняю запрос, получаю результат в виде таблицы значений. На форме есть реквизит штрих код, из него беру значение и создаю структуру отбора для поиска строк в полученной таблице значений. Результат все время ноль, хотя заранее я знаю что должен быть не ноль. ПОМОГИТЕ РАЗОБРАТЬСЯ !!!!!!
Вот код:

Процедура ПолеШКПриИзменении(Элемент)
    // Вставить содержимое обработчика.
    ТаблицаЗнач = Новый ТаблицаЗначений();
    ТаблицаЗнач = НайтиТовПоШк();
    Отбор = Новый Структура();
    Отбор.Вставить("ШтрихКод",ЭлементыФормы.ПолеШК);
    Если ТаблицаЗнач = 0 Тогда
        Сообщить(" Товар с данным штрих кодом "+Элемент.Значение+" не найден !");
    Иначе
        Строки = ТаблицаЗнач.НайтиСтроки(Отбор);
        ТабличноеПоле1 = ТаблицаЗнач;
        Сообщить(" "+Строки.Количество());
    КонецЕсли;
    КонецПроцедуры



 i 

Ознакомьтесь с правилами!
 
Ardi
Цитата(Zink @ 24.03.12, 16:42) необходимо зарегистрироваться для просмотра ссылки
ТаблицаЗнач = НайтиТовПоШк();

Что есть это?
Zink
НайтиТовПоШк(); - функ-ия возвращает таблицу значений после запроса

Возможен ли поиск в реквизите формы если он имеет тип ТаблицаЗначений ?
logist
Херня какая-то а не код. Надо сразу в НайтиТовПоШк(); получить только нужные записи и всё.
Zink
Код может и херня, но если учесть что я вообще первый раз пишу что-то в 1с то может и еще нормальный код. Задача вообще такая: приходовать товар по штрих коду с помощью сканера штрих кода(USB) и продавать также по штрих коду. Может кто, чего то подскажет ?????????

Функция НайтиТовПоШк() выдает либо 1-ну строку из справочника номенклатура по заданному штрих коду, либо вообще ничего не выдает. Результата типа таблицазначений. Затем я ищу в реквизите формы строку с таким же штрих кодом, если она есть то я увеличиваю колонку количество, если такой строки нет значит добавляю. при закрытии этой обработки данные переносятся в документ приходования товара.
logist
Цитата(Zink @ 24.03.12, 16:07) необходимо зарегистрироваться для просмотра ссылки
может и еще нормальный код

Так он не работает этот код. Вы же даже не удосужились в синтаксис-помошник зайти и посмотреть какие методы у таблицы значений есть.

Цитата(Zink @ 24.03.12, 16:07) необходимо зарегистрироваться для просмотра ссылки
Может кто, чего то подскажет ?????????

Это слишком большой вопрос. Особенно если знаний нет, дать ответ на него невозможно.
Задавайте конкретные вопросы, только сначала ознакомьтесь хотя бы с каким-то минимумом по работе с 1С, иначе все объяснения можно будет отправить в топку.

Цитата(Zink @ 24.03.12, 16:12) необходимо зарегистрироваться для просмотра ссылки
Функция НайтиТовПоШк() выдает либо 1-ну строку из справочника номенклатура по заданному штрих коду, либо вообще ничего не выдает. Результата типа таблицазначений. Затем я ищу в реквизите формы строку с таким же штрих кодом, если она есть то я увеличиваю колонку количество, если такой строки нет значит добавляю. при закрытии этой обработки данные переносятся в документ приходования товара.

Из этого вообще ничего не понятно.
По правильному процесс заполнения ТЧ товаров происходит так - при считывании ШК ищется товар в справочнике, если находится то проверяется ТЧ на наличие такого же, если найден то добавляется количество, если нет то добавляется новая строка с товаром.
Zink
logist
А почему именно через ТЧ, через таблицузначений нельзя это сделать ? Кинуть на форму реквизит типа "таблицазначений" и в него добавлять найденый новый товар или увеличивать количество уже имеющегося, я пытался так сделать. Остановился на том что у меня неработал метод НайтиСтроки(), с помощью кот-го я хотел узнавать есть ли уже товар с таким штрих кодом или нет.
logist
Общий алгоритм действий должен быть где-то такой. Это не готовый код, я просто набросал как можно обойтись одной процедурой.
Процедура КнопкаПоискПоШК(Элемент)
    Если ПустаяСтрока(ПолеВводаШК) Тогда Возврат КонецЕсли;
    
    Запрос = Новый Запрос;
    Запрос.УстановитьПараметр("ШК",ПолеВводаШК);
    Запрос.Текст = "ВЫБРАТЬ
                   |    Номенклатура.Ссылка
                   |ИЗ
                   |    Справочник.Номенклатура КАК Номенклатура
                   |ГДЕ
                   |    Номенклатура.Штрихкод = &ШК";
    Результат = Запрос.Выполнить().Выгрузить();
    
    Если Результат.Количество() Тогда
        Если Результат.Количество() > 1 Тогда
            Товар = Результат.ВыбратьСтроку("Найдено несколько товаров, уточните..");
        Иначе
            Товар = Результат[0];
        КонецЕсли;
        дКоличетсво = 0;
        Если ВвестиЧисло(дКоличетсво,"Введите количество") Тогда
            нСтрока = ТЧТовары.Найти(Товар.Ссылка);
            Если нСтрока <> Неопределено Тогда
                нСтрока.Количество = нСтрока.Количество + дКоличетсво;
            Иначе
                нСтрока = ТЧТовары.Добавить();
                нСтрока.Номенклатура = Товар.Ссылка;
                нСтрока.Количетсов = дКоличетсво;
            КонецЕсли;
        КонецЕсли;
    Иначе
        Сообщить("Товара с таким кодом нет в базе");
    КонецЕсли;        
    
КонецПроцедуры
Ardi
Значит
а) НайтиТовПоШк() никогда ничего не выдаёт.
б) отсутствует колонка "ШтрихКод"
в) колонка "ШтрихКод" всегда пустая
г) колонка "ШтрихКод" не того типа.
д) ЭлементыФормы.ПолеШК не того типа
е) ЭлементыФормы.ПолеШК пустое в этот момент
logist
Цитата(Zink @ 24.03.12, 16:58) необходимо зарегистрироваться для просмотра ссылки
А почему именно через ТЧ,

Не обращайте внимание (это профессиональное от управляемого интерфейса), конечно же в обычном интерфейсе это таблица значений.
Zink
Сижу уже около с 10 утра завис над этим вопросом : метод НайтиСтроки() выдает 0 строк в таблицезначений, хотя заранее знаю что строка с искомым штрих кодом есть. Вот весь мой код:

Функция НайтиТовПоШк()
    Запрос = Новый Запрос ("Выбрать
        |Код,НаименованиеПолное, ШтрихКод
        |ИЗ
        |Справочник.Номенклатура
        |ГДЕ
        |ШтрихКод = &ПолеШК");
    Запрос.УстановитьПараметр("ПолеШК",ЭлементыФормы.ПолеШК.Значение);
    Результат = Запрос.Выполнить();
    Рез = Результат.Выгрузить();
    Если Рез.Количество()= 0 Тогда
        Возврат 0;
    Иначе
        Возврат Рез;
    КонецЕсли;
КонецФункции

Процедура ПолеШКПриИзменении(Элемент)
    РезультатПоиска = НайтиТовПоШк();
    Отбор = Новый Структура();
    Отбор.Вставить("ШтрихКод",ЭлементыФормы.ПолеШК.Значение);
    Если РезультатПоиска = 0 Тогда
        Сообщить(" Товар с данным штрих кодом "+Элемент.Значение+" не найден !");
    Иначе
        Строки = РезультатПоиска.НайтиСтроки(Отбор);
        Сообщить(""+Строки.Количество());
    КонецЕсли;
КонецПроцедуры

Что не так не могу понять, все вроде проверил:
Ardi
а) НайтиТовПоШк() никогда ничего не выдаёт.
б) отсутствует колонка "ШтрихКод"
в) колонка "ШтрихКод" всегда пустая
г) колонка "ШтрихКод" не того типа.
д) ЭлементыФормы.ПолеШК не того типа
е) ЭлементыФормы.ПолеШК пустое в этот момент



Может всетаки использовать ТЧ как писал logist. Тогда вопрос как её на форме отображать, если режим запуска обычное приложение или это не влияет ?
logist
Цитата(Zink @ 24.03.12, 17:41) необходимо зарегистрироваться для просмотра ссылки
Может всетаки использовать ТЧ как писал logist.

Я Вам написал выше, что ошибся, и имел ввиду ТЗ.

Цитата(Zink @ 24.03.12, 17:41) необходимо зарегистрироваться для просмотра ссылки
Что не так не могу понять

Отладчик в руки и вперед, смотрите где что не так.

Но опять же, вы неверно работаете с ТЗ.
Нельзя так:
Если РезультатПоиска = 0 Тогда

Верните из функции ТЗ, а потом уже проверяйте пустая она или нет. Я ж написал выше пример.

+ зачем объявлять переменные если они могут не использоваться...

уберите это
    Отбор = Новый Структура();
    Отбор.Вставить("ШтрихКод",ЭлементыФормы.ПолеШК.Значение);


и вставьте сюда:
   Иначе
        Строки = РезультатПоиска.НайтиСтроки(Новый Структура ("ШтрихКод",ЭлементыФормы.ПолеШК.Значение));
Zink
logist
До изучения отладчика еще не дашел !!! Видно именно сейчас и прийдется посмотреть как им пользоваться.

Кажись нашёл, в окне отладчика видно что поле Штрих Код содержит какие то левые пробелы, откуда они взялись непонятно !!!!!
Спасибо logist за то что толкнули меня на отладчик !!!! Буду думать как это исправить.
Batchir
СокрЛП(ЭлементыФормы.ПолеШК.Значение)
Zink
С поиском разобрался, все работает всем спасибо. Обработку "поиск товара по штрих коду" я написал, а как тепер при ее закрытии передать весь найденный товар в документ оприходования товара вот в чем вопрос !? Кто чем может подскажите !!!! Заранее спасибо.


 ! 

Правила, п.6. Тема закрыта.
 
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.