Загрузка данных из текстовых файлов с выборкой через ADO. Часто бывает потребность загружать данные из текстовых форматов, причем информация для загрузки бьется на 2 и более файлов.
Хорошо бы посредством SQL запроса выбирать данные из этих файлов и производить загрузку! Это вполне возможно и я считаю этот способ наиболее грамотный для решения таких задач!
Имеем 2 файла:
- Head_XXXXX.txt
- Rows_XXXXX.txt
Где XXXXX – порядковой номер пары файлов
Структура строки в Head_XXXXX.txt :
Колонка1 20 символов – Номер заказа
Колонка2 5 символов – Код контрагента
Колонка3 10 символов – Дата заказа
Колонка4 10 символов – Дата доставки
Колонка5 10 символов – Дата сбора
Колонка6 4 символов – Количество строк в ТЧ
Структура строки в Rows_XXXXX.txt :
Колонка1 20 символов – Номер заказа
Колонка2 7 символов – Артикул номенклатуры
Колонка3 9 символов – Количество в базовых ед. изм.
В каждой паре файлов несколько Заказов.
Необходимо загрузить эти заказы в БД 1С
Для этого воспользуемся Microsoft.Jet.OLEDB.4.0
Для того чтоб данный драйвер корректно понимал структуру файлов необходимо в каталоге расположения данных файлов, перед выполнением запросов, создать специальный текстовый файл schema.ini cо следующими строками:
Код [ Head_XXXXX]
ColNameHeader=False
Format=FixedLength
Col1=Number Note Text Width 20
Col2=StoreNum Text Width 5
Col3=DataNote DateTime Width 10
Col4=DataDev DateTime Width 10
Col5=DataDes DateTime Width 10
Col6=CountLine Long Width 4
[Rows_XXXXX]
ColNameHeader=False
Format=FixedLength
Col1=Number Note Text Width 20
Col2=Articul Text Width 7
Col3=Counts Double Width 9
Как видим, здесь мы задаем структуру таблицы из файла.
Остается только выполнить запрос к полученной текстовой БД и обработать результат:
Ниже приведен пример кода для платформы 1С 8:
Код 1C v 8.х // Загружает данные из текстовых данных
// Параметры
// Стр_КаталогДанных - <Строка>
// Автор: Gmix 04.05.2006 12:22:09
// Возвращаемое значение:
// <Булево>
Функция ЗагрузитьДанныеИзtxt(Стр_КаталогДанных)
// проверки заполнения
ОБ_ФайлДанных=Новый Файл(Стр_КаталогДанных);
Если НЕ ОБ_ФайлДанных.ЭтоКаталог() Тогда
Сообщить("Необходимо указать каталог данных!",СтатусСообщения.ОченьВажное);
Возврат Ложь;
КонецЕсли;
Если НЕ ОБ_ФайлДанных.Существует() Тогда
Сообщить("Каталог """+Стр_КаталогДанных+""" не существует!",СтатусСообщения.ОченьВажное);
Возврат Ложь;
КонецЕсли;
ОБ_АДОКонект = Новый COMОбъект("ADODB.Connection");
ОБ_АДОРекордсетШапка = Новый COMОбъект("ADODB.Recordset");
ОБ_АДОРекордсетСтроки = Новый COMОбъект("ADODB.Recordset");
//Определяем пару файлов
Стр_ОкончаниеФайла="";
ФайлыШапок = НайтиФайлы(Стр_КаталогДанных, "Head_*.txt");
Для каждого ФайлШапки Из ФайлыШапок Цикл
Стр_ОкончаниеФайла=Сред(ФайлШапки.ИмяБезРасширения,6);
Стр_таблицаШапки=ФайлШапки.Имя;
Стр_ТаблицаСтрок="Rows_"+Стр_ОкончаниеФайла+".txt";
Стр_ИмяФайлСтрок=ДобавлениеСлеша(Стр_КаталогДанных)+Стр_ТаблицаСтрок;
ФайлСтрок=Новый Файл(Стр_ИмяФайлСтрок);
Если НЕ ФайлСтрок.Существует() Тогда
Сообщить("Не найден файл строк для файла шапки """+Стр_таблицаШапки+"""! Пара файлов не обработана",СтатусСообщения.Важное);
Продолжить;
КонецЕсли;
//Создаем схему данных
ФайлСхемыДанных=Новый Файл(ДобавлениеСлеша(Стр_КаталогДанных)+"schema.ini");
Если ФайлСхемыДанных.Существует() Тогда
Попытка
УдалитьФайлы(ФайлСхемыДанных.Путь,ФайлСхемыДанных.Имя);
Исключение
Сообщить("Не возможно удалить файл """+ФайлСхемыДанных.ПолноеИмя+""" для создания новой схемы данных! Проверте атрибуты файла",СтатусСообщения.Важное);
Возврат Ложь;
КонецПопытки;
КонецЕсли;
Стр_СхемаДанныхТхт="["+Стр_таблицаШапки+"]
|ColNameHeader=False
|Format=FixedLength
|Col1=Number Note Text Width 20
|Col2=StoreNum Text Width 5
|Col3=DataNote DateTime Width 10
|Col4=DataDev DateTime Width 10
|Col5=DataDes DateTime Width 10
|Col6=CountLine Long Width 4
|["+Стр_ТаблицаСтрок+"]
|ColNameHeader=False
|Format=FixedLength
|Col1=Number Note Text Width 20
|Col2=Articul Text Width 7
|Col3=Counts Double Width 9";
ТекстСхемы=Новый ЗаписьТекста(ФайлСхемыДанных.ПолноеИмя, КодировкаТекста.ANSI);
ТекстСхемы.Записать(Стр_СхемаДанныхТхт);
ТекстСхемы.Закрыть();
// Создаем коннект
Попытка
ОБ_АДОКонект.Open("Provider=Microsoft.Jet.OLEDB.4.0;Data Source="+Стр_КаталогДанных+";Extended Properties='text;FMT=Delimited;HDR=NO'");
Исключение
Сообщить("Невозможно открыть соединение!"+ОписаниеОшибки(),СтатусСообщения.Важное);
Возврат Ложь;
КонецПопытки;
Стр_SQL = "S_elect * FROM "+Стр_таблицаШапки;
Попытка
ОБ_АДОРекордсетШапка=ОБ_АДОКонект.Execute(Стр_SQL);
Исключение
Сообщить("Ошибка выполнения запроса """+Стр_SQL+"""!"+ОписаниеОшибки(),СтатусСообщения.Важное);
Возврат Ложь;
КонецПопытки;
Пока НЕ ОБ_АДОРекордсетШапка.EOF Цикл
// Заказ
Стр_НомерЗаказа = ОБ_АДОРекордсетШапка.Fields("Number Note").Value;
Стр_КодКА= ОБ_АДОРекордсетШапка.Fields("StoreNum").Value;
Д_ДатаЗаказа= ОБ_АДОРекордсетШапка.Fields("DataNote").Value;
Д_ДатаДоставки= ОБ_АДОРекордсетШапка.Fields("DataDev").Value;
Д_ДатаСбора= ОБ_АДОРекордсетШапка.Fields("DataDes").Value;
Ч_КоличествоСтрок = ОБ_АДОРекордсетШапка.Fields("CountLine").Value;
Сообщить("Заказ № "+Стр_НомерЗаказа+" от " +Д_ДатаЗаказа+ " Код контрагента: "+Стр_КодКА+" Дата доставки: "+Д_ДатаДоставки);
// Обработка строк заказа
Стр_SQL = "S_elect * FROM "+Стр_ТаблицаСтрок+" WHERE Number Note='"+Стр_НомерЗаказа+"'";
Попытка
ОБ_АДОРекордсетСтроки=ОБ_АДОКонект.Execute(Стр_SQL);
Исключение
Сообщить("Ошибка выполнения запроса """+Стр_SQL+"""!"+ОписаниеОшибки(),СтатусСообщения.Важное);
Возврат Ложь;
КонецПопытки;
Сч=0;
Сообщить(" № Артикул Количество");
Пока НЕ ОБ_АДОРекордсетСтроки.EOF Цикл
//Заполняем таб часть документа
Сч=Сч+1;
Стр_Артикул=СокрЛП(ОБ_АДОРекордсетСтроки.Fields("Articul").Value);
Ч_Количество=ОБ_АДОРекордсетСтроки.Fields("Counts").Value;
Сообщить(""+Сч+" " +Стр_Артикул+ " "+Ч_Количество);
ОБ_АДОРекордсетСтроки.MoveNext();
КонецЦикла;
ОБ_АДОРекордсетШапка.MoveNext();
КонецЦикла;
КонецЦикла;
Возврат Истина;
КонецФункции
Автор
Журавлев Михаил Викторович Категория:
JSON, XML, TXT, CSV, DBF Функции - Экспонента, Степень, Логарифм, Синус, Косинус, Тангенс Встроенные функции 1С 8.х для работы со значениями типа Число:
Код 1C v 8.х // Функция вычислет степень числа
// _База - Число - Число, возводимое в степень
// _Степ - Число - Степень числа
Функция Степень(_База, _Степ)
Результат = 1;
Для К = 1 По _Степ Цикл
Результат = Результат *_База;
КонецЦикла;
Возврат Результат;
КонецФункции
// Возвращает Число, возведенное в степень
ACos - Вычисляет арккосинус от аргумента <Число>.
Синтаксис:
Код 1C v 8.х ACos(<Число>)
Параметры: <Число> - Обязательный
Тип: Число. Аргумент функции. Определен в диапазоне -1 ... 1.
ASin - Вычисляет арксинус от аргумента <Число>.
Синтаксис:
Код 1C v 8.х ASin(<Число>)
Параметры: <Число> - Обязательный
Тип: Число. Аргумент функции. Определен в диапазоне -1 ... 1.
ATan - Вычисляет арктангенс от аргумента <Число>.
Синтаксис:
Код 1C v 8.х ATan(<Число>)
Параметры: <Число> - Обязательный
Тип: Число. Аргумент функции.
Cos - Вычисляет косинус от аргумента <Угол>, заданного в радианах.
Синтаксис:
Код 1C v 8.х Cos(<Угол>)
Параметры: <Угол> - Обязательный
Тип: Число. Аргумент функции.
Exp - Вычисляет результат возведения основания натурального логарифма (числа е) в степень <Число>.
Синтаксис:
Код 1C v 8.х Exp(<Число>)
Параметры: <Число> - Обязательный
Тип: Число. Аргумент функции.
Log - Вычисляет натуральный логарифм числа.
Синтаксис:
Код 1C v 8.х Log(<Число>)
Параметры: <Число> - Обязательный
Тип: Число. Исходное число, больше 0.
Log10 - Вычисляет десятичный логарифм числа.
Синтаксис:
Код 1C v 8.х Log10(<Число>)
Параметры: <Число> - Обязательный
Тип: Число. Исходное число, больше 0.
Sin - Вычисляет синус от аргумента <Угол>, заданного в радианах.
Синтаксис:
Код 1C v 8.х Sin(<Угол>)
Параметры: <Угол> - Обязательный
Тип: Число. Аргумент функции.
Tan - Вычисляет тангенс от аргумента <Угол>, заданного в радианах.
Синтаксис:
Код 1C v 8.х Tan(<Угол>)
Параметры: <Угол> - Обязательный
Тип: Число. Аргумент функции.
Код 1C v 7.x // Hижe пpивeдeн Полный тeкcт мoдyля, coдepжaщeгo фyнкции
// КвaдpaтныйКopeнь(),
// ЭкcПонeнтa(),
// CтeпeннaяФyнкция(),
// Cинyc(), Кocинyc() и Taнгeнc().
//Источник http://www.kb.mista.ru/article.php?id=78
// Toчнocть c кoтopoй вычиcляютcя Значeния функций
// КвaдpaтныйКopeнь(), ЭкcПонeнтa(), CтeпeннaяФункция()
Перем ДocтaтoчнaяToчнocть;
// Кoличecтвo Значaщиx знaкoв Поcлe зaпятoй для peзультaтoв,
// вoзвpaщaeмыx функциями
// КвaдpaтныйКopeнь(), ЭкcПонeнтa(), CтeпeннaяФункция()
Перем КoличecтвoЗнaкoв;
// Максимaльнoe кoличecтвo итepaций, кoтopoe выПолняeтcя в функцияx
// КвaдpaтныйКopeнь(), ЭкcПонeнтa(), CтeпeннaяФункция()
Перем КoличecтвoИтepaций;
// Чиcлo "пи"
Перем ЧиcлoПИ;
Функция КвaдpaтныйКopeнь(Apгумeнт) Далее
Функция ЭкcПонeнтa(Apгумeнт) Далее
Функция CтeпeннaяФункция(Apгумeнт1,Apгумeнт2) Далее
Функция Cинуc(Знач Apгумeнт, TипApгумeнтa = 0) Далее
Функция Кocинуc(Знач Apгумeнт, TипApгумeнтa = 0) Далее
Функция Taнгeнc(Знач Apгумeнт, TипApгумeнтa = 0) Далее
//******************************************************************
// Кв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;
КонецФункции // кoнeц функции КвaдpaтныйКopeнь
//******************************************************************
// ЭкcПонeнтa(Apгумeнт)
//
// Пapaмeтpы:
// Apгумeнт - чиcлo
//
// Boзвpaщaeмoe Значeниe:
// Чилo e в cтeпeни Apгумeнт
//
// Oпиcaниe
// ПpeднaЗначeнa для иcчиcлeния экcПонeнты c пpимeнeниeм
// pядa Maклopeнa (чacтный cлучaй pядa Tэйлopa)
// Итepaции выПолняютcя дo дocтижeния тoчнocти, зaдaннoй
// внeшнeй (публичнoй) Перемeннoй ДocтaтoчнaяToчнocть
//
//
Функция ЭкcПонeнтa(Apгумeнт)
Значeниe = 1;
ПpeдыдущийЧлeн = 1;
Для Cч=1 По КoличecтвoИтepaций Цикл
OчepeднoйЧлeн = ПpeдыдущийЧлeн*Apгумeнт/Cч;
Значeниe = Значeниe+OчepeднoйЧлeн;
Toчнocть = OчepeднoйЧлeн/Значeниe;
Если (Toчнocть<ДocтaтoчнaяToчнocть) И (OчepeднoйЧлeн<0.1) Тогда
Прервать;
КонецЕсли;
ПpeдыдущийЧлeн=OчepeднoйЧлeн;
КонецЦикла;
Значeниe = Окр(Значeниe,Макс(КoличecтвoЗнaкoв-Лог10(Значeниe),0));
Возврат Значeниe;
КонецФункции // кoнeц функции ЭкcПонeнтa
//******************************************************************
// CтeпeннaяФункция(Apгумeнт1, Apгумeнт2)
//
// Пapaмeтpы:
// Apгумeнт1 - чиcлo, кoтopoe вoзвoдитcя в cтeпeнь Apгумeнт2
// Apгумeнт2 - чиcлo
//
// Boзвpaщaeмoe Значeниe:
// Чиcлo Apгумeнт1 в cтeпeни Apгумeнт2
// Oпиcaниe
// ПpeднaЗначeнa для иcчиcлeния cтeпeннoй функции c пpимeнeниeм
// pядa Maклopeнa (чacтный cлучaй pядa Tэйлopa)
// Итepaции выПолняютcя дo дocтижeния тoчнocти, зaдaннoй
// внeшнeй (публичнoй) Перемeннoй ДocтaтoчнaяToчнocть
//
//
Функция CтeпeннaяФункция(Apгумeнт1,Apгумeнт2)
// Пpoвepим бaзу cтeпeннoй функции
Если Apгумeнт1<0 Тогда
// cooбщeниe oб oшибкe
Сообщить("...","!");
// Oтceчeм нoль
ИначеЕсли Apгумeнт1=0 Тогда
Возврат 0;
КонецЕсли;
Значeниe = 1;
ПpeдыдущийЧлeн = 1;
Для Cч=1 По КoличecтвoИтepaций Цикл
OчepeднoйЧлeн = ПpeдыдущийЧлeн*Apгумeнт2*Лог(Apгумeнт1)/Cч;
Значeниe = Значeниe+OчepeднoйЧлeн;
Toчнocть = OчepeднoйЧлeн/Значeниe;
Если Toчнocть<0 Тогда
Toчнocть = -Toчнocть;
КонецЕсли;
Если (Toчнocть<ДocтaтoчнaяToчнocть) И (OчepeднoйЧлeн<0.1) Тогда
Прервать;
КонецЕсли;
ПpeдыдущийЧлeн=OчepeднoйЧлeн;
КонецЦикла;
Значeниe = Окр(Значeниe,Макс(КoличecтвoЗнaкoв-Лог10(Значeниe),0));
Возврат Значeниe;
КонецФункции // кoнeц функции CтeпeннaяФункция
//******************************************************************
// CлужTaнгeнc(Apгумeнт)
//
// Пapaмeтpы:
// Apгумeнт - чиcлo, Значeниe углa в paдиaнax
//
// Boзвpaщaeмoe Значeниe:
// Taнгeнc зaдaннoгo углa
//
// Oпиcaниe
// ПpeднaЗначeнa для иcчиcлeния тaнгeнca зaдaннoгo в paдиaнax углa
// в oблacти Значeний oт 0 дo ПИ/8
// ИcПользуeтcя функциями Cинуc(), Кocинуc() и Taнгeнc()
// Иcчиcлeниe пpoизвoдитcя c иcПользoвaниeм цeпнoй дpoби
//
//
Функция CлужTaнгeнc(Apгумeнт)
КвApгум = Apгумeнт*Apгумeнт;
Значeниe = Apгумeнт/(1-КвApгум/(3-КвApгум/(5-КвApгум/(7-КвApгум/(9-КвApгум/(11-КвApгум/(13-КвApгум/(15-КвApгум))))))));
Возврат Значeниe;
КонецФункции // кoнeц функции CлужTaнгeнc
//******************************************************************
// Cинуc(Apгумeнт, TипApгумeнтa = 0)
//
// Пapaмeтpы:
// Apгумeнт - чиcлo, Значeниe углa
// TипApгумeнтa - чиcлo, тип пapaмeтpa Apгумeнт
// 0 - Значeниe углa Apгумeнт зaдaнo в paдиaнax
// 1 - Значeниe углa Apгумeнт зaдaнo в гpaдуcax
// Значeниe По умoлчaнию - 0
//
// Boзвpaщaeмoe Значeниe:
// Cинуc зaдaннoгo углa
//
// Oпиcaниe
// ПpeднaЗначeнa для иcчиcлeния cинуca углa, зaдaннoгo в
// paдиaнax или гpaдуcax
// Oблacть oпpeдeлeния функции нe oгpaничeнa
//
//
Функция Cинуc(Знач Apгумeнт, TипApгумeнтa = 0)
Если TипApгумeнтa=1 Тогда
Apгумeнт = (Apгумeнт/180)*ЧиcлoПИ;
КонецЕсли;
ЗнaкPeзультaтa=1;
// Пpивeдeм к oблacти 0 - 2ПИ
Если Apгумeнт<0 Тогда
Apгумeнт=-Apгумeнт;
ЗнaкPeзультaтa=-1*ЗнaкPeзультaтa;
КонецЕсли;
Apгумeнт = Apгумeнт-Цел(Apгумeнт/(2*ЧиcлoПИ))*2*ЧиcлoПИ;
// тeпepь пpивeдeм к oблacти 0 - ПИ
Если Apгумeнт>ЧиcлoПИ Тогда
Apгумeнт = Apгумeнт-ЧиcлoПИ;
ЗнaкPeзультaтa=-1*ЗнaкPeзультaтa;
КонецЕсли;
// тeпepь пpивeдeм к oблacти 0 - ПИ/2
Если Apгумeнт>ЧиcлoПИ/2 Тогда
Apгумeнт=ЧиcлoПИ-Apгумeнт;
КонецЕсли;
// тeпepь пpивeдeм к oблacти 0 - ПИ/4
Если Apгумeнт>ЧиcлoПИ/4 Тогда
Значeниe = ЗнaкPeзультaтa*Кocинуc(ЧиcлoПИ/2-Apгумeнт);
Иначе
TaнгeнcПолoвины = CлужTaнгeнc(Apгумeнт/2);
Значeниe = ЗнaкPeзультaтa*2*TaнгeнcПолoвины/
(1+TaнгeнcПолoвины*TaнгeнcПолoвины);
КонецЕсли;
Возврат Значeниe;
КонецФункции // кoнeц функции Cинуc
//*****************************************************************
// Кocинуc(Apгумeнт, TипApгумeнтa = 0)
//
// Пapaмeтpы:
// Apгумeнт - чиcлo, Значeниe углa
// TипApгумeнтa - чиcлo, тип пapaмeтpa Apгумeнт
// 0 - Значeниe углa Apгумeнт зaдaнo в paдиaнax
// 1 - Значeниe углa Apгумeнт зaдaнo в гpaдуcax
// Значeниe По умoлчaнию - 0
//
// Boзвpaщaeмoe Значeниe:
// Кocинуc зaдaннoгo углa
//
// Oпиcaниe
// ПpeднaЗначeнa для иcчиcлeния кocинуca углa, зaдaннoгo в
// paдиaнax или гpaдуcax
// Oблacть oпpeдeлeния функции нe oгpaничeнa
//
//
Функция Кocинуc(Знач Apгумeнт, TипApгумeнтa = 0)
Если TипApгумeнтa=1 Тогда
Apгумeнт = (Apгумeнт/180)*ЧиcлoПИ;
КонецЕсли;
// Пpивeдeм к oблacти 0 - 2ПИ
Если Apгумeнт<0 Тогда
Apгумeнт=-Apгумeнт;
КонецЕсли;
Apгумeнт = Apгумeнт-Цел(Apгумeнт/(2*ЧиcлoПИ))*2*ЧиcлoПИ;
// Если Попaли в oблacть 0 - ПИ/4 - cчитaeм чecтнo
Если Apгумeнт<ЧиcлoПИ/4 Тогда
TaнгeнcПолoвины = CлужTaнгeнc(Apгумeнт/2);
Значeниe = (1-TaнгeнcПолoвины*TaнгeнcПолoвины)/
(1+TaнгeнcПолoвины*TaнгeнcПолoвины);
Иначе
Значeниe = Cинуc(Apгумeнт+ЧиcлoПИ/2);
КонецЕсли;
Возврат Значeниe;
КонецФункции // кoнeц функции Кocинуc
//******************************************************************
// Taнгeнc(Apгумeнт, TипApгумeнтa = 0)
//
// Пapaмeтpы:
// Apгумeнт - чиcлo, Значeниe углa
// TипApгумeнтa - чиcлo, тип пapaмeтpa Apгумeнт
// 0 - Значeниe углa Apгумeнт зaдaнo в paдиaнax
// 1 - Значeниe углa Apгумeнт зaдaнo в гpaдуcax
// Значeниe По умoлчaнию - 0
//
// Boзвpaщaeмoe Значeниe:
// Taнгeнc зaдaннoгo углa
//
// Oпиcaниe
// ПpeднaЗначeнa для иcчиcлeния тaнгeнca углa, зaдaннoгo в
// paдиaнax или гpaдуcax
// B тoм cлучae, Если для Значeния Apгумeнт функция нe
// oпpeдeлeнa (нaпpимep, пи/2 paдиaн)
// вoзвpaщaeтcя пуcтoe Значeниe c cooбщeниeм oб oшибкe
//
//
Функция Taнгeнc(Знач Apгумeнт, TипApгумeнтa = 0)
Если TипApгумeнтa=1 Тогда
Apгумeнт = (Apгумeнт/180)*ЧиcлoПИ;
КонецЕсли;
ЗнaкPeзультaтa=1;
// Пpивeдeм к oблacти 0 - ПИ
Если Apгумeнт<0 Тогда
Apгумeнт=-Apгумeнт;
ЗнaкPeзультaтa=-1*ЗнaкPeзультaтa;
КонецЕсли;
Apгумeнт = Apгумeнт-Цел(Apгумeнт/(ЧиcлoПИ))*ЧиcлoПИ;
// Пpивeдeм к oблacти 0 - ПИ/2
Если Apгумeнт>ЧиcлoПИ/2 Тогда
Apгумeнт=ЧиcлoПИ-Apгумeнт;
ЗнaкPeзультaтa=-1*ЗнaкPeзультaтa;
КонецЕсли;
// Если Попaли в oблacть ПИ/8
Если Apгумeнт<ЧиcлoПИ/8 Тогда
Значeниe = ЗнaкPeзультaтa*CлужTaнгeнc(Apгумeнт);
Иначе
// oбoйдeм дeлeниe нa нoль
Попытка
Значeниe = ЗнaкPeзультaтa*Cинуc(Apгумeнт)/
Кocинуc(Apгумeнт);
Исключение
// cooбщeниe oб oшибкe
Сообщить("...","!");
Значeниe = ПолучитьПустоеЗначение();
КонецПопытки
КонецЕсли;
Возврат Значeниe;
КонецФункции // кoнeц функции Taнгeнc
// Toчнocть c кoтopoй вычиcляютcя Значeния функций
// КвaдpaтныйКopeнь(), ЭкcПонeнтa(), CтeпeннaяФункция()
ДocтaтoчнaяToчнocть = 0.00000000001;
КoличecтвoИтepaций = 1000;
// Кoличecтвo Значaщиx знaкoв Поcлe зaпятoй для peзультaтoв пpи
// зaдaннoй тoчнocти
КoличecтвoЗнaкoв = -Лог10(ДocтaтoчнaяToчнocть)-1;
// Чиcлo "пи"
ЧиcлoПИ = 3.1415926535897932384626433832795;
Код 1C v 7.x VBS=CreateObject("MSScriptControl.ScriptControl");
VBS.Language="VBscript";
Параметр=1234;
Корень=VBS.Eval("sqr("+СокрЛП(Параметр)+")");
Процедура Сформировать()
Ctrl=СоздатьОбъект("MSScriptControl.ScriptControl");
Ctrl.Language="vbscript";
Ctrl.AddCode("
|pi=4 * atn(1.0)
|
|Function ShowPI
|ShowPI=pi
|End Function
|
|Function CalcSQR(number )
|if number <0 then
| CalcSQR=0
|else
| CalcSQR=SQR(Number )
|end if
|End Function
|
|Function CalcSIN(number )
|CalcSin=Sin(number /(180/pi))
|End Function
|
|Function CalcCOS(number )
|CalcCOS=COS(number /(180/pi))
|End Function
|
|Function CalcTAN(number )
|CalcTAN=TAN(number /(180/pi))
|End Function
|
|Function CalcRND
|Randomize
|CalcRND=RND
|End Function
|
|Function NameOfWeekDay(MyDate)
|NameOfWeekDay=WeekDayName(Weekday(MyDate),False)
|End Function
|
|");
Сообщить(Ctrl.Run("ShowPI")); // Число ПИ
Сообщить(Ctrl.Run("CalcSQR",4)); // Квадратный корень из 4
Сообщить(Ctrl.Run("CalcSin",90)); // Синус 90 градусов
Сообщить(Ctrl.Run("CalcCOS",180)); // Косинус 180 градусов
Сообщить(Ctrl.Run("CalcTAN",180)); // Тангенс 90 градусов
Сообщить(Ctrl.Run("CalcRND")); // Случайное число от 0 до 1
Сообщить(Ctrl.Run("NameOfWeekDay",ТекущаяДата())); // Название дня недели
Категория:
Работа с Числами Пример подключения из Windows 7 к удаленной ИБ 1C 8.х через VPN Задача: Ноутбук с Windows 7 (Домашняя версия) должен работать с офисной ИБ 1С8. В офисе компьютеры объединены в домен, соответственно контроллер домена не пускает «чужой» компьютер к своим ресурсам.
Переустанавливать ОС крайне нежелательно, всевозможные попытки изменения настроек домена результатов не дали. Выход достаточно прост.
Для нормальной работы необходимо:
1. На контроллере домена создать VPN соединение;
2. На ноутбуке настроить подключение к этому VPN соединению;
3. На ноутбуке изменить файл маршрутизации к сетевому ключу 1С8.
После установки платформы 1С, до подключения VPN, при запуске программа выдает сообщение:
«Ошибка при выполнении файловой операции …»
После подключения к сети через VPN при стандартном файле netstart.ini выдается сообщение:
«Не обнаружен ключ защиты программы»
Для поиска ключа в сети необходимо изменить этот файл (он находится в папке “C:\Prorgam Files\1cv81\bin\conf”). Для его изменения нужно обладать правами администратора на ноутбуке.
Файл nethasp.ini должен содержать строки:
Код
[NH_COMMON]
NH_IPX = Disabled
NH_NETBIOS = Disabled
NH_TCPIP = Enabled
[NH_IPX]
[NH_NETBIOS]
[NH_TCPIP]
NH_SERVER_ADDR = 192.168.0.10
NH_PORT_NUMBER = 475
NH_TCPIP_METHOD = UDP
NH_USE_BROADCAST = Disabled
При этом HASP драйвер ноутбука напрямую через порт 475 обращается к компьютеру с установленным ключем. Компьютер с адресом 192.168.0.10 (где находится ключ 1С) должен иметь постоянный (статический) адрес в сети, иначе этот файл придется постоянно редактировать.
Лишние настройки в файле nethasp.ini сбивают нормальную работу программы. Все эти настройки также работают с ОС Vista.
Автор:
daulberg Категория:
Администрирование Как сделать чтобы при выделении числе в табличном документе, отчете выводилась их сумма? Часто бывает необходимость сложить несколько чисел в печатной форме, например, как это сделано в Excel.
Сегодня решить посмотреть Бухгалтерию КОРП. Нашёл в ней очень интересную штуку: поле в котором показан результат сложения выделенных ячеек печатной формы. Конечно, такую штуку бы правильнее реализовать на уровне платформы. Но коль нет, можно оказывается сделать ручками. Как говориться, и за это богам спасибо.
Вот исходный код из Бухгалтерии КОРП:
Код 1C v 8.х
Функция ВычислитьСуммуВыделенныхЯчеекТабличногоДокумента(ПолеТабличногоДокумента) Экспорт
Сумма = 0;
Для Каждого Область Из ПолеТабличногоДокумента.ВыделенныеОбласти Цикл
Если ТипЗнч(Область) = Тип("ОбластьЯчеекТабличногоДокумента") Тогда
Для ИндексСтрока = Область.Верх По Область.Низ Цикл
Для ИндексКолонка = Область.Лево По Область.Право Цикл
Попытка
Сумма = Сумма + Число(СтрЗаменить(ПолеТабличногоДокумента.Область("R" + Формат(ИндексСтрока, "ЧГ=0") + "C" + Формат(ИндексКолонка, "ЧГ=0")) .Текст, " ", ""));
Исключение
КонецПопытки;
КонецЦикла;
КонецЦикла;
КонецЕсли;
КонецЦикла;
Возврат Сумма;
КонецФункции
Подумав немного, я добавил в функцию ещё расчёт среднего и определение количества ячеек с числами. Получилось вот что:
Код 1C v 8.х Функция ВычислитьСуммуВыделенныхЯчеекТабличногоДокумента(ПолеТабличногоДокумента, average = 0, count = 0) Экспорт
Сумма = 0;
count = 0;
Для Каждого Область Из ПолеТабличногоДокумента.ВыделенныеОбласти Цикл
Если ТипЗнч(Область) = Тип("ОбластьЯчеекТабличногоДокумента") Тогда
Для ИндексСтрока = Область.Верх По Область.Низ Цикл
Для ИндексКолонка = Область.Лево По Область.Право Цикл
Попытка
vNumber = Число(СтрЗаменить(ПолеТабличногоДокумента.Область("R" + Формат(ИндексСтрока, "ЧГ=0") + "C" + Формат(ИндексКолонка, "ЧГ=0")) .Текст, " ", ""));
Сумма = Сумма + vNumber ;
count = count + 1;
Исключение
КонецПопытки;
КонецЦикла;
КонецЦикла;
КонецЕсли;
КонецЦикла;
Если count <> 0 Тогда
average = Сумма / count;
Иначе
average = 0;
КонецЕсли;
Возврат Сумма;
КонецФункции // ВычислитьСуммуВыделенныхЯчеекТабличногоДокумента
Результат на картинке:
Да, чуть не забыл самое главное, функцию надо вызвать в обработчике ПриАктивизацииОбласти поля табличного документа.
Автор: Pim Категория:
Табличный документ Скрипт принудительного завершения процессов 1С на всех компьютерах В примере "1cv7s.exe", для 8-ки замениете на "1cv8.exe"
Код VBS
'Скрипт демонстрирует возможность принудительного завершения процессов 1С
'на всех компьютерахуказанного домена. Данный код можно применять непосредственно перед пакетным запуском 1С:Предприятия,
'требующим монопольного входа в базу данных (например, при резервном копировании).
'ВНИМАНИЕ! Задайте нужное значение переменной "DomainName"!
'ВНИМАНИЕ! Для успешной работы скрипта его желательно запускать с правами администратора домена.
'ВНИМАНИЕ! Чтобы опробовать скрипт, не производя деструктивных действий, достаточно закомментировать
'оператор "Proc.Terminate".
Option Explicit
On Error Resume Next
Dim DomainName 'Имя домена
DomainName = "MYDOMAIN"
Dim StrResult 'строка результата работы всей программы
StrResult = StrResult & CStr(Now) & " начало работы скрипта" & VbCrLf
Dim ADSI
Set ADSI = GetObject("WinNT://" & DomainName)
ADSI.Filter = Array("computer")
Dim Comp 'компьютер
Dim WMI 'объект WMI
Dim Proc 'процесс
Dim CurrName 'имя текущего компьютера
CurrName = GetNameComp()
'Цикл по компьютерам домена
For Each Comp In ADSI
If Comp.Name <> CurrName Then
Set WMI = GetObject("winmgmts:{ImpersonationLevel=Impersonate}!\\" & Trim(Comp.Name) & "\Root\CIMV2")
If Err.Number =0 Then
'Цикл по процессам компьютера
For Each Proc In WMI.ExecQuery("S_elect * FROM Win32_Process WHERE Name = '1cv7s.exe'")
StrResult = StrResult & _
CStr(Now) & " Computer=" & Comp.Name & " PID=" & Proc.ProcessId & _
VbCrLf
'Завершение процесса
Proc.Terminate
Next 'Цикл по процессам компьютера
Else 'Не удалось соединиться с компьютером
If Err.Number <> 462 Then 'The remote server machine does not exist or is unavailable
StrResult = StrResult & _
" " & CStr(Now) & " Computer=" & Comp.Name & " ERROR " & Err.Number & _
VbCrLf
End If
End If
Err.Clear
End If
Next 'Цикл по компьютерам домена
StrResult = StrResult & CStr(Now) & " конец работы скрипта" & VbCrLf
'Отображение результата
ShowInNotepad("Процессы 1cv7s.exe:" & VbCrLf & VbCrLf & StrResult)
'==========================================================================
'Процедура отображает переданную строку в блокноте
Sub ShowInNotepad(StrToFile)
Dim FSO 'Объект файловой системы Scripting.FileSystemObject
Dim TempPath 'Путь к временному файлу
Dim TxtFile 'Поток текстового файла
Set FSO = CreateObject("Scripting.FileSystemObject")
TempPath = GetTempPath() & "\" & FSO.GetTempName
Set TxtFile = FSO.CreateTextFile(TempPath)
TxtFile.WriteLine(StrToFile)
TxtFile.Close
CreateObject("WScript.Shell").Run "notepad.exe " & TempPath
WScript.Sleep 1000
FSO.DeleteFile TempPath
End Sub 'ShowInNotepad
'==========================================================================
'Функция возвращает путь к каталогу временных файлов текущего пользователя
Function GetTempPath()
GetTempPath = CreateObject("WScript.Shell").ExpandEnvironmentStrings("%TEMP%")
End Function 'GetTempPath
'==========================================================================
'Функция возвращает имя текущего компьютера
Function GetNameComp()
GetNameComp = CreateObject("WScript.Network").ComputerName
End Function 'GetNameComp
Категория:
Администрирование Группировка строк Excel В ниже указанном коде нужно убрать символ
_
Код 1C v 8.х
//Группировка строк по уровню 2
Worksheet.Range("7:8").Rows.Group();
Worksheet.Range("10:11").Rows.Group();
Worksheet.Range("14:15").Rows.Group();
Worksheet.Range("17:18").Rows.Group();
//Группировка строк по уровню 1
Worksheet.Range("6:11").Rows.Group();
Worksheet.Range("13:18").Rows.Group();
//Свёртка группировок до первого уровня
Worksheet.Outline.ShowLevels(1);
//или
Excel.Range("A3:A6").S_elect();
Excel.S_election.Rows.Group();
// еще пример
BegCell = Лист.Cells(1,1);
EndCell = Лист.Cells(4,1);
Лист.Range(BegCell,EndCell).Rows.Group();
Код 1C v 7.x
//Простейший пример вывода из 1С:Предприятия 7.7 в MS Excel. Обеспечение наличия у рабочей книги единственного листа,
//установка размера, жирности и цвета шрифта, ширины колонок, рамок и заливки ячеек. Выравнивание текста
//ячеек, группировка строк, установка числового формата ячеек, закрепление области.
Процедура Вывод()
Попытка
Application=СоздатьОбъект("Excel.Application");
Исключение
Сообщить(ОписаниеОшибки(),"!!!");
Сообщить("Возможно, MS Excel не установлен на этом компьютере.");
Возврат;
КонецПопытки;
//Создание рабочей книги
WorkBook=Application.WorkBooks.Add();
//Получение окна
Window=WorkBook.Windows(1);
//Установка невидимости окна для убыстрения вывода
Window.Visible=0;
//Обеспечение наличия у рабочей книги единственного листа
Если WorkBook.Worksheets.Count=0 Тогда
WorkBook.Worksheets.Add();
Иначе
Application.DisplayAlerts=0;//не выдавать предупреждений
Пока WorkBook.Worksheets.Count>1 Цикл
WorkBook.Worksheets(1).Delete();
КонецЦикла;
Application.DisplayAlerts=-1;//восстановление флага выдачи предупреждений
КонецЕсли;
//Получение рабочего листа
Worksheet=WorkBook.Worksheets(1);
//Задание имени рабочего листа
Worksheet.Name="Пример вывода";
//Заголовок документа
Worksheet.Range("A1").Value="Пример вывода из 1С:Предприятия в MS Excel";
Worksheet.Range("A2").Value="сегодня "+ТекущаяДата();
Worksheet.Range("A1:A2").Font.Size=14;//размер шрифта
Worksheet.Range("A1:A2").Font.Bold=-1;//жирный шрифт
//Задание ширины колонок
Worksheet.Columns(1).ColumnWidth=60;
Worksheet.Columns(2).ColumnWidth=15;
Worksheet.Columns(3).ColumnWidth=15;
//Шапка документа
Worksheet.Range("A4").Value="Первая колонка";
Для ы=7 по 10 Цикл//рамки
Worksheet.Range("A4").Borders(ы).LineStyle=1;
Worksheet.Range("A4").Borders(ы).Weight=-4138;//xlMedium
КонецЦикла;
Worksheet.Range("A4").Interior.ColorIndex=15;//заливка серым
Worksheet.Range("A4").HorizontalAlignment=-4108;//выравнивание текста по центру
Worksheet.Range("B4").Value="Вторая";
Для ы=7 по 10 Цикл
Worksheet.Range("B4").Borders(ы).LineStyle=1;
Worksheet.Range("B4").Borders(ы).Weight=-4138;
КонецЦикла;
Worksheet.Range("B4").Interior.ColorIndex=15;
Worksheet.Range("B4").HorizontalAlignment=-4108;
Worksheet.Range("C4").Value="Третья";
Для ы=7 по 10 Цикл
Worksheet.Range("C4").Borders(ы).LineStyle=1;
Worksheet.Range("C4").Borders(ы).Weight=-4138;
КонецЦикла;
Worksheet.Range("C4").Interior.ColorIndex=15;
Worksheet.Range("C4").HorizontalAlignment=-4108;
//Для группировки строк:
Worksheet.Outline.SummaryRow=0;//"итоговые" строки отображать сверху (если снизу, то 1)
//Вывод строк
Worksheet.Range("A5").Value="Объект аналитики";
Worksheet.Range("A5").Font.ColorIndex=5;//цвет шрифта - синий
Worksheet.Range("B5").Value=123.45;
Worksheet.Range("B5").Font.ColorIndex=5;
Worksheet.Range("C5").Value=678.9;
Worksheet.Range("C5").Font.ColorIndex=5;
Worksheet.Range("A6").Value="Объект аналитики";
Worksheet.Range("A6").Font.ColorIndex=3;//цвет шрифта - красный
Worksheet.Range("B6").Value=123.45;
Worksheet.Range("B6").Font.ColorIndex=3;
Worksheet.Range("C6").Value=678.9;
Worksheet.Range("C6").Font.ColorIndex=3;
Worksheet.Range("A7").Value="Объект аналитики";
Worksheet.Range("B7").Value=123.45;
Worksheet.Range("C7").Value=678.9;
Worksheet.Range("A8").Value="Объект аналитики";
Worksheet.Range("B8").Value=123.45;
Worksheet.Range("C8").Value=678.9;
Worksheet.Range("A9").Value="Объект аналитики";
Worksheet.Range("A9").Font.ColorIndex=3;//цвет шрифта - красный
Worksheet.Range("B9").Value=123.45;
Worksheet.Range("B9").Font.ColorIndex=3;
Worksheet.Range("C9").Value=678.9;
Worksheet.Range("C9").Font.ColorIndex=3;
Worksheet.Range("A10").Value="Объект аналитики";
Worksheet.Range("B10").Value=123.45;
Worksheet.Range("C10").Value=678.9;
Worksheet.Range("A11").Value="Объект аналитики";
Worksheet.Range("B11").Value=123.45;
Worksheet.Range("C11").Value=678.9;
Worksheet.Range("A12").Value="Объект аналитики";
Worksheet.Range("A12").Font.ColorIndex=5;//цвет шрифта - синий
Worksheet.Range("B12").Value=123.45;
Worksheet.Range("B12").Font.ColorIndex=5;
Worksheet.Range("C12").Value=678.9;
Worksheet.Range("C12").Font.ColorIndex=5;
Worksheet.Range("A13").Value="Объект аналитики";
Worksheet.Range("A13").Font.ColorIndex=3;//цвет шрифта - красный
Worksheet.Range("B13").Value=123.45;
Worksheet.Range("B13").Font.ColorIndex=3;
Worksheet.Range("C13").Value=678.9;
Worksheet.Range("C13").Font.ColorIndex=3;
Worksheet.Range("A14").Value="Объект аналитики";
Worksheet.Range("B14").Value=123.45;
Worksheet.Range("C14").Value=678.9;
Worksheet.Range("A15").Value="Объект аналитики";
Worksheet.Range("B15").Value=123.45;
Worksheet.Range("C15").Value=678.9;
Worksheet.Range("A16").Value="Объект аналитики";
Worksheet.Range("A16").Font.ColorIndex=3;//цвет шрифта - красный
Worksheet.Range("B16").Value=123.45;
Worksheet.Range("B16").Font.ColorIndex=3;
Worksheet.Range("C16").Value=678.9;
Worksheet.Range("C16").Font.ColorIndex=3;
Worksheet.Range("A17").Value="Объект аналитики";
Worksheet.Range("B17").Value=123.45;
Worksheet.Range("C17").Value=678.9;
Worksheet.Range("A18").Value="Объект аналитики";
Worksheet.Range("B18").Value=123.45;
Worksheet.Range("C18").Value=678.9;
//Установка рамок
Для НомСтр=5 по 18 Цикл
Для ы=7 по 10 Цикл
Worksheet.Range("A"+НомСтр).Borders(ы).LineStyle=1;
Worksheet.Range("B"+НомСтр).Borders(ы).LineStyle=1;
Worksheet.Range("C"+НомСтр).Borders(ы).LineStyle=1;
КонецЦикла;
КонецЦикла;
//Группировка строк
Worksheet.Range("7:8").Rows.Group();
Worksheet.Range("10:11").Rows.Group();
Worksheet.Range("14:15").Rows.Group();
Worksheet.Range("17:18").Rows.Group();
Worksheet.Range("6:11").Rows.Group();
Worksheet.Range("13:18").Rows.Group();
//Свёртка группировок до первого уровня
Worksheet.Outline.ShowLevels(1);
//Установка числового формата
Попытка
Worksheet.Range("B5:C18").Number Format="# ##0.00";
Исключение
Попытка
Worksheet.Range("B5:C18").Number Format="# ##0,00";
Исключение
КонецПопытки;
КонецПопытки;
//Установка видимости приложения и его окна
Application.Visible=-1;
Window.Visible=-1;
//Закрепление области
Worksheet.Range("A5").S_elect();
Window.FreezePanes = -1;
КонецПроцедуры //Вывод
Категория:
Работа с Microsoft Office и OpenOffice Вывод колонтитулов программно ВерхнийКолонтитул, НижнийКолонтитул Колонтитул является специальным текстом, выводимым вверху или внизу каждой страницы при выводе документа на печать. В тексте колонтитула можно использовать следующие управляющие конструкции:
[&НомерСтраницы]] ([&Page
Number ]]) - при печати в данном месте будет выведен номер страницы,
[&СтраницВсего]] ([&PagesTotal]]) - при печати в данном месте будет выведено общее количество страниц,
[&Дата]] ([&Date]]) - при печати в данном месте будет выведена текущая дата,
[&Время]] ([&Time]]) - при печати в данном месте будет выведено текущее время.
Код 1C v 8.х
ТабДок = Новый ТабличныйДокумент;
Макет = ПолучитьМакет("ЗаявкаНаОплату");
//...
// код заполнения табличного документа
//...
ТабДок.НижнийКолонтитул.НачальнаяСтраница = 1;
ТабДок.НижнийКолонтитул.ВертикальноеПоложение = ВертикальноеПоложение.Низ;
ТабДок.НижнийКолонтитул.ТекстВЦентре= строка(ИмяПользователя())+" [&Дата] - [&Время]";
ТабДок.НижнийКолонтитул.ТекстСлева="?";
ТабДок.НижнийКолонтитул.Выводить = Истина;
Категория:
Табличный документ Функция проверки типа значения Код 1C v 8.х
// Функция возвращает Истина при соответствии типов, ложь в обратном случае
Функция НужныйТипЗнач(ИсхЗнач,ТипЗнач)
Возврат ТипЗнч(ИсхЗнач) = Тип(ТипЗнач);
КонецФункции
// Некоторые примеры обращения
// ИсхЗнач - проверяемое значение
// НужныйТипЗнач(ИсхЗнач,"Строка")
// НужныйТипЗнач(глЗначениеПеременной("глТекущийПользователь"),"СправочникСсылка.Пользователи")
// НужныйТипЗнач(ИсхЗнач,"Форма")
// НужныйТипЗнач(ИсхЗнач,"Булево")
// НужныйТипЗнач(ИсхЗнач,"Строка")
// НужныйТипЗнач(ИсхЗнач,"Число")
// НужныйТипЗнач(ИсхЗнач,"Дата"))
// НужныйТипЗнач(ИсхЗнач,"Массив")
// НужныйТипЗнач(ИсхЗнач,"Структура")
// НужныйТипЗнач(ИсхЗнач,"Соответствие")
// НужныйТипЗнач(ИсхЗнач,"СписокЗначений")
// НужныйТипЗнач(ИсхЗнач,"ТаблицаЗначений")
// НужныйТипЗнач(ИсхЗнач,"ДеревоЗначений")
// НужныйТипЗнач(ИсхЗнач,"ПланСчетовСсылка.Хозрасчетный")
// НужныйТипЗнач(ИсхЗнач,"ПланСчетовСсылка.Налоговый")
// НужныйТипЗнач(ИсхЗнач,"ХранилищеЗначения")
// НужныйТипЗнач(ИсхЗнач,"Картинка")
// НужныйТипЗнач(ИсхЗнач,"ПолеВвода")
// НужныйТипЗнач(ИсхЗнач,"Панель")
// НужныйТипЗнач(ИсхЗнач,"Флажок")
// НужныйТипЗнач(ИсхЗнач,"РегистрРасчетаНаборЗаписей.УправленческиеНачисления")
// НужныйТипЗнач(ИсхЗнач,"ПланВидовРасчетаСсылка.ОсновныеНачисленияОрганизаций")
// НужныйТипЗнач(ИсхЗнач,"ДокументСсылка.ОтпускПоУходуЗаРебенком")
// НужныйТипЗнач(ИсхЗнач,"ИнтернетПочтовоеСообщение")
// НужныйТипЗнач(ИсхЗнач, "БизнесПроцессСсылка.м_Документооборот")
Код 1C v 7.x
// Функция возвращает 1 при соответствии типов, 0 в обратном случае
Функция НужныйТипЗнач(ИсхЗнач,ТипЗнач)
Если ТипЗначенияСтр((ИсхЗнач) = ТипЗнач тогда
Возврат 1;
Иначе
Возврат 0;
КонецЕсли;
КонецФункции
// Некоторые примеры обращения
// ИсхЗнач - проверяемое значение
// НужныйТипЗнач(ИсхЗнач,"Строка")
// Значения типов данных:
// ''Число'' (''Number '') - числовой тип данных;
// ''Строка'' (''String'') - строковый тип данных;
// ''Дата'' (''Date'') - тип данных Дата;
// ''Перечисление'' (''Enum'') - агрегатный тип данных ''Перечисление'';
// ''Справочник'' (''Reference'') - агрегатный тип данных ''Справочник'';
// ''Документ'' (''Document'') - агрегатный тип данных ''Документ'';
// ''Регистр'' (''Register'') - агрегатный тип данных ''Регистр'';
// ''Календарь'' (''Calendar'') - агрегатный тип данных ''Календарь'';
// ''ВидРасчета'' (''Calculation'') - агрегатный тип данных ''ВидРасчета'';
// ''ЖурналРасчетов'' (''CalcJournal'') - агрегатный тип данных ''ЖурналРасчетов'';
// ''ПланСчетов'' (''ChartOfAccounts'') - агрегатный тип данных ''ПланСчетов'';
// ''Счет'' (''Account'') - агрегатный тип данных ''Счет'';
// ''Операция'' (''Operation'') - агрегатный тип данных ''Операция'';
// ''КорректныеПроводки'' (''CorrectEntries'') - агрегатный тип данных ''КорректныеПроводки'';
// ''БухгалтерскиеИтоги'' (''BookkeepingTotals'') - агрегатный тип данных ''БухгалтерскиеИтоги'';
// ''Таблица'' (''Table'') - агрегатный тип данных ''Таблица'';
// ''Текст'' (''Text'') - агрегатный тип данных ''Текст'';
// ''Запрос'' (''Query'') - агрегатный тип данных ''Запрос'';
// ''СписокЗначений'' (''ValueList'') - агрегатный тип данных ''СписокЗначений'';
// ''ТаблицаЗначений'' (''ValueTable'') - агрегатный тип данных ''ТаблицаЗначений'';
// ''Периодический'' (''Periodic'') - агрегатный тип данных ''Периодический'';
// ''Картинка'' (''Picture'') - агрегатный тип данных ''Картинка'';
// ''ГрупповойКонтекст'' (''GroupContext'') - контекст программного модуля или Формы;
// ''OLE'' (''OLE'') - OLE-объект.
// ''НеизвестныйОбьект'' (''UnknownObject'') - для типов, для которых в системе не предусмотрено специальное строковое обозначение;
// '''' (пустая строка) - неопределенный тип данных.
Категория:
Работа с Типами данных