Имя: Пароль:
1C
1С v8
Каким методом выбрать нужное из выборки запроса.
0 kyrgyz
 
05.11.12
11:22
Запросом вытаскиваю предварительно штрихкода.

ЗапросШК = Новый Запрос;
   ЗапросШК.Текст =
       "ВЫБРАТЬ
       |    РеализацияТоваровУслугТовары.Номенклатура,
       |    РеализацияТоваровУслугТовары.ЕдиницаИзмерения,
       |    Штрихкоды.Владелец,
       |    Штрихкоды.ЕдиницаИзмерения КАК ЕдиницаИзмеренияШК,
       |    Штрихкоды.ТипШтрихкода,
       |    Штрихкоды.Штрихкод
       |ИЗ
       |    Документ.РеализацияТоваровУслуг.Товары КАК РеализацияТоваровУслугТовары
       |        ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.Штрихкоды КАК Штрихкоды
       |        ПО РеализацияТоваровУслугТовары.Номенклатура = Штрихкоды.Владелец
       |            И РеализацияТоваровУслугТовары.ЕдиницаИзмерения = Штрихкоды.ЕдиницаИзмерения
       |ГДЕ
       |    РеализацияТоваровУслугТовары.Ссылка = &СсылкаНаОбъект";

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

   Результат = ЗапросШК.Выполнить();

   ВыборкаДетальныеЗаписиШК = Результат.Выбрать();


Нужно ниже в цикле по номенклтуре вытыщит из запроса нужный штрих код как????
1 Преднаименование
 
05.11.12
11:23
найтиследующий
2 Wobland
 
05.11.12
11:24
ГДЕ Штрихкоды.Штрихкод=
не подходит?
3 kyrgyz
 
05.11.12
11:32
(2) Печатаю накладную при печати надо вытащить штрихкод товара. Но У одного товара могут буть несколько штихкодов.
4 Wobland
 
05.11.12
11:33
(3) ага
5 Wobland
 
05.11.12
11:34
я б итоги сделал да обходил бы себе дерево спокойно..
6 SachoZ
 
05.11.12
11:35
(0) а как ты определяешь какой ШК "нужный"?
7 kyrgyz
 
05.11.12
11:36
(5) Обход ведь не оптимален.
8 kyrgyz
 
05.11.12
11:37
(6) В РС штрихкоды есть единица измерения  в документе расх накладная тоже...
9 kyrgyz
 
05.11.12
11:38
Вот так не рабтает

Для каждого ТекСтрока Из ЗапросТовары Цикл
       ТекСтрока.Представление = ПреобразоватьНоменклатуру(ТекСтрока.Номенклатура);    
       Попытка
           СтуктураПоиска = Новый Структура("Владелец");
           СтуктураПоиска.Владелец = ТекСтрока.Номенклатура;
           Если ВыборкаДетальныеЗаписиШК.НайтиСледующий(СтуктураПоиска) Тогда
               ТекСтрока.Штрихкод = ВыборкаДетальныеЗаписиШК.Штрихкод;
           Иначе
               ТекСтрока.Штрихкод = "0000000000000";
           КонецЕсли;
           //ТекСтрока.Штрихкод = ПолучитьШтрихКод(ТекСтрока.Номенклатура,ТекСтрока.ЕдиницаИзмеренияНаименование).Штрихкод;
       Исключение
           ТекСтрока.Штрихкод = "0000000000000";
       КонецПопытки;
       ТекСтрока.КолПозиции = 1;
   КонецЦикла;
10 Wobland
 
05.11.12
11:39
я против того, чтобы искать в цикле. ведь для этого боги дали нам запросы
11 SachoZ
 
05.11.12
11:39
(8) И что дальше? На одну ед. изм. только один шк?
12 kyrgyz
 
05.11.12
11:40
(11) Ну конечно же Или я ошибаюсь?
13 BuHu
 
05.11.12
11:41
(9) лучше в запросе по товарам сразу получить ШК, но если так не хочется править тот запрос , то результат своего выгружай в ТЗ и потом через найтистроки()
14 kyrgyz
 
05.11.12
11:42
(11) У меня Предварительно для печати есть некий большой запрос. Но для поиска ШК предыдыущий прогер ссылался на процедуру где каждый раз делала запрос.

Я хоть пытаюсь сделать один запрос и сохраняя ее в оперативе искать при обходе ТЧ.
15 SachoZ
 
05.11.12
11:43
(12) так а в чем тогда вопрос?

       |        ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.Штрихкоды КАК Штрихкоды
       |        ПО РеализацияТоваровУслугТовары.Номенклатура = Штрихкоды.Владелец
       |            И РеализацияТоваровУслугТовары.ЕдиницаИзмерения = Штрихкоды.ЕдиницаИзмерения

Даст тебе только те записи из двух регистров где:

Номенклатура = Штрихкоды.Владелец
И
ЕдиницаИзмерения = Штрихкоды.ЕдиницаИзмерения
16 SachoZ
 
