Имя: Пароль:
1C
1C 7.7
v7: Выбрать повторяющиеся движения
0 chingiz
 
04.09.12
16:03
В модуле проведения нашел ошибку, которая делала некоторые движения по 2 раза. И для проверки\отладки нужно найти какие доки проскакивали с этой ошибкой. С семёркой знаком постольку-поскольку и язык запросов меня просто убил.

Что можно добавить для отбора дублей? Известно, что у дублей стоит одинаковый номер строки(при просмотре движений дока).

Запрос = СоздатьОбъект("Запрос");
   ТекстЗапроса =
   "//{{ЗАПРОС(Сформировать)
   |Период с ВыбНачПериода по ВыбКонПериода;
   |Товар = Регистр.Аптека.Товар;
   |ТекущийДокумент = Регистр.Аптека.ТекущийДокумент;
   |Группировка Товар без групп;
   |Группировка ТекущийДокумент;
   |"//}}ЗАПРОС
   ;
1 Эмбеддер
 
04.09.12
16:07
даже если можно группировку НомерСтроки, то в условие ее уже не запихать. потребуется условие уже в обработке результатов запроса. проще перебрать все документы. тем более что это одноразовая обработка
2 chingiz
 
04.09.12
16:08
У документов можно движения смотреть в отдельности?
3 Эмбеддер
 
04.09.12
16:11
по-моему выбратьдвиженияподокументу
4 Эмбеддер
 
04.09.12
16:11
ВыбратьДвиженияДокумента
5 chingiz
 
04.09.12
16:13
(4) мои благодарности, попробую!
6 Ёпрст
 
04.09.12
16:22
можно и в чорном запросе поиметь документ с дублями..
через внешнюю функцию в условии
7 chingiz
 
04.09.12
16:25
Уже получил какой-то результат, буду цикл в цикле мучать, все равно на 1 раз 8) С запросом боюсь просижу 2 дня :\

Рег = СоздатьОбъект("Регистр.Аптека");
ДокПачка = СоздатьОбъект("Документ.Пачка");
ДокПачка.ВыбратьДокументы(ВыбНачПериода, ВыбКонПериода);
    Пока ДокПачка.ПолучитьДокумент() = 1 Цикл
        Если Рег.ВыбратьДвиженияДокумента(ДокПачка.ТекущийДокумент()) = 1 Тогда
             Пока Рег.ПолучитьДвижение() > 0 Цикл
               Номер = Рег.НомерСтроки();
           КонецЦикла;
        КонецЕсли;
   КонецЦикла;
8 Ёпрст
 
04.09.12
16:30
Перем СЗ;
//======================================================================
Функция ПроверитьДвижуху(Док,НомерСтроки)
   поиск = Док.ПолучитьПозицию()+"_"+НомерСтроки;
   Если СЗ.НайтиЗначение(поиск)=0 Тогда
       СЗ.ДобавитьЗначение(поиск);
       Возврат 0;
   КонецЕсли;
   Возврат 1;
КонецФункции
//======================================================================


Запрос = СоздатьОбъект("Запрос");
   ТекстЗапроса =
   "//{{ЗАПРОС(Сформировать)

   |Период с ВыбНачПериода по ВыбКонПериода;
   |Товар = Регистр.Аптека.Товар;
   |НомерСтроки = Регистр.Аптека.НомерСтроки;
   |Док = Регистр.Аптека.ТекущийДокумент;
   |Количество = Регистр.Аптека.ИмяРесурса;
   |Функция Расход = Расход(Количество);
   |Функция Приход = Приход(Количество);
   |Условие(ПроверитьДвижуху(Док,НомерСтроки)=1);
   |Группировка Док;
   |"//}}ЗАПРОС
9 chingiz
 
04.09.12
16:34
(8) спасибо, на будующее запишу, думаю пригодится! )
AdBlock убивает бесплатный контент. 1Сергей