Пользователь

Добро пожаловать,

Регистрация или входРегистрация или вход
Потеряли пароль?Потеряли пароль?

Ник:
Пароль:

Меню сайта




Ваше мнение
Поиск по сайту

Активно и часто использую
Использую редко
Обхожусь стандартным рубрикатором
Не знаю, что это такое
Я и сам не знаю, что ищу


Результаты
Другие опросы

Всего голосов: 488
Комментарии: 0


Наши партнеры



Статистика




Programming books  Download software  Documentation  Scripts  Content Managment Systems(CMS)  Templates  Icon Sets  Articles  Contacts  Voting  Site Search




Статьи и обзоры



Функции и процедуры 1С

1С-Предприятие - это программный комплекс, контролирующий все стадии товарооборота, от поступления товара на склад до его продажи и проведения через бухгалтерские книги. Первоначально этот комплекс задумывался как бухгалтерская программа и назывался 1C-Бухгалтерия. В этой статье описываются полезные функции и процедуры, помогающие эффективно работать с различными типами данных в системе "1С:Предприятие 7.7".

Форматирование данных в 1С

Код
//форматирование числа
Функция гЧисло(Значение,Знаки=2) Экспорт
Ответ=Формат(Значение,"Ч18."+Знаки);
Возврат СокрЛП(Ответ);
КонецФункции

//функция убирает лишние пробелы
Функция гСжатьПробелы(аТекст) Экспорт
Текст=СокрЛП(аТекст);
//пробелы
Замена=Формат(" ","С5");
Для й=1 По 4 Цикл
Знак=Сред(Замена,й);
Текст=СтрЗаменить(Текст,Знак," ");
КонецЦикла;
//
Возврат СокрЛП(Текст);
КонецФункции

//функция возвращает переданную строку, в которой первая буква устанавливается в верхнем или в нижнем регистре
Функция гБуква(Текст,ФлагНрег=0) Экспорт
Буква=Лев(Текст,1);
Если ФлагНрег=0 Тогда
Буква=ВРег(Буква);
Иначе
Буква=НРег(Буква);
КонецЕсли;
Возврат(Буква+Сред(Текст,2));
КонецФункции

/функция возвращает представление переданного документа
Функция гПредставлениеДокумента(Д) Экспорт
Возврат Д.ПредставлениеВида()+" "+СокрЛП(Д.НомерДок)+" ("+Д.ДатаДок+")";
КонецФункции

//процедура выдаёт сообщение при проведении документа
Процедура гСообщить(Ко,Текст,НомерСтроки=0,Символ="!") Экспорт
//сигнал
Если Ко.Ошибка=0 Тогда
Сигнал();
КонецЕсли;
//документ
Документ=""+Ко.ДатаДок+" "+Ко.ПредставлениеВида()+" "+СокрЛП(Ко.НомерДок);
//номер строки
Если НомерСтроки>0 Тогда
Документ=Документ+" (строка "+НомерСтроки+")";
КонецЕсли;
//сообщение
Сообщить(Документ+": "+Текст,Символ);
КонецПроцедуры



Список значений в 1С

Код
//процедура выполняется при добавлении нового значения в интерактивный список значений
Процедура сзДобавить(Список,Тип,Вид,Длина,Точность,Подсказка) Экспорт
//тип
Если (Тип="Справочник") Или (Тип="Документ") Тогда
Тип=Тип+"."+Вид;
КонецЕсли;
//значение
Если Список.ТекущаяСтрока()=0 Тогда
Значение="";
Иначе
Значение=Список.ПолучитьЗначение(Список.ТекущаяСтрока());
КонецЕсли;
//выбор
Если ВвестиЗначение(Значение,Подсказка,Тип,Длина,Точность)=1 Тогда
Список.ДобавитьЗначение(Значение);
КонецЕсли;
КонецПроцедуры

