7.7 Номер за пределами значения!

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

  1. TopicStarter Overlay
    Gerasimov87
    Offline

    Gerasimov87

    Регистрация:
    5 июн 2008
    Сообщения:
    1
    Симпатии:
    0
    Баллы:
    1
    При формировании прайс листа такая фигня:
    Родитель2 = Имя.ПолучитьЗначение(Строк,"Родитель");
    {Отчет.ПрайсЛист.Форма.Модуль(205)}: Номер за пределами значения!

    Код:
    Процедура ПриОткрытии() 
    ВыбНачПериода = РабочаяДата(); 
    Прод = 1; 
    ВыбСклады = Константа.ОснСклад; 
    КонецПроцедуры // ПриОткрытии 
    //******************************************* 
    // Процедура генерации запроса Сформировать. 
    Процедура Сформировать() 
    Перем Запрос, ТекстЗапроса, Таб, к; 
    Если ПустоеЗначение(ВыбСклады)=1 Тогда 
    Предупреждение("Выберите склад!"); 
    Возврат; 
    КонецЕсли; 
    Если Прод=1 Тогда 
    ВыбВидТовара = Перечисление.ВидТовара.Продукция; 
    ИначеЕсли Прод=2 Тогда 
    ВыбВидТовара = Перечисление.ВидТовара.РИП; 
    КонецЕсли; 
    //Создание объекта типа Запрос 
    Запрос = СоздатьОбъект("Запрос"); 
    ТекстЗапроса = 
    "//{{ЗАПРОС(Сформировать) 
    |Период с ВыбНачПериода по ВыбНачПериода; 
    |Наименование = Справочник.Номенклатура.Наименование; 
    |Родитель = Справочник.Номенклатура.Родитель; 
    |ВидТовара = Справочник.Номенклатура.ВидТовара; 
    |Артикул = Справочник.Номенклатура.Артикул; 
    |ДатаНачВып = Справочник.Номенклатура.НачВып; 
    |СнятоСПрва = Справочник.Номенклатура.СнятоСПрва; 
    |Группировка Артикул; 
    |Группировка ДатаНачВып; 
    |Группировка Родитель; 
    |Группировка Наименование; 
    |Группировка ВидТовара; 
    |Условие(ВидТовара в ВыбВидТовара); 
    |Условие (СнятоСПрва=0); 
    |"//}}ЗАПРОС ; 
    // Если ошибка в запросе, то выход из процедуры 
    Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда 
    Возврат; 
    КонецЕсли; 
    Табл = СоздатьОбъект("ТаблицаЗначений"); 
    Запрос.Выгрузить(Табл,,0); 
    Табл.НоваяКолонка("МелОптЦена"); 
    Табл.НоваяКолонка("ОптЦена"); 
    Табл.НоваяКолонка("РознЦена"); 
    Табл.НоваяКолонка("СтавкаНДС"); 
    
    Скл = ВыбСклады; 
    Табл.ВыбратьСтроки(); 
    Стр = 0; 
    Пока Табл.ПолучитьСтроку() = 1 Цикл 
    Стр = Стр+1; 
    Арт = СокрЛП(Табл.ПолучитьЗначение(Стр,"Артикул")); 
    Спр = СоздатьОбъект("Справочник.Номенклатура"); 
    Спр.ВыбратьЭлементы(); 
    Спр.НайтиПоРеквизиту("Артикул",Арт,1); 
    Товар = Спр.ТекущийЭлемент(); 
    
    
    СпрЦен = СоздатьОбъект("Справочник.Цены"); 
    СпрЦен.ИспользоватьВладельца(Товар); 
    СпрЦен.ИспользоватьДату(ВыбНачПериода); 
    
    Для к=1 По Перечисление.КатегорияЦенРасх.КоличествоЗначений() Цикл 
    Тип = Перечисление.КатегорияЦенРасх.ЗначениеПоНомеру(к); 
    Наим = Товар.Наименование+" "+Строка(Тип)+" цена для "+Строка(Скл); 
    СпрЦен.ВыбратьЭлементы(); 
    СпрЦен.НайтиПоНаименованию(Наим,1,1); 
    Цена = СпрЦен.Значение; 
    Ставка = СпрЦен.СтавкаНДС; 
    Если Тип = Перечисление.КатегорияЦенРасх.Крупнооптовая Тогда 
    Табл.УстановитьЗначение(Стр,"МелОптЦена",Цена); 
    ИначеЕсли Тип = Перечисление.КатегорияЦенРасх.Оптовая Тогда 
    Табл.УстановитьЗначение(Стр,"ОптЦена",Цена); 
    ИначеЕсли Тип = Перечисление.КатегорияЦенРасх.Розничная Тогда 
    Табл.УстановитьЗначение(Стр,"РознЦена",Цена); 
    КонецЕсли; 
    КонецЦикла; 
    Табл.УстановитьЗначение(Стр,"СтавкаНДС",Ставка); 
    КонецЦикла; 
    
    
    
    
    Табл.ВставитьКолонку("РодительРодителя",2); 
    
    Табл.ВыбратьСтроки(); 
    ТекСтр = 0; 
    Пока Табл.ПолучитьСтроку() = 1 Цикл 
    ТекСтр = ТекСтр+1; 
    Родитель = Табл.ПолучитьЗначение(ТекСтр,"Родитель"); 
    Х = СоздатьОбъект("Справочник.Номенклатура"); 
    Элемент = Х.НайтиЭлемент(Родитель); 
    Если Х.Уровень()>1 Тогда 
    РодительРодителя = Х.Родитель; 
    Табл.УстановитьЗначение(ТекСтр,2,РодительРодителя); 
    Иначе 
    Табл.УстановитьЗначение(ТекСтр,2,Родитель); 
    КонецЕсли; 
    
    КонецЦикла; 
    
    Табл.Сортировать("РодительРодителя,Артикул"); 
    
    Табл.ВставитьКолонку("Акция",2); 
    Табл.ВставитьКолонку("Новый",3); 
    //**************************************************** 
    ТаблицаТоваров=СоздатьОбъект("ТаблицаЗначений"); 
    Док=СоздатьОбъект("Документ.УстановлениеАкций"); 
    Док.ВыбратьДокументы(ВыбНачПериода-20,ВыбНачПериода); 
    Пока Док.ПолучитьДокумент()=1 Цикл 
    Если (Док.ДатаНач<=ВыбНачПериода) и (Док.ДатаКон>=ВыбНачПериода) Тогда 
    
    Док.ВыгрузитьТабличнуюЧасть(ТаблицаТоваров); 
    КонецЕсли; 
    КонецЦикла; 
    
    Табл.ВыбратьСтроки(); 
    ТекСтр1 = 0; 
    Пока Табл.ПолучитьСтроку() = 1 Цикл 
    ТекСтр1 = ТекСтр1+1; 
    Товар = СокрЛП(Табл.ПолучитьЗначение(ТекСтр1,"Наименование")); 
    ТаблицаТоваров.ВыбратьСтроки(); 
    Стр = 0; 
    Пока ТаблицаТоваров.ПолучитьСтроку() = 1 Цикл 
    Стр = Стр+1; 
    Товар1 = СокрЛП(ТаблицаТоваров.ПолучитьЗначение(Стр,"Товар")); 
    Если Товар=Товар1 Тогда 
    Табл.УстановитьЗначение(ТекСтр1,2,"Акция"); 
    КонецЕсли; 
    КонецЦикла; 
    ДатаНачВып = Табл.ПолучитьЗначение(ТекСтр1,"ДатаНачВып"); 
    Если ДатаНачВып>=ВыбНачПериода-30 Тогда 
    Табл.УстановитьЗначение(ТекСтр1,"Новый","Новый"); 
    КонецЕсли; 
    КонецЦикла; 
    //************************************************************ 
    Табл.ВыбратьСтроки(); 
    ТС = 0; 
    Пока Табл.ПолучитьСтроку() = 1 Цикл 
    ТС = ТС+1; 
    Ар = Табл.ПолучитьЗначение(ТС,"Артикул"); 
    Гр = Лев(Ар,2); 
    Тип =СокрЛП(Ар); 
    Если (Гр = "25") И (Тип<>"25/001") Тогда 
    Табл.УдалитьСтроку(ТС); 
    ТС = ТС-1; 
    КонецЕсли; 
    КонецЦикла; 
    
    //************************************************************ 
    Таб = СоздатьОбъект("Таблица"); 
    Таб.ИсходнаяТаблица("Таблица1"); 
    Таб.ВывестиСекцию("Верх"); 
    Т = СоздатьОбъект("ТаблицаЗначений"); 
    Табл.Выгрузить(Т); 
    Т.Свернуть("РодительРодителя","ОптЦена,МелОптЦена,РознЦена"); 
    Кол = Т.КоличествоСтрок(); 
    Для Н=1 По Кол Цикл 
    Имя = "Пром"+Н; 
    Имя= СоздатьОбъект("ТаблицаЗначений"); 
    РодительРодителя = Т.ПолучитьЗначение(Н,"РодительРодителя"); 
    Имя.НоваяКолонка("Артикул"); 
    Имя.НоваяКолонка("Акция"); 
    Имя.НоваяКолонка("Новый"); 
    Имя.НоваяКолонка("РодительРодителя"); 
    Имя.НоваяКолонка("Родитель"); 
    Имя.НоваяКолонка("Наименование"); 
    Имя.НоваяКолонка("ОптЦена"); 
    Имя.НоваяКолонка("МелОптЦена"); 
    Имя.НоваяКолонка("РознЦена"); 
    Имя.НоваяКолонка("СтавкаНДС"); 
    
    Табл.ВыбратьСтроки(); 
    Пока Табл.ПолучитьСтроку() = 1 Цикл 
    Если Табл.РодительРодителя = РодительРодителя Тогда 
    Имя.НоваяСтрока(); 
    Имя.Артикул = Табл.Артикул; 
    Имя.Акция = Табл.Акция; 
    Имя.Новый = Табл.Новый; 
    Имя.РодительРодителя = Табл.РодительРодителя; 
    Имя.Родитель = Табл.Родитель; 
    Имя.Наименование = Табл.Наименование; 
    Имя.ОптЦена = Табл.ОптЦена; 
    Имя.МелОптЦена = Табл.МелОптЦена; 
    Имя.РознЦена = Табл.РознЦена; 
    Имя.СтавкаНДС = Табл.СтавкаНДС; 
    КонецЕсли; 
    КонецЦикла; 
    Ном = Имя.КоличествоСтрок(); 
    Таб.ВывестиСекцию("Заголовок"); 
    Таб.ВывестиСекцию("РодительРодителя"); 
    Родитель = ""; 
    Родитель1=""; 
    
    
    Имя.ВыбратьСтроки(); 
    
    Строк1 =Окр((Ном/2),0); 
    Строк2 =Строк1+3; 
    
    Для Строк = 1 По Строк2 Цикл 
    Родитель2 = Имя.ПолучитьЗначение(Строк,"Родитель"); 
    Артикул = Имя.ПолучитьЗначение(Строк,"Артикул"); 
    Акция = Имя.ПолучитьЗначение(Строк,"Акция"); 
    Новый = Имя.ПолучитьЗначение(Строк,"Новый"); 
    Прим = ""; 
    Прим1 = ""; 
    
    
    Если ПустоеЗначение(Акция)=0 Тогда 
    Прим = СокрЛП(Акция) + " !!!"; 
    ИначеЕсли ПустоеЗначение(Новый)=0 Тогда 
    Прим = СокрЛП(Новый) + " !!!"; 
    КонецЕсли; 
    
    Наименование2 = Имя.ПолучитьЗначение(Строк,"Наименование"); 
    ОЦБНДС = Имя.ПолучитьЗначение(Строк,"ОптЦена"); 
    СОЦБНДС = Имя.ПолучитьЗначение(Строк,"МелОптЦена"); 
    МОЦБНДС = Имя.ПолучитьЗначение(Строк,"РознЦена"); 
    
    СтавкаНДС = СокрЛП(Имя.ПолучитьЗначение(Строк,"СтавкаНДС")); 
    
    
    Если СтавкаНДС="ОсновнаяСтавка" тогда 
    Н1=1.2; 
    Иначе 
    Н1=1; 
    КонецЕсли; 
    ОЦ = ОЦБНДС*Н1; 
    СОЦ = СОЦБНДС*Н1; 
    МОЦ = МОЦБНДС*Н1; 
    Если Строк+Строк2<=Ном Тогда 
    Родитель3 = Имя.ПолучитьЗначение(Строк+Строк2,"Родитель"); 
    Артикул1 = Имя.ПолучитьЗначение(Строк+Строк2,"Артикул"); 
    Акция1 = Имя.ПолучитьЗначение(Строк+Строк2,"Акция"); 
    Новый1 = Имя.ПолучитьЗначение(Строк+Строк2,"Новый"); 
    
    Если ПустоеЗначение(Акция1)=0 Тогда 
    Прим1 = СокрЛП(Акция1) + " !!!"; 
    ИначеЕсли ПустоеЗначение(Новый1)=0 Тогда 
    Прим1 = СокрЛП(Новый1) + " !!!"; 
    КонецЕсли; 
    
    Наименование3 = Имя.ПолучитьЗначение(Строк+Строк2,"Наименование"); 
    
    ОЦБНДС1 = Имя.ПолучитьЗначение(Строк+Строк2,"ОптЦена"); 
    СОЦБНДС1 = Имя.ПолучитьЗначение(Строк+Строк2,"МелОптЦена"); 
    МОЦБНДС1 = Имя.ПолучитьЗначение(Строк+Строк2,"РознЦена"); 
    
    СтавкаНДС1 = СокрЛП(Имя.ПолучитьЗначение(Строк+Строк2,"СтавкаНДС")); 
    
    
    Если СтавкаНДС1="ОсновнаяСтавка" тогда 
    Н2=1.2; 
    Иначе 
    Н2=1; 
    КонецЕсли; 
    ОЦ1 = ОЦБНДС1*Н2; 
    СОЦ1 = СОЦБНДС1*Н2; 
    МОЦ1 = МОЦБНДС1*Н2; 
    Иначе 
    
    Артикул1 = ""; 
    Наименование3 = ""; 
    Прим1 = ""; 
    
    ОЦ1 = ""; 
    СОЦ1 = ""; 
    МОЦ1 = ""; 
    КонецЕсли; 
    
    Если (Родитель<>Родитель2) И (Родитель1<>Родитель3) Тогда 
    Таб.ВывестиСекцию("Родитель|Колонка1"); 
    Таб.ПрисоединитьСекцию("Родитель|Колонка2"); 
    Таб.ПрисоединитьСекцию("Родитель|Колонка3"); 
    Родитель = Родитель2; 
    Родитель1 = Родитель3; 
    КонецЕсли; 
    Если (Родитель=Родитель2) И (Родитель1=Родитель3) Тогда 
    
    Таб.ВывестиСекцию("Наименование|Колонка1"); 
    Таб.ПрисоединитьСекцию("Наименование|Колонка2"); 
    Таб.ПрисоединитьСекцию("Наименование|Колонка3"); 
    
    КонецЕсли; 
    
    Если (Родитель=Родитель2) И (Родитель1<>Родитель3) Тогда 
    
    Таб.ВывестиСекцию("Наименование|Колонка1"); 
    Таб.ПрисоединитьСекцию("Наименование|Колонка2"); 
    Таб.ПрисоединитьСекцию("Родитель|Колонка3"); 
    Родитель1 = Родитель3; 
    Строк2=Строк2-1; 
    КонецЕсли; 
    
    Если (Родитель<>Родитель2) И (Родитель1=Родитель3) Тогда 
    Таб.ВывестиСекцию("Родитель|Колонка1"); 
    Таб.ПрисоединитьСекцию("Родитель|Колонка2"); 
    Таб.ПрисоединитьСекцию("Наименование|Колонка3"); 
    Родитель = Родитель2; 
    Строк=Строк-1; 
    Строк2 = Строк2+1; 
    КонецЕсли; 
    
    КонецЦикла; 
    Если Н = Кол Тогда 
    Таб.ВывестиСекцию("Подвал"); 
    КонецЕсли; 
    Таб.НоваяСтраница(); 
    
    КонецЦикла; 
    
    Таб.ПараметрыСтраницы(1,,,3,3,5,5,,1); 
    Таб.Защита(1); 
    Таб.Показать("Прайс"); 
    
    ~:КонецПроцедуры 
    
    


    P.s Перестал формироваться на один вид продукции, на другой всё работает (я про "выбор прайса")
  2. Vlad
    Offline

    Vlad Модераторы Команда форума Модератор

    Регистрация:
    16 авг 2006
    Сообщения:
    3.517
    Симпатии:
    19
    Баллы:
    29
    Почитай табличку под заголовком "Внимание", та что выше поста
  3. Хряк
    Offline

    Хряк Профессионал в 1С

    Регистрация:
    26 сен 2007
    Сообщения:
    1.447
    Симпатии:
    37
    Баллы:
    54
    Временно замени
    Имя.ВыбратьСтроки();
    на
    Имя.ВыбратьСтроку();
    и посмотри, что у тебя в таблице
  4. Akulina
    Offline

    Akulina Опытный в 1С

    Регистрация:
    30 авг 2007
    Сообщения:
    87
    Симпатии:
    0
    Баллы:
    26
    Скорее всего, количество строк в таблице Имя меньше 5-ти. Просчитайте, что в этом случае получается. Если строк 4, то Вы пытаетесь перебрать строки с 1-ой по 5-ую. Вот она и говорит, что номер за пределами значений.

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