Имя: Пароль:
1C
 
v8: Как перебрать все документы в базе за определенную дату?
0 sergho
 
15.09.07
15:18
Добрый день!
Как перебрать все документы в базе за определенную дату?
Если такое возможно то как?
1 Scooter
 
15.09.07
15:21
как вариант
пишешь большой запрос с объединениями
2 Scooter
 
15.09.07
15:22
(0)а так спрошу: а накуя?
3 Децл
 
15.09.07
15:22
цикл по метаданным, внутри запрос
4 sergho
 
15.09.07
15:23
Документы определенного типа понятно как перебрать, а вот как все!
Выборка=Документы.Расходная.Выбрать(Начало,Конец);
Пока выборка.Следующий() цикл
...
КонецЦикла;
5 PR
 
15.09.07
15:24
Сто раз было. В поиск.
6 sergho
 
15.09.07
15:24
(3) это как?
7 Scooter
 
15.09.07
15:24
(4)ответь на (2)
8 Fram
 
15.09.07
15:25
(4) смотреть (3) - очень дельный совет
9 sergho
 
15.09.07
15:25
(7) например надо выяснить в каких документах не заполнен определенный реквизит...
10 Децл
 
15.09.07
15:25
(4) в 8ке лучше всего исползовать запросы а не выборки
11 Fram
 
15.09.07
15:26
(6) какое из слов непонятно?
12 Децл
 
15.09.07
15:26
(11)+1 :)))
13 Scooter
 
15.09.07
15:28
(9)смотри только нужные типы доков
14 Scooter
 
15.09.07
15:29
(c)

Функция ПолучитьМаксДатуДокументов(ТекДата) Экспорт

   МассивДат = Новый Массив;
   
   ТекстЗапроса = "";
   СЧ = 0;
   Для каждого ТекДокумент Из Метаданные.Документы Цикл
   
       ТекстЗапроса = ?(ТекстЗапроса = "", "", ТекстЗапроса + ПС() + "ОБЪЕДИНИТЬ " + ПС());
       
       ТекстЗапроса = ТекстЗапроса + ПС() +
       "ВЫБРАТЬ
//        |    МАКСИМУМ(Док.Дата) КАК Дата
       |    Док.Дата КАК Дата
       | ИЗ Документ." + ТекДокумент.Имя + " КАК Док
       | ГДЕ
       |    Док.Дата Между &ДатаС И &ДатаПО
       |";
       
       Если СЧ = 200 Тогда
           МассивДат.Добавить(ПолучитьМаксДатуПоЗапросу(ТекстЗапроса, ТекДата));
           ТекстЗапроса = "";
           СЧ = 0;
       Иначе
           Инк(СЧ);
       КонецЕсли;
       
   КонецЦикла;
   
   Если СЧ <> 0 Тогда
       МассивДат.Добавить(ПолучитьМаксДатуПоЗапросу(ТекстЗапроса, ТекДата));
   КонецЕсли;
   
   ЗначениеВозврата = НачалоДня(ТекДата);
   Для каждого МаксДата Из МассивДат Цикл
       ЗначениеВозврата = Макс(ЗначениеВозврата, МаксДата);
   КонецЦикла;
   
   ЗначениеВозврата = ЗначениеВозврата + ?(ЗначениеВозврата = КонецДня(ЗначениеВозврата), 0, 1);
   
   Возврат ЗначениеВозврата;
   
КонецФункции // мРазнПолучитьМаксДатуДокументов(Дата)

Функция ПолучитьМаксДатуПоЗапросу(ТекстЗапроса, ТекДата)

   ЗначениеВозврата = Дата("00010101");
   
   Запрос = Новый Запрос;
   Запрос.Текст =
   "ВЫБРАТЬ
   |    МАКСИМУМ(Вложенный.Дата) КАК МаксДата
   |ИЗ
   |    (
   |" + ТекстЗапроса + "
   |) КАК Вложенный";

   Запрос.УстановитьПараметр("ДатаС", НачалоДня(ТекДата));
   Запрос.УстановитьПараметр("ДатаПО", КонецДня(ТекДата));
   
   Выборка = Запрос.Выполнить().Выбрать();
   Если Выборка.Следующий() Тогда
       ЗначениеВозврата = ?(Выборка.МаксДата = NULL, Дата("00010101"), Выборка.МаксДата);
   КонецЕсли;
   
   Возврат ЗначениеВозврата;

КонецФункции // ПолучитьМаксДатуПоЗапросу(ТекстЗапроса, ТекДата)
15 Децл
 
15.09.07
15:30
хм. а вот интересно проканает так - пробежаться по метаданным, заполнить СЗ, а потом в запросе поставить условие - в списке..?
16 PR
 
15.09.07
15:31
(15) Ага. А запрос к какой таблице? :))))))))))))))))))))))))))))
17 Fram
 
15.09.07
15:31
(15) какое условие?.. попробуй составить
18 GROOVY
 