//процедура выполняется для изменения значения интерактивного списка значений
Процедура сзИзменить(Список) Экспорт
Позиция=Список.ТекущаяСтрока();
Если Позиция=0 Тогда
Возврат;
КонецЕсли;
//
Значение=Список.ПолучитьЗначение(Список.ТекущаяСтрока());
Тип=ТипЗначенияСтр(Значение);
Если (Тип="Справочник") Или (Тип="Документ") Тогда
Тип=Тип+"."+Значение.Вид();
Подсказка=Значение.Вид();
Иначе
Подсказка=Тип;
КонецЕсли;
Если ВвестиЗначение(Значение,Подсказка,Тип)=1 Тогда
Список.УстановитьЗначение(Позиция,Значение);
КонецЕсли;
КонецПроцедуры

//процедура выполняется при удалении значения из интерактивного списка значений
Процедура сзУдалить(Список) Экспорт
Если Список.ТекущаяСтрока()>0 Тогда
Список.УдалитьЗначение(Список.ТекущаяСтрока());
КонецЕсли;
КонецПроцедуры

//процедура изменяет позицию значения интерактивного списка значений
Процедура сзСдвинуть(Список,Количество) Экспорт
Если (Количество>0) И (Список.ТекущаяСтрока()=Список.РазмерСписка()) Тогда
Количество=1-Список.РазмерСписка();
ИначеЕсли (Количество<0) И (Список.ТекущаяСтрока()=1) Тогда
Количество=Список.РазмерСписка()-1;
КонецЕсли;
Список.СдвинутьЗначение(Количество,Список.ТекущаяСтрока());
КонецПроцедуры

//функция проверяет наличие в списке значений с пометками хотя бы одного помеченного значения
Функция сзПометка(Список) Экспорт
Для i=1 По Список.РазмерСписка() Цикл
Если Список.Пометка(i)=1 Тогда
Возврат(1);
КонецЕсли;
КонецЦикла;
//нет пометок
Возврат(0);
КонецФункции

//функция помечает или снимает пометку для всех значений списка
Процедура сзПометить(Список,Флаг) Экспорт
Для й=1 По Список.РазмерСписка() Цикл
Список.Пометка(й,Флаг);
КонецЦикла;
КонецПроцедуры

//процедура оставляет в списке значений заданное количество значений
Процедура сзОбрезать(Список,Размер) Экспорт
Если Список.РазмерСписка()>Размер Тогда
Количество=Список.РазмерСписка()-Размер;
Список.УдалитьЗначение(Размер+1,Количество);
КонецЕсли;
КонецПроцедуры

//функция выгружает значения колонки таблицы значений в список значений
Функция сзКолонка(М,Колонка) Экспорт
Список=СоздатьОбъект("СписокЗначений");
//
В=СоздатьОбъект("ТаблицаЗначений");
М.Выгрузить(В,,,Колонка);
В.Свернуть(Колонка,);
В.Выгрузить(Список,,,Колонка);
Возврат(Список);
КонецФункции

//процедура преобразует строку со значениями в список значений
Процедура сзПарсить(Список,Текст) Экспорт
Если ПустаяСтрока(Текст)=0 Тогда
Если Найти(Текст,"=")=0 Тогда
//делитель - Запятая
Значение=СтрЗаменить(СокрЛП(Текст),",",Симв(34)+","+Симв(34));
Значение=Симв(34)+Значение+Симв(34);
Список.ИзСтрокиСРазделителями(Значение);
Иначе
//делитель - Точка с запятой
Текст=СтрЗаменить(Текст,";",РазделительСтрок);
Для й=1 По Текст.КоличествоСтрок() Цикл
Стр=Текст.ПолучитьСтроку(й);
Если ПустаяСтрока(Стр)=0 Тогда
Позиция=Найти(Стр,"=");
Если Позиция>0 Тогда
Идентификатор=Лев(Стр,Позиция-1);
Значение=Сред(Стр,Позиция+1);
Список.Установить(СокрЛП(Идентификатор),СокрЛП(Значение));
Иначе
Список.ДобавитьЗначение(СокрЛП(Стр));
КонецЕсли;
КонецЕсли;
КонецЦикла;
КонецЕсли;
КонецЕсли;
КонецПроцедуры

