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

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

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

Ник:
Пароль:

Меню сайта




Ваше мнение
Хотите ли вы стать модератором раздела сайта или форума? (Желающие пишем админу.)

Да, конечно.
Только за большие деньги.
Нет, ни за что.
Ну может в будущем...


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

Всего голосов: 650
Комментарии: 2


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



Статистика




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




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



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

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

Справочники в 1С

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

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

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

//процедура удаляет заданный элемент справочника
Процедура гЭлемент_Удалить(Элемент,Флаг) Экспорт
С=СоздатьОбъект("Справочник."+Элемент.Вид());
С.НайтиЭлемент(Элемент);
С.Удалить(Флаг);
КонецПроцедуры

//функция возвращает строку вида "Иванов И.И." из переданной в функцию строки вида "Иванов Иван Иванович"
Функция гФио_Получить(Значение)
Стр=гФорматС(Значение);
Стр=СтрЗаменить(Стр," ",РазделительСтрок);
Если СтрКоличествоСтрок(Стр)=1 Тогда
Фио=СокрЛП(Стр);
ИначеЕсли СтрКоличествоСтрок(Стр)=2 Тогда
СтрФ=СтрПолучитьСтроку(Стр,1);
СтрИ=СтрПолучитьСтроку(Стр,2);
Фио=СокрЛП(СтрФ)+" "+Лев(СокрЛП(СтрИ),1)+".";
Иначе
СтрО=СтрПолучитьСтроку(Стр,СтрКоличествоСтрок(Стр));
СтрИ=СтрПолучитьСтроку(Стр,СтрКоличествоСтрок(Стр-1));
СтрФ="";
Для й=1 По СтрКоличествоСтрок(Стр)-2 Цикл
СтрФ=СтрФ+" "+СтрПолучитьСтроку(Стр,й);
КонецЦикла;
Фио=СокрЛП(СтрФ)+" "+Лев(СокрЛП(СтрИ),1)+"."+Лев(СокрЛП(СтрО),1)+".";
КонецЕсли;
Возврат(Фио);
КонецФункции

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


Документы в 1С

Код
//удаление ведущих нолей в номере документа
Функция гНомерДок(Значение) Экспорт
Текст=СокрЛП(Значение);
Текст=СтрЗаменить(Текст," ","");
Текст=СтрЗаменить(Текст,"_","-");
Если Константа.ФлагНомерОсн=0 Тогда
Возврат(Текст);
ИначеЕсли Текст="0" Тогда
Возврат(Текст);
КонецЕсли;
//префикс
Префикс="";
Для i=1 По СтрЧислоВхождений(Текст,"-") Цикл
Позиция=Найти(Текст,"-");
Префикс=Префикс+Лев(Текст,Позиция);
Текст=Сред(Текст,Позиция+1);
КонецЦикла;
//удаление нолей
ФлагЧисло=0;
Номер="";
Для i=1 По СтрДлина(Текст) Цикл
Символ=Сред(Текст,i,1);
Если ЭтоЧисло(Символ)=0 Тогда
Номер=Номер+Символ;
ИначеЕсли Не(Число(Символ)=0) Тогда
Номер=Номер+Символ;
ФлагЧисло=1;
ИначеЕсли ФлагЧисло=1 Тогда
Номер=Номер+Символ;
КонецЕсли;
КонецЦикла;
//
Возврат(Префикс+Номер);
КонецФункции

//функция возвращает числовой номер документа без префикса
Функция гНомерБезПрефикса(Значение) Экспорт
Номер=гНомерДок(Значение);
Позиция=Найти(Значение,"-");
Номер=Сред(Номер,Позиция+1);
Возврат(Номер);
КонецФункции

//функция создаёт таблицу значений документов заданного вида по одному клиенту и даёт выбрать один документ
Функция гДокументКлиента(Значение,Клиент,ВидДокумента) Экспорт
Если Клиент.Выбран()=0 Тогда
Предупреждение("Не выбран Контрагент!");
Возврат(0);
КонецЕсли;
//таблица
М=СоздатьОбъект("ТаблицаЗначений");
М.НоваяКолонка("Дата","Дата",,,,10);
М.НоваяКолонка("Док","Строка",,,"Документ",50);
М.НоваяКолонка("Сумма","Число",,,,18,"Ч015.2");
М.НоваяКолонка("Документ","Документ");
М.ВидимостьКолонки("Документ",0);
//документы
Д=СоздатьОбъект("Документ");
Д.ВыбратьПоЗначению(,,"Клиент",Клиент);
Пока Д.ПолучитьДокумент()=1 Цикл
Состояние(""+Д.ДатаДок);
Если Не(Д.Вид()=ВидДокумента) Тогда
Продолжить;
КонецЕсли;
//
М.НоваяСтрока();
М.Документ=Д.ТекущийДокумент();
М.Дата=Д.ДатаДок;
М.Док=Д.ПредставлениеВида()+" "+СокрЛП(Д.НомерДок);
//сумма
Ж=Метаданные.Документ(Д.Вид());
Если Ж.РеквизитТабличнойЧасти("ВалСумма").Выбран()=1 Тогда
М.Сумма=Д.Итог("ВалСумма");
ИначеЕсли Ж.РеквизитТабличнойЧасти("СуммаС").Выбран()=1 Тогда
М.Сумма=Д.Итог("СуммаС");
ИначеЕсли Ж.РеквизитТабличнойЧасти("Сумма").Выбран()=1 Тогда
М.Сумма=Д.Итог("Сумма");
КонецЕсли;
КонецЦикла;
//проверка
Если М.КоличествоСтрок()=0 Тогда
Предупреждение("Документы не найдены!");
Возврат(0);
КонецЕсли;
//строка по умолчанию
НомерСтр=0;
Если М.НайтиЗначение(Значение,НомерСтр,"Документ")=0 Тогда
НомерСтр=М.КоличествоСтрок();
КонецЕсли;
//выбор
Заголовок=Метаданные.Документ(ВидДокумента).Представление()+": "+Клиент.Наименование;
Если М.ВыбратьСтроку(НомерСтр,Заголовок)=1 Тогда
Значение=М.ПолучитьЗначение(НомерСтр,"Документ");
Возврат(1);
Иначе
Возврат(0);
КонецЕсли;
КонецФункции


