Имя: Пароль:
1C
1C 7.7
v7: Условие при выборе документа
0 msk-07
 
12.02.13
00:23
Доброй всем ночи, мне необходимо отобрать все документы перемещение ТМЦ у которых склад получатель совпадает со складом который я выбираю в обработке. Делаю так

Если (Док.Вид() <>"ПеремещениеТМЦ")   И (Склад <> СкладПеремещение) Тогда

По ни чего не выходит, упорно выбираются все документы с выбранным складом в обработке, хотя чего проще поставить условие, но не как не пойму как это сделать
Делала так

Если (Док.Вид() <>"ПеремещениеТМЦ")   И (Док.Склад.Получить() <> "СкладПолучатель")

Тоже не получается, может кто подскажет?
1 msk-07
 
12.02.13
00:23
опечатался( */делал
2 Aleksey
 
12.02.13
00:24
это что за бред? Склад <> СкладПеремещение)
3 msk-07
 
12.02.13
00:24
Хорошо, а как правильно?
4 Aleksey
 
12.02.13
00:25
Зачем на вид проверять, почему нельзя сразу выбирать определенного вида документы?
5 msk-07
 
12.02.13
00:25
СкладПеремещение это реквизит из документа перемещения
6 Aleksey
 
12.02.13
00:25
(5) Ну так и проверяй
ВыбСклад и Док.Склад
7 Aleksey
 
12.02.13
00:26
* ВыбСклад и Док.СкладПеремещение
8 msk-07
 
12.02.13
00:26
ну проверка, для того чтобы точно документ предрешения туда попадал
9 msk-07
 
12.02.13
00:26
прости, не сосем понял (7)
10 Aleksey
 
12.02.13
00:27
(8) Т.е.
Док=СоздатьОбъект("Документ.ПеремещениеТМЦ")
уже не кошерно и надо все доки шерстит?
11 msk-07
 
12.02.13
00:27
СписДок.УдалитьВсе();
   Док=СоздатьОбъект("Документ");    

   Док.ВыбратьПоЗначению(НачДат,КонДат,"Склад",ВыбКонтрагент); //заменить на запрос
   ТекПоз=0;
   Пока Док.ПолучитьДокумент()=1 Цикл
       Если Док.ПометкаУдаления()=1 Тогда
           Продолжить;
       КонецЕсли;
       

                                                         
       Если (Док.Вид() <>"ПеремещениеТМЦ")   И (Склад <> СкладПеремещение) Тогда
           Продолжить;
       КонецЕсли;
12 Aleksey
 
12.02.13
00:28
(9) Я тоже не совсем понял твой замысел. такое ощущения что выдранно из контекста, т.е. на входе какой то запрос или выборка
13 BlackSeaCat
 
12.02.13
00:28
(9) Думаешь, тебя можно понять по ОДНОЙ строчке кода?
14 Aleksey
 
12.02.13
00:28
Док.ВыбратьПоЗначению(НачДат,КонДат,"Склад",ВыбКонтрагент); - это очепятка? или у тебя ВыбКонтрагент = справочник.склады?
15 msk-07
 
12.02.13
00:29
неопечатка, это идентификатор, так обозвали =(
16 msk-07
 
12.02.13
00:30
ВыбКонтрагент = справочник.склады?
17 msk-07
 
12.02.13
00:30
угу
18 Aleksey
 
12.02.13
00:30
Док=СоздатьОбъект("Документ.ПеремещениеТМЦ");    
Док.УстановитьФильтр(1,0);
Док.ВыбратьДокументы();
Пока Док.ПолучитьДокумент()=1 Цикл
  Если (ВыбКонтрагент <> Док.СкладПеремещение) Тогда
     Продолжить;
  КонецЕсли;
19 BlackSeaCat
 
12.02.13
00:31
(11) Ага, уже лучше.

Во-первых, см. (10)

Во-вторых, если интересно, в чем твоя ошибка, то правильно вот так:

Если (Док.Вид() <>"ПеремещениеТМЦ") ИЛИ (Склад <> СкладПеремещение) Тогда
           Продолжить;
КонецЕсли;

Хотя и так коряво, поэтому (10) и

Если Склад <> СкладПеремещение Тогда
           Продолжить;
КонецЕсли;
20 Aleksey
 
12.02.13
00:32
Не склад а выбКонтрагент (у нас же так реквизит называется)
и не СкладПеремещение, а Док.СкладПеремещение  - это же реквизит документы
21 msk-07
 
12.02.13
00:33
Скажите а что нужно делать чтобы так программировать хорошо?
22 BlackSeaCat
 
12.02.13
00:34
(31) Сначала думать, потом - кодить.
23 msk-07
 
12.02.13
00:39
Но теперь опять ошибка

сли (ВыбКонтрагент <> Док.СкладПеремещение) Тогда

Поле агрегатного объекта не обнаружено (СкладПеремещение)
24 Aleksey
 
12.02.13
00:45
(23) Правильно, ты не поменял
Док=СоздатьОбъект("Документ");
на
Док=СоздатьОбъект("Документ.ПеремещениеТМЦ");
25 msk-07
 
12.02.13
00:49
Подправил((
У меня сейчас так
Док=СоздатьОбъект("Документ.ПеремещениеТМЦ");    
//    Док.УстановитьФильтр(1,0);      
       Док.ВыбратьПоЗначению(НачДат,КонДат,,);      
   Док.ВыбратьДокументы();
   Пока Док.ПолучитьДокумент()=1 Цикл
       Если (ВыбКонтрагент <> Док.СкладПолучатель) Тогда
           Продолжить;
       КонецЕсли;
       
           
       СписДок.ДобавитьЗначение(Док.ТекущийДокумент());
       ТекПоз= ТекПоз+1;
       СписДок.Пометка(ТекПоз,1);
   КонецЦикла;
26 msk-07
 
12.02.13
00:50
ну просто в обработке отбирается еще отрезок времени
27 Aleksey
 
12.02.13
01:40
Док.ВыбратьПоЗначению(НачДат,КонДат,,);  удали
   Док.ВыбратьДокументы(НачДат,КонДат); - вот так надо
28 Aleksey
 
12.02.13
01:41
Док.УстановитьФильтр(1,0);  - зря удалил. это фильтр отбирать проведенные и не помеченные на удаления. сейчас к тебе всё подряд будет валиться, ну или добавь

Если Док.Проведен()=0 Тогда
  Продолжить;
КонецЕсли;
29 Злопчинский
 
12.02.13
04:06
(28) правильнее конечно фильтр наложить, но если некритично - я предпочитаю юзать проверку ввиду ея большей читабельности
2 + 2 = 3.9999999999999999999999999999999...