15.09.07
15:31
Все проще:

   Запрос = Новый Запрос;
   ФлагПервыйВход = Истина;
   Запрос.Текст = "ВЫБРАТЬ ВложенныйЗапрос.Ссылка ИЗ (";
   Для каждого Док из Метаданные.Документы Цикл
       Если НЕ ФлагПервыйВход Тогда
           Запрос.Текст = Запрос.Текст + " ОБЪЕДИНИТЬ ВСЕ ";
       КонецЕСли;
       ФлагПервыйВход = Ложь;
       Запрос.Текст = Запрос.Текст + " ВЫБРАТЬ Ссылка ИЗ Документ." + Док.Имя + " ГДЕ НачалоПериода(Дата, ДЕНЬ) = &Дата ";
   КонецЦикла;
   Запрос.Текст = Запрос.Текст + ") КАК ВложенныйЗапрос УПОРЯДОЧИТЬ ПО ВложенныйЗапрос.Ссылка.Дата";
   Запрос.УстановитьПараметр("Дата", НачалоДня(ТекущаяДата()));
   РезультатЗапроса = Запрос.Выполнить();
   Выборка = РезультатЗапроса.Выбрать();
   Пока Выборка.Следующий() Цикл
       ДокСсылка = Выборка.Ссылка;
   КонецЦикла;
19 Децл
 
15.09.07
15:33
(16)(17) понял, протупил :)
20 Scooter
 
15.09.07
15:33
(18)в УПП будет работать?
21 Децл
 
15.09.07
15:33
(18) неплохо :)
22 Децл
 
15.09.07
15:33
(20)а в чем разница?:)
23 Fram
 
15.09.07
15:34
(18) ну вот взяли и выложили почти готовый код. надо чтобы человек сам допер до этого
24 Scooter
 
15.09.07
15:34
(22) 256 таблиц
25 GROOVY
 
15.09.07
15:36
(20) Не уверен что вообще будет работать, не проверял :) Но если гдето взлетит то работать будет везде без разницы в какой конфе.

Правда я присоединюсь к вопросу в (2): Накуя? Очень ведь тормозить будет. Надоо конкретизировать задачу.
26 Децл
 
15.09.07
15:37
(24) и что? :)))
27 sergho
 
15.09.07
15:38
все что мне требовалось подсказали, спасибо за ответы
28 Scooter
 
15.09.07
15:39
(26)если у тебя в запросе больше 256 таблиц то СКЛ тебя посылает на йух
29 Децл
 
15.09.07
15:44
(28) не работал с УПП и со скульными на 8ке :)
30 GROOVY
 
15.09.07
15:44
(28) Может я ошибаюсь но в 8.1 этого ограничения нет.
31 Децл
 
15.09.07
15:44
+29 но спасибо, буду иметь ввиду, мало ли, вдруг понадобиться :)))
32 Scooter
 
15.09.07
15:48
(30)а там 1024   :)
33 Scooter
 
15.09.07
15:48
(32)+ проверю
34 GROOVY
 
15.09.07
15:51
(33) Ок. Отпиши сюда. Интересно.
35 Scooter
 
15.09.07
15:53
(34)постараюсь, но обещать не буду
36 TormozIT
 
гуру
15.09.07
16:03
Друзья, 256 таблиц ограничение в версии 8.1 MS SQL сохраняется.
А вот в файловой, DB2 и Postgre в 8.1.8 уже такого ограничения нет.
44 selenat
 
15.09.07
18:20
Кстати, про 256 таблиц. А скуля ли это ограничение, или все-таки 1Совской платформы? Бо меня вроде бы в файловой версии прога посылала из-за этого...
45 sergho
 
15.09.07
18:22
(44) есть у меня тож такое очучение )
46 France
 
15.09.07
18:42
(36) таки про файловую правда?.. помнится мне, что в свое время 1С ввела ограничение в 256 таблиц и для файловой версии 8.0 в целях совместимости... Ужель откатились?
(44) скуля скуля... мож не сомневацца.
47 PR
 
15.09.07
20:54
А в 2005 скуле все так же, вроде ж отменили ограничение?
48 selenat
 
16.09.07
10:01
(46) вот почему меня файловая посылала. Ограницение ввели.. Сцуки...
49 TormozIT
 
гуру
16.09.07
11:00
(46) Да, в версии 8.1.8 в файловом режиме ограничение на 256 таблиц сняли по пожеланиям партнеров. Теперь франчи для тестирования в срочном порядке на SQL всех пересаживают =)
50 shoorick
 
16.05.08
16:39
а каким способом можно перебирать документы в 1С7.7?
(хотел журнал распечатать)
51 Lmn
 
16.05.08
17:34
(0) Склепать журнал документов куда бы они все входили и по нему выбрать.
52 shoorick
 
19.05.08
11:06
[quote]Склепать журнал документов куда бы они все входили и по нему выбрать[/quote]
журнал есть, но я не разобрался как в нем перебирать программно документы (вроде цикла выбратьстроки()/получитьстроку() - но журнал вроде бы не поддерживает таких методов)

я в этом деле новичок, пока курил только желто-красные книжки, которые шли в комплекте с 1С. буду благодарен, если ткнете носом в нужное направление.
53 shoorick
 
19.05.08
11:08
"(0)" похоже на то - буду пробовать, спасибо