Имя: Пароль:
1C
1С v8
регистратор у документа
0 Vvvvv
 
14.07.14
14:39
надо программно узнать, есть ли движения по документу в регистрах. Написал код, вроде работает. В коде программно указывается регист.
А можно как то переделать, этот код, чтобы перебирался не один регист, а несколько. Пытался переделать, не получилось.
Что бы знать по каким регистрам нет записи

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

Если НаборЗаписей.Количество() = 0 Тогда
    //  Возврат;
    Сообщить("Пустой ");
    Сообщить(Выборка.Ссылка);
КонецЕсли;
1 anatoly
 
14.07.14
14:42
обход метаданных?
2 kosts
 
14.07.14
14:42
ДокументОбъект.<Имя документа>.Движения (DocumentObject.<Имя документа>.RegisterRecords)
ДокументОбъект.<Имя документа> (DocumentObject.<Имя документа>)
Движения (RegisterRecords)
Использование:

Только чтение.
Описание:

Тип: КоллекцияДвижений.
Предоставляет доступ к коллекции наборов записей движений документа. Свойства коллекции содержат наборы записей движений документа, которые включены для данного документа в конфигурации. Имена свойств совпадают с именами объектов конфигурации, по которым могут совершаться движения, как они заданы в конфигураторе.

Доступность:

Сервер, толстый клиент, внешнее соединение.
3 Vvvvv
 
14.07.14
14:45
(1) что это?
4 Vvvvv
 
14.07.14
14:46
думал изменить как то так, но вариант, в переменную запихнуть какие то значения

НаборЗаписей = РегистрыНакопления[Переменная].СоздатьНаборЗаписей();
5 barrgand
 
14.07.14
14:48
(4) Конечная цель какая?
6 Vvvvv
 
14.07.14
14:51
(5) надо определить у каких документов нет движения
7 Ganiev
 
14.07.14
14:55
по всем регистрам или только по по определенному списку регистров?
8 anatoly
 
14.07.14
14:55
(3) открой СП, глобальный контекст - метаданные.
вобщем примерно так:
    Для Каждого Документ Из Метаданные.Документы Цикл
...
9 anatoly
 
14.07.14
14:56
+ (8) ну то есть не документы конечно, это я просто скопипастил код...
11 Лефмихалыч
 
14.07.14
14:57
ТекстЗапроса = "";
Для каждого метаданныеНабора из СсылкаНаДокумент.Метаданные().Движения Цикл
   ТекстЗапроса = ТекстЗапроса + Символы.ПС + "ВЫБРАТЬ КОЛИЧЕСТВО(*) ИЗ "+метаданныеНабора.ПолноеНаименование()+" ГДЕ Регистратор = &Ссылка";
КонецЦикла;
ТекстЗапроса = СтрЗаменить(СокрЛП(ТекстЗапроса), Символы.ПС, " ОБЪЕДИНИТЬ ВСЕ ");


обработать напильником, ибо написано на коленке
12 mikecool
 
14.07.14
14:57
(6) прочитать коллекцию Движения документа
13 Рэйв
 
14.07.14
15:04
Об=ДокСсылка.ПолучитьОбъект();
Кол=0;
Для Каждого ДвижениеИз Об.Движения Цикл
   Кол=Кол+Движение.количество();
КонецЦикла;

Если Кол=0 Тогда
   Сообщить("Движений нет");
Иначе
    Сообщить("Движения есть ");
КонецЕсли;
14 Vvvvv
 
14.07.14
15:04
(8) это не подходит, это просто переберет все регистры, а обратиться не получится
15 Михаил Козлов
 
14.07.14
15:05
Если документ - регистратор для регистра, это не означает, что он обязан иметь по нему движения.
16 barrgand
 
14.07.14
15:07
(15) Это к чему?
17 Лефмихалыч
 
14.07.14
15:07
(13) во-первыз, без Прочитать() не взлетит. Во-вторых, с Прочитать() - это запрос в цикле, а за это в приличном обчестве канделябрами отоваривают
18 barrgand
 
14.07.14
15:08
(6) Я за запрос
19 Рэйв
 
14.07.14
15:08
(17)Да ладно!:-)  Не надо быть столь зашоренным консерватором. Иногда и запрос в цикле уместен.
20 Vvvvv
 
14.07.14
15:16
(13) в этом случае переменная Кол всегда будет 0
21 Рэйв
 
14.07.14
15:21
(20)Да, .Прочитать() забыл.
22 kosts
 
14.07.14
15:40
Если это не разовая обработка, то лучше всего сделать динамический запрос. Что бы он за один раз определил отсутствие движений.
Чтобы обнаруживать ошибки, программист должен иметь ум, которому доставляет удовольствие находить изъяны там, где, казалось, царят красота и совершенство. Фредерик Брукс-младший