Имя: Пароль:
1C
1C 7.7
v7: Непонятка в алгоритме
0 espanol
 
20.03.12
17:07
РезультатЗапроса.ВыбратьСтроки();
Пока РезультатЗапроса.ПолучитьСтроку() = 1 Цикл
   ТабЗнач1.ВыбратьСтроки();
   Пока ТабЗнач1.ПолучитьСтроку() = 1 Цикл
       Если (СокрЛП(РезультатЗапроса.НомерПоКаталогу) = СокрЛП(ТабЗнач1.НомерПоКаталогу)) И (СокрЛП(РезультатЗапроса.ПодразделениеКод) = СокрЛП(ТабЗнач1.ПодразделениеКод)) Тогда
           
           Если РезультатЗапроса.Количество - ТабЗнач1.Количество > 0 Тогда
               ТабЗнач2.НоваяСтрока();
               ТабЗнач2.Склад            = РезультатЗапроса.ПодразделениеНаименование;
               ТабЗнач2.ПодразделениеКод = РезультатЗапроса.ПодразделениеКод;
               ТабЗнач2.НомерПоКаталогу  = РезультатЗапроса.НомерПоКаталогу;
               ТабЗнач2.Кратность        = 1;
               ТабЗнач2.Цена             = ТабЗнач1.Цена;
               
               НовоеКоличество = РезультатЗапроса.Количество-ТабЗнач1.Количество;
               НоваяСумма = ((НовоеКоличество)*РезультатЗапроса.Сумма)/РезультатЗапроса.Количество;
               НоваяНДС   = ((НовоеКоличество)*РезультатЗапроса.СуммаНДС)/РезультатЗапроса.Количество;
       
               ТабЗнач2.Количество       = НовоеКоличество;
               ТабЗнач2.Сумма            = НоваяСумма;
               ТабЗнач2.СуммаВсего       = НоваяСумма;
               ТабЗнач2.СуммаНДС         = НоваяНДС;
           КонецЕсли;
           
           Нашелся = 1;
       КонецЕсли;
   КонецЦикла;
   
   Если Нашелся = 0 Тогда
       
       ТабЗнач2.НоваяСтрока();
       ТабЗнач2.Склад            = РезультатЗапроса.ПодразделениеНаименование;
       ТабЗнач2.ПодразделениеКод = РезультатЗапроса.ПодразделениеКод;
       ТабЗнач2.НомерПоКаталогу  = РезультатЗапроса.НомерПоКаталогу;
       ТабЗнач2.Кратность        = 1;
       ТабЗнач2.Цена             = ТабЗнач1.Цена;
       ТабЗнач2.Количество       = РезультатЗапроса.Количество;
       ТабЗнач2.Сумма            = РезультатЗапроса.Сумма;
       ТабЗнач2.СуммаВсего       = РезультатЗапроса.СуммаВсего;
       ТабЗнач2.СуммаНДС         = РезультатЗапроса.СуммаНДС;
   
   КонецЕсли;
   
   Нашелся = 0;
   
КонецЦикла;


Помогите с семерошным алгоритмом, а немного не догоняю логики 7.7.
Первая ТЗ (РезультатЗапроса) содержит список всех товаров, вторая ТЗ (ТабЗнач1) содержит список товаров, количество которых необходимо вычесть из первой ТЗ. Выбираем первую номенклатуру из РезультатЗапроса и смотрим в ТабЗнач1, если находит эту номенклатуру, да еще и в томже подразделении, то уменьшаем количество и записываем в ТабЗнач2. Если количество <= 0 то эту номенклатуру переносить уже не надо, если не находим товаров, то записываем его в ТабЗнач2.

Почему то алгоритм дает сбой и в остатках количество на 5 больше чем должно быть. Вот в чем ошибка?
1 zak555
 
20.03.12
17:13
> Помогите с семерошным алгоритмом, а немного не догоняю логики 7.7.

ту что 7, что 8 - одно и тоже
2 zak555
 
20.03.12
17:14
лучше распиши, что хочешь в итоге
3 espanol
 
20.03.12
17:14
(1) в 8 чета подобное прокатило на ура... хз в чем проблема, может в самом улгоритме есть уязвимое место, но я его не вижу
4 espanol
 
20.03.12
17:15
(2) просто может кто посмотрит свежими глазами и увидит какой недочет в алгоритме, а то я уже замучался
5 ale-sarin
 
20.03.12
17:16
(3) Этот код почти без изменений будет и в 8-ке работать. А арифметика в 7-ке и в 8-ке одинаковая, как и в дугих программах, и даже на калькуляторе.
6 МихаилМ
 
20.03.12
17:16
Пока РезультатЗапроса.ПолучитьСтроку() = 1 Цикл
   ТабЗнач1.ВыбратьСтроки();

после этого
животному, которое это написало , нажно дать по копчику
7 espanol
 
20.03.12
17:18
(6) а что тут не так?
8 zak555
 
20.03.12
17:19
(4) что хочешь в конечном счёте ?
откуда у тебя в голове родилось (0) ?
9 espanol
 
20.03.12
17:21
(8) ну я же в (0) описал....

в ТЗ1 есть все товары
в ТЗ2 есть часто товаров

надо в ТЗ1 найти товары из ТЗ2 и получить разницу


Н1 - 10     Н2 - 6
Н2 - 20

Результат:

Н1 - 10
Н2 - 14

Это если просто описать смысл
10 zak555
 
20.03.12
17:22
(9) что делать , если в ТЗ1 нет товаров ?
11 espanol
 
20.03.12
17:23
Такого не бывает в данном примере, ну если и будет то перед алгоритмом можно поставить условие Если ТЗ1.КоличествоСтрок() > 0 Тогда
12 zak555
 
20.03.12
17:24
выгружай ТЧ в ТЗ
сворачивай по товару

так же выгрузи СЗ по нему

делай запрос по СЗ и обход по нему
+ сравнивай/делай операции с ТЗ

в итоге твой результат
13 espanol
 
20.03.12
17:25
(12) сопсно я это и сделол ) но гдето утечка, вот и написал на форум чтобы посмотрели где может быть она
14 zak555
 
20.03.12
17:26
(13) в (0) не (12)
15 catena
 
20.03.12
17:36
Если Нашелся = 0 Тогда
.............        
       ТабЗнач2.Цена             = ТабЗнач1.Цена;
.............    
   КонецЕсли;
   
А ниче, что ты уже вышел из выборки ТабЗнач1? Будет цена из последней строки.

А почему нельзя слить две таблицы в одну (вторую с минусом в количестве), потом свернуть и отрезать отрицательные количества?
16 zak555
 
20.03.12
17:38
(15) > А почему нельзя слить


нельзя, тем более сливать
Глупец, лишенный способности посмеяться над собой вместе с другими, не сможет долго выносить программирование. Фредерик Брукс-младший