Адрес этой странички : http://doc-prg.narod.ru/art_00105/art_00105.htm 
Дата обновления : 08.08.2009
 

(c) Sergey Popov, Usinsk, Komi, 2007

© 08.08.2009 Сергей Попов

1Cv7.
Некоторые полезные алгоритмы.
Регистры.

Статью в виде файла (12.3 кб) можно скачать здесь: art_00105.zip

1. Вычислить корректную позицию для расчета по регистрам.
Функция сп_ВычислитьКорректнуюПозициюДляРасчетаПоРегистрамДляДокумента(РезСравн,Док="",ДатаДок="") Экспорт
Скачать (1 Кб)
//Функция сравнивает ТА и ТекущийДокумент() [Док] или Дату [ДатаДок].
//Если ТА "раньше", то возвращается позиция ТА
//Иначе - возвращается позиция документа Док (или ДатаДок)
//Если Док задан корректно, то ДатаДок игнорируется
//Если Док НЕ задан корректно, то анализируется ДатаДок
//Если Док и ДатаДок НЕ заданы корректно, то то возвращается позиция документа, установившего ТА
//В переменной РезСравн возвращается результат сравнения ТА и Документа (<0 - ТА раньше, =0 - ТА и Док равны, >0 ТА позже)
//Результат, который возвращает функция, можно сразу же использовать в :
//РассчитатьРегистрыПо(...) или РассчитатьРегистрыНа(...)

 

2. Получить список атрибутов регистра в СписокЗначений
//Получить список Атрибутов Регистра (измерения,реквизиты,ресурсы)
//ИмяРег - Идентификатор регистра
//ЧтоИменно : <=0-Список Измерений, =1-СписокРеквизитов, >=2-СписокРесурсов
//ПреобразоватьВЗаглавныеБуквы : >0 - имена атрибутов преобразуются в заглавные буквы
//Функция возвращает список атрибутов в зависимости от значения ЧтоИменно
//Тип возвращаемого значения = СписокЗначений
//где, 
//     Значение=0, 
//     Строка=ИдентификаторАтрибута
Функция сп_ПолучитьСписокАтрибутовРегистра(ИмяРег,ЧтоИменноНадо=0,ПреобразоватьВЗаглавныеБуквы=0)
//_new_ 19.03.2003 сп_
Перем СписАтриб; //Возвращаемое значение
СписАтриб=ПолучитьПустоеЗначение();
V0=0; 
Если Метаданные.Регистр(""+ИмяРег).Выбран()>0 Тогда
    СписАтриб=СоздатьОбъект("СписокЗначений");
    Кол=0;
    Если ЧтоИменноНадо<=0 Тогда
        //Измерения
        Кол=Метаданные.Регистр(""+ИмяРег).Измерение();
    КонецЕсли; 
    Если ЧтоИменноНадо=1 Тогда 
        //Реквизиты
        Кол=Метаданные.Регистр(""+ИмяРег).Реквизит();
    КонецЕсли; 
    Если ЧтоИменноНадо>=2 Тогда
        //Ресурс
        Кол=Метаданные.Регистр(""+ИмяРег).Ресурс();
    КонецЕсли; 
    Если Кол>0 Тогда
        i=0;
        Пока i<Кол Цикл
            i=i+1;
            Ид="";
            Yes=0;
            Если ЧтоИменноНадо<=0 Тогда
                //Измерения
                Если Метаданные.Регистр(""+ИмяРег).Измерение(i).Выбран()>0 Тогда
                    Ид=Метаданные.Регистр(""+ИмяРег).Измерение(i).Идентификатор;
                КонецЕсли; 
            КонецЕсли; 
            Если ЧтоИменноНадо=1 Тогда
                //Реквизиты
                Если Метаданные.Регистр(""+ИмяРег).Реквизит(i).Выбран()>0 Тогда
                    Ид=Метаданные.Регистр(""+ИмяРег).Реквизит(i).Идентификатор;
                КонецЕсли; 
            КонецЕсли; 
            Если ЧтоИменноНадо>=2 Тогда
                //Ресурсы
                Если Метаданные.Регистр(""+ИмяРег).Ресурс(i).Выбран()>0 Тогда
                    Ид=Метаданные.Регистр(""+ИмяРег).Ресурс(i).Идентификатор;
                КонецЕсли; 
            КонецЕсли; 
            Ид=СокрЛП(Ид);
            Если СтрДлина(Ид)>0 Тогда
                Yes=1;
            КонецЕсли; 
            Если Yes>0 Тогда
                Если ПреобразоватьВЗаглавныеБуквы>0 Тогда
                    Ид=ВРег(Ид);
                КонецЕсли;
                СписАтриб.ДобавитьЗначение(V0,Ид);
            КонецЕсли;
        КонецЦикла;
    КонецЕсли;
КонецЕсли;
Возврат СписАтриб;
КонецФункции //сп_ПолучитьСписокАтрибутовРегистра()
//=============================================================================== 

 

3. Прочитать движение по регистру в ТаблицуЗначений
Функция сп_ПолучитьДвижениеПоРегистру(ИдРег,ТЗдвижение,СЗфильтр="",ДатаНач,ТекДокум="",ДатаДокум="",ТЗфильтр="")
Скачать (4.4 Кб)
//ИдРег - идентификатор регистра, откуда читается движение
//Функция выбирает движение из регистра ИдРег по заданным Фильтрам
//СЗфильтр - Фильтр по измерениям и реквизитам. СписокЗначений (необязательный параметр).
// Если СЗфильтр - пустой или не задан, то фильтр не устанавливается
// Одна строка фильтра - фильтрация для одного измерения/реквизита
// Строковое представление (в фильтре) - Идентификатор измерения/реквизита
// Значение (в фильтре) - значение для фильтрации 
//ТЗфильтр - Фильтр по ресурсам. ТаблицаЗначений (необязательный параметр).
// Если ТЗфильтр - пустой или не задан, то фильтр не устанавливается
// Одна строка фильтра - фильтрация для одного ресурса
// В фильтре 3 колонки :
// ИдРес - Идентификатор ресурса
// МинЗнач - Минимальное значение ресурса
// МаксЗнач - Максимальное значение ресурса
//Результат выгружается в ТаблицуЗначений ТЗдвижение (все реквизиты, измерения и ресурсы)
//Дополнительно, создаются и заполняются колонки :
// _ТипДвижения_ : 1-приход, 2-расход
// _ДатаДвижения_ : Дата движения (дата ТекущегоДокумента)
// _ТекущийДокумент_ : ТекущийДокумент() - 
// _НомерСтроки_ : НомерСтроки в Текущем документе 
//ДатаНач - Дата, с которой начинается выборка движения
//ТекДокум - ТекущийДокумент() - необязательный параметр
//ДатаДокум - Дата или позиция документа/ТА для выбора движений (конечная дата) - необязательный параметр
//Вообще, "Конечная дата" для выбора движений вычисляется в зависимости от значения ТекДокум [ТекущийДокумент] или //ДатаДокум
// (подробнее см. : сп_ВычислитьКорректнуюПозициюДляРасчетаПоРегистрамДляДокумента)
//Функция возвращает : >0 - есть информация (кол-во строк в ТЗ), <=0 - нет информации

© 08.08.2009 Сергей Попов

 


Hosted by uCoz
-->