Адрес этой странички :
http://doc-prg.narod.ru/art_00105/art_00105.htm
Дата обновления : 08.08.2009
© 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 Сергей Попов