//процедура позиционирует строку списка значений на заданном значении
Процедура сзУстановить(Список,Значение) Экспорт
Позиция=Список.НайтиЗначение(Значение);
Если Позиция>0 Тогда
Список.ТекущаяСтрока(Позиция);
КонецЕсли;
КонецПроцедуры


Таблица значений в 1С

Код
//процедура сдвигает строку в таблице значений;
//если сдвигается последняя строка вниз, то строка становится первой;
//если сдвигается первая строка вверх, то строка перемещается в конец таблицы значений
Процедура Количество=1-М.КоличествоСтрок();
ИначеЕсли (Количество<0) И (М.ТекущаяСтрока()=1) Тогда
Количество=М.КоличествоСтрок()-1;
КонецЕсли;
М.СдвинутьСтроку(Количество,М.ТекущаяСтрока())());
КонецПроцедуры

//процедура обнуляет значения таблицы значений вниз от заданной строки и вправо от заданной колонки
Процедура тзОбнулить(М,НомерСтр,НомерКол) Экспорт
Для i=НомерСтр По М.КоличествоСтрок() Цикл
Для j=НомерКол По М.КоличествоКолонок() Цикл
М.УстановитьЗначение(i,j,0);
КонецЦикла;
КонецЦикла;
КонецПроцедуры

//процедура удаляет строку в интерактивной таблице значений> Процедура тзУдалитьСтроку(М) Экспорт
//запоминание текущей строки
ТекСтрока=М.ТекущаяСтрока()-1;
//удаление
М.УдалитьСтроку();
//позиционирование
Если М.КоличествоСтрок()>0 Тогда
ТекСтрока=Мин(ТекСтрока,М.КоличествоСтрок());
М.ТекущаяСтрока(ТекСтрока);
КонецЕсли;
КонецПроцедуры

//процедура находит документ с заданным номером в таблице значений с документами
Процедура гЖурнал_Найти(М) Экспорт
НомерДок=0;
Если ВвестиЧисло(НомерДок,"Номер документа",5,0)=1 Тогда
//поиск по номеру в выборке
Если М.НайтиЗначение(НомерДок,,"Номер")=0 Тогда
Предупреждение("Документ № "+НомерДок+" не найден");
Возврат;
КонецЕсли;
//поиск документа
Список=СоздатьОбъект("СписокЗначений");
М.ВыбратьСтроки();
Пока М.ПолучитьСтроку()=1 Цикл
Если М.Номер=НомерДок Тогда
Список.ДобавитьЗначение(М.ТекущийДокумент);
КонецЕсли;
КонецЦикла;
//выбор
Значение="";
Если Список.РазмерСписка()=1 Тогда
Значение=Список.ПолучитьЗначение(1);
ИначеЕсли Список.ВыбратьЗначение(Значение,"Выбор документа")=0 Тогда
Возврат;
КонецЕсли;
//позиционирование
НомерСтр=0;
М.НайтиЗначение(Значение,НомерСтр,"ТекущийДокумент");
М.ТекущаяСтрока(НомерСтр);
КонецЕсли;
КонецПроцедуры


Таблица или печатная форма в 1С

Код
//установление автоширины колонок таблицы
Процедура гАвтоШиринаКолонок(Таб,НачКол,НачСтр) Экспорт
Для НомерКол=НачКол По Таб.ШиринаТаблицы() Цикл
МаксШирина=0;
Для НомерСтр=НачСтр По Таб.ВысотаТаблицы() Цикл
ТекШирина=СтрДлина(Таб.Область(НомерСтр,НомерКол).Текст);
МаксШирина=Макс(МаксШирина,ТекШирина);
КонецЦикла;
Таб.Область(,НомерКол).ШиринаСтолбца(МаксШирина+2);
КонецЦикла;
КонецПроцедуры


Периоды и даты в 1С

