Имя: Пароль:
1C
 
v8. Делимся универсальными процедурами и функциями
Ø
0 zalexey
 
30.12.04
20:58
Предлагаю делиться универсальными функциями и процедураками, для дальнейшего использования. Причем лучше все это разбить на разные общие модули. Например:
унУниверсальные
 Здесь размещать проц. и функ., которые не привязаны ни к какой конкретной конфигурации.
утУниверсальнеДляУТ
 Функция на базе управления торговлей
уппУниверсальныеДляУПП
 
бпУниверсальныеДляБП
Соответвенно, у каждой свой префикс. Есть чем поделиться?
У себя начал собирать, пока вот малость.
P.S. можно для начала договориться о стандартах написания (имеется ввиду префиксах) и т.п.
Как вообще идея-то? Или уже опередили меня? :)
 
1 zalexey
 
30.12.04
21:01
//*****************************************************************************
// МОДУЛЬ С УНИВЕРСАЛЬНЫМИ ПРОЦЕДУРАМИ И ФУНКЦИЯМИ
//
// В модуле собраны процедуры и функции, которые могут быть использованы в
// любой конфигурации 1С:Предприятие 8.0
///////////////////////////////////////////////////////////////////////////////
// МОДУЛЬ ДЛЯ РАБОТЫ С ДАТАМИ
//
// Функция добавляет (отнимает) необходимое количество дней к дате
//
// Параметры:
// Дата - Исходная дата
// КоличествоДней - Количество дней, которое необходимо добавить (отнять) к исходной дате
//
// Возвращаемое значение:
// Дата, полученная в результате добавления
//
Функция унДобавитьДни (Дата, КоличествоДней) Экспорт
  
  Возврат Дата + 24*60*60*КоличествоДней;
  
КонецФункции //унДобавитьДни()
// Функция предназначена для образования строки с названием месяца прописью
//
// Параметры:
// Дата - дата на основе которой формируется название месяца
// СБольшойБуквы - указывает нужно ли название месяца делать с большой буквы
// ВРег - указывает нужно ли название месяца делать большими буквами
//
// Возвращаемое значение:
// Название месяца прописью
//
Функция унМесяцПрописью (Дата, СБольшойБуквы = Ложь, ВРег = Ложь) Экспорт
  Если Месяц(Дата) = 1 Тогда Результат = "январь";
  ИначеЕсли Месяц(Дата) = 2 Тогда Результат = "февраль";
  ИначеЕсли Месяц(Дата) = 3 Тогда Результат = "март";
  ИначеЕсли Месяц(Дата) = 4 Тогда Результат = "апрель";
  ИначеЕсли Месяц(Дата) = 5 Тогда Результат = "май";
  ИначеЕсли Месяц(Дата) = 6 Тогда Результат = "июнь";
  ИначеЕсли Месяц(Дата) = 7 Тогда Результат = "июль";
  ИначеЕсли Месяц(Дата) = 8 Тогда Результат = "август";
  ИначеЕсли Месяц(Дата) = 9 Тогда Результат = "сентябрь";
  ИначеЕсли Месяц(Дата) = 10 Тогда Результат = "октябрь";
  ИначеЕсли Месяц(Дата) = 11 Тогда Результат = "ноябрь";
  ИначеЕсли Месяц(Дата) = 12 Тогда Результат = "декабрь";
  КонецЕсли;
  
  // Если необходимо выводить название месяца с большой буквы, то сделаем
  // преобразование
  Если СБольшойБуквы Тогда
    Результат = ВРег(Лев(Результат,1)) + Сред(Результат,2);
  КонецЕсли;
  
  // Проверим нужно ли переводить строку в верхний регистр
  Если ВРег Тогда
    Результат = Врег(Результат);
  КонецЕсли;
  
  Возврат Результат;
КонецФункции // унПолучитьМесяцПрописью()
2 zalexey
 
