Помогите разобраться

Тема в разделе "1C и всё что с ней связано", создана пользователем Lotar, 5 мар 2009.

  1. Lotar

    Lotar Гость

    1С 7.7 Торговля+Склад
    В справочник Номенклатура добавлены следующие реквизиты: ФлВозврТары (Тип значения Числовой) и ВозврТара (Тип значения Справочник.Номенклатура). ФлВозврТары принимает значение равное 0 если ВозврТара не определена и 1 иначе. Необходимо сделать следующее: в документе Реализация по нажатию добавленной кнопки каждый элемент в таблице проверяется на наличие ВозврТара через ФлВозврТары, если элемент таблицы имеет ВозврТара тогда надо добавить в таблицу новый элемент с наименованием ВозврТара текущего элемента и количеством его же. Но если в таблице уже есть такая позиция, то надо просто изменить ее количество. Например: есть в справочнике Номенклатура товар Творог 15кг. ВозврТара для него установлена позицией Номеклатуры Ведро 15кг, по нажатию кнопки в док.Реализация должна произвестись проверка, есть ли позиция Ведро 15кг в таблице, если есть, то прибавить к количество творог 15кг к тому количеству ведер, то что уже есть. Если же позиции Ведро 15кг нет, то добавить новую позицию Ведро 15кг и проставить количество.

    Проблема в следующем если в таблице имеется несколько позиций с одной и той же ВозврТара то подсчет идет не правильно. Например если добавить в таблицу 10 строк товаров с одинаковой ВозврТара, тогда 3, 5, 7, 9 строка считаться не будет. То есть сначала считаются первые две, третья не считается, а потом через одну. Никак не найду в чем причина.

    Вот код который я наваял. Особенно не смейтесь если что. Программлю на 1с неделю всего.

    Функция ПоискВозврТары(ВозврТара, Колво)

    ВыбратьСтроки();
    Пока ПолучитьСтроку()=1 Цикл
    Если Номенклатура = ВозврТара Тогда
    Количество = Количество+Колво;
    Возврат 1;
    КонецЕсли;
    КонецЦикла;
    НоваяСтрока();
    Номенклатура = ВозврТара;
    Количество = КолВо;
    Возврат 0;

    КонецФункции

    Процедура ПоКнопкеВозврТара()
    ВыбратьСтроки();
    Пока ПолучитьСтроку()=1 Цикл
    НомСтр=НомерСтроки;
    Если Номенклатура.ФлВозврТары = 1 Тогда
    СтрНайденная=Номенклатура.ВозврТара;
    КолвоНайденное=Количество;
    ПоискВозврТары(СтрНайденная, КолвоНайденное);
    КонецЕсли;
    НомерСтроки=НомСтр+1;

    КонецЦикла;

    КонецПроцедуры
     
  2. b00tch

    b00tch Гость

    внутри цикла, в функции, еще раз вызывается ВыбратьСтроки(), позиционирование выборки при этом сбивается... в функции используй ПолучитьСтрокуПоНомеру()...
    а вообще конечно код ужасен... (ничего личного, эт я так, чт0бы ты не расслаблялс0... ххе)
     
  3. Lotar

    Lotar Гость

    На самом деле позиционирование выборки я возвращаю назад вот этим НомерСтроки=НомСтр+1;
    Думал что возвращаю. На самом деле этим я переставлял текущую позицию на другую строку и получалась лажа. Разбираюсь сам с нуля поэтому ошибся подумав, что изменяя НомерСтроки можно переключиться на нужную мне строку.
    Спасибо за ПолучитьСтрокуПоНомеру() ее то мне и не хватало. Теперь при выходе из функции возвращаю позиционирование строк на ту, что было до вызова функции и все работает. То есть заменил НомерСтроки=НомСтр+1; на
    ПолучитьСтрокуПоНомеру(НомСтр); И в цикле сделал счетчик текущей строки.

    Кстати, а чем мой код ужасен? Я не для того чтобы обидеться, а для того, чтобы в нужную сторону продвигаться. :)
     
  4. vbs

    vbs Well-Known Member

    Регистрация:
    18 фев 2007
    Сообщения:
    1.708
    Симпатии:
    3
    Кстати, а чем мой код ужасен? Я не для того чтобы обидеться, а для того, чтобы в нужную сторону продвигаться.
    Для того, чтобы нормально продвигаться, надо не только стиль программирования совершенствовать, но и саму среду 1С представлять как следует.
    Успехов новичку !
     
  5. Vanno

    Vanno Гость

    да насчет кода это да, а чтобы разобраться в таких вещах, полезно отладчиком пользоваться, оч. помогает. иногда бывает "пишешь-пишешь пашешь-пашешь" а потом не работает, так отладчик на все глаза открывает :(
     
Загрузка...

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