Имя: Пароль:
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
Если метки есть в таблице на форме, то достаточно при переносе в другую табличную часть взять только  нужные. Удалять непомеченные из ТЗ не обязательно при этом.
AdBlock убивает бесплатный контент. 1Сергей