Имя: Пароль:
1C
1C 7.7
v7: Работа с ТЗ что неправильно в коде?
0 IceHummer
 
07.07.12
23:04
В ТИС на основании "отчета ККМ" вводим "Возврат от покупателя". При этом модально открываем форму обработки. Суть обработки: возможность  галками отметить в списке товар и количесво подлежащее возврату, выгрузить в табличную часть "Возврат от покупателя".
   На форме есть элемент ТЗ - "Таблица". В нее выгружаем ТЗ из документа "возврат от покупателя"(табличную часть). Добавляем 2 колонки "Вернуть"(в ней ставим галки) и ВозврКол(Количество к возврату). Далее нужно удалить неотмеченые строки. Здесь у меня проблема. Написал код. Вроде должно работать, но получается какая-то ерунда. Посмотрите, пожалуйста, в чем ошибка.


   Процедура Сформировать()
       Таблица.ВыбратьСтроки();
   Пока Таблица.ПолучитьСтроку()=1 Цикл
   Если Таблица.вернуть=2
   тогда
   Таблица.количество=таблица.ВозврКол;
   Таблица.Сумма=Таблица.количество*Таблица.цена;
   иначе
   Таблица.УдалитьСтроку();
   КонецЕсли;
   КонецЦикла;
   Таблица.УдалитьКолонку("Вернуть");
   Таблица.УдалитьКолонку("ВозврКол");
   КонецПроцедуры
1 andrewks
 
07.07.12
23:05
Пока Таблица.ПолучитьСтроку()=1 Цикл
  ...
   Таблица.УдалитьСтроку();

Расстрелять
2 Злопчинский
 
07.07.12
23:07
строку удалил - какая строка стала текущей и как она изменится при сдедующем ПолучитьСтроку().?
обходи ТЗ обратной выборкой с конца в начало. тогда удаленныен строки  не будут ни на что влиять
3 Скользящий
 
07.07.12
23:08
4 IceHummer
 
07.07.12
23:11
Спасибо, сейчас переделаю.
5 andrewks
 
07.07.12
23:12
(3) чё-то там оба варианта какие-то извращенские.

вар.1
Для нс=-ТЗ.КоличествоСтрок() по -1 Цикл

вар.2

нс=1;
Пока нс<=ТЗ.КоличествоСтрок() Цикл
...
Если (Условие) Тогда
ТЗ.УдалитьСтроку();
Иначе
нс=нс+1;
КонецЕсли;
...
КонецЦикла;
6 IceHummer
 
07.07.12
23:19
Еще раз спасибо всем. Все заработало!!
Воспользовался вариантом из (3)

Пока Таблица.ПолучитьСтроку()=1 Цикл
       ~начало:
       Если Таблица.вернуть=2
       тогда
           Таблица.количество=таблица.ВозврКол;
           Таблица.Сумма=Таблица.количество*Таблица.цена;
       иначе
           Таблица.УдалитьСтроку();
           Если Таблица.НомерСтроки<>0 Тогда
         Перейти ~начало;
КонецЕсли;
       КонецЕсли;


   КонецЦикла;
7 IceHummer
 
07.07.12
23:21
Еще есть вопрос, но для него лучше создам другую тему.
8 Злопчинский
 
07.07.12
23:22
уродское решение неправославное с метками.
.
КС = ТЗ.КоличествоСтрок();
для ы=-КС по -1
цикл
 ТЗ.ПолучитьСтрокуПоНомеру(-ы);
 Если (Условие)
 тогда
   ТЗ.УдалитьСтроку();
 конецЕсли;
КонецЦикла;
9 SnarkHunter
 
07.07.12
23:31
(8)+100500
10 Азат
 
07.07.12
23:33
(8) а чо цикл "пока" как вариант не катит?
11 SnarkHunter
 
07.07.12
23:34
(10)Как вариант и метки катят...
12 IceHummer
 
07.07.12
23:34
(8)
(9)
Главное, работает)))
13 SnarkHunter
 
07.07.12
23:37
(12)Месье знает толк в извращениях...
14 Азат
 
07.07.12
23:39
(11) за метки по рукам на первом курсе били((
15 SnarkHunter
 
07.07.12
23:40
(14)Надо было по голове, при чем тут руки... :-)
16 FN
 
08.07.12
00:03
(0) а не проще ли будет пользователя ввести на основании и удалить лишние строки?
17 IceHummer
 
08.07.12
00:14
(16) Что-то я не понял вопроса))
Самому интересно стало. Кто что думает, может и правда проще будет?
Как это сделать?
18 IceHummer
 
08.07.12
00:16
Кстати, как можно грамотно передать ТЗ из модальной формы обратно в "Возврат от покупателя"? Я сделал через глПеременную. Может можно лучше и правильнее.
19 FN
 
08.07.12
00:16
(17)
Суть обработки: возможность  галками отметить в списке товар и количесво подлежащее возврату, выгрузить в табличную часть "Возврат от покупателя".

вот нафига это? при вводе на основании обычно копируется вся табличная часть в новый документ - пользователю достаточно удалить лишние строки. В чем суть обработки?
20 GreyK
 
08.07.12
00:21
(18) Через обработку подбора правильно будет.
21 IceHummer
 
08.07.12
00:31
(19)  Такая задача была поставлена. При вводе возврата на основании отчет ккм, нужно выбирать конкретный товар из всего отчета. Отчет - это массив всех продаж за день, а от туда нужно выбрать отдельную продажу. В таблице галочками нужно отметить какой товар возвращается, какое количество и именно этот товар и должен пробрасываться. Так же нельзя вернуть одним возвратом товар проданный разными продавцами(условие задачи). Обязательно пробрасывать продавца.
22 КонецЦикла
 
08.07.12
00:33
(21) Сделай по аналогии с заполнением заказа поставщику (см. кнопку "Заполнить")
Будет зашибенско универсально (если нужно конечно) и по-типовому, всем понятно
23 IceHummer
 
08.07.12
00:33
(19) Если из большова массива удалять вручную строки и менять количество, то будет долго и неудобно. Плюс замут с продавцами.
24 Мимохожий Однако
 
08.07.12
07:33
Если метки есть в таблице на форме, то достаточно при переносе в другую табличную часть взять только  нужные. Удалять непомеченные из ТЗ не обязательно при этом.
Чтобы обнаруживать ошибки, программист должен иметь ум, которому доставляет удовольствие находить изъяны там, где, казалось, царят красота и совершенство. Фредерик Брукс-младший