Сложение дат в запросе (Прибавить к дате секунды, дни) - ДобавитьКДате При разработке отчетов бывает необходимо в запросе прибавить к дате несколько секунд, дней, месяцев.
Для этого имеется встроенная функция ДобавитьКДате
Синтаксис функции:
ДОБАВИТЬКДАТЕ(<Исходная Дата>, <Единица Измерения>, <Количество>)
Исходная дата – дата, к которой необходимо прибавить или вычесть требуемое количество временных единиц. Единица измерения – параметр, который определяет единицу прибавляемого времени. Возможные значения: Год, Квартал, Месяц, День, Час, Минута, Секунда. Количество – количество временных единиц, которых необходимо прибавить к исходному значению. Код 1C v 8.2 УП // Разные примеры использования
// Минута
ДОБАВИТЬКДАТЕ(ДАТАВРЕМЯ(2999, 1, 1, 0, 0, 0), Минута, 30) КАК Часы,
// Час
ДОБАВИТЬКДАТЕ(ДАТАВРЕМЯ(2999, 1, 1, 0, 0, 0), ЧАС, ЧАС(СтатусыУслуг.ЗапланированноеВремя)) КАК Часы
// Месяц
ДобавитьКДате(ДатаВремя(2002, 10, 12, 10, 15, 34), "Месяц", 1)
Рабочий код:
Код 1C v 8.2 УП Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ИсточникиRSS.Ссылка КАК Ссылка
|ИЗ
| Справочник.ИсточникиRSS КАК ИсточникиRSS
|ГДЕ
| ИсточникиRSS.Использовать
| И ДОБАВИТЬКДАТЕ(ИсточникиRSS.ДатаПоследнегоОбновления, СЕКУНДА, ИсточникиRSS.ПериодОбновленияВСекундах) <ТекДата";
Запрос.УстановитьПараметр("ТекДата", ТекущаяДата());
РезультатЗапроса = Запрос.Выполнить();
ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
КонецЦикла;
Категория:
Запросы Как программно вызвать окошко ввода пароля "Временная блокировка" Бывает что необходимо:
- При совершении определенного действия - нужно запросить пароль пользователя
- Заблокировать доступ к 1С программно
Поможет
встроенная функция:
ЗаблокироватьРаботуПользователя (LockApplication)
Синтаксис:
Код 1C v 8.х ЗаблокироватьРаботуПользователя()
Описание:
Блокирует работу пользователя, минимизирует окно 1С:Предприятия и выводит диалог авторизации. Продолжение работы возможно только после ввода пароля.
Категория:
Встроенные Функции Как извлечь корень квадратный из числа В 1С 8.х есть
встроенная функция:
sqrt(аргумент);
Возвращает квадратный корень аргумента.
* аргумент: число
Код 1C v 8.х //Вычислить квадратный корень числа.
Результат = sqrt(169);
//Результат = 13
А если вспомнить школьную математику
Корень квадратный из числа - это есть число возведённое в степень 1/2, соответственно:
Код 1C v 8.х Корень = POW(ДанноеЧисло, 0.5);
Код 1C v 7.x
Функция Корень(Основание,Степень)
Если Степень = 1 Тогда
Возврат(Основание);
КонецЕсли;
Факториал = 1; Степень_ = 1; Сум = 0;
СтепеньЕ = 1/Степень*Лог(Основание);
Для ии = 1 по 28 Цикл
Факториал = Факториал * ии;
Степень_ = Степень_ * СтепеньЕ;
Сум = Сум + Степень_/Факториал
КонецЦикла;
Возврат(1+Сум);
КонецФункции
// КвaдpaтныйКopeнь(Apгумeнт)
// Пapaмeтpы:
// Apгумeнт - нeoтpицaтeльнoe чиcлo
// Boзвpaщaeмoe Значeниe:
// Квaдpaтный кopeнь Apгумeнтa
//
// Oпиcaниe
// ПpeднaЗначeнa для иcчиcлeния квaдpaтнoгo кopня чиcлa c
// пpимeнeниeм итepaциoннoгo мeтoдa Hьютoнa
// Итepaции выПолняютcя дo дocтижeния тoчнocти, зaдaннoй
// внeшнeй (публичнoй) Перемeннoй ДocтaтoчнaяToчнocть
Функция КвaдpaтныйКopeнь(Apгумeнт)
// Oгpaничимcя oблacтью oпpeдeлeния функции
Если Apгумeнт<0 Тогда
// cooбщeниe oб oшибкe
Сообщить("...","!");
Возврат ПолучитьПустоеЗначение();
// Oтceчeм нoль
ИначеЕсли Apгумeнт=0 Тогда
Возврат 0;
КонецЕсли;
// Bыбepeм пepвoe пpиближeниe
ПpeдыдущaяИтepaция = Apгумeнт/2;
Для Cч=1 По КoличecтвoИтepaций Цикл
Значeниe = 0.5*(ПpeдыдущaяИтepaция+
Apгумeнт/ПpeдыдущaяИтepaция);
Если Значeниe<ПpeдыдущaяИтepaция Тогда
Paзницa = ПpeдыдущaяИтepaция-Значeниe;
Иначе
Paзницa = Значeниe-ПpeдыдущaяИтepaция;
КонецЕсли;
Если Paзницa<ДocтaтoчнaяToчнocть Тогда
Прервать;
КонецЕсли;
ПpeдыдущaяИтepaция=Значeниe;
КонецЦикла;
Значeниe = Окр(Значeниe,Макс(КoличecтвoЗнaкoв-Лог10(Значeниe),0));
Возврат Значeниe;
КонецФункции
Категория:
Работа с Числами Как определить каталог базы, путь к базе? КаталогИБ() В 8-ых версий нет встроенной функции получения каталога базы данных, так напишем ее,
Код 1C v 8.2 УП //Получить представление информационной базы для отображения пользователю.
// Пример возвращаемого результата:
// - для ИБ в файлом режиме: \\FileServer\1c_ib\
// - для ИБ в серверном режиме: ServerName:1111 / information_base_name
Функция ПолучитьПредставлениеИнформационнойБазы() Экспорт
Если ПустаяСтрока(СтрокаСоединенияИнформационнойБазы) Тогда
СтрокаСоединенияИнформационнойБазы = СтрокаСоединенияИнформационнойБазы();
КонецЕсли;
ЭтоФайловаяИБ = Найти(Врег(СтрокаСоединенияИнформационнойБазы), "FILE=") = 1;
Если ЭтоФайловаяИБ Тогда
ПутьКБД = Сред(СтрокаСоединенияСБД, 6, СтрДлина(СтрокаСоединенияСБД) - 6);
ФайловаяБД = Истина;
Иначе
// надо к имени сервера прибавить имя пути информационной базы
ПозицияПоиска = Найти(Врег(СтрокаСоединенияСБД), "SRVR=");
Если ПозицияПоиска <> 1 Тогда
Возврат Неопределено;
КонецЕсли;
ПозицияТочкиСЗапятой = Найти(СтрокаСоединенияСБД, ";");
НачальнаяПозицияКопирования = 6 + 1;
КонечнаяПозицияКопирования = ПозицияТочкиСЗапятой - 2;
ИмяСервера = Сред(СтрокаСоединенияСБД, НачальнаяПозицияКопирования, КонечнаяПозицияКопирования - НачальнаяПозицияКопирования + 1);
СтрокаСоединенияСБД = Сред(СтрокаСоединенияСБД, ПозицияТочкиСЗапятой + 1);
// позиция имени сервера
ПозицияПоиска = Найти(Врег(СтрокаСоединенияСБД), "REF=");
Если ПозицияПоиска <> 1 Тогда
Возврат Неопределено;
КонецЕсли;
НачальнаяПозицияКопирования = 6;
ПозицияТочкиСЗапятой = Найти(СтрокаСоединенияСБД, ";");
КонечнаяПозицияКопирования = ПозицияТочкиСЗапятой - 2;
ИмяИБНаСервере = Сред(СтрокаСоединенияСБД, НачальнаяПозицияКопирования, КонечнаяПозицияКопирования - НачальнаяПозицияКопирования + 1);
ПутьКБД = ИмяСервера + "/ " + ИмяИБНаСервере;
ФайловаяБД = Ложь;
КонецЕсли;
Возврат ПутьКБД;
КонецФункции
ТОЛЬКО эта функция работает для файлового варианта базы данных:
Код 1C v 8.х
Функция КаталогИБ()
СтрокаСоединенияСБД = СтрокаСоединенияИнформационнойБазы();
// в зависимости от того файловый это вариант БД или нет, по-разному отображается путь в БД
ПозицияПоиска = Найти(Врег(СтрокаСоединенияСБД), "FILE=");
Если ПозицияПоиска = 1 тогда
// Файловая
Возврат Сред(СтрокаСоединенияСБД,7,СтрДлина(СтрокаСоединенияСБД)-8)+"\";
Иначе
// Серверная - Используем КаталогВременныхФайлов()
Возврат КаталогВременныхФайлов();
КонецЕсли;
КонецФункции
Для серверного - используйте другие каталоги, например:
Код 1C v 8.х
КаталогВременныхФайлов(); //Возвращает что-то типо: C:\Documents and Settings\E.S.Migachev\Local Settings\Temp\
КаталогПрограммы(); //Возвращает что-то типо: C:\Program Files\1cv81\bin\
Код 1C v 7.x
//Встроенная КаталогИБ() - Возвращает имя каталога базы данных.
КаталогИБ(); //Возвращает что-то типо: C:\Basa1C\buh\
Категория:
Работа с Файлами и Каталогами Функция возведения числа в степень, в дробную степень Для возведения числа в степень в 1С 8.х есть
встроенная функция
pow(основание, степень);
Возвращает результат возведения основания в указанную степень.
* основание: число
* степень: число
Код 1C v 8.х //Возведем число 5 в степень 3
Результат = pow(5,3);
//Результат = 125
// Вычисление объема шара по значению радиуса
Pi=3.1415926535897932;
Радиус=3;
V=4*Pi*Pow(Радиус,3)/3;
Сообщить("Объем шара с радиусом "+Радиус+" равен "+Формат(V,"ЧДЦ=2"));
//Пример расчета сложного процента используя POW
Функция СложныйПроцент(Кредит, Ставка, Срок = 1)
Возврат Кредит*Pow(1 + Ставка/100, Срок);
КонецФункции
Возведение в дробную степень
Код 1C v 7.x
//В диалоговой форме - Лимит, Точность, СамоЧисло(неотрицательное) и //Степень.
Функция ЦелаяСтепень(а,б)
Результат=1;
Для К=1 По б Цикл
Результат=Результат*а;
КонецЦикла;
Возврат Результат;
КонецФункции
Функция ЗнаковПослеТочки(Стр)
Перем К;
Номер=Найти(Стр,".");
Если Номер=0 Тогда
Возврат 0;
КонецЕсли;
НачалоНулей=Номер+1;
Для К=Номер+1 По СтрДлина(Стр) Цикл
Если Сред(Стр,К,1)<>"0" Тогда
НачалоНулей=К;
КонецЕсли;
КонецЦикла;
Возврат Макс(НачалоНулей-Номер,0);
КонецФункции
Функция Знак(Ч)
Если Ч=0 Тогда
Возврат 0;
ИначеЕсли Ч>0 Тогда
Возврат 1;
Иначе
Возврат -1;
КонецЕсли;
КонецФункции
Функция Корень10ВСтепени(Ч,Степень)
Перем а,б;
Если Степень<0 Тогда
Сообщить("Степень <0");
КонецЕсли;
_10ВСтепени=ЦелаяСтепень(10,Степень);
Если _10ВСтепени>1 Тогда
а=0;
б=Лимит;
РезА=Ч-ЦелаяСтепень(а,_10ВСтепени);
РезБ=Ч-ЦелаяСтепень(б,_10ВСтепени);
Пока 1=1 Цикл
Текущее=(а+б)/2;
Рез=Ч-ЦелаяСтепень(Текущее,_10ВСтепени);
Если Знак(Рез)*Знак(РезА)<0 Тогда
б=Текущее;
Иначе
а=Текущее;
КонецЕсли;
Если (а-б<Точность) И (а-б>-Точность) Тогда
Возврат Текущее;
КонецЕсли;
КонецЦикла;
ИначеЕсли Степень=1 Тогда
Возврат Ч;
Иначе
Возврат 1;
КонецЕсли;
КонецФункции
Функция Степень_xyz(f,x,y,z)
Возврат ЦелаяСтепень(f,x)*ЦелаяСтепень(f,y)/Корень10ВСтепени(f,z);
КонецФункции
Функция ПоложительнаяДробнаяСтепень(а,ПоказательСтепени)
Перем Знак;
ЦелаяЧасть=Число(Строка(Цел(ПоказательСтепени)));
ДрЧасть=Сред(ПоказательСтепени,СтрДлина(Строка(ЦелаяЧасть))+2);
ВерхДробной=Число(СтрЗаменить(ДрЧасть,".",""));
Если ВерхДробной>0 Тогда
ДлинаДробной=ЗнаковПослеТочки(Строка(ПоказательСтепени));
Иначе
ДлинаДробной=0;
КонецЕсли;
x=ЦелаяСтепень(а,ЦелаяЧасть)*Корень10ВСтепени(ЦелаяСтепень(а,ВерхДробной),ДлинаДробной);
Возврат x;
КонецФункции
Функция Степень(а,б)
Если б<0 Тогда
НашаА=1/а;
НашаБ=-б;
Иначе
НашаА=а;
НашаБ=б;
КонецЕсли;
Сообщить(ПоложительнаяДробнаяСтепень(НашаА,НашаБ));
Возврат ПоложительнаяДробнаяСтепень(НашаА,НашаБ);
КонецФункции
Лимит=9999999;
Точность=0.001;
//<сообщил Пудель>
Категория:
Работа с Числами Переход с DBF-версии 1Cv7 на SQL-версию Буду краток, делаем так:
1. Установить на сервер MSSQL. Краткая инструкция по установке есть в этом FAQ.
2. Установить на рабочую станцию драйвера ODBC из поставки 1C или ODBC-клиента от Microsoft (он зовется MDAC).
3. Установить на рабочую станцию собственно SQL-версию 1С:Предприятия, ее исполняемый файл, в отличие от сетевой версии, назвается 1Cv7s.exe.
4. Открыть SQL Enterprise Manager и создать новую базу данных. Если непонятно, как это делать — почитайте хелп, он там весьма развесистый. Размер БД выбирается из следующих соображений: данные в sql-базе займут места раза в 2-2.5 больше, чем весит dbf-база, и как минимум 20% пространства sql-базы должно остаться свободным. Размер лога также играет роль — если планируется перенос данных из dbf-версии, следует иметь лог ~25% от размера sql-базы. Можно сразу же установить для базы режим T_runcate log on checkpoint, это поможет избежать проблем с переполнением лога и немного повысит производительность, но лишит возможности в случае аварии БД сделать откат на момент “за пять минут до сбоя”.
5. Подготовить данные dbf-версии к переносу — если он планируется. Это делается с помощью операции “Выгрузить данные”, которая не просто запаковывает таблицы, а переводит информацию в хитрый формат и кладет в файл с расширением *.dat.
6. Создать пустую директорию для хранения конфигурации sql-базы. Она не должна совпадать с директорией, где хранятся файлы собственно sql-базы, последние вообще желательно сделать недоступными для пользователей.
7. Открыть Конфигуратор, зарегистрировать новую базу данных (та самая пустая директория) и на вопрос о типе БД ответить “SQL server”.
8. Выставить в конфигураторе “Параметры базы данных sql...” — это сетевое имя сервера, имя базы данных, как оно было задано в Enterprise Manager, имя пользователя и пароль для доступа к данным через ODBC (встроенная в MSSQL учетная записть администратора имеет логин sa и пустой пароль).
9. Загрузить данные в БД. Если Вам нужна пустая конфигурация, это делается с помощью процедуры “Загрузить измененную конфигурацию”, если данные переносятся из dbf-версии — “Загрузить данные”, конфигурация при этом загрузится автоматически.
10. Можно работать с БД. Не забывайте время от времени архивировать и индексировать свою sql-базу — архивация средствами sql, в отличие от файл-серверной версии, не требует монопольного доступа к базе и может осуществлятся прямо во время работы. Индексация и проверка целостности БД производится последовательным запуском двух TSQL-скриптов, очень простых:
dbcc checkdb — проверка БД
exec _1sp_dbreindex — индексация.
Индексация требует монопольного доступа к данным, поэтому не пытайтесь в это время работать. И архивирование, и индексацию можно (и нужно) повесить на автоматическое исполнение.
Категория:
Администрирование Функция ЗначениеЗаполнено(Значение) для 8.0 В 8.1 есть такая
встроенная функция, а в 8.0 про нее почему-то забыли, исправим это недоразумение:
Код 1C v 8.х
Функция ЗначениеЗаполнено(Значение) Экспорт
Результат = Истина;
ТипЗначения = ТипЗнч(Значение);
Если Значение = Неопределено Тогда
Результат = Ложь;
ИначеЕсли Значение = NULL Тогда
Результат = Ложь;
ИначеЕсли ТипЗначения = Тип( "Строка" ) Тогда
Если СокрЛП( Значение ) = "" Тогда
Результат = Ложь;
КонецЕсли;
ИначеЕсли ТипЗначения = Тип( "Число" ) Тогда
Если Значение = 0 Тогда
Результат = Ложь;
КонецЕсли;
ИначеЕсли ТипЗначения = Тип( "Дата" ) Тогда
Если Значение = Дата( '00010101' ) Тогда
Результат = Ложь;
КонецЕсли;
ИначеЕсли ТипЗначения = Тип( "Булево" ) Тогда
Результат = Истина;
ИначеЕсли ТипЗначения = Тип( "РежимПроведенияДокумента" ) Тогда
Результат = Истина;
Иначе
Если Значение = Новый( ТипЗначения ) Тогда
Результат = Ложь;
КонецЕсли;
КонецЕсли;
Возврат Результат;
КонецФункции
Категория:
Полезные, Универсальные Функции