• Курсы Академии Кодебай, стартующие в мае - июне, от команды The Codeby

    1. Цифровая криминалистика и реагирование на инциденты
    2. ОС Linux (DFIR) Старт: 16 мая
    3. Анализ фишинговых атак Старт: 16 мая Устройства для тестирования на проникновение Старт: 16 мая

    Скидки до 10%

    Полный список ближайших курсов ...

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

  • Автор темы Lotar
  • Дата начала
L

Lotar

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

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

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

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

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

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

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

КонецЦикла;

КонецПроцедуры
 
B

b00tch

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

Lotar

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

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

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

vbs

Кстати, а чем мой код ужасен? Я не для того чтобы обидеться, а для того, чтобы в нужную сторону продвигаться.
Для того, чтобы нормально продвигаться, надо не только стиль программирования совершенствовать, но и саму среду 1С представлять как следует.
Успехов новичку !
 
V

Vanno

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

Обучение наступательной кибербезопасности в игровой форме. Начать игру!