Код
//функция проверяет, равен ли месяцу интервал между заданными датами
Функция ЭтоМесяц(ДатаН,ДатаК) Экспорт
Если Не(ДатаН=НачМесяца(ДатаН)) Тогда
Возврат(0);
ИначеЕсли Не(ДатаК=КонМесяца(ДатаК)) Тогда
Возврат(0);
ИначеЕсли ДатаН=НачМесяца(ДатаК) Тогда
Возврат(1);
Иначе
Возврат(0);
КонецЕсли;
КонецФункции

//функция возвращает количество полных месяцев между датами
Функция гМесяцев(ДатаН,ДатаК) Экспорт
Если ДатаН<ДатаК Тогда
ТекДата=НачМесяца(ДатаН);
Значение=1;
Пока ТекДата<НачМесяца(ДатаК) Цикл
ТекДата=ДобавитьМесяц(ТекДата,1);
Значение=Значение+1;
КонецЦикла;
Возврат(Значение);
Иначе
Возврат(0);
КонецЕсли;
КонецФункции

//функция определяет порядковый номер месяца в квартале
Функция гМесяцКвартала(ДатаДок) Экспорт
НачМесяц=ДатаМесяц(НачКвартала(ДатаДок));
КонМесяц=ДатаМесяц(ДатаДок);
Возврат(КонМесяц-НачМесяц+1);
КонецФункции

//функция определяет порядковый номер квартала по дате
Функция гДатаКвартал(аДата) Экспорт
Возврат ДатаМесяц(КонКвартала(аДата))/3;
КонецФункции


Календари и праздники в 1С

Код
//ф//функция возвращает дату, находящуюся на определённом интервале дней от заданной даты, без учёта выходных;
//например, используется для определения конечной даты действия счёта-фактуры
Функция an class="color-blue">гСрокДействия(ДатаДок,Период,Вид="Основной") Экспорт
К=СоздатьОбъект("Календарь."+Вид);
К.УчитыватьПраздники(1);
Если К.Автозаполнение(ДатаДок,ДобавитьМесяц(ДатаДок+Период,1))=1 Тогда
Возврат К.ПолучитьДату(ДатаДок,Период);
КонецЕсли;
КонецФункции

//функция определяет количество рабочих дней в интервале дат
Функция гРабочиеДни(ДатаН,ДатаК,Вид="Основной") Экспорт
К=СоздатьОбъект("Календарь."+Вид);
К.УчитыватьПраздники(1);
Если К.Автозаполнение(ДатаН,ДатаК)=1 Тогда
Возврат К.Дней(ДатаН,ДатаК);
КонецЕсли;
КонецФункции

//функция определяет количество праздничных дней в интервале дат
Функция гПраздники(ДатаН,ДатаК) Экспорт
Кол=0;
//
П=СоздатьОбъект("Праздники");
П.ВыбратьДаты(ДатаН,ДатаК);
Пока П.СледующаяДата()=1 Цикл
Если НомерДняНедели(П.Дата)<6 Тогда
Кол=Кол+1;
КонецЕсли;
КонецЦикла;
//
Возврат(Кол);
КонецФункции








Нет комментариев. Почему бы Вам не оставить свой?
Вы не можете отправить комментарий анонимно, пожалуйста войдите или зарегистрируйтесь.
Внимание! Если у вас не получилось найти нужную информацию, используйте рубрикатор или воспользуйтесь поиском


.



Статьи и обзоры Программирование Функции и процедуры этой статье описываются полезные функции процедуры помогающие эффективно работать различными типами данных системе & quot Предприятие 7& Форматирование Код//форматирование числа Функция гЧисло Значение Знаки=2 Экспорт Ответ=Формат Ч18 Знаки Возврат СокрЛП Ответ КонецФункции //функция убирает лишние пробелы гСжатьПробелы аТекст Текст=СокрЛП //пробелы Замена=Формат С5& Для й=1 По Цикл Знак=Сред Замена Текст=СтрЗаменить