Имя: Пароль:
1C
1С v8
Замечательный запрос
0 Labrador
 
11.04.13
11:37
Суть вопроса: как можно запросом вытащить все документы определенного вида.

Пример: Мне нужно ренумерацию, для этого я выбираю например "Реализацию Товаров и Услуг" запросом достаю все необходимые документы. Этим же запросом например я захочу вытащить уже позже "ТребованияНакладная" изменить тот же самый реквизит. Это реально? Или для каждого конкретного вида необходимо будет формировать отдельный запрос.
1 Labrador
 
11.04.13
11:38
Есть подозрение что можно это простым перебором по метаданным сделать, но скорость будет - ужасная....
2 Flyd-s
 
11.04.13
11:39
ВЫБРАТЬ
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ
3 В тылу врага
 
11.04.13
11:39
этим же, но позже - оригинально
4 Мыш
 
11.04.13
11:40
Запрос.Текст
5 Labrador
 
11.04.13
11:43
Прощу прощения, если непонятно объясняю =)

(3) Имелось ввиду что вид документа через параметр в запросе будет указываться=)
6 Serg_1960
 
11.04.13
11:43
(зануда) Пока автор не сказал про период "ренумерации" и ему не сказали о периоде автонумерации - нет смысла спешить отвечать.
7 fisher
 
11.04.13
11:44
(0) Текст запроса - это всего лишь текст, как ни странно. Просто заменяй в нем имя базовой таблицы и всё.
8 Мыш
 
11.04.13
11:44
(5) Тип параметра какой? )
Не проще ли так: Запрос.Текст=СтрЗаменить(Запрос.Текст,"ВидДок1","ВидДок2");
9 ДенисЧ
 
11.04.13
11:45
Например
ТекстЗАпроса = "
ВЫБРАТЬ МойРеквизит
ИЗ Документ.%ВидДокумента%
ГДЕ условия";

И потом стрЗаменить("%ВидДокумента%", НужныйВид)
10 Мыш
 
11.04.13
11:45
(6) Эти грабли оставили на закуску. А ты всё испортил!! )
11 Labrador
 
11.04.13
11:48
(7),(8),(9) Спасибо =) Простое оказалось решение =)

(6), (10) А можно по-подробнее?
12 fisher
 
11.04.13
11:48
(9) Лучше все-таки реальный вид документа в запросе. Не так красиво, зато дорабатывать удобнее.
13 GANR
 
11.04.13
11:49
Построить запрос так v8: Перебор всех документов как в 77. Какой аналог? + в секции ГДЕ условие ТИПЗНАЧЕНИЯ(Ссылка) = &ТипДокумента :). Но не советую - запрос будет универсальный, но ресурсоемкий, лучше динамически формировать, как в (9).
14 Serg_1960
 
11.04.13
11:53
(6) (не совсем в тему)

   ПериодГод = Метаданные.СвойстваОбъектов.ПериодичностьНомераДокумента.Год;
   ПериодКвартал = Метаданные.СвойстваОбъектов.ПериодичностьНомераДокумента.Квартал;
   ПериодМесяц = Метаданные.СвойстваОбъектов.ПериодичностьНомераДокумента.Месяц;
   ПериодДень = Метаданные.СвойстваОбъектов.ПериодичностьНомераДокумента.День;
   БезПериода = Метаданные.СвойстваОбъектов.ПериодичностьНомераДокумента.Непериодический;
   
   Сообщить("Документы: контроль уникальности номера и проверка даты");
   Для Каждого Объект ИЗ Метаданные.Документы Цикл
       Состояние(Объект.Синоним);
       Если Объект.КонтрольУникальности Тогда
           Имя = Объект.Имя;
           Период = Объект.ПериодичностьНомера;
           Если Период = ПериодГод Тогда
               Диапазон = "ГОД";
           ИначеЕсли Период = ПериодКвартал Тогда
               Диапазон = "КВАРТАЛ";
           ИначеЕсли Период = ПериодМесяц Тогда
               Диапазон = "МЕСЯЦ";
           ИначеЕсли Период = ПериодДень Тогда
               Диапазон = "ДЕНЬ";
           Иначе
               Диапазон = "";
           КонецЕсли;
           Запрос = Новый Запрос;
           Запрос.Текст = "
           |ВЫБРАТЬ
           |    "+Имя+".Номер КАК Номер,
           |    КОЛИЧЕСТВО("+Имя+".Ссылка) КАК Количество
           |ИЗ
           |    Документ."+Имя+" КАК "+Имя+"
           |
           |СГРУППИРОВАТЬ ПО
           |    "+Имя+".Номер"+?(ЗначениеЗаполнено(Диапазон),", НАЧАЛОПЕРИОДА("+Имя+".Дата,"+Диапазон+")", "")+"
           |
           |ИМЕЮЩИЕ
           |    КОЛИЧЕСТВО("+Имя+".Ссылка) > 1";
           Результат = Запрос.Выполнить();
           Если Не Результат.Пустой() Тогда
               Выборка = Результат.Выбрать();
               Пока Выборка.Следующий() И Выборка.Количество > 1 Цикл
                   Сообщить("Неуникальный номер (" + Выборка.Номер + ") в " + Объект.Синоним);
               КонецЦикла;
           КонецЕсли;
       КонецЕсли;
       ОбработкаПрерыванияПользователя();
   КонецЦикла;
15 Labrador
 
11.04.13
12:00
(14) Спасибо =) Буду разбираться=)
16 Flyd-s
 
11.04.13
12:03
Зачем для перенумерации изобретать велосипед? Есть же готовые обработки миллион штук
17 Labrador
 
11.04.13
12:04
(16) Есть, но пока я еще только учусь, поэтому такие несложные вещи должен научиться собирать =)
Компьютер — устройство, разработанное для ускорения и автоматизации человеческих ошибок.