Имя: Пароль:
1C
1C 7.7
v7: Как найти элемент справочника по его периодическому реквизиту (его значению)?
,
0 katerinaUniv
 
07.06.15
21:41
Добрый вечер!
Есть справочник номенклатура, есть реквизит периодический (задается вручную и обработкой при загрузке сведений) кодФ. Мне необходимо при загрузке из хмл по этому периодическому реквизиту найти элемент справочника номенклатура.

Помогите пожалуйста...
1 RomanYS
 
07.06.15
21:45
по текущему значению, или по всей истории?
2 ДенисЧ
 
07.06.15
21:47
(картинка барт) Я никогда не стану использоватьт запросы!
3 RomanYS
 
07.06.15
21:48
предварительно обойди весь справочник(можно запросом), помести все пары реквизит-ссылка в список значений, потом будешь быстро получать
Ссылка = Список.Получить(ЗначениеРеквизита);
4 katerinaUniv
 
07.06.15
21:49
(1) желательно по всей истории
(1), (2) ну не помню я запросы в 7.7, помогите пожалуйста с текстом
5 RomanYS
 
07.06.15
21:52
(4) запросом в 7.7 историю не получишь - только срез
(3) остается в силе, только придется использовать объект "периодический" чтобы собрать кэш-список
6 RomanYS
 
07.06.15
21:52
+(3) будет работать только если реквизит строковый
7 katerinaUniv
 
07.06.15
21:54
(6) кодФ это строковый реквизит
8 katerinaUniv
 
07.06.15
21:54
Перем Запрос, ТекстЗапроса, Таб;
    //Создание объекта типа Запрос
    Запрос = СоздатьОбъект("Запрос");
    ТекстЗапроса =
    "//{{ЗАПРОС(Сформировать)
    |Номенклатура = Справочник.Номенклатура.ТекущийЭлемент;
    |КодПоФерреро = Справочник.Номенклатура.КодПоФерреро;
    |Условие(КодПоФерреро=""77098304"");
    |"//}}ЗАПРОС
    ;
    // Если ошибка в запросе, то выход из процедуры
    Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда
        Возврат;
    КонецЕсли;

    // Подготовка к заполнению выходных форм данными запроса
    Таб = СоздатьОбъект("Таблица");
    Таб.ИсходнаяТаблица("Сформировать");
    // Заполнение полей "Заголовок"
    Таб.ВывестиСекцию("Заголовок");
    Состояние("Заполнение выходной таблицы...");
    Таб.Опции(0, 0, Таб.ВысотаТаблицы(), 0);
    // Вывод заполненной формы
    Таб.ТолькоПросмотр(1);
    Таб.Показать("Сформировать", "");
9 katerinaUniv
 
07.06.15
21:54
(8) ничего не вернул
10 katerinaUniv
 
07.06.15
21:56
(9)хотя такая позиция есть в справочнике
11 KUBIK
 
07.06.15
21:57
|КодПоФерреро = Справочник.Номенклатура.ТекущийЭлемент.КодПоФерреро;
12 katerinaUniv
 
07.06.15
21:57
очень не хочу каждую позицию в справочнике обходить
и искать код
13 RomanYS
 
07.06.15
21:59
(8) это значение последнее?
вообще запросы 7.7 с периодическими реквизитами работают не очень, значения дают только на конечную дату, а как работают условия - мне не известно
14 RomanYS
 
07.06.15
22:00
(12) сделай (3)+(5), быстрее только прямые запросы
15 katerinaUniv
 
07.06.15
22:02
(14) не понимаю. это же как в (8)
16 RomanYS
 
07.06.15
22:06
(15) нет
у тебя одно значение в файле или несколько?
17 katerinaUniv
 
07.06.15
22:07
несколько
18 katerinaUniv
 
07.06.15
22:07
я просто почти не спала 2 ночи и сильно туплю...
19 katerinaUniv
 
07.06.15
22:07
у меня хмл с другой проги, там я читаю список заказов
20 katerinaUniv
 
07.06.15
22:08
и каждого заказа есть таб часть, соответственно в хмл файле есть сегмент order и подчиненный ему product
21 katerinaUniv
 
07.06.15
22:08
этих product может быть любое количество
22 katerinaUniv
 
07.06.15
22:09
product - описывается, какая номенклатура в каком количестве по какой цене продана
23 katerinaUniv
 
07.06.15
22:09
номенклатуру пытаюсь найти по коду ферреро
24 katerinaUniv
 
07.06.15
22:09
который является строковым периодическим реквизитом
25 katerinaUniv
 
07.06.15
22:10
у меня голова кругом, даже это не сработало:

Если спрНом.НайтиПоНаименованию(элПрод.ВыбратьУзел("DESCRIPTION").Значение) = 1 Тогда
                ном = спрНом.ТекущийЭлемент();              
                докРеал.Номенклатура = ном;
                докРеал.Единица = ном.БазоваяЕдиница;
                ценаРеал = ном.ЦенаФеррейро.получить(ТекущаяДата());
                докРеал.СтавкаНДС = ном.СтавкаНДС;
            КонецЕсли;
26 RomanYS
 
07.06.15
22:12
Список = СоздатьОбъект("СписокЗначений");
Цикл .. по номенклатуре
  Цикл .. по истории(здесь придется использовать "периодический")
    Список.Установить(ЗначениеРеквизитаИзИстории, Спр.ТекущийЭлемент);
  КонецЦикла;
КонецЦикла;

Цикл по файлу
  Номенклатура = Список.Получить(ЗначениеРеквизитаИзФайла);
..
27 katerinaUniv
 
07.06.15
22:13
как сделать цикл по истории?
28 katerinaUniv
 
07.06.15
22:13
по номенклатуре я сделаю тупо выборку
29 RomanYS
 
07.06.15
22:16
(27) точно не скажу, смотри СП
примерно
История = СоздатьОбъект("Периодический");
История.ИспользоватьОбъект(тут параметры);
История.ВыбратьЗначения()
Пока История.ПолучитьЗначение() = 1 Цикл
..
30 RomanYS
 
07.06.15
22:17
(24) феерично, зачем периодический?
31 katerinaUniv
 
07.06.15
22:17
нашла примерный код, оказывается аналогичное было написано. только там пишется все не в списокЗначений, а в талицуЗначений
32 katerinaUniv
 
07.06.15
22:18
(30) он меняется во времени, это что-то типа штрихкода
33 katerinaUniv
 
07.06.15
22:18
так диктует дисьрибьютор. там много таких фееричных вещей :.( не подскажешь, как поиск по таблицеЗначений в 7.7 идет?
34 RomanYS
 
07.06.15
22:20
(31) таблица чуть медленнее чем сз
(32) в данном случае лучше подчиненный справочник
(33) я семерку месяц назад видел, а у тебя конфигуратор с СП
35 katerinaUniv
 
07.06.15
22:22
(34) тогда переделаю под сз. спасибо тебе большое!!!
36 Попытка1С
 
07.06.15
22:24
А нужен ли вообще реквизиту КодПоФерреро переодическое свойство?

Может ну его нафиг?
37 katerinaUniv
 
07.06.15
22:25
(37) не разрешают (((((
38 Попытка1С
 
07.06.15
22:28
1c++ используется?
39 RomanYS
 
07.06.15
22:29
(37) переделай на подчиненный справочник: будешь иметь легко доступную историю и возможность быстрого поиска.
Лучше никогда не использовать поиск по периодическому реквизиту
40 katerinaUniv
 
07.06.15
23:12
(40)учту на будущее, возможно переделаю, если позволят
Независимо от того, куда вы едете — это в гору и против ветра!