05.11.12
11:46
(14) При большой ТЧ имхо будет оптимальней даже мелкими запросами + может быть мелкие запросы именно и сделаны для оптимизации, не всякий может правильно составить большой запрос который будет оптимальней чем несколько мелких.
17 Wobland
 
05.11.12
11:49
(14) ух ты! незаполненность ЛК налицо?
18 kyrgyz
 
05.11.12
12:00
(16) Запросом вытащил но при обходе строк для вывода другим циклом не нахожу их
19 SachoZ
 
05.11.12
12:02
(18) телепаты в отпуске, код покажи.
20 kyrgyz
 
05.11.12
12:04
(16) Предыдцщий сообщение было для (15)
В доке в среднем по 70 строк  ипредыдущий кодер делал столько раз запрос. А я хоть пытаюсь это все в один зарос засунуть. Запрос отбирает но при проходе по строке печати не могуи из запроса выудить нужное значение.
21 kyrgyz
 
05.11.12
12:05
(19) Выше два кусочка кода этого разве не достаточно?
22 zladenuw
 
05.11.12
12:09
(20) да хоть 100500, правильный запрос. и ты получишь нужный ШК. тебе на печать нужно получить последний ШК или какой ?
23 kyrgyz
 
05.11.12
12:16
(22) Чуть-чуть предыстории.
У Т П, у всех товаров заненсены были штирхкода по штучным товарам. Заказчик попросил загрузить штрихкода по коробокам.
Я их удачно загрузил. В итоге в регистре сведений по каждому товару появились дополнительные штрихкода с единицой измерения коробка.
Но я не знал что предыдущий спец не учел что ШК могут быть нескольок у одного и того же товара и была у него функция

Функция ПолучитьШтрихКод(Владелец) Экспорт

   Запрос = Новый Запрос("
   |ВЫБРАТЬ ПЕРВЫЕ 1
   |    РегШтрихкоды.ТипШтрихкода,
   |    РегШтрихкоды.Штрихкод,
   |ИЗ
   |    РегистрСведений.Штрихкоды КАК РегШтрихкоды
   |ГДЕ                                                                            
   |    РегШтрихкоды.Владелец = &Владелец  и
   |");

   Запрос.УстановитьПараметр("Владелец"                  , Владелец);
     Выборка = Запрос.Выполнить().Выгрузить();

   Если Выборка.Количество() > 0 Тогда
       ПолученныйШтрихкод = Выборка[0];
   Иначе
       ПолученныйШтрихкод = Неопределено;
   КонецЕсли;

   Возврат ПолученныйШтрихкод;

КонецФункции // ПолучитьШтрихКод()

И ссылался к нему прямо в цикле. Ладно пусть в цикле. Но после ввода новых штрихкодов документ вытаскивает первый встречный ШК Вот я и хочу это дело подправить, внести филтр еще по ЕД имз....
24 zladenuw
 
05.11.12
12:17
(23) а добавить условие на ед в этом запросе ? была не судьба ?
25 SachoZ
 
05.11.12
12:18
В (0) результат запроса вернет нужный тебе шк:
ВыборкаДетальныеЗаписиШК.Штрихкод
26 kyrgyz
 
05.11.12
12:21
(25) Так это все вытаскивает проблема в том что при песати не могу из запроса вытащить.
27 kyrgyz
 
05.11.12
12:21
тупо перебор работает :)

Для каждого ТекСтрока Из ЗапросТовары Цикл
       ТекСтрока.Представление = ПреобразоватьНоменклатуру(ТекСтрока.Номенклатура);    
       ТекСтрока.Штрихкод = "0000000000000";
       Попытка
           //СтуктураПоиска = Новый Структура("Владелец");
           //СтуктураПоиска.Владелец = ТекСтрока.Номенклатура;
           //Если ВыборкаДетальныеЗаписиШК.НайтиСледующий(СтуктураПоиска) Тогда
           //    ТекСтрока.Штрихкод = ВыборкаДетальныеЗаписиШК.Штрихкод;
           //Иначе
           //    ТекСтрока.Штрихкод = "0000000000000";
           //КонецЕсли;
           //ТекСтрока.Штрихкод = ПолучитьШтрихКод(ТекСтрока.Номенклатура).Штрихкод;
           Пока ВыборкаДетальныеЗаписиШК.Следующий() цикл
               Если  ТекСтрока.Номенклатура = ВыборкаДетальныеЗаписиШК.Владелец Тогда
                   ТекСтрока.Штрихкод = ВыборкаДетальныеЗаписиШК.Штрихкод;
                   прервать
               КонецЕсли;
           КонецЦикла;    
       Исключение
           ТекСтрока.Штрихкод = "0000000000000";
       КонецПопытки;
       ТекСтрока.КолПозиции = 1;
   КонецЦикла;
28 zladenuw
 
05.11.12
12:22
покажи запрос товары свой. а хотя не показывай. вот там сделай соединение с РС ШК с условием владелец и ед. и будет тебе счастье
Требовать и эффективности, и гибкости от одной и той же программы — все равно, что искать очаровательную и скромную жену... по-видимому, нам следует остановиться на чем-то одном из двух. Фредерик Брукс-младший