Строку в дату по форматной строке Код 1C v 8.х // Процедура СтрокаВДату преобразует строку в дату по шаблону форматной строки
//
// Параметры
// Строка - строка, содержащая дату,
// ФорматДаты - форматная строка вида:
// [dd MM yy]
// [yy-MM-dd HH:mm]
// [dd MM yy HH mm ss]
// [dd MM yyyy]
// [MM dd, yyyy, HH:mm]
// [dd.MM.yy]
// [MM, dd, yyyy]
// [yyyyMMdd]
// [HH-mm-ss, dd-MM-yy]
// [dd]
// [dd MM HH:mm:ss yyyy]
// [HH:mm:ss]
// [HH:mm]
// [yyyy-MM-dd HH:mm:ss]
// [yyyy-MM-dd]
// [yyyy/MM/dd]
// [dd/MM/yy]
// [MM dd yyyy]
// [yyyy-MM]
// [yyyy]
// [MM, dd, yyyy]
// [dd-MM-yyyy]
// [ddMMyyyy]
//
Функция СтрокаВДату(Знач Строка, Знач ФорматДаты) Экспорт
Ч = Новый Соответствие;
Для ё = 1 По СтрДлина(ФорматДаты) + 6 Цикл
Ч[Сред(ФорматДаты + "dMyHms", ё, 1)] = 0
КонецЦикла;
Для ё = 1 По СтрДлина(ФорматДаты) Цикл
Ч[Сред(ФорматДаты, ё, 1)] = 10 * Ч[Сред(ФорматДаты, ё, 1)] + Найти("123456789", Сред(Строка, ё, 1));
КонецЦикла;
Ч["y"] = Ч["y"] + ?(0 < Ч["y"] И Ч["y"] < 50, 2000, ?(0 < Ч["y"] И Ч["y"] < 100, 1900, 0));
Возврат Дата(Макс(Ч["y"], 1), Макс(Ч["M"],1), Макс(Ч["d"],1), Ч["H"], Ч["m"], Ч["s"]);
КонецФункции
Источник
Категория:
Работа с Датами (Временем) Как получить текст из html? Один мой хороший клиент использует встроенный в 1С почтовый клиент.
До этого все работало хорошо, но недавно из-за установки нового банк-клиента на компьютере обновили Internet Explorer до 11 версии - стала появляться ошибка:
Поле объекта не обнаружено innerText
Пришлось немного доработать типовую функцию получения текста из html:
Код 1C v 8.х Функция ПреобразоватьТекстИзХТМЛФорматаВПростой(ТекстВФорматеХТМЛ) Экспорт
Попытка
НовыйHTMLДокумент = Новый COMОбъект("HtmlFile");
НовыйHTMLДокумент.open("text/html");
НовыйHTMLДокумент.write(ТекстВФорматеХТМЛ);
НовыйHTMLДокумент.close();
Возврат СтрЗаменить(НовыйHTMLДокумент.all.item(0).innerText, Символ(13), "");
Исключение
Построитель = Новый ПостроительDOM;
ЧтениеHTML = Новый ЧтениеHTML;
ЧтениеHTML.УстановитьСтроку(ТекстВФорматеХТМЛ);
ДокументHTML = Построитель.Прочитать(ЧтениеHTML);
Возврат СокрЛП(ДокументHTML.Тело.ТекстовоеСодержимое);
КонецПопытки;
КонецФункции
еще функции пример получения:
Код 1C v 8.х // Процедура изменяет признак формат текста письма (Текст, HТМЛ),
// и при этом конвертирует сам текст.
//
// Параметры:
// ЭУHTML,ЭУТекст - Элементы управления формы, соответственно поле HTML и поле Текст
// Кнопка - выбранная кнопка ее текст "Простой текст" или "HTML" новый вид текста письма
// либо текст кнопки если пометку кнопки менять не требуется, соответственно
// вопрос о потере форматирования задаваться не будет
// Возвращаемое значение:
// Булево, признак выполнения изменения формата
//
Функция удИзменитьФорматТекста(ЭУHTML,ЭУТекст, Кнопка) Экспорт
Если ТипЗнч(Кнопка) = Тип("Строка") Тогда
НовыйВидТекстаПисьма = Кнопка;
ЕстьКнопка = Ложь;
Иначе
Если Кнопка.Пометка Тогда
Возврат Ложь;
КонецЕсли;
НовыйВидТекстаПисьма = Кнопка.Текст;
ЕстьКнопка = Истина;
КонецЕсли;
Если Найти(НовыйВидТекстаПисьма,"Простой текст") > 0 Тогда
ИсходныйТекст = ЭУHTML.ПолучитьТекст();
НачалоBODY = Найти(ИсходныйТекст, "<BODY>");
КонецBODY = Найти(ИсходныйТекст, "</BODY>");
Если ЕстьКнопка и (НачалоBODY > 0 И КонецBODY > 0 И (НачалоBODY + 6) < КонецBODY) Тогда
СтрокаВопроса = "Будет потеряно форматирование текста. Продолжить?";
ОтветНаВопрос = Вопрос(СтрокаВопроса, РежимДиалогаВопрос.ДаНет, , КодВозвратаДиалога.Нет);
Если ОтветНаВопрос <> КодВозвратаДиалога.Да Тогда
Возврат Ложь;
КонецЕсли;
КонецЕсли;
ФорматТекста = ЭУHTML.Документ.all.item(0).innerText;
ЭУТекст.Значение = СтрЗаменить(ФорматТекста, Символ(13), "");
ЭУТекст.Видимость = Истина;
ЭУHTML.Видимость = Ложь;
ЭУHTML.УстановитьТекст("");
Иначе
ФорматХТМЛ = СтрЗаменить(ЭУТекст.Значение, Символы.ПС, "<BR>");
ЭУHTML.УстановитьТекст(ФорматХТМЛ);
ЭУHTML.Видимость = Истина;
ЭУТекст.Видимость = Ложь;
КонецЕсли;
Если ЕстьКнопка Тогда
Кнопка.Пометка = Истина;
КонецЕсли;
Возврат Истина;
КонецФункции // обИзменитьФорматТекста()
Категория:
Работа с Интернет, Почтой (Mail), FTP Чтение данных с сайта в формате XML и загрузка в 1С При разработке веб проекта нам потребовалось получать с одного сайта данные в формате XML и загружать их в 1С.
Сайт выдает XML вида (Ссылка на этот xml в коде, внизу):
Код 1C v 8.3 This XML file does not appear to have any style information associated with it. The document tree is shown below.
<updates version="1.0" generator="SEOBudget" url="http://seobudget.ru/updates/">
<update id="cy" name="Обновление тИЦ Яндекса">
<date id="1823" index="1419324939" timestamp="1419324939">23.12.2014 11:55:39 MSK</date>
<date id="1792" index="1415776885" timestamp="1415776885">12.11.2014 10:21:25 MSK</date>
<date id="1760" index="1412923802" timestamp="1412924102">10.10.2014 10:55:02 MSK</date>
</update>
<update id="serp" name="Обновление поисковой выдачи Яндекса">
<date id="1872" index="1424898000" timestamp="1425604249">06.03.2015 04:10:49 MSK</date>
<date id="1871" index="1423602000" timestamp="1425586715">05.03.2015 23:18:35 MSK</date>
<date id="1868" index="1423602000" timestamp="1425402241">03.03.2015 20:04:01 MSK</date>
</update>
<update id="yaca" name="Обновление Яндекс.Каталога">
<date id="1875" index="1425931200" timestamp="1425973201">10.03.2015 10:40:01 MSK</date>
<date id="1874" index="1425758400" timestamp="1425886502">09.03.2015 10:35:02 MSK</date>
<date id="1873" index="1425585600" timestamp="1425628803">06.03.2015 11:00:03 MSK</date>
</update>
<update id="pr" name="Обновление Google PR">
<date id="1512" index="1386353345" timestamp="1386353345">06.12.2013 22:09:05 MSK</date>
<date id="1265" index="1360130400" timestamp="1360130400">06.02.2013 10:00:00 MSK</date>
<date id="1196" index="1352376123" timestamp="1352376123">08.11.2012 16:02:03 MSK</date>
</update>
<update id="user" name="Обновление ПФ в Яндексе">
<date id="1799" index="1415950021" timestamp="1416986821">26.11.2014 10:27:01 MSK</date>
<date id="1763" index="1409237032" timestamp="1413211432">13.10.2014 18:43:52 MSK</date>
<date id="1665" index="1400617705" timestamp="1401222505">28.05.2014 00:28:25 MSK</date>
</update>
</updates><br>
В результате была написана обработка загрузки данных с сайта в 1С, ее код:
Код 1C v 8.3 &НаСервере
Функция ЧтениеXMLВДерево(Путь)
//Создаем дерево
Дерево = Новый ДеревоЗначений;
Дерево.Колонки.Добавить("Имя");
Дерево.Колонки.Добавить("Значение");
//Откроем XML
XMLФайл = Новый ЧтениеXML;
XMLФайл.ОткрытьФайл(Путь);
//Прочитаем XML и создадим дерево
ПрочитатьXMLПоТегам(XMLФайл, Дерево.Строки);
XMLФайл.Закрыть();
ТекДанные = Неопределено;
//Обработаем дерево данных
Для каждого СтрокаП из Дерево.Строки Цикл
Для каждого СтрокаВ из СтрокаП.Строки Цикл
// Сообщить(СтрокаВ.Имя);
Для каждого СтрокаТ из СтрокаВ.Строки Цикл
//Сообщить(СтрокаТ.Имя);
Если СтрокаТ.Значение = "cy" тогда
ТекДанные = Перечисления.Показатель.TiC;
ИначеЕсли СтрокаТ.Значение = "serp" тогда
ТекДанные = Перечисления.Показатель.SYa;
ИначеЕсли СтрокаТ.Значение = "yaca" тогда
ТекДанные = Перечисления.Показатель.CatYa;
ИначеЕсли СтрокаТ.Значение = "pr" тогда
ТекДанные = Перечисления.Показатель.RP;
ИначеЕсли СтрокаТ.Значение = "user" тогда
ТекДанные = Перечисления.Показатель.PFYa;
КонецЕсли;
Для каждого СтрокаД из СтрокаТ.Строки Цикл
Если СтрокаД.Имя="timestamp" Тогда
// Получим из timestamp дату события
ДатаИзменения = МестноеВремя('19700101'+СтрокаД.значение);
//Запишем в регистр
НовЗапись = РегистрыСведений.ТиЦиRP.СоздатьМенеджерЗаписи();
НовЗапись.Показатель = ТекДанные;
НовЗапись.Период = ДатаИзменения;
НовЗапись.Записать();
КонецЕсли;
КонецЦикла;
КонецЦикла;
КонецЦикла;
КонецЦикла;
КонецФункции
&НаСервереБезКонтекста
Процедура ПрочитатьXMLПоТегам(XMLФайл, ТекущийНаборСтрок)
Пока XMLФайл.Прочитать() Цикл
Если XMLФайл.ТипУзла = ТипУзлаXML.НачалоЭлемента Тогда
НоваяСтрока = ТекущийНаборСтрок.Добавить();
НоваяСтрока.Имя = XMLФайл.Имя;
НоваяСтрока.Значение = "";
Пока XMLФайл.ПрочитатьАтрибут() Цикл
НоваяСтрокаАтрибут = НоваяСтрока.Строки.Добавить();
НоваяСтрокаАтрибут.Имя = XMLФайл.Имя;
НоваяСтрокаАтрибут.Значение = СокрЛП(XMLФайл.Значение);
КонецЦикла;
ПрочитатьXMLПоТегам(XMLФайл, НоваяСтрока.Строки);
ИначеЕсли XMLФайл.ТипУзла = ТипУзлаXML.КонецЭлемента Тогда
Возврат;
ИначеЕсли XMLФайл.ТипУзла = ТипУзлаXML.Текст Тогда
ТекущийНаборСтрок.Родитель.Значение = СокрЛП(XMLФайл.Значение);
Иначе
Сообщить("Тип узла: " + XMLФайл.ТипУзла + " НЕ ОБРАБОТАН", СтатусСообщения.Важное);
Конецесли;
КонецЦикла;
КонецПроцедуры
// Кнопка Обработки
&НаКлиенте
Процедура СборXML(Команда)
ЧтениеXMLВДерево("http://seobudget.ru/downloads/updates.xml");
КонецПроцедуры
Результат загруженный в регистр сведений:
Категория:
Работа с Интернет, Почтой (Mail), FTP Обход метаданных (полезные функции) При написании небольших автоматизированных тестов часто надо обойти всю конфигурацию и проверить, например, для всех форм какое-нибудь свойство. Это всё легко делается через свойство глобального контекста "Метаданные", но чтоб дорбаться до обхода реквизитов надо написать кучу вложенных циклов. При этом код становится слабочитаемым и слабомодифицируемым.
Ниже приведен небольшой модуль, который решает задачу легко и удобно. Создана специальная функция РазвернутьСтрокуОбходаМетаданных, которая может по строке типа "Метаданные.Справочники.*.Реквизиты.*" построить массив строк с перечислением всех реквизитов всех справочников. При помощи этой и нескольких других функций в экспортных функциях модуля реализованы вполне прикладные задачи - получение всех реквизитов, всех макетов, всех форм конфигурации и построение таблицы всех составных типов.
Код 1C v 8.х // Автор: Alexander Speshilov
// Рекрсивная функция, которая разворачивает строку вида "Метаданные.Справочники.*[Имя].Реквизиты.*.Тип"
// в массив строк, заменяя "*" или другой символ, задаваемый параметрами обходом всех элементов
// коллекции. Допускает выполнение функций встроенного языка (не стоит отдавать ввод параметров
// пользователям). При этом выражение, используемое для получения по умолчанию может быть задано в
// квадратных скобках или параметром функции.
//
// Параметры
// СтрокаОбхода - Строка - Разворачиваемая строка
// ЗаменяемоеЗначение - Строка - заменяемое значение
// ПредставлениеПоУмолчанию - Строка - выражение для получения представления
//
// Возвращаемое значение:
// Массив строк
//
Функция РазвернутьСтрокуОбходаМетаданных(СтрокаОбхода, ЗаменяемоеЗначение = "*", ПредставлениеПоУмолчанию = "")
Рез = Новый Массив;
ЧастиСтрокиОбхода = РазобратьСтрокуОбхода(СтрокаОбхода, ЗаменяемоеЗначение, ПредставлениеПоУмолчанию);
Если ЧастиСтрокиОбхода = Неопределено тогда
Рез.Добавить(СтрокаОбхода); //фактически это ограничение рекурсии.
Иначе
ОбъектКоллекции = Вычислить(ЧастиСтрокиОбхода.СтрокаКоллекции);
РазвернутаяКоллекция = РазвернутьКоллекциюВПредставления(ОбъектКоллекции, ЧастиСтрокиОбхода.СтрокаПредставление);
Для каждого ЭлементРазвернутойКоллекции Из РазвернутаяКоллекция Цикл
// рекурсивный вызов
ТекущаяСтрокаОбхода = ЧастиСтрокиОбхода.СтрокаНачало + ЭлементРазвернутойКоллекции + ЧастиСтрокиОбхода.СтрокаКонец;
МассивЭлемента = РазвернутьСтрокуОбходаМетаданных(ТекущаяСтрокаОбхода, ЗаменяемоеЗначение, ПредставлениеПоУмолчанию);
Для каждого ПримитивныйЭлементОбхода Из МассивЭлемента Цикл
Рез.Добавить(ПримитивныйЭлементОбхода);
КонецЦикла;
КонецЦикла;
КонецЕсли;
Возврат Рез;
КонецФункции // РазвернутьСтрокуОбходаМетаданных()
// Разбирает строку обхода на удобные для работы поля
//
// Параметры
// СтрокаОбхода - Строка - Разворачиваемая строка
// ЗаменяемоеЗначение - Строка - заменяемое значение
// ПредставлениеПоУмолчанию - Строка - выражение для получения представления
//
// Возвращаемое значение:
// Структура с полями ПозицияЗамены, СтрокаНачало, СтрокаКоллекции, СтрокаПредставление, СтрокаКонец
// или Неопределено (если строка не содержит ЗаменяемоеЗначение)
//
Функция РазобратьСтрокуОбхода(СтрокаОбхода, ЗаменяемоеЗначение, ПредставлениеПоУмолчанию)
Если ПустаяСтрока(ЗаменяемоеЗначение) Тогда
ВызватьИсключение "Некорректное выражение заменяемого значения";
КонецЕсли;
ПозицияЗамены = Найти(СтрокаОбхода, ЗаменяемоеЗначение);
// Если не найдена строка - возвращаем неопределено, как индикатор
Если ПозицияЗамены = 0 Тогда
Возврат Неопределено;
КонецЕсли;
СтрокаНачало = Лев(СтрокаОбхода,ПозицияЗамены - 1);
//Получение строки для выражения-коллекции
СтрокаКоллекции = СтрокаНачало;
Если Прав(СтрокаКоллекции, 1) = "." Тогда
СтрокаКоллекции = Лев(СтрокаКоллекции,СтрДлина(СтрокаКоллекции) - 1);
КонецЕсли;
ПозицияОкончанияЗамены = ПозицияЗамены + СтрДлина(ЗаменяемоеЗначение);
ОстатокВыражения = Сред(СтрокаОбхода, ПозицияОкончанияЗамены);
//Обработка явного задания представления
ОткрывающаяСкобка = "[";
ЗакрывающаяСкобка = "]";
Если Найти(ОстатокВыражения, ОткрывающаяСкобка) = 1 Тогда
ОстатокВыражения = Сред(ОстатокВыражения, СтрДлина(ОткрывающаяСкобка) + 1);
ПозицияЗакрывающейСкобки = Найти(ОстатокВыражения, ЗакрывающаяСкобка);
Если ПозицияЗакрывающейСкобки = 0 Тогда
ВызватьИсключение "Синтаксическая ошибка разбора выражения";
КонецЕсли;
СтрокаПредставление = Лев(ОстатокВыражения, ПозицияЗакрывающейСкобки - 1);
ОстатокВыражения = Сред(ОстатокВыражения, ПозицияЗакрывающейСкобки + СтрДлина(ЗакрывающаяСкобка));
Иначе
СтрокаПредставление = ПредставлениеПоУмолчанию;
КонецЕсли;
СтрокаКонец = ОстатокВыражения;
Рез = Новый Структура("ПозицияЗамены, СтрокаНачало, СтрокаКоллекции, СтрокаПредставление, СтрокаКонец",
ПозицияЗамены, СтрокаНачало, СтрокаКоллекции, СтрокаПредставление, СтрокаКонец);
Возврат Рез;
КонецФункции // РазобратьСтрокуОбхода()
// Разворачивает объект коллекции в массив представления элементов
//
// Параметры
// Коллекция - Произвольный - Коллекция, которую можно обойти через "Для каждого"
// ПредставлениеЭлемента - Строка - необяз., свойство элементов коллекции, которое
// используется для получения представления.
//
// Возвращаемое значение:
// Массив - Массив представлений коллекции
//
Функция РазвернутьКоллекциюВПредставления(Коллекция, Знач ПредставлениеЭлемента = "")
//Проверка и подгонка параметров
Если не ПустаяСтрока(ПредставлениеЭлемента) Тогда
Если Найти(ПредставлениеЭлемента, ";")>0 Тогда
ВызватьИсключение "Некорректное выражение представления";
КонецЕсли;
ПредставлениеЭлемента = "." + ПредставлениеЭлемента;
КонецЕсли;
Рез = Новый Массив;
Для каждого ЭлементКоллекции Из Коллекция Цикл
ТекПредставление = Строка(Вычислить("ЭлементКоллекции" + ПредставлениеЭлемента));
Рез.Добавить(ТекПредставление);
КонецЦикла;
Возврат Рез;
КонецФункции // РазвернутьКоллекцию()
// Разворачивает массив строк через РазвернутьСтрокуОбходаМетаданных
//
// Параметры
// МассивСтрокОбхода - Массив - Массив разворачиваемых строк
// ЗаменяемоеЗначение - Строка - заменяемое значение
// ПредставлениеПоУмолчанию - Строка - выражение для получения представления
//
// Возвращаемое значение:
// Массив строк
//
Функция РазвернутьМассивСтрокОбходаМетаданных(МассивСтрокОбхода, ЗаменяемоеЗначение = "*", ПредставлениеПоУмолчанию = "Имя")
Рез = Новый Массив;
Для каждого СтрокаОбхода Из МассивСтрокОбхода Цикл
ДополнениеРезультата = РазвернутьСтрокуОбходаМетаданных(СтрокаОбхода, ЗаменяемоеЗначение, ПредставлениеПоУмолчанию);
Для каждого ТекСтрока Из ДополнениеРезультата Цикл
Рез.Добавить(ТекСтрока);
КонецЦикла;
КонецЦикла;
Возврат Рез;
КонецФункции // РазвернутьМассивСтрокОбходаМетаданных()
// Преобразует строку в массив одиночных строк по разделителю Символы.ПС
//
// Параметры
// ПреобразуемаяСтрока - строка для преобразования
// ИгнорироватьПустые - Булево - Пропускать пустые строки
// СокращатьПробелы - Использовать СокрЛП
//
// Возвращаемое значение:
// Массив строк
//
Функция ПолучитьМассивСтрокМногострочнойСтроки(ПреобразуемаяСтрока, ИгнорироватьПустые = Истина, СокращатьПробелы = Истина)
Рез = Новый Массив;
ЧислоСтрок = СтрЧислоСтрок(ПреобразуемаяСтрока);
Для Сч = 1 По ЧислоСтрок Цикл
ТекСтрока = СтрПолучитьСтроку(ПреобразуемаяСтрока, Сч);
Если ИгнорироватьПустые и ПустаяСтрока(ТекСтрока) Тогда
Продолжить;
КонецЕсли;
Если СокращатьПробелы Тогда
ТекСтрока = СокрЛП(ТекСтрока);
КонецЕсли;
Рез.Добавить(ТекСтрока);
КонецЦикла;
Возврат Рез;
КонецФункции // ПолучитьМассивСтрокМногострочнойСтроки()
// Возвращает все реквизиты конфигурации, которые сохраняются в ИБ
//
// Параметры - Нет
//
// Возвращаемое значение:
// Массив объектов метаданных
//
Функция ПолучитьВсеХранимыеРеквизитыКонфигурации() Экспорт
СтрокаВсехРеквизитов =
"
|Метаданные.Константы.*
|Метаданные.ПланыОбмена.*.Реквизиты.*
|Метаданные.ПланыОбмена.*.ТабличныеЧасти.*.Реквизиты.*
|Метаданные.Справочники.*.Реквизиты.*
|Метаданные.Справочники.*.ТабличныеЧасти.*.Реквизиты.*
|Метаданные.Документы.*.Реквизиты.*
|Метаданные.Документы.*.ТабличныеЧасти.*.Реквизиты.*
|Метаданные.Последовательности.*.Измерения.*
|Метаданные.ПланыВидовХарактеристик.*.Реквизиты.*
|Метаданные.ПланыВидовХарактеристик.*.ТабличныеЧасти.*.Реквизиты.*
|Метаданные.ПланыСчетов.*.Реквизиты.*
|Метаданные.ПланыСчетов.*.ПризнакиУчета.*
|Метаданные.ПланыСчетов.*.ПризнакиУчетаСубконто.*
|Метаданные.ПланыСчетов.*.ТабличныеЧасти.*.Реквизиты.*
|Метаданные.ПланыВидовРасчета.*.Реквизиты.*
|Метаданные.ПланыВидовРасчета.*.ТабличныеЧасти.*.Реквизиты.*
|Метаданные.РегистрыСведений.*.Измерения.*
|Метаданные.РегистрыСведений.*.Ресурсы.*
|Метаданные.РегистрыСведений.*.Реквизиты.*
|Метаданные.РегистрыНакопления.*.Измерения.*
|Метаданные.РегистрыНакопления.*.Ресурсы.*
|Метаданные.РегистрыНакопления.*.Реквизиты.*
|Метаданные.РегистрыБухгалтерии.*.Измерения.*
|Метаданные.РегистрыБухгалтерии.*.Ресурсы.*
|Метаданные.РегистрыБухгалтерии.*.Реквизиты.*
|Метаданные.РегистрыРасчета.*.Измерения.*
|Метаданные.РегистрыРасчета.*.Ресурсы.*
|Метаданные.РегистрыРасчета.*.Реквизиты.*
|Метаданные.БизнесПроцессы.*.Реквизиты.*
|Метаданные.БизнесПроцессы.*.ТабличныеЧасти.*.Реквизиты.*
|Метаданные.Задачи.*.Реквизиты.*
|Метаданные.Задачи.*.РеквизитыАдресации.*
|Метаданные.Задачи.*.ТабличныеЧасти.*.Реквизиты.*
|";
ВсеХранимыеРеквизитыКонфигурации = РазвернутьМассивСтрокОбходаМетаданных(ПолучитьМассивСтрокМногострочнойСтроки(СтрокаВсехРеквизитов));
Возврат ВсеХранимыеРеквизитыКонфигурации;
КонецФункции // ПолучитьВсеХранимыеРеквизитыКонфигурации()
// Возвращает все реквизиты конфигурации составного типа, которые сохраняются в ИБ
//
// Параметры - Нет
//
// Возвращаемое значение:
// ТаблицаЗначений
//
Функция ПолучитьВсеХранимыеРеквизитыКонфигурацииСоставногоТипа() Экспорт
ВсеХранимыеРеквизитыКонфигурации = ПолучитьВсеХранимыеРеквизитыКонфигурации();
Рез = Новый ТаблицаЗначений;
Рез.Колонки.Добавить("Имя", Новый ОписаниеТипов("Строка"));
Рез.Колонки.Добавить("Тип", Новый ОписаниеТипов("ОписаниеТипов"));
Рез.Колонки.Добавить("КоличествоПростыхТипов", Новый ОписаниеТипов("Число"));
Для каждого ТекРеквизит Из ВсеХранимыеРеквизитыКонфигурации Цикл
Реквизит = Вычислить(ТекРеквизит);
Тип = Реквизит.Тип;
КоличествоПростыхТипов = Тип.Типы().Количество();
Если КоличествоПростыхТипов<>1 Тогда
ТекСтрока = Рез.Добавить();
ТекСтрока.Имя = ТекРеквизит;
ТекСтрока.Тип = Тип;
ТекСтрока.КоличествоПростыхТипов = КоличествоПростыхТипов;
КонецЕсли;
КонецЦикла;
Возврат Рез;
КонецФункции // ПолучитьВсеХранимыеРеквизитыКонфигурации()
// Возвращает все формы конфигурации
//
// Параметры - Нет
//
// Возвращаемое значение:
// Массив объектов метаданных
//
Функция ПолучитьВсеФормыКонфигурации() Экспорт
СтрокаВсехРеквизитов =
"
|Метаданные.ПланыОбмена.*.Формы.*
|Метаданные.КритерииОтбора.*.Формы.*
|Метаданные.ОбщиеФормы.*
|Метаданные.Справочники.*.Формы.*
|Метаданные.Документы.*.Формы.*
|Метаданные.ЖурналыДокументов.*.Формы.*
|Метаданные.Перечисления.*.Формы.*
|Метаданные.Отчеты.*.Формы.*
|Метаданные.Обработки.*.Формы.*
|Метаданные.ПланыВидовХарактеристик.*.Формы.*
|Метаданные.ПланыСчетов.*.Формы.*
|Метаданные.ПланыВидовРасчета.*.Формы.*
|Метаданные.РегистрыСведений.*.Формы.*
|Метаданные.РегистрыНакопления.*.Формы.*
|Метаданные.РегистрыБухгалтерии.*.Формы.*
|Метаданные.РегистрыРасчета.*.Формы.*
|Метаданные.БизнесПроцессы.*.Формы.*
|Метаданные.Задачи.*.Формы.*
|";
ВсеФормыКонфигурации = РазвернутьМассивСтрокОбходаМетаданных(ПолучитьМассивСтрокМногострочнойСтроки(СтрокаВсехРеквизитов));
Возврат ВсеФормыКонфигурации;
КонецФункции // ПолучитьВсеФормыКонфигурации()
// Возвращает все макеты конфигурации
//
// Параметры - Нет
//
// Возвращаемое значение:
// Массив объектов метаданных
//
Функция ПолучитьВсеМакетыКонфигурации() Экспорт
СтрокаВсехРеквизитов =
"
|Метаданные.ПланыОбмена.*.Макеты.*
|Метаданные.ОбщиеМакеты.*
|Метаданные.Справочники.*.Макеты.*
|Метаданные.Документы.*.Макеты.*
|Метаданные.ЖурналыДокументов.*.Макеты.*
|Метаданные.Перечисления.*.Макеты.*
|Метаданные.Отчеты.*.Макеты.*
|Метаданные.Обработки.*.Макеты.*
|Метаданные.ПланыВидовХарактеристик.*.Макеты.*
|Метаданные.ПланыСчетов.*.Макеты.*
|Метаданные.ПланыВидовРасчета.*.Макеты.*
|Метаданные.РегистрыСведений.*.Макеты.*
|Метаданные.РегистрыНакопления.*.Макеты.*
|Метаданные.РегистрыБухгалтерии.*.Макеты.*
|Метаданные.РегистрыРасчета.*.Макеты.*
|Метаданные.БизнесПроцессы.*.Макеты.*
|Метаданные.Задачи.*.Макеты.*
|";
ВсеМакетыКонфигурации = РазвернутьМассивСтрокОбходаМетаданных(ПолучитьМассивСтрокМногострочнойСтроки(СтрокаВсехРеквизитов));
Возврат ВсеМакетыКонфигурации;
КонецФункции // ПолучитьВсеМакетыКонфигурации()
Категория:
Метаданные Программное использование универсальной обработки Выгрузка Загрузка Данных XML Для работы, необходимо взять
обработку "ВыгрузкаЗагрузкаДанныхXML" , которая находится в шаблоне "Конвертация данных".
Пример обработки(автор Misha Macklaud):
Скачивать файлы может только зарегистрированный пользователь!
а это ее код:
Код 1C v 8.х Процедура КнопкаВыполнитьНажатие(Кнопка)
ОбработкаОбмен = Обработки.ВыгрузкаЗагрузкаДанныхXML.Создать();
ОбработкаОбмен.Инициализация();
ОбработкаОбмен.ОбработанныхКонстант = 0;
ОбработкаОбмен.ОбработанныхНаборовЗаписей = 0;
//отметки выгрузки Документов
СписокОбъектовВыгрузки = Новый СписокЗначений;
СписокОбъектовВыгрузки.Добавить(Метаданные.Документы.РеализацияТоваровУслуг);
СписокОбъектовВыгрузки.Добавить(Метаданные.Документы.ПоступлениеТоваровУслуг);
СписокОбъектовВыгрузки.Добавить(Метаданные.Документы.ТребованиеНакладная);
Для й=0 По СписокОбъектовВыгрузки.Количество()-1 Цикл
СтрокаВыгрузки = ОбработкаОбмен.ДеревоМетаданных.Строки.Найти(СписокОбъектовВыгрузки[й].Значение,"ОбъектМД",Истина);
СтрокаВыгрузки.Выгружать=1;
ОбработкаОбмен.ОбработкаИзмененияСостоянияВыгружать(СтрокаВыгрузки);
//отбор
Построитель = ОбработкаОбмен.ПодготовитьПостроительДляВыгрузки(СтрокаВыгрузки);
СписокСсылокВыгрузки = Новый СписокЗначений;
Для Каждого СтрокаТабДокументы Из ТабДокументы Цикл
Если (СтрокаТабДокументы.Документ.Метаданные() = СписокОбъектовВыгрузки[й].Значение) И (СтрокаТабДокументы.ФлагВыгружать) Тогда
СписокСсылокВыгрузки.Добавить(СтрокаТабДокументы.Документ.Ссылка);
КонецЕсли;
КонецЦикла;
Отбор = Построитель.Отбор;
Отбор.Добавить("Ссылка","Ссылка");
Отбор[0].Использование = Истина;
Отбор[0].ВидСравнения = ВидСравнения.ВСписке;
Отбор[0].Значение = СписокСсылокВыгрузки;
СтрокаВыгрузки.НастройкиПостроителя = Построитель.ПолучитьНастройки();
СтрокаВыгрузки.ИспользоватьОтбор = Истина;
КонецЦикла;
//отметки ОТМЕНЫ выгрузки Документов
СписокОбъектовВыгрузки.Очистить();
// СписокОбъектовВыгрузки.Добавить(Метаданные.Документы.Заявка);
Для й=0 По СписокОбъектовВыгрузки.Количество()-1 Цикл
СтрокаВыгрузки = ОбработкаОбмен.ДеревоМетаданных.Строки.Найти(СписокОбъектовВыгрузки[й].Значение,"ОбъектМД",Истина);
СтрокаВыгрузки.ВыгружатьПриНеобходимости = 0;
ОбработкаОбмен.ОбработкаИзмененияСостоянияВыгружать(СтрокаВыгрузки);
КонецЦикла;
//отметки выгрузки Справочников
СписокОбъектовВыгрузки.Очистить();
СписокОбъектовВыгрузки.Добавить(Метаданные.Справочники.Номенклатура);
Для й=0 По СписокОбъектовВыгрузки.Количество()-1 Цикл
СтрокаВыгрузки = ОбработкаОбмен.ДеревоМетаданных.Строки.Найти(СписокОбъектовВыгрузки[й].Значение,"ОбъектМД",Истина);
СтрокаВыгрузки.Выгружать=1;
ОбработкаОбмен.ОбработкаИзмененияСостоянияВыгружать(СтрокаВыгрузки);
КонецЦикла;
ИмяФайлаЗагрузки = "D:\А-Б.xml";
ОбработкаОбмен.ВыполнитьЗагрузку(ИмяФайлаЗагрузки);
ИмяФайлаВыгрузки = "D:\Б-А.xml";
ОбработкаОбмен.ВыполнитьВыгрузку(ИмяФайлаВыгрузки);
КонецПроцедуры
Процедура ВыбПериодНажатие(Элемент)
НастройкаПериода = Новый НастройкаПериода;
НастройкаПериода.РедактироватьКакИнтервал = Истина;
НастройкаПериода.РедактироватьКакПериод = Истина;
НастройкаПериода.ВариантНастройки = ВариантНастройкиПериода.Период;
НастройкаПериода.УстановитьПериод(НачПериода, ?(КонПериода='0001-01-01', КонПериода, КонецДня(КонПериода)));
Если НастройкаПериода.Редактировать() Тогда
НачПериода = НастройкаПериода.ПолучитьДатуНачала();
КонПериода = НастройкаПериода.ПолучитьДатуОкончания();
КонецЕсли;
КонецПроцедуры
Процедура ПриОткрытии()
НачПериода = ТекущаяДата();
КонПериода = ТекущаяДата();
КонецПроцедуры
Процедура ЗаполнитьТабЧастьОбъектом(Запрос,ОбъектЗапроса,ТЗ)
Запрос.Текст = "ВЫБРАТЬ
| ОбъектЗапроса.Ссылка
|ИЗ
| Документ."+ОбъектЗапроса+" КАК ОбъектЗапроса
|ГДЕ
| ОбъектЗапроса.ПометкаУдаления = ЛОЖЬ И
| ОбъектЗапроса.Дата МЕЖДУ &ДатаНач И &ДатаКон";
Запрос.УстановитьПараметр("ДатаНач",НачалоДня(НачПериода));
Запрос.УстановитьПараметр("ДатаКон",КонецДня(КонПериода));
Выборка = Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл
НоваяСтрока = ТЗ.Добавить();
НоваяСтрока.Дата = Выборка.Ссылка.Дата;
НоваяСтрока.Документ = Выборка.Ссылка;
КонецЦикла;
КонецПроцедуры
Процедура ЗаполнитьНажатие(Элемент)
ТабДокументы.Очистить();
ТЗ = Новый ТаблицаЗначений;
ТЗ.Колонки.Добавить("Дата");
ТЗ.Колонки.Добавить("Документ");
Запрос = Новый Запрос;
Если флРеализация Тогда
ОбъектЗапроса = "РеализацияТоваровУслуг";
ЗаполнитьТабЧастьОбъектом(Запрос,ОбъектЗапроса,ТЗ);
КонецЕсли;
Если флПоступление Тогда
ОбъектЗапроса = "ПоступлениеТоваровУслуг";
ЗаполнитьТабЧастьОбъектом(Запрос,ОбъектЗапроса,ТЗ);
КонецЕсли;
Если флТребованиеНакладная Тогда
ОбъектЗапроса = "ТребованиеНакладная";
ЗаполнитьТабЧастьОбъектом(Запрос,ОбъектЗапроса,ТЗ);
КонецЕсли;
ТЗ.Сортировать("Дата");
Для Каждого Стр Из ТЗ Цикл
НоваяСтрока = ТабДокументы.Добавить();
НоваяСтрока.Документ = Стр.Документ;
НоваяСтрока.ФлагВыгружать = Истина;
КонецЦикла;
КонецПроцедуры
Категория:
Конвертация данных, Обмен, Перенос Как самостоятельно заполнить дерево значений? Код 1C v 8.х Процедура ЗаполнениеДерева(Кнопка)
Дерево.Колонки.Очистить();
Дерево.Колонки.Добавить("ИмяКолонки");
// Создать первую строку. Правильнее сказать создать элемент
// коллекции. Он помещается в переменную "СтрокаВерхнегоУровня".
СтрокаВерхнегоУровня = Дерево.Строки.Добавить();
// В колонку "ИмяКолонки" записать значение "Старшая".
СтрокаВерхнегоУровня.ИмяКолонки = "Старшая";
// Создать строку подчиненную "Старшей".
ПодчиненнаяСтрока =СтрокаВерхнегоУровня.Строки.Добавить();
ПодчиненнаяСтрока.ИмяКолонки = "Первая подчиненная";
ПодчиненнаяВторогоУровня = ПодчиненнаяСтрока.Строки.Добавить();
ПодчиненнаяВторогоУровня.ИмяКолонки = "Первая нижняя";
ПодчиненнаяВторогоУровня = ПодчиненнаяСтрока.Строки.Добавить();
ПодчиненнаяВторогоУровня.ИмяКолонки = "Вторая нижняя";
ПодчиненнаяСтрока = СтрокаВерхнегоУровня.Строки.Добавить();
ПодчиненнаяСтрока.ИмяКолонки = "Вторая подчиненная";
// Использование метода позволит увидеть результат работы
// с деревом значений в табличном поле.
ЭлементыФормы.Дерево.СоздатьКолонки();
КонецПроцедуры
Процедура ОткрытиеВетки(Кнопка)
// Сделать текущим именно элемент коллекции "Строки".
РезультатПоиска = Дерево.Строки.Найти("Первая нижняя", "ИмяКолонки", Истина);
Если РезультатПоиска <> Неопределено Тогда
ЭлементыФормы.Дерево.ТекущаяСтрока = РезультатПоиска;
КонецЕсли;
КонецПроцедуры
Категория:
Работа с Деревом Значений Проверка правописания и орфографии Код 1C v 8.х ТекстДляПроверки = "Данный текст садержит как минемум три ошипки !";
Процедура КнопкаВыполнитьНажатие(Кнопка)
// Создадим объект MS Word, он должен быть установлен
Попытка
Word = Новый COMОбъект("Word.Application");
Исключение
Предупреждение("Microsoft Word не установлен!",,"Ошибка!");
Возврат;
КонецПопытки;
НетОшибок = Word.CheckSpelling(ТекстДляПроверки);
Если НетОшибок Тогда // Все правильно
Сообщить("Нет ошибок");
Иначе // текст содержит ошибки. Проверим каждое слово и выведем ошибочные.
Док = Word.Documents.Add(); // Создадим новый документ
Область = Док.Range(0,0); // Получим пустую область в начале документа
Область.I_nsertBefore(ТекстДляПроверки); // Добавим в документ текст
Для каждого Слово Из Область.Words Цикл
СловоДляПроверки = СокрЛП(Слово.Text);
НетОшибок = Word.CheckSpelling(СловоДляПроверки);
Если НЕ НетОшибок Тогда // Слово ошибочно
// покажем возможные замены неправильного слова
СтрокаВариантов = "";
// Получим варианты правописания
Варианты = Слово.GetSpellingSuggestions( ,1, ,0);
Для каждого Вариант Из Варианты Цикл
СтрокаВариантов = СтрокаВариантов + ", " + Вариант.Name;
КонецЦикла;
СтрокаВариантов = ". Варианты замены: " + Сред(СтрокаВариантов, 2);
Сообщить("Ошибка в слове: " + СловоДляПроверки + СтрокаВариантов);
КонецЕсли;
КонецЦикла;
КонецЕсли;
Док.Close(0,,); // закроем документ без сохранения wdDoNotSaveChanges
Word.Quit(); // закроем Word
КонецПроцедуры
Еще посмотрите ActiveX-компоненту, которая проверяет правописание текста.
Основана на технологии OpenOffice MySpell. Не требует установленного офиса.
В комплекте словари для 10 языков, включая русский (с "ё").
Автор: dushelov Категория:
Полезные, Универсальные Функции Заменить в строке пробелы на указанные символы Код 1C v 8.х Функция ЗаменитьПробелы(Строка, Символы)
// Пишем все слова с больших букв, кому не надо закомментируйте
СтрокаВозврата = СокрЛП(ТРег(Строка));
// Удаляем пробелы
Если НЕ ПустаяСтрока(СтрокаВозврата) Тогда
СтрокаВозврата = СтрЗаменить(СтрокаВозврата, " ", Символы);
КонецЕсли;
Возврат СтрокаВозврата;
КонецФункции
Категория:
Работа с Текстом (Строкой) Функция преобразования строки вида "ДебиторкаПоКонтрагентам" в "Дебиторка по контрагентам" Примеры кода для 7 версии, но будут работать и в 8-ой
Код 1C v 7.x Функция мРазнПреобразоватьСтрокуСБольшимиБуквами(ИсходнаяСтрока) Экспорт
СтрокаВозврата = Сред(ИсходнаяСтрока, 1, 1);
Для Сч = 2 По СтрДлина(ИсходнаяСтрока) цикл
ПредСимвол = Сред(ИсходнаяСтрока, Сч - 1, 1);
ТекСимвол = Сред(ИсходнаяСтрока, Сч, 1);
СледСимвол = Сред(ИсходнаяСтрока, Сч + 1, 1);
Если ВРЕГ(ТекСимвол) = ТекСимвол тогда
Если ВРЕГ(ПредСимвол) <> ПредСимвол тогда
СтрокаВозврата = СтрокаВозврата + " ";
Если ВРЕГ(СледСимвол) <> СледСимвол тогда
ТекСимвол = НРЕГ(ТекСимвол);
КонецЕсли;
КонецЕсли;
КонецЕсли;
СтрокаВозврата = СтрокаВозврата + ТекСимвол;
КонецЦикла;
Возврат СтрокаВозврата;
КонецФункции // мРазнПреобразоватьСтрокуСБольшимиБуквами()
А таким кодом, просто перед большой буквой выставляется пробел:
Код 1C v 7.x
Список=новый СписокЗначений;
Для н=КодСимвола("А") По КодСимвола("Я") Цикл
Список.Добавить(Символ(н));
КонецЦикла;
Значение="ДебиторкаПоКонтрагентам";
Результат="";
Для н=1 По СтрДлина(Значение) Цикл
Сим=Сред(Значение,н,1);
Если Список.НайтиПоЗначению(Сим) <> Неопределено Тогда
Сим=" "+Сим;
КонецЕсли;
Результат=Результат+Сим;
КонецЦикла;
Сообщить(Результат);
Категория:
Работа с Текстом (Строкой) Функции преобразуют время из представления в виде строки в число и обратно Код 1C v 8.х
//Функции преобразуют время из представления в виде строки в число и обратно
//
// Параметры:
// Время - Строка - Строковое представление времени 12:51
//
// Возвращаемое значение:
// Время - Число 5.2 - Время в виде числа
Функция ВремяСтрокаВЧисло(Время) Экспорт
Поз = Найти(Время,":");
Если НЕ Поз тогда
Возврат 0;
КонецЕсли;
ЦелЧасть = Число(Лев(Время,Поз-1));
ДробЧасть = Число(Сред(Время,Поз+1,6)) / 60;
Возврат ЦелЧасть + ДробЧасть;
КонецФункции
// Преобразует время из числового представления в строкове
Функция ВремяЧислоВСтрока(Время) Экспорт
ЦелЧасть = Цел(Время);
ДробЧасть = (Время - ЦелЧасть) * 60;
Возврат Строка(ЦелЧасть) + ":" + Строка(Окр(ДробЧасть,0));
КонецФункции
Категория:
Работа с Датами (Временем)