7.7 Запутался с поиском элемента

Тема в разделе "Конфигурирование на платформе "1С:Предприятие 7.7"", создана пользователем n_h, 7 фев 2011.

  1. TopicStarter Overlay
    n_h
    Offline

    n_h Опытный в 1С

    Регистрация:
    21 янв 2011
    Сообщения:
    59
    Симпатии:
    0
    Баллы:
    26
    Ситуация в следующая: есть справочник Номенклатура (перечень продукции), есть справочник позиция - с полями продукция (из Номенклатуры), количество и позиция, документ Док - с полями продукця (Из Номенклатуры), Количество, Позиция (из справочника позиция). Например делаю так:
    Код:
    Процедура Сформировать()
    Спр = создатьОбъект("Справочник.Позиция");
    
    
    ВыбратьСтроки();
    
    Пока ПолучитьСтроку()=1 Цикл
    Спр.НайтиЭлемент(Позиция);
    Если Продукция = Спр.Продукция Тогда
    
    Количество = Спр.Количество;  
    Записать();
    
    КонецЕсли
    КонецЦикла
    
    КонецПроцедуры
    
    
    Все работает, а вот если делаю:
    Код:
    Процедура Сформировать()
    Спр = создатьОбъект("Справочник.Позиция");
    
    
    ВыбратьСтроки();
    
    Пока ПолучитьСтроку()=1 Цикл
    Спр.НайтиЭлемент(Продукция);
    Если Количество = Спр.Количество Тогда
    
    Позиция = Спр.Позиция;  
    Записать();
    
    КонецЕсли
    КонецЦикла
    
    КонецПроцедуры
    
    
    Ничего не выходит, вообщем находит только если в строке Спр.НайтиЭлемент(*****); вместо ***** стоит Позиция, в чем дело никак не пойму.
  2. Бухгалтерский угодник
    Offline

    Бухгалтерский угодник Администраторы Команда форума Администратор

    Регистрация:
    29 дек 2008
    Сообщения:
    21.520
    Симпатии:
    407
    Баллы:
    104
    Странная конечно конструкция - храним количество в справочнике вместо БИ или регистров. Ну да ладно. У вас скорее всего не стоит галка "Отбор" по реквизиту в справочнике. Поэтому и не находит
  3. Hawk Eye
    Online

    Hawk Eye Гость Гость

    Продукция
    Продукция - это Номенклатура... а ищешь ты где?
  4. TopicStarter Overlay
    n_h
    Offline

    n_h Опытный в 1С

    Регистрация:
    21 янв 2011
    Сообщения:
    59
    Симпатии:
    0
    Баллы:
    26
    А ищу справочнике позиция
  5. 2man
    Offline

    2man Опытный в 1С

    Регистрация:
    26 ноя 2010
    Сообщения:
    81
    Симпатии:
    0
    Баллы:
    26
    Попробуй так:

    Код:
    Процедура Сформировать()
    Спр = создатьОбъект("Справочник.Позиция");
    
    
    ВыбратьСтроки();
    
    Пока ПолучитьСтроку()=1 Цикл
    Спр.НайтиЭлемент(Позиция.Продукция);
    //Позиция.Продукция - Реквизит с типом "Справочник.Номенклатура" с справочнике "Позиция"
    Если Продукция = Спр.Продукция Тогда
    
    Количество = Спр.Количество;  
    Записать();
    
    КонецЕсли
    КонецЦикла
    
    КонецПроцедуры
    
  6. TopicStarter Overlay
    n_h
    Offline

    n_h Опытный в 1С

    Регистрация:
    21 янв 2011
    Сообщения:
    59
    Симпатии:
    0
    Баллы:
    26
    Результат тот же...
  7. TopicStarter Overlay
    n_h
    Offline

    n_h Опытный в 1С

    Регистрация:
    21 янв 2011
    Сообщения:
    59
    Симпатии:
    0
    Баллы:
    26
    Сейчас сделано примерно так:
    Код:
    Процедура Сформировать()
    Спр = СоздатьОбъект("Справочник.Позиция"); 
    ВыбратьСтроки(); 
    Пока ПолучитьСтроку() = 1 Цикл
    Если Спр.НайтиПоРеквизиту("Продукция", Продукция, 1) = 1 Тогда 
    Продукция = Спр.Продукция;  
    Количество = Спр.Количество;
    Позиция = Спр.ТекущийЭлемент();
    
    КонецЕсли;
    КонецЦикла;
    КонецПроцедуры  
    
    
    
    
    Но это работает только до того момента как нашлась строка в справочнике с нужной продукцией, хотелось бы что бы находилось все элементы где продукция = искомой продукции т.е. например продукция1 в справочнике на позициях 1, 5, 7. Пробывал так:

    Код:
    Процедура Тест();
    Спр = СоздатьОбъект ("Справочник.Позиция");
    Зап = СоздатьОбъект ("Справочник.Коор");
    ОткрытьФорму ("Справочник.Коор"); 
    
    Спр.ВыбратьЭлементы();
    Зап.ВыбратьЭлементы();
    ВыбратьСтроки();
    Пока Спр.ПолучитьЭлемент()=1 Цикл
    Если (Спр.НайтиПоРеквизиту("Продукция", Продукция, 1) = 1) Тогда 
    Зап.Продукция = Спр.Продукция;
    Зап.Количество = Спр.Количество;
    Зап.Дата = Спр.Дата;
    Зап.Координата = Спр.ТекущийЭлемент();
    Записать();
    КонецЕсли;
    КонецЦикла;
    КонецПроцедуры  
    
    
    
    
    На что получаю Пока Спр.ПолучитьЭлемент()=1 Цикл не выбран элемент, с циклом много игрался, но так и не получил нужного результата прошу вашей помощи.
    Хотел, чтобы вся нужная продукция занеслась в отдельный справочник (чтобы видеть что рабоатет), а потом в документ формировались строки по данной продукции по методу ФИФО так что бы сумма количества в этом документе по данной продукции была равна количеству заданному перед запуском процедуры.
  8. Бухгалтерский угодник
    Offline

    Бухгалтерский угодник Администраторы Команда форума Администратор

    Регистрация:
    29 дек 2008
    Сообщения:
    21.520
    Симпатии:
    407
    Баллы:
    104
    1) Выгружаем справочник в ТЗ (1 Ссылка на элемент 2 - продукция)
    2) Сортируем по Продукции
    3) приблизительный код

    Код:
    ВыбратьСтроки();   
    Пока ПолучитьСтроку() = 1 Цикл    
    а=0;  
    Если ТЗ.НайтиЗначение(Продукция, а,"Продукция") = 0 Тогда             
    Продолжить;
    КонецЕсли;
    Для к=а По ТЗ.КоличествоСтрок() Цикл
    ТЗ.ПолучитьСтрокуПоНомеру(к);
    //проверка на продукцию
    Если ТЗ.Продукция<>Продукция Тогда
    Прервать;
    КонецЕсли;
    //аккумулируем элементы
    КонецЦикла;
    КонецЦикла;
    
    
  9. TopicStarter Overlay
    n_h
    Offline

    n_h Опытный в 1С

    Регистрация:
    21 янв 2011
    Сообщения:
    59
    Симпатии:
    0
    Баллы:
    26
    Я верно понял?
    Код:
    Процедура Тест();
    Спр = СоздатьОбъект ("Справочник.Позиция");
    ТЗ = СоздатьОбъект ("Справочник.Коор");
    
    
    ВыбратьСтроки();
    Пока ПолучитьСтроку() = 1 Цикл    
    а=0;  
    Если ТЗ.НайтиЗначение(Продукция, а,"Продукция") = 0 Тогда             
    Продолжить;
    КонецЕсли;
    Для к=а По ТЗ.КоличествоСтрок() Цикл
    ТЗ.ПолучитьСтрокуПоНомеру(к);
    //проверка на продукцию
    Если ТЗ.Продукция<>Продукция Тогда
    Прервать;
    КонецЕсли;
    //аккумулируем элементы
    КонецЦикла;
    
    
    
    
    Получаю Если ТЗ.НайтиЗначение(Продукция, а,"Продукция") = 0 Тогда .... Поле агрегатного объекта не обнаружено (НайтиЗначени), или я, что то не так понял?
  10. Mitay_D
    Offline

    Mitay_D Опытный в 1С

    Регистрация:
    16 фев 2010
    Сообщения:
    314
    Симпатии:
    0
    Баллы:
    26
    НайтиЗначение(<?>,,);
    Синтаксис:
    НайтиЗначение(<Знач>,<Строка>,<Колонка>)
    Колонка то есть такая?
  11. TopicStarter Overlay
    n_h
    Offline

    n_h Опытный в 1С

    Регистрация:
    21 янв 2011
    Сообщения:
    59
    Симпатии:
    0
    Баллы:
    26
    Есть
  12. Бухгалтерский угодник
    Offline

    Бухгалтерский угодник Администраторы Команда форума Администратор

    Регистрация:
    29 дек 2008
    Сообщения:
    21.520
    Симпатии:
    407
    Баллы:
    104
    Смотри первый пункт инструкции...
    Выгрузить справочник в ТАБЛИЦУ ЗНАЧЕНИЙ
  13. Lo1jke
    Offline

    Lo1jke Опытный в 1С

    Регистрация:
    14 мар 2011
    Сообщения:
    136
    Симпатии:
    0
    Баллы:
    26
    НайтиЭлемент()
    и
    НайтиЗначение()
    может работать без цикла по строкам, на сколько мне известно.
  14. Бухгалтерский угодник
    Offline

    Бухгалтерский угодник Администраторы Команда форума Администратор

    Регистрация:
    29 дек 2008
    Сообщения:
    21.520
    Симпатии:
    407
    Баллы:
    104
    Лолка, читайте тему внимательнее... Человеку нужно найти НЕСКОЛЬКО элементов с одинаковым реквизитом... НайтиЗначение() найдет только первый о чем и было сказано выше
  15. TopicStarter Overlay
    n_h
    Offline

    n_h Опытный в 1С

    Регистрация:
    21 янв 2011
    Сообщения:
    59
    Симпатии:
    0
    Баллы:
    26
    Если в документе заполняется несколько строк с разной продукцией, то после того как нашлась продукция из первой строки цикл заканчивается, хотя в начале же стоит
    Код:
    Пока ПолучитьСтроку() = 1 Цикл
    
    
    В чем может быть дело?
  16. Бухгалтерский угодник
    Offline

    Бухгалтерский угодник Администраторы Команда форума Администратор

    Регистрация:
    29 дек 2008
    Сообщения:
    21.520
    Симпатии:
    407
    Баллы:
    104
    Покажите текущий код
  17. TopicStarter Overlay
    n_h
    Offline

    n_h Опытный в 1С

    Регистрация:
    21 янв 2011
    Сообщения:
    59
    Симпатии:
    0
    Баллы:
    26
    Вот как то так
    Код:
    Процедура Тест();
    Спр = СоздатьОбъект ("Справочник.Позиция");
    ТЗ = СоздатьОбъект ("ТаблицаЗначений");
    ТЗ.НоваяКолонка("Продукция"); 
    ТЗ.НоваяКолонка("Количество"); 
    ТЗ.НоваяКолонка("Дата"); 
    ТЗ.НоваяКолонка("Координата");
    Спр.ВыбратьЭлементы();
    
    
    Пока Спр.ПолучитьЭлемент()<>0 Цикл
    ТЗ.НоваяСтрока();
    ТЗ.Продукция = спр.Продукция;
    ТЗ.Количество = спр.Количество;
    ТЗ.Дата = Спр.Дата;
    ТЗ.Координата = Спр.ТекущийЭлемент(); 
    КонецЦикла;
    ТЗ.Сортировать("Продукция,Дата");	
    
    ВыбратьСтроки();
    Пока ПолучитьСтроку() = 1 Цикл
    Примечание = "Нужное Количество";
    а=0;  
    Если ТЗ.НайтиЗначение(Продукция, а,"Продукция") = 0 Тогда             
    Продолжить;
    КонецЕсли;
    Для к=а По ТЗ.КоличествоСтрок() Цикл
    ТЗ.ПолучитьСтрокуПоНомеру(к); 
    //проверка на продукцию 
    Если ТЗ.Продукция<>Продукция Тогда
    Прервать;
    КонецЕсли; 	 
    //аккумулируем элементы 	
    
    НоваяСтрока();
    Продукция = ТЗ.Продукция;
    Количество = ТЗ.Количество;
    Координата = ТЗ.Координата;
    Дат = ТЗ.Дата;
    
    КонецЦикла;
    КонецЦикла;
    КонецПроцедуры
    
    
  18. Бухгалтерский угодник
    Offline

    Бухгалтерский угодник Администраторы Команда форума Администратор

    Регистрация:
    29 дек 2008
    Сообщения:
    21.520
    Симпатии:
    407
    Баллы:
    104
    НЕЛЬЗЯ внутри перебора строк добавлять новую строку.... + при заполнении ТЗ из справочника вы не учитываете группы. Их у вас нет?
  19. TopicStarter Overlay
    n_h
    Offline

    n_h Опытный в 1С

    Регистрация:
    21 янв 2011
    Сообщения:
    59
    Симпатии:
    0
    Баллы:
    26
    Точно! потом уже во время еды понял это)) а по поводу групп да их действительно нет все в одной табличной части
  20. Бухгалтерский угодник
    Offline

    Бухгалтерский угодник Администраторы Команда форума Администратор

    Регистрация:
    29 дек 2008
    Сообщения:
    21.520
    Симпатии:
    407
    Баллы:
    104
    Я вам не зря указал
    Код:
    //аккумулируем элементы 
    
    
    Собирайте их в отдельную ТЗ и потом смело добавляйте в отдельном цикле

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