Имя: Пароль:
1C
1C 7.7
v7: Запрос
,
0 Renat11111
 
15.12.11
10:55
С семеркой почти не работал.

в обработке проведения документа возврата от покупателя написал запрос

       ТекстЗапроса =
       "
       |ОбрабатыватьДокументы все;
       |Номенклатура = Документ.ВозвратОтПокупателя.Номенклатура;
       |Количество = Документ.ВозвратОтПокупателя.Количество;
       |ДокРеализации = Документ.ВозвратОтПокупателя.ТекущийДокумент.ДокОснование;
       |Функция КоличествоСумма = Сумма(Количество);
       |Группировка Номенклатура без групп;
       |Условие(ДокРеализации = ДокОснование);

Он в момент первого проведения не учитывает текущий документ. Во втором да все нормально... как то странно это после 8ки как бороться?
1 1Сергей
 
15.12.11
10:56
период добавь
2 Ёпрст
 
15.12.11
10:57
(0) заместо этого, достаточно написать
ВыбратьСтроки();
Пока ПолучитьСтроку()=1 Цикл
 Сообщить(Номенклатура);
КонецЦикла;
3 Renat11111
 
15.12.11
10:59
(1) подробнее

(2) не достаточно мне нужны все возвраты с одним док основанием
4 Renat11111
 
15.12.11
11:00
Если ДокОснование.Выбран() = 1  Тогда
       
       ЕстьОшибка = 0;
       
       
       Запрос = СоздатьОбъект("Запрос");
       
       ТекстЗапроса =
       "
       |Номенклатура = Документ.Реализация.Номенклатура;
       |Количество = Документ.Реализация.Количество;
       |ТекущийДокумент = Документ.Реализация.ТекущийДокумент;
       |Функция КоличествоСумма = Сумма(Количество);
       |Группировка Номенклатура  без групп;
       |Условие(ТекущийДокумент = ДокОснование);
       |";  
       
       // Если ошибка в запросе, то выход из процедуры
       тзОстатки = СоздатьОбъект("ТаблицаЗначений");
       Запрос.Выполнить(ТекстЗапроса);
       Запрос.Выгрузить(тзОстатки);
       //тзОстатки.ВыбратьСтроку();
       
   
       
       
       
       ТекстЗапроса =
       "
       |ОбрабатыватьДокументы все;
       |Номенклатура = Документ.ВозвратОтПокупателя.Номенклатура;
       |Количество = Документ.ВозвратОтПокупателя.Количество;
       |ДокРеализации = Документ.ВозвратОтПокупателя.ТекущийДокумент.ДокОснование;
       |Функция КоличествоСумма = Сумма(Количество);
       |Группировка Номенклатура без групп;
       |Условие(ДокРеализации = ДокОснование);
       |";
       
       тзВозврат = СоздатьОбъект("ТаблицаЗначений");
       Запрос.Выполнить(ТекстЗапроса);
       Запрос.Выгрузить(тзВозврат);
       //тзВозврат.ВыбратьСтроку();
       
   
       тзВозврат.ВыбратьСтроки();
       Пока тзВозврат.ПолучитьСтроку() = 1 Цикл
           НомерСтрокиТз = 0;
           Если тзОстатки.НайтиЗначение(тзВозврат.Номенклатура,НомерСтрокиТз,"Номенклатура") = 0 Тогда // значение не найдено
               Сообщить("Внимание товара: "+тзВозврат.Номенклатура+" нет в реализации: "+ ДокОснование);
               ЕстьОшибка = 1;        
               СтатусВозврата(0);
               Возврат;
               
           Иначе
               
                тзОстатки.ПолучитьСтрокуПоНомеру(НомерСтрокиТз);
               
                Если тзОстатки.Номенклатура.Выбран() = 0 Тогда
                   Продолжить;
                   
                Иначе
                   Если тзОстатки.КоличествоСумма < тзВозврат.КоличествоСумма Тогда
                       Сообщить("Товара: "+ тзОстатки.Номенклатура+" по данной реализиции: "+тзОстатки.КоличествоСумма+" возвращается: "+тзВозврат.КоличествоСумма);
                       ЕстьОшибка = 1;  
                       СтатусВозврата(0);
                       Возврат;
                   КонецЕсли;
                КонецЕсли;
           
           КонецЕсли;
       КонецЦикла;
   КонецЕсли;
5 Ёпрст
 
15.12.11
11:02
Тогда смотри (1), без периода запрос на ТА будет всегда.
6 Renat11111
 
15.12.11
11:02
выше весь текст чтоб было понятно зачем делаю это все. Еще раз с семеркой не работал, фактически щас учусь. Запросы работают жестоко медленно, по крайней мере как я написал работает медленно.
7 Ёпрст
 
15.12.11
11:04
(6) первый запрос не нужен, достаточно ДокОснование.ВыгрузитьТабличнуюЧасть(ТЗ,НужныеКолоночки)
8 Renat11111
 
15.12.11
11:04
(5) строчку напиши которую надо вставить в запрос. Еще раз о проблеме.... в первом проведении не учитывает текущий документ возврата.
9 Ёпрст
 
15.12.11
11:05
+7 во второй нужно добавить период в текст запроса и выкинуть ТекущийДокумент
10 Renat11111
 
15.12.11
11:05
(7) это я понял уже. по поводу (5) ответь. Невероятно сложно просто. в 8-ке 5 мин и не ушло бы на такую задачу.
11 Renat11111
 
15.12.11
11:08
(9) там секундное дело, покажи как.
12 1Сергей
 
15.12.11
11:10
ТекДок = ТекущийДокумент();
       ТекстЗапроса =
       "
       |ОбрабатыватьДокументы все;
       |Период с '01.01.90' по ТекДок;
13 Renat11111
 
15.12.11
11:18
всем спасибо, отдельно (12)
14 1Сергей
 
15.12.11
11:20
(12) + хотя, это не совсем верно :)
15 Renat11111
 
15.12.11
11:27
(14) в смысле?
16 1Сергей
 
15.12.11
11:38
(15) вот, смотри. тебе нужно выбрать все документы ВозвратОтПокупателя у которых ДокОснование равен твоему ДокОснование. Так?

Запрос (0) прекрасно справляется с этим до тех пор, пока не начнут проводить Новый документ. Т.к. он находится за точкой актуальности. А запросы в 77 без указания периода выполняются до точки актуальности. В (12) мы явно указываем период до текущего документа, даже если он за ТА. НО(!), при проведении задним числом он будет брать период до текущего документа. И если будут возвраты от покупателя после текущего документа, то они в запрос не попадут
17 1Сергей
 
15.12.11
11:39
(16)+ в общем, задача поставлена криво
18 Renat11111
 
15.12.11
11:44
(16) ну да согласен, если будут задним числом работать то да будут проблемы. У них на вчерашний день дата запрета автоматически проставляется. Так что наверно не столкнутся с проблемой.
Компьютеры — это как велосипед. Только для нашего сознания. Стив Джобс