30.12.04
21:04
///////////////////////////////////////////////////////////////////////////////
// МОДУЛЬ СКЛОНЕНИЯ Ф.И.О. И ДОЛЖНОСТЕЙ
//
// Источник: http://www.superjur.narod.ru/Text/1/1C.RAR<br>//<br>// (c) Jurer Production Begin ( Start )
// Номер версии 42 - последняя оптимизация кода
// Номер версии 41 - оптимизация + отчества оканчивающиеся на "ы" считаются женскими ?
// Номер версии 40 - подправил склонение фамилий для Кормилец, Силиец
// Номер версии 39 - что-то подправил - вроде бы фамилии на -ий для z2=-1 неправильный был возврат.
// Номер версии 38 - оптимизация кода - баги
// Номер версии 37 - оптимизация кода + добавлена новая функция, специально предназначенная для склонения профессий
// Номер версии 36 - оптимизация кода + добавлен новый входной параметр
// Номер версии 35 - оптимизация кода + равнодушие к регистрам
// В случае, если программа окажется для Вас полезной, и Вы представляете только свои
// интересы, а не интересы фирмы, автор будет весьма признателен, если Вы перечислите ему
// некую сумму на Ваше усмотрение (автор будет благодарен любым инициативам).
// Для этого через сбербанк перечислите N-ую сумму на следующий счет:
// филиал 8606/018 Рязанское ОСБ № 8606 СБ РФ г.Рязань
// РЕКВИЗИТЫ: ИНН 7707083893 КОР.СЧЕТ 30101810500000000614 БИК 046126614
// ДЛЯ ПЕРЕЧИСЛЕНИЙ ВО ВКЛАД ФИЗИЧ.ЛИЦ - 47422810453009902100
// НОМЕР СБЕРКНИЖКИ: 42301810953002115714/01 Железняков Юрий Юрьевич
// __________________________________________________________________
// SuperJur.Narod.Ru
// _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ SuperJur _ _ _ _ _ _ _ _ _ _ _ _ _ _
// Мыло - SuperJur@Narod.ru ( постоянное )
// - SuperJur@Mail.ru ( постоянное )
// - org@kvint.ryazan.ru (рабочее, а потому не совсем постоянное )
// __________________________________________________________________
// Удаление этих строк незнаконно!
// Гарантия 92 года и 3 месяца!!!
// Послегарантийное обслуживание - бесплатно!!!
// Круглосуточная поддержка - все 48 часов в бою!
// Ссылка на источник обязательна!
// Эти программы защищены законом об авторских правах. Запрещается перепродажа данной программы.
// ПРОВЕРЕНО! ВИРУСОВ НЕТ!!! АНТИВИРУСОВ ТОЖЕ!!!
Функция ПадежС(z1,Знач z2=2,z3="*",z5=0) Экспорт
  
  z1=?((z2<0)и(z5=1),Лев(z1,1)+".",z1);z2=Макс(z2,-z2);z4=Прав(z1,2);z5=?(z3="1",?(z4="ая",8,?(Найти("па да ца",z4)>0,3,9)),?(z4="ия",7,Найти(".чайяь",Прав(z4,1))));
  z6=?(z4="ел","л",?(z1="Лев","ьв",?(z4="ец",?(Прав(z1,3)="лец","ь",?(Найти("аец иец",Прав(z1,3))>0,"й",""))+"ц","")));
  
  Возврат ?((z2=1)или(Найти("ьжан итай",Прав(z1,4))>0),z1,Лев(z1,СтрДлина(z1)-?((z5=8)или(z6<>""),2,?(z5>2,1,0)))+z6+СокрП(Сред("а у а "+?(z3="2",Сред("оыыыее",Найти(" внтч",Прав(z4,1))+1,1),"о")+"ме а у а еме "+?(Найти("гжкхш",Лев(z4,1))>0,"и","ы")+" е у ойе я ю я ем"+?(z4="ий","и","е")+" и е ю ейе и и ь ьюи и и ю ейи ойойуюойойойойу ойой",10*?((z5=6)и(z3<>"а"),4,z5)+2*z2-3,2)))
  
КонецФункции
 
3 zalexey
 