Предопределённые функции и процедуры в 1С

Код
Процедура ОбработкаЯчейкиТаблицы(Значение,Флаг,Таблица,Адрес)
Перем Ответ;
Перем Ко;
Если ПустоеЗначение(Значение)=1 Тогда
Предупреждение("Невозможно обработать значение ячейки!");
ИначеЕсли ТипЗначенияСтр(Значение)="Документ" Тогда
Если гПользователь.ФлагСписок=0 Тогда
Флаг=1;
Иначе
А=СоздатьОбъект("СписокЗначений");
А.ДобавитьЗначение(0,"Открыть документ");
А.ДобавитьЗначение(1,"Открыть в журнале документов");
Если А.ВыбратьЗначение(Ответ,,,,1)=1 Тогда
Если Ответ=0 Тогда
Флаг=1;
Иначе
Журнал=Метаданные.Документ(Значение.Вид()).Журнал.Идентификатор;
ОткрытьФорму("Журнал."+Журнал+".Основная",Ко);
Ко.АктивизироватьОбъект(Значение);
КонецЕсли;
КонецЕсли;
КонецЕсли;
ИначеЕсли ТипЗначенияСтр(Значение)="Справочник" Тогда
Если гПользователь.ФлагСписок=0 Тогда
Флаг=1;
Иначе
А=СоздатьОбъект("СписокЗначений");
А.ДобавитьЗначение(0,"Открыть элемент");
А.ДобавитьЗначение(1,"Открыть в списке справочника");
Если А.ВыбратьЗначение(Ответ,,,,1)=1 Тогда
Если Ответ=0 Тогда
Флаг=1;
Иначе
Журнал=Метаданные.Справочник(Значение.Вид()).ОсновнаяФорма;
ОткрытьФорму("Справочник."+Значение.Вид()+"."+Журнал,Ко);
Ко.АктивизироватьОбъект(Значение);
КонецЕсли;
КонецЕсли;
КонецЕсли;
ИначеЕсли ТипЗначенияСтр(Значение)="СписокЗначений" Тогда
//расшифровка - СписокЗначений
Кнопка=Значение.Получить("Кнопка");
Если Число(Кнопка)=0 Тогда
Значение.СортироватьПоПредставлению();
//обработка - Ячейка
Представление="";
А=СоздатьОбъект("СписокЗначений");
Для i=1 По Значение.РазмерСписка() Цикл
Отчет=Значение.ПолучитьЗначение(i,Представление);
Если ПустаяСтрока(Отчет)=1 Тогда
Продолжить;
ИначеЕсли Лев(Представление,4)="Меню" Тогда
//элемент контекстного меню в ячейке
Позиция=Найти(Отчет,"|");
Если Позиция=0 Тогда
Представление=Метаданные.Отчет(Отчет).Представление();
Иначе
Добавка=Сред(Отчет,Позиция+1);
Отчет=Лев(Отчет,Позиция-1);
Представление=Метаданные.Отчет(Отчет).Представление()+": "+Добавка;
КонецЕсли;
А.ДобавитьЗначение(Отчет,Представление);
КонецЕсли;
КонецЦикла;
//контекстное меню в ячейке
Если А.РазмерСписка()>0 Тогда
Если А.ВыбратьЗначение(Ответ,,,,1)=1 Тогда
Значение.Выгрузить(гПакет);
гПакет.Установить("Таблица","");
ОткрытьФормуМодально("Отчет."+Ответ,1+гПользователь.ФлагОтчет);
КонецЕсли;
КонецЕсли;
Иначе
//обработка - Кнопка
Значение.Выгрузить(гПакет);
гПакет.Установить("Таблица",Таблица);
Отчет=Значение.Получить("Отчет");
ОткрытьФормуМодально("Отчет."+Отчет,Кнопка);
гПакет.Установить("Таблица","");
КонецЕсли;
ИначеЕсли ТипЗначенияСтр(Значение)="Строка" Тогда
Если ВРег(Лев(СокрЛП(Значение),6))="ССЫЛКА" Тогда
СтрокаЗапуска=СокрЛП(Сред(Значение,7));
ЗапуститьПриложение(СтрокаЗапуска);
Иначе
Флаг=1;
КонецЕсли;
Иначе
//расшифровка - Стандартная обработка ячейки
Флаг=1;
КонецЕсли;
КонецПроцедуры


Налоговый учёт и первое событие в 1С

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


Резюме

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





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


.



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