В этой статье описываются полезные функции и процедуры, помогающие эффективно работать с различными типами данных в системе "1С:Предприятие 7.7".
* Обработка значе
ни й
* Форматирова
ни е
* Список значе
ни й
* Таблица значе
ни й
* Таблица
* Период и дата
* Календари и празд
ни ки
* Справоч
ни ки
* Документы
* Предопределённые функции
* Налоговый учёт
Обработка значени й в 1С
Код //функция проверяет, является ли переданный в функцию Символ числом
Функция ЭтоЧисло(Символ) Экспорт
Если (КодСимв(Символ)>=48) И (КодСимв(Символ)<=57) Тогда
Возврат(1);
Иначе
Возврат(0);
КонецЕсли;
КонецФункции
//функция возвращает копейки
Функция гКопейки(Значе
ни е) Экспорт
Грн=Цел(Значе
ни е);
Коп=Значе
ни е-Грн;
Возврат(Коп
0);
КонецФункции
//функция возвращает сумму без скидки
Функция гСкидка(Сумма,Скидка) Экспорт
Возврат Сумма*(1-Скидка/100);
КонецФункции
//функция устанавливает новое значе
ни е реквизита документа или справоч
ни ка и задаёт вопрос, если новое значе
ни е не соответствует предыдущему
Функция гЗначе
ни е(Ко,Атрибут,Значе
ни е) Экспорт
Знач1=Ко.ПолучитьАтрибут(Атрибут);
Знач2=Значе
ни е;
//проверка
Если Не(ТипЗначе
ни яСтр(Знач1)=ТипЗначе
ни яСтр(Знач2)) Тогда
//несоответствие типов
Возврат(0);
ИначеЕсли Не(ТипЗначе
ни яСтр(Знач2)="Число") И (ПустоеЗначе
ни е(Знач2)=1) Тогда
//пустое новое значе
ни е
Возврат(0);
КонецЕсли;
//реквизит
Если Метаданные.Документ(Ко.Вид()).Выбран()=1 Тогда
//документ
Если Метаданные.Документ(Ко.Вид()).РеквизитШапки(Атрибут).Выбран()=1 Тогда
Ж=Метаданные.Документ(Ко.Вид()).РеквизитШапки(Атрибут);
Имя=Ж.Представле
ни е();
ИначеЕсли Метаданные.Документ(Ко.Вид()).РеквизитТабличнойЧасти(Атрибут).
Выбран()=1 Тогда
Ж=Метаданные.Документ(Ко.Вид()).РеквизитТабличнойЧасти(Атрибут);
Имя=Ж.Представле
ни е()+" (строка "+Ко.НомерСтроки+")";
Иначе
Ж=Метаданные.ОбщийРеквизитДокумента(Атрибут);
Имя=Ж.Представле
ни е();
КонецЕсли;
ИначеЕсли Метаданные.Справоч
ни к(Ко.Вид()).Выбран()=1 Тогда
//справоч
ни к
Ж=Метаданные.Справоч
ни к(Ко.Вид()).Реквизит(Атрибут);
Имя=Ж.Представле
ни е();
Если ПустаяСтрока(Имя)=1 Тогда
Имя=Атрибут;
КонецЕсли;
КонецЕсли;
//форматирова
ни е
Если ТипЗначе
ни яСтр(Знач2)="Строка" Тогда
Знач1=СокрЛП(Знач1);
Знач2=СокрЛП(Знач2);
ИначеЕсли ТипЗначе
ни яСтр(Знач2)="Число" Тогда
Знач2=Окр(Знач2,Ж.Точность);
КонецЕсли;
//проверка
Если Знач1=Знач2 Тогда
Возврат(0);
КонецЕсли;
//установка значе
ни я
Если ПустоеЗначе
ни е(Знач1)=0 Тогда
Текст=
"Атрибут: "+Имя+"
|
|Старое значе
ни е: "+СимволТабуляции+Знач1+"
|Новое значе
ни е: "+СимволТабуляции+Знач2+"
|
|Установить новое значе
ни е?";
Если Вопрос(Текст,"Да+Нет")="Нет" Тогда
Возврат(0)
КонецЕсли;
КонецЕсли;
//значе
ни е
Ко.УстановитьАтрибут(Атрибут,Знач2);
Возврат(1);
КонецФункции
Форматировани е данных в 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;
КонецЕсли;
КонецЦикла;
//
Возврат(Кол);
КонецФункции
Справоч
ни ки в 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С".
Источни к публикации
Разместил: Андрей Громов | | Прочитано: 163226 | |