30.12.04
21:19
// Функция Падеж - предназначена для сколнения фамилий
// Параметры:
// z1 - фамилия имя отчество например Железняков Юрий Юрьевич
// z2 - Падеж ( по умолчанию = 2 - родительный)
// 2 - родительный ( нет кого? ) Железнякова Юрия Юрьевича
// 3 - дательный ( кому? ) Железнякову Юрию Юрьевичу
// 4 - винительный ( вижу кого? ) Железнякова Юрия Юрьевича
// 5 - творительный ( кем? ) Железняковым Юрием Юрьевичем
// 6 - предложный ( о ком? ) Железнякове Юрии Юрьевиче
// Если задать Z2 меньше 0, то на выходе получим от -1=Железняков Ю. Ю. до -6=Железнякове Ю. Ю.
// z3 - параметр Пол может не указываться, но при наличии фамилий с
// инициалами точное определение пола невозможно, поэтому предлагается задавать пол этим
// параметром
// 1 - мужской
// 2 - женский
// z10 - служебная переменная
// В Н И М А Н И Е В Н И М А Н И Е В Н И М А Н И Е В Н И М А Н И Е В Н И М А Н И Е
// ---------------------------------------------------------------------------------------
// ДЛЯ СКЛОНЕНИЯ ПРОФЕССИЙ ИСПОЛЬЗУЙТЕ ФУНКЦИЮ ПАДЕЖП И БУДЕТ ВАМ СЧАСТЬЕ!
// ---------------------------------------------------------------------------------------
// Бибик Галушка Цой Николайчик Наталия Петровна Герценберг Кривошей Капица-Метелица
// Если Падеж(Профессия,1 ,3,1 ), то на выходе получим Юрий Юрьевич Железняков и т.д.
// Если Падеж(Профессия,-1 ,3,1 ), то на выходе получим Ю. Ю. Железняков и т.д.
// 08-08-2003 подправил склонение фамилий для Кормилец, Силиец
Функция Падеж(Знач z1,Знач z2=2,Знач z3=3,z10=0) Экспорт
  
  z1=СтрЗаменить(СокрЛП(СтрЗаменить(НРег(СокрЛП(z1)),".",". "))," "," ");
  
  z3=Сред("ча"+Прав(z1,1),z3,1);
  z4=Найти(z1+" "," ");
  
  //участок преобразования фамилия имя отчество --> Фамилия Имя Отчество
  z5=z4+Найти(Сред(z1+" ",z4+1)," ");
  z1=?(z10<0,z1,ВРег(Лев(z1,1))+Сред(z1,2,z4-1)+Врег(Сред(z1,z4+1,1))+Сред(z1,z4+2,z5-z4-1)+ВРег(Сред(z1,z5+1,1))+Сред(z1,z5+2,СтрДлина(z1)-z5));
  z5=Лев(z1,z4-1);z6=Прав(z5,3);z7=Прав(z6,2);z8=Прав(z7,1);
  
  z5=?((z2=1)или(Найти("оеиую",z8)+Найти("аа еа ёа иа оа уа ыа эа юа яа",z7)<>0),z5,?((z3="а")или(z3="ы"),?((z8="а")и(z6<>"ула")или(z7="ая"),ПадежС(z5,z2,"1"),z5),?((Найти("ой ый ий",z7)>0)и(z6<>"Цой"),Лев(z5,z4-3)+СокрП(Сред("огоомуого"+?((z7="ий")или(Найти("гой хой",z6)>0),"и","ы")+"м ом егоемуегоим ем",?(Найти("чшщ",Лев(z6,1))>0,15,0)+z2*3-5,3)),ПадежС(z5,z2,"2"))));
  z8=z4+Найти(Сред(z1+" ",z4+1)," ");
  z8=?((z3="ч")и(z4=СтрДлина(z1)+1),ПадежС(z1,z2),z5)+" "+ПадежС(Сред(z1,z4+1,z8-z4-1),z2,z3,1)+" "+ПадежС(Сред(z1,z8+1,СтрДлина(z1)-z8),?(z3="ы",?(z2<0,-1,1),z2),z3,1);
  
  Возврат?(z10<1,z8,Сред(z8,Найти(z8+" "," ")+1)+" "+Лев(z8,Найти(z8+" "," ")-1))
