Подскажите С Запросом

Тема в разделе "1C и всё что с ней связано", создана пользователем Allexei, 17 окт 2011.

  1. Allexei

    Allexei Well-Known Member

    Регистрация:
    2 май 2008
    Сообщения:
    322
    Симпатии:
    0
    Здравствуйте! Подскажите по такому вопросу. Есть справочник Номенклатура, есть регистр сведений ШтрихКода. Для каждой позиции номенклатуры штрих код может быть, может не быть, может быть их несколько. Вопрос как в запросе можно выбрать Номенклатуру со всеми ее штрих кодами.Результат должен быть примерно следующий:
    |Товар-1|ШтрихКод-1;ШтрихКод-2|
    |Товар-2| |
    |Товар-3|ШтрихКод-3; |
    Подскажите как можно сделать, а то уже все что мог придумать перепробовал.
     
  2. unknown181538

    unknown181538 НеГуру
    1C Team

    Регистрация:
    28 дек 2008
    Сообщения:
    1.418
    Симпатии:
    0
    По нормальному нельзя.
    А для чего вам?
     
  3. KiR

    KiR НЕ шибка опытный програмер)
    1C Team

    Регистрация:
    11 сен 2007
    Сообщения:
    1.581
    Симпатии:
    0
    в твоей схеме этот пункт самый непонятный
     
  4. Allexei

    Allexei Well-Known Member

    Регистрация:
    2 май 2008
    Сообщения:
    322
    Симпатии:
    0
    А что же тут не нормального то? Есть позиция номенклатуры Товар 1 со штрих кодами ШтрихКод-1, ШтрихКод-2. Есть позиция номенклатуры Товар-2 у которой вообще нет штрих кодов. Есть позиция номенклатуры Товар3 со штрих кодом 3. Что где хранится написано выше. Результатом запроса должна быть табличка состоящая из 2-х колонок(первая - номенклатура, вторая штрих кода строкой).
    Проблема в том что как сделать штрих кода по номенклатуре одной строкой (т.е. штрих1+штрих2...+штрих-n), причем между штрих коами должен быть какой либо разделитель(без разницы какой).
    123.jpg
     
  5. unknown181538

    unknown181538 НеГуру
    1C Team

    Регистрация:
    28 дек 2008
    Сообщения:
    1.418
    Симпатии:
    0
    Это обязательно делать прям в запросе? Какая задача?
     
  6. KiR

    KiR НЕ шибка опытный програмер)
    1C Team

    Регистрация:
    11 сен 2007
    Сообщения:
    1.581
    Симпатии:
    0
    я не понял логики зачем при отсутствии штрихкода1 забивать штрихкод3?
    а вообще можешь выбирать все штрихкоды, потом циклом обходить полученный результат и формировать либо переменные, которые сразу в форму выводишь либо Таблицу Значений с 2 колонками (что-то типа ШК = Строка(Штрихкод1)+";"+Строка(Штрихкод2) и т.д)
     
  7. unknown181538

    unknown181538 НеГуру
    1C Team

    Регистрация:
    28 дек 2008
    Сообщения:
    1.418
    Симпатии:
    0
    Если предположить, что количество штрихкодов не может быть больше N, гуглите нумерацию строк в запросе.
    Потом раскладываем на разные колонки... что-то вроде
    ВЫБОР КОГДА НомерСтроки = 3 Тогда
    Выборка.Штрихкод...

    потом
    ЕСТЬNULL(Штрихкод1,"")+";"+ЕСТЬNULL(ШтрихКод2,"")
    ну мысль такая... но не представляю, зачем это.
    В СКД можно попробовать его средства.

    Добавлено:
    Мне кажется, он имел в виду, что у третьего товара один штрихкод. Условно :
    |Носки|111111;22222|
    |Портянки| |
    |Гетры с кошечками|333333; |
     
  8. Allexei

    Allexei Well-Known Member

    Регистрация:
    2 май 2008
    Сообщения:
    322
    Симпатии:
    0
    Хех... Порядка 95000 тысяч позиций, у каждой позиции по 3-7 штрих кодов. Цикл ну уж ОЧЕНЬ долгий. Зачем надо - поставщик просит присылать ему такую форму. Количество штрих кодов заранее не известно, может быть и 7 а может не быть ни одного...Вот как то так :) Есть идеи?
    Штрих кода и товар конечно заданы условно. Примерно как должно быть можно удивить во вложении выше.
     
  9. KiR

    KiR НЕ шибка опытный програмер)
    1C Team

    Регистрация:
    11 сен 2007
    Сообщения:
    1.581
    Симпатии:
    0
    Allexei, а что делать-то? все равно тебе нужно отбирать все 7, а потом уже смотреть где там есть ШК, а где нет. Отбирай товары по условию - Поставщик или товарная группа или остаток, думаю это сократит список.
    разве что в запросе, вроде бы, можно поставить условие отбора если не Null
     
  10. Darlock

    Darlock Well-Known Member
    1C Team

    Регистрация:
    4 янв 2008
    Сообщения:
    558
    Симпатии:
    0
    Мне кажется проще идти не от номенклатуры, а от штрих-кодов. Т.е. Запрос к регистру со штрихКодами и итоги по номенклатуре. На выходе имеем дерево в корне которого номенклатура, а внутри все его штрих коды. И в цикле обходить и собирать в одну строку.
     
  11. Allexei

    Allexei Well-Known Member

    Регистрация:
    2 май 2008
    Сообщения:
    322
    Симпатии:
    0
    Кстати тогда вопрос. Что быстрее (теоретически) сделать как сказал Darlock или же сделать цикл по номенклатуре и запросом выбирать для каждой позиции шк?
    Второй вариант представлен ниже:
    <!--shcode--><pre><code class='1С'>...
    Для Каждого ТекСтрока Из спсНоменклатуры Цикл
    Состояние("Формирую штрих кода. Необходимо обработать "+спсНоменклатуры.Количество()+ " записей");
    НоваяСтрока = ТабШтрихКода.Добавить();
    НоваяСтрока.Номенклатура = ТекСтрока.Номенклатура;
    НоваяСтрока.ШтрихКод = ВернутьШтрихКодаНоменклатуры(НоваяСтрока.Номенклатура);
    КонецЦикла;
    ...
    Функция ВернутьШтрихКодаНоменклатуры(Номенклатура) ЭКСПОРТ

    СтрокаШтрихКода= "";
    Запрос= Новый Запрос("ВЫБРАТЬ
    | ШтрихкодыНоменклатуры.Штрихкод КАК ШтрихКод
    |ИЗ
    | РегистрСведений.ШтрихкодыНоменклатуры КАК ШтрихкодыНоменклатуры
    |ГДЕ
    | ШтрихкодыНоменклатуры.Номенклатура = &Номенклатура");
    Запрос.УстановитьПараметр("Номенклатура" , Номенклатура);
    Выборка= Запрос.Выполнить().Выбрать();
    Пока Выборка.Следующий() Цикл
    Если НЕ СтрДлина(Выборка.ШтрихКод)= 13 Тогда
    Продолжить;
    КонецЕсли;
    СтрокаШтрихКода= СтрокаШтрихКода+ СокрЛП(Выборка.ШтрихКод)+ Символы.ПС;//";";
    КонецЦикла;
    Возврат СтрокаШтрихКода;
    КонецФункции[/CODE]
     
  12. KiR

    KiR НЕ шибка опытный програмер)
    1C Team

    Регистрация:
    11 сен 2007
    Сообщения:
    1.581
    Симпатии:
    0
    нет, для каждой позиции ШК выбирать имхо это утопия. их нада выбрать скопом и потом уже в цикле обходить результаты. хотя возможно Darlock советует самый правильный вариант
     
  13. unknown181538

    unknown181538 НеГуру
    1C Team

    Регистрация:
    28 дек 2008
    Сообщения:
    1.418
    Симпатии:
    0
    Так у тебя запрос в цикле ж!
    Надо получать данные одним запросом. Ну и итоги по номенклатуре. Скорее все, больше всего времени уйдет на вывод в табличный документ.
    А идти надо все же от номенклатуры, т.к. позиции с null-ами тоже надо выводить.
     
  14. Allexei

    Allexei Well-Known Member

    Регистрация:
    2 май 2008
    Сообщения:
    322
    Симпатии:
    0
    Всем спасибо, буду делать как сказал Darlock

    ...
    А ведь действительно стало быстрее работать раза в 3
     
Загрузка...

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