КонецФункции// Функция Падеж(z1,z2=2,z3=3)
// Функция ПедежП - для сколнения профессий
//
// z1 - наименование профессии, как одно слово, так и несколько слов. Например
// звукорежиссер, инженер - программист 1 категории, заместитель технического директора
// z2 - номер падежа (1 - именительный, 2 - родительный, 3 - дательный, 4 - винительный, 5 - творительный, 6 - предложный)
// z3 - служебная переменная
// Пример вызова ПадежП("агент по снабжению", 2 ) для родительного падежа.
// Пример вызова ПадежП("ведущий инженер-программист 2 категории", 3 ) для дательного падежа.
// ...
Функция ПадежП(Знач z1,Знач z2,z3=0) Экспорт
  
  z1=Нрег(СокрЛП(z1));z4=Найти(z1,"-");z1=СтрЗаменить(z1,"-"," ");z5=Найти(z1+" "," ")+1;z6=Лев(z1,z5-2);
  z7=?((Найти("ая ий ый",Сред(z1,z5-3,2))>0)и(Сред(z1,z5-5,4)<>"ющий")и(z3=0),"1","*");
  z1=?((Сред(z1,z5-3,2)="ая")или(Сред(z1,z5-2,1)="а"),ПадежС(z6,z2,z7)+" "+ПадежС(Сред(z1,z5),z2),Падеж(z6,z2,3,-1) + ?((Сред(z1,z5-3,2)="ий")и(Найти(z1," ")=0),"",?(((z3>1)или(z4>0)или(z7="1")),ПадежП(Сред(z1,z5),z2,?(z7="1",?(z4>0,2,1),0)),Сред(z1,z5))));
  z5=Найти(Сред(z1,z4)," ")+z4;
  
  Возврат?(z4>0,Лев(z1,z5-2)+"-"+СокрЛ(Сред(z1,z5)),z1);
  
КонецФункции// ПадежП(Знач z1, Знач z2) Экспорт
// (c) Jurer Production End ( Finish )
//
// Конец модуля склонения
///////////////////////////////////////////////////////////////////////////////
4 zalexey
 
30.12.04
21:22
//*****************************************************************************
// МОДУЛЬ С УНИВЕРСАЛЬНЫМИ ПРОЦЕДУРАМИ И ФУНКЦИЯМИ ДЛЯ
// 1С ПРЕДПРИЯТИЕ:Управление торговлей
//
// Эти процедуры и функции расчитаны на работу в типовой конфигурации Управление Торговлей
// Функция формирует полное фамилию, имя, отчесто, или фамилию с инициалами
//
// Параметры
// ФизЛицо – Физическое лицо (Справочник "Физические лица")
// ПолноеФИО – Булево. Формировать полное ФИМ, или только фамилию с инициалами
// По умолчанию - Ложь, т.е. формируется Фамилия и инициалы
//
// Возвращаемое значение:
// Строка с ФИО
//
Функция утФИОНаПечать(ФизЛицо, ПолноеФИО = Ложь) Экспорт
  
  Если обЗначениеНеЗаполнено (ФизЛицо) Тогда
     Возврат ФизЛицо;
   КонецЕсли;
  
  Если ПолноеФИО Тогда
    
    Результат = ФизЛицо.Фамилия + " " + ФизЛицо.Имя + " " + ФизЛицо.Отчество;
  Иначе
    Результат = ФизЛицо.Фамилия + " " + Лев(ФизЛицо.Имя,1) + ". " + Лев(ФизЛицо.Отчество, 1) + ".";
  КонецЕсли;
  
  Возврат Результат;
  
КонецФункции // унФИОНаПечать()
5 android
 
30.12.04
21:55
продолжай...
6 dentist
 
30.12.04
22:12
унМесяцПрописью - нафига? Так не проще - Формат(Дата, "ДФ = 'ММММ'") ?
7 zalexey
 
30.12.04
23:27
(6) :))) мда. Вот что значит читать справки и книжки только когда припрет. Спасибо.