Иногда возникает необходимость обработать фотографии в 1С автоматически, уменьшить вес картинок в килобайтах, за счет удаления из файла не нужной технической информации и сглаживания цветов, или изменить размер, уменьшить картинку пропорционально задав максимальный размер по ширине или высоте.В этом случае можно:1) установить специальные библиотеки в операционной системе для работы с графикой, н-р GFLAx и подключать их как com-объекты2) использовать api сервисов, таких как optipic.io.
Рассмотрим оба варианта:1) Использование GFLAxСкачиваем и устанавливаем библиотеку GFLAx, скачать можно здесь https://www.xnview.com/en/#downloads
Далее её надо зарегистрировать в Windows. Для этого запускаем CMD.exe с правами администратора и набираем: regsrv32 "путь_к_DLL\GFLAx.dll"Далее уже в программе, для пропорционального изменения размера файла до максимального размера в 500 пикселей можно вставить такой код:
Данный способ требует специальных настроек операционной системы, навыков системного администрирования и данный способ не проводит полноценную оптимизацию картинки.Кроме того, на компьютере или сервере, где производиться оптимизация эта библиотека должна быть установлена.2) Использование сервиса optipic.ioПодобные сервисы обычно платные, но стоимость использования не высокая, а качество и гибкость существенно выше.
Преимущества использования сервиса optipic.io в проектах 1С:
Легко подключить
Не нужно устанавливать дополнительные библиотеки в операционной системе
Можно использовать как для оптимизации изображений, так и для изменения размера изображения в пикселях (ресайз)
Не зависит от операционной системы и типа используемого клиента
Конфигурация будет работать после переезда на другой компьютер или сервер
Качество и эффективность сжатия производятся в самом оптимальном виде
Использование сервиса можно легко встроить в любой свой проект на 1С. Для этого можно добавить себе функцию, в которую передавать имя файла с исходной картинкой и параметры оптимизации. А в качестве ответа получить имя файла уже оптимизированного сервисом.
Пример такой функции для 1C8:
И далее в коде обращаться к данной функции, н-р так
На одном проекте была платная работа с картами и отображением складов на них, часто требовалось рассчитать расстояние между географическими координатами.
Земля может быть описана как сфера, поэтому для вычисления расстояния между точками на поверхности земли мы можем использовать уравнения для расчета сферического расстояния большого круга. При расчете мы берем сферу радиусом 6372795 метров. Ввиду того что земля на самом деле не сфера, а эллипсоид, - пограшность вычисления расстояния может составлять около 0.5%.
Если Не ФайлПрограммы.Существует() Тогда ТекстСообщения = "Не установлена программа - Bullzip"; ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстСообщения);
Большинство обучающих материалов по программированию в системе 1С при описании формирования печатных форм на основе объекта «Табличный документ» ограничиваются выводом готовой формы на экран. Для пользователей же куда более важным является то, как документ будет выглядеть в распечатанном виде. Здесь, кроме хорошо сверстанного макета, играют роль и установки параметров печати.Почти все параметры, доступные в диалогах настройки печати (настройки принтера, свойства страницы), можно указать непосредственно при формировании табличного документа.Рассмотрим свойства и методы табличного документа, относящиеся к настройкам печати (в приведенных примерах «ТабДок» это объект типа «Табличный документ»).
Свойство «ИмяПринтера» позволяет задать для печати принтер, отличный от установленного по умолчанию. Имя должно совпадать с именем принтера, заданным в системе:
ТабДок.ИмяПринтера="HP LaserJet 3050 Series PCL 6";
При печати пакета документов можно сэкономить время, установив признак разбора по копиям:
ТабДок.РазборПоКопиям=истина;
Число копий можно указать так:
ТабДок.КоличествоЭкземпляров=5;
Разумеется, можно задать поля:
ТабДок.ПолеСлева=20;//Поле слева 20мм, остальные поля 10мм (по умолчанию)
При необходимости можно указать конкретное значение масштабирования в процентах (свойство «МасштабПечати»).
Свойство «РазмерСтраницы» позволяет задать стандартные форматы страницы – “A3”, “A4”, “A5” (полный список вариантов доступен в справке 1С).
ТабДок.РазмерСтраницы="A3";// буква А должна быть английской
Для нестандартного размера бумаги (Custom) можно указать значения высоты и ширины страницы (в мм):
ТабДок.РазмерСтраницы="Custom";//нестандартный размер ТабДок.ВысотаСтраницы=350; ТабДок.ШиринаСтраницы=350;
Также в табличном документе доступно управление выводом колонтитулов и их содержимым. Для этого служат свойства «ВерхнийКолонтитул» и «НижнийКолонтитул». Например:
ТабДок.ВерхнийКолонтитул.Выводить=истина; //будет напечатан верхний колонтитул ТабДок.РазмерКолонтитулаСверху=7; //размер колонтитула 7мм (по умолчанию 10мм) ТабДок.ВерхнийКолонтитул.ВертикальноеПоложение=ВертикальноеПоложение.Верх; ТабДок.ВерхнийКолонтитул.НачальнаяСтраница=2;//колонтитул выводится со второй страницы ШрифтКолонтитула=Новый Шрифт("Courier New", 8,,Истина); ТабДок.ВерхнийКолонтитул.Шрифт=ШрифтКолонтитула; //наклонный шрифт ТабДок.ВерхнийКолонтитул.ТекстВЦентре="Верхний колонтитул"; ТабДок.ВерхнийКолонтитул.ТекстСправа="Стр.[&НомерСтраницы] из [&СтраницВсего]"; //нумерация страниц ТабДок.ВерхнийКолонтитул.ТекстСлева="[&Дата]";//текущая дата
Сформированный документ отправляется на печать с помощью метода «Напечатать()». Возможно два варианта вызова.
1) Непосредственно на принтер:ТабДок.Напечатать(РежимИспользованияДиалогаПечати.НеИспользовать); ТабДок.Напечатать(истина);
2) Перед печатью будет выведен диалог печати:ТабДок.Напечатать(РежимИспользованияДиалогаПечати.Использовать); ТабДок.Напечатать(ложь);
Кроме того можно управлять и разбиением документа на страницы. Оценить количество страниц в документе по настройкам текущего принтера можно так:
ТабДок.КоличествоСтраниц();
С помощью методов «ПроверитьВывод()» и «ПроверитьПрисоединение()» можно определить, умещается ли табличный документ или массив областей табличного документа на странице в высоту и в ширину при текущих настройках принтера.Надо иметь ввиду, что работа последних трех методов зависит от установленного принтера. Если методу не удается его найти, вызывается исключение.
Принудительно вставить разрывы страниц позволяют методы «ВывестиВертикальныйРазделительСтраниц()» и «ВывестиГоризонтальныйРазделительСтраниц()».Таким образом, можно управлять постраничным выводом на печать и контролировать заполнение страницы:
Если Не ТабДок.ПроверитьВывод(МассивВыводимыхОбластей) Тогда ТабДок.ВывестиГоризонтальныйРазделительСтраниц();КонецЕсли;
Немного теории: Конкатенация (соединение строк). Казалось бы - ну что может быть проще и однозначнее? Ан нет. Выражение T = "А"+"Б"; (если оно не вычислено на этапе компиляции/разбора) требует выделения памяти для "А", памяти для "Б", анализа длин "А" и "Б", выделение памяти для T, копирование первой строки, копирование второй строки. Это медленно, особенно если в цикле дописывается кусочек в конец строки.
В "нормальных" системах, например в .NET от этого можно уйти используя так называемые StringBuilder - это специальный объект, который более эффективно выделяет память (крупными блоками) и не копирует зря строки. По сути это поток (stream) который используется для записи в память, как в файл. А вот в 1С такого нет. Фиг вам товарищи, а не эффективная работа со строками Но фиг только тем у кого хитрости мало, а для остальных есть варианты. ТекстовыйДокумент
Оказывается, что метод ДобавитьСтроку() для типа ТекстовыйДокумент для больших строк работает гораздо эффективнее чем тупая конкатенация. Возможно, это связано с тем, что этот тип - обёртка к текстовому редактору, встроенному в 1С. Кстати, этот редактор для простых текстовых файлов файлов мне нравится гораздо больше, чем например, notepad или редактор Visual Studio - он позволяет бодрее работать с большими текстами, как в длину, так и в ширину.
Но! У этого способа есть недостаток - в 8.0 и 8.1 он не доступен на сервере, т.к. считается "интерфейсным". Обидно. Но это заставляет искать нас более эффективный способ: ЗаписьXML
Опа! А при чём здесь XML? Правильно, XML нам не нужен. Но важно, что тип ЗаписьXML представляет собой как раз обёртку над последовательной записью в поток. А если учесть, что он позволяет формировать результат в память в виде строки, а не только в файл, то это уже готовый кандидат на замену StringBuilder. Осталось только упомянуть, что он позволяет дозаписывать в "XML" всё что угодно при помощи метода ЗаписатьБезОбработки().
Результаты забегов
У меня на тестовой среде получилось примерно следующее время:
1. Конкатенация - 24 секунды
2. Текстовый документ 1,5 секунды
3. ЗаписьXML - около 0,4 секунды
Кнопочки для управления уровнями группировки генерируются программно.
Для этого в модуле формы, в самом конце процедуры формирования отчета, нужно вызвать процедуру СгенерироватьКнопкиУправленияГруппировкой().
В модуль формы нужно добавить две процедуры, где "ПолеТабДок" - это поле табличного документа, в которое выводится отчет:
Примечание:
Вышеприведенный код будет работать правильно, если ПолеТабличногоДокумента, на которое выводится Отчет, расположено на Форме. Если же ПолеТабличногоДокумента расположено на Панели, то строчку кода, в которой создается НоваяКнопка, необходимо чуть дополнить:
Примечание 2:
Решение для генерации кнопок в отчетах, построенных на СКД.
Вешаешь на кнопку "Сформировать" следующую процедуру
Часто при ведении учета в различных конфигурациях 1с возникает необходимость выполнения обмена данных. Для решения этой задачи принято использовать Универсальный обмен данными XML или другие внешние обработки, общим у которых является использование текстовых файлов посредников.
Я предлагаю использовать Web-сервисы 1с. В чем необходимость обмена: Обмен данными между базами требуется для исключения дублирующих вводов одних и тех же данных в различных учетных системах. В чем необходимость обмена в режиме online: Обмен в онлайн режиме требуется когда функции учета комплекса учетных систем выполняются в разных учетных системах.
1. Например компания использует: CRM систему учета, для ведения учета взаимоотношений с клиентами; БП 2.0 для ведения взаиморасчетов с клиентами в разрезе счетов; Счета выставляемые клиентам создаются в торговой базе, а оформление заказов поставщикам исходя из потребности клиентов в базе ориентированной на работу с пайсами поставщиков. При таком разделенном построении учета, для выставления счета в одной из баз к примеру требуется завести карточку клиента в другой базе с тем чтобы данные о контрагенте так же были доступны в базе со счетами.
2. Помимо синхронизации первичных данных, может возникнуть необходимость построения сводного отчета по данным из нескольких баз, что тоже потребует обращения к внешним данным в online режиме.
Вариант автоматизации данного процесса с использованием файлов обмена, потребует подключения обработчика ожиданий, что сможет обеспечить обмен данными только с установленной задержкой времени обмена, кроме того любая обработка ожидания будет не эффективно использовать машинное время.
Обращение к Web сервисам, возможно при возникновении любых событий (ПриЗаписи, ПриПроведении, при нажатии кнопки и т.д.). при этом не возникнет ни какой задержки реакции информационной базы к которой происходит обращение, (в отличие от запуска еще одного приложения 1с в качестве com объекта).
Итак рассмотрим вариант реализации синхронизации элементов справочников, начнем с наиболее простого со справочника "Товары" в базах "Продажи" и "Закупки". Синхронизация для начала будет односторонней, предположим что перечень товаров заводится в базе "Продажи", а в "Закупки" он передается.
Что нам потребуется для того чтобы задача возникла и могла быть решена.
1. Сервер 1с, с установленной web компонентой;
2. веб-сервер (например IIS 6.0);
3. Две или более конфигурации учетных систем.
Что нам потребуется для решения задачи.
1. Создадим в базе "Закупки" Web-сервис "Синхронизация", и добавим ему Операцию "СинхронизироватьТовар", со строковыми параметрами.
1. "GuidТовара" - сюда будем передавать уникальный идентификатор товара присвоенный в базе Продаж.
2. "GuidРодителя" - уникальный идентификатор родителя данного товара.
3. "стрСтруктураРеквизитов" - Структура реквизитов товара в виде примитивных типов (число,строка,дата,булево) преобразованная в строку.
4. "этоГруппа" - реквизит котрый позволит нам не раскрывая всей структуры реквизитов товара узнатья явлется ли товар группой и соответственно его обработать.
5. "стрТаблицаЕденицИзмерения" - Таблица содержащая описание доступных единиц измерения для товара
Далее потребуется опубликовать данный сервис на веб сервере. для этого нужно будет создать текстовый файл "wssinhron.1cws", в каталоге сайта опубликованном на веб сервере. Библиотека wsisapi.dll, должна быть подключена. Проще всего корректную настройку работы веб сервера с 1с можно провести опубликовав веб приложение через конфигуратор Администрирование->"Публикация на веб сервере". Единственным минусом является, то что в версии 8.2 файлы веб сервисов *.1cws, сами не создаются. Возможно просто мне не хватает знаний по этому вопросу но для публикации веб сервисов я пользуюсь блокнотом.
Также следует учесть что на серверах 64x следует использовать wsisapi.dll из поставки 1с 64x, даже если сам сервер 1с у вас 86x.
Итак создаем файл "wssinhron.1cws" с текстом.
{Название вашего сервера 1с}";Ref="{Назваение базы. у нас это "Market"}";"/>
Далее перейдем в модуль обработки нашего Сервиса, для наглядности я приведу пример кода своей разработки
Теперь, как вызвать веб сервис не зациклив при этом систему.
в нашем справонике "Товары" в базах "Продажи" и "Закупки" нам потребуются служебные реквизиты. 1. "GUIDтовара" - строковый реквизит (50)
2. "ВремяСинхронизации" - Реквизит с типом Дата и Время
3. "Синхронизирован" - тип булево.
В модуль объекта Справочника добавим предопределенные обработчики событий "ПередЗаписью()", "ПриЗаписи()" функцию "Синхронизация()" и общую переменную "передавать", и под текстом модуля присвоим этой переменной значение Истина. Перем передавать Экспорт;
Процедура ПередЗаписью(Отказ)
Процедура ПриЗаписи(Отказ)
Функция Синхронизация()
передавать = истина;
Таким образом получится что при любой инициализации модуля наша переменная всегда имеет значение истина.
Рассмотрим наши процедуры:
Таким образом остается добавить в событие формы элемента "ПриЗаписи()"
И мы сможем записывать наш элемент сколько угодно раз не вызывая зацикливания.
Для варианта двусторонней синхронизации, (когда элемент справочника может редактироваться в обоих базах) нам потребуется скопировать наш веб сервис из базы закупок в базу продаж переименовав имя файла публикации и URI пространство имен и внести соответствующие изменения в вызов веб сервиса из базы продаж в базу закупок и опубликовать его. Важно: При успешном срабатывание вызванного сервиса из базы "Продажи", в качестве результата работы должен быть возвращен уникальный идентификатор элемента справочника из базы "Продажи". Данный результат необходимо будет присвоить соответсвующиму реквизиту справочника из базы закупок.
Аналогично приведенному примеру можно синхронизировать данные любого справочника или документа.
Построение сводных отчетов
Для получения сводного отчета нам также потребуется вызов веб сервиса из какой - либо базы. Данный веб сервис должен будет возвращать преобразованною в строку, таблицу с данными которые мы хотим использовать в нашем отчете (Например таблицу содержащую "Код товара" и "Актуальную цену поставщика на данный товар"). Далее можно преобразовать эту строку в таблицу и использовать в качестве вложенной временной таблицы любом запросе к базе "Продажи" с соединением по Коду. Исключением является использование данной таблицы в Построителе отчетов, для случая построителя нам понадобится создание, дополнительного справочника с предопределенным элементом и табличной частью, с реквизитами соответствующими полям таблицы.
Автор: allert73
Кодирование: Ctrl+Пробел - вызов подсказки Ctrl+Q - вызов шаблона Ctrl+F1 - поиск в синтакс-помощнике Ctrl + L - удалить текущую строку Alt+Shift+F - отформатировать код Исследование: F12 - ставим курсор на процедуре или функции и переходим к определению процедуры или функций. Ctrl+(минус) - перемещает назад в модуль, из которого ушли через F12 Ctrl+T - найти в дереве конфигурации Ctrl+F - найти объект метаданных или его реквизит в дереве метаданных. Отладка: F5 - начать/продолжить отладку F9 - установить/снять точку останова F10 - шагнуть через процедуру или функцию, на следующую строку кода F11 - идти по порядку с заходом во все процедуры и функции. Alt+F9 - список точек останова Shift+F9 - вычислить выражение Ctrl+Shift+F9 - отк./вкл. точку остан. Ctrl+Alt+W - открыть табло Ctrl+Alt+C - открыть стек вызовов Закладки: Alt+F2 - установить/снять закладку F2 - к следующей закладке Shift+F2 - к предыдущей закладке Быстрый переход по Процедурам, Функциям, Условиям, Циклам: Ctrl+[ - перейти назад Ctrl+] - перейти вперед Ctlr+G - перемещения к строке кода Окно сообщений: Ctrl+Alt+Z - очистить. Ctrl+Shift+Z - очистить и закрыть
Рассмотрим более подробно:
Глобальные действия
Создать новый документ - Ctrl + N
Открыть существующий документ - Ctrl + O
Активизировать поле поиска в командной панели - Ctrl + D
Открыть "Глобальный поиск по текстам" - Ctrl + Shift + F
Открыть "Результаты глобального поиска по текстам" - Ctrl + Shift + H
Запустить 1С:Предприятие без отладки - Ctrl + F5
Открыть окно "Конфигурация" - Ctrl + Shift + С
Обновить конфигурацию БД - F7
Открыть "Шаблоны текста" - Ctrl + Shift + T
Открыть встроенный "Калькулятор" системы 1С:Предприятие - Ctrl + F2
Открыть "Свойства" - Alt + Enter
Открыть "Дополнительно" - Shift + Alt + Enter
Открыть "Служебные сообщения" - Ctrl + Alt + O
Закрыть "Служебные сообщения" - Ctrl + Shift + Z
Очистить служебные сообщения - Ctrl + Alt + Z
Открыть "Справку" - F1
Открыть "Содержание справки" - Shift + F1
Открыть "Индекс справки" - Shift + Alt + F1
Открыть "Поиск по справке" - Ctrl + Alt + F1
Открыть "Синтакс-Помощник - Ctrl + Shift + F1
Поиск по индексу в "Синтакс-Помощнике" - Ctrl + F1
Общие действия
Удалить - Del
Добавить - Ins
Сохранить активный документ - Ctrl + S
Печать активного документа - Ctrl + P
Печать на текущий принтер - Ctrl + Shift + P
Копировать в буфер обмена - Ctrl + C - Ctrl + Ins
Вырезать в буфер обмена - Ctrl + X - Shift + Del
Вставить из буфера обмена - Ctrl + V - Shift + Ins
Добавить к буферу обмена - Shift + Num+
Вычесть из буфера обмена - Shift + Num-
Выделить все - Ctrl + A
Отменить последнее действие - Ctrl + Z - Alt + BackSpace
Вернуть отмененное действие - Ctrl + Y - Shift + Alt + BackSpace
Найти - Ctrl + F
Найти следующий - F3
Найти следующий выделенный - Ctrl + F3
Найти предыдущий - Shift + F3
Найти предыдущий выделенный - Ctrl + Shift + F3
Заменить - Ctrl + H
Найти в дереве - Ctrl + T
Следующий элемент в результатах поиска и окне сообщений - F8
Предыдущий элемент в результатах поиска и окне сообщений - Shift + F8
Развернуть (узел дерева, группу табличного документа, группировку модуля) - Ctrl + Num+
Свернуть (узел дерева, группу табличного документа, группировку модуля) - Ctrl + Num-
Развернуть (узел дерева, группу табличного документа, группировку модуля) и все подчиненные - Ctrl + Alt + Num+
Свернуть (узел дерева, группу табличного документа, группировку модуля) и все подчиненные - Ctrl + Alt + Num-
Развернуть (все узлы дерева, группы табличного документа, группировки модуля) - Ctrl + Shift + Num+
Свернуть (все узлы дерева, группы табличного документа, группировки модуля) - Ctrl + Shift + Num-
Следующая страница - Ctrl + PgDn - Ctrl + Alt + F
Предыдущая страница - Ctrl + PgUp - Ctrl + Alt + B
Включить/выключить жирность - Ctrl + B
Включить/выключить курсив - Ctrl + I
Включить/выключить подчеркивание - Ctrl + U
Переход к предыдущей главе справки - Alt + Left
Переход к следующей главе справки - Alt + Right
Управление окнами
Закрыть активное окно, модальный диалог или приложение - Alt + F4
Закрыть активное обычное окно - Ctrl + F4
Закрыть активное окно (кроме обычных) - Shift + Esc
Активизировать следующее обычное окно - Ctrl + Tab - Ctrl + F6
Активизировать предыдущее обычное окно - Ctrl + Shift + Tab - Ctrl + Shift + F6
Активизировать следующую секцию окна - F6
Активизировать предыдущую секцию окна - Shift + F6
Вызвать системное меню приложения или модального диалога - Alt + Space
Вызвать системное меню окна (кроме модальных диалогов) - Alt + Hyphen(-) - Alt + Num-
Вызвать главное меню - Alt - F10
Вызвать контекстное меню - Shift + F10
Переход по истории активности окон
Переместиться назад - Ctrl + "-"
Переместиться вперед - Ctrl + Shift + "-"
Вернуть активность обычному окну - Esc
Форма
Перейти к следующему элементу формы/выполнить действие кнопки по умолчанию - Enter
Выполнить действие кнопки по умолчанию - Ctrl + Enter
Перейти к следующему элементу формы - Tab
Вернуться к предыдущему элементу формы - Shift + Tab
Активизировать командную панель, связанную с активным элементом управления/формой - Alt + F10
Открыть "Список элементов управления формы" - Ctrl + Shift + L
Перемещение по элементам управления, объединенным в одну группу - Up, Down, Left, Right
Работа со списком и деревом
Открыть - F2
Обновить - Ctrl + Shift + R
Скопировать - F9
Новая группа - Ctrl + F9
Удалить строку - Shift + Del
Перемещение строки вверх - Ctrl + Shift + Up
Перемещение строки вниз - Ctrl + Shift + Down
Перенести элемент в другую группу - Ctrl + Shift + M
Перейти на уровень вниз с одновременным раскрытием группы - Ctrl + Down
Перейти на уровень вверх (к "родителю") - Ctrl + Up
Закончить редактирование - Shift + F2
Развернуть узел дерева - Num+ - Ctrl + Num+
Свернуть узел дерева - Num- - Ctrl + Num-
Развернуть узел дерева и все подчиненные - Num* - Ctrl + Alt + Num+
Свернуть узел дерева и все подчиненные - Ctrl + Alt + Num-
Развернуть все узлы дерева (выполняется в любом месте дерева) - Ctrl + Shift + Num+
Свернуть все узлы дерева (выполняется в любом месте дерева) - Ctrl + Shift + Num-
Изменение флажка - Пробел
Поле ввода
Переключить режим вставки/замены - Ins
Кнопка выбора - F4
Кнопка открытия - Ctrl + Shift + F4
Очистить поле - Shift + F4
Удалить символ слева от курсора - BackSpace
Удалить символ справа от курсора - Del
Удалить слово слева от курсора - Ctrl + BackSpace
Удалить слово справа от курсора - Ctrl + Del
Перейти в начало строки - Home
Перейти в конец строки - End
Поле картинки
Увеличить масштаб - Num+
Уменьшить масштаб - Num-
Прокрутить - Up, Down, Left, Right
Прокрутить на размер окна вверх - Page Up
Прокрутить на размер окна вниз - Page Down
Прокрутить на размер окна влево - Alt + PgUp
Прокрутить на размер окна вправо - Alt + PgDn
Редактор управляемых форм
Переключиться на закладку "Форма" - Alt + 1
Переключиться на закладку "Модуль" - Alt + 2
Переключиться на закладку "Форма" и активизировать закладку "Элементы" - Alt + 3
Переключиться на закладку "Форма" и активизировать закладку "Реквизиты" - Alt + 4
Переключиться на закладку "Форма" и активизировать закладку "Команды" - Alt + 5
Переключиться на закладку "Форма" и активизировать закладку "Командный интерфейс" - Alt + 6
Переключиться на закладку "Форма" и активизировать закладку "Параметры" - Alt + 7
Переключиться на закладку "Форма" и активизировать окно предварительного просмотра формы - Alt + 8
Редактор форм
Протестировать форму - Ctrl + R
Переместить элемент управления - Up, Down, Left, Right
Копировать элемент управления - Ctrl + (Up, Down, Left, Right)
Копировать элемент управления с инверсией выравнивания по сетке - Ctrl + Alt + (Up, Down, Left, Right)
Изменить размер элемента управления - Shift + (Up, Down, Left, Right)
Изменить размер элемента управления с инверсией выравнивания по сетке - Shift + Alt + (Up, Down, Left, Right)
Инверсия использования сетки - Alt + (Up, Down, Left, Right)
Открыть окно "Привязка границ для элемента…" - Ctrl + Shift + S
Начало редактирования - F2
Редактор табличных документов
Перейти к ячейке - Ctrl + G
Перемещение по ячейкам - Up, Down, Left, Right
Перемещение по ячейкам к следующей заполненной или пустой - Ctrl + (Up, Down, Left, Right)
Перемещение по ячейкам к следующей заполненной или пустой с выделением ячеек - Ctrl + Shift + (Up, Down, Left, Right)
Выделение ячеек - Shift + (Up, Down, Left, Right)
Выделение ячеек от текущей до начала строки - Shift + Home
Выделение ячеек от текущей до конца строки - Shift + End
Выделение строк - Alt + Shift + (Up, Down)
Выделение строк до следующей заполненной или пустой ячейки - Ctrl + Alt + Shift + (Up, Down)
Выделение колонок - Alt + Shift + (Left, Right)
Выделение колонок до следующей заполненной или пустой ячейки - Ctrl + Alt + Shift + (Left, Right)
Выделение ячеек от текущей до начала документа - Ctrl + Shift + Home
Выделение ячеек от текущей до конца документа - Ctrl + Shift + End
Прокрутить на страницу вверх - PgUp
Прокрутить на страницу вниз - PgDn
Прокрутить на страницу влево - Alt + PgUp
Прокрутить на страницу вправо - Alt + PgDn
Перейти к редактированию содержимого ячейки - Enter
Переключение режима редактирования/ввода в ячейке - F2
Перейти в начало строки - Home
Перейти в конец строки - End
Перейти в начало текста - Ctrl + Home
Перейти в конец текста - Ctrl + End
Установка имени текущей области - Ctrl + Shift + N
Редактор текстовых документов и модулей
Переключить режим вставки/замены - Ins
Перейти в начало строки - Home
Перейти в конец строки - End
Выделить до начала строки - Shift + Home
Выделить до конца строки - Shift + End
Перейти в начало текста - Ctrl + Home
Перейти в конец текста - Ctrl + End
Выделить до начала текста - Ctrl + Shift + Home
Выделить до конца текста - Ctrl + Shift + End
Прокрутить на одну строку вверх - Ctrl + Up
Прокрутить на одну строку вниз - Ctrl + Down
Перейти к началу предшествующего слова - Ctrl + Left
Перейти к началу следующего слова - Ctrl + Right
Выделить слово - Ctrl + W
Выделить предшествующее слово - Ctrl + Shift + Left
Выделить следующее слово - Ctrl + Shift + Right
Прокрутить на страницу вверх - PgUp
Прокрутить на страницу вниз - PgDn
Выделить предыдущую страницу текста - Shift + PgUp
Выделить следующую страницу текста - Shift + PgDn
Снять выделение - Esc
Перейти к строке - Ctrl + G
Удалить символ слева от курсора - BackSpace
Удалить символ справа от курсора - Del
Удалить слово слева от курсора - Ctrl + BackSpace
Удалить слово справа от курсора - Ctrl + Del
Установить/снять закладку - Alt + F2
Следующая закладка - F2
Предыдущая закладка - Shift + F2
Удалить текущую строку - Ctrl + L
Форматировать блок - Shift + Alt + F
Добавить комментарий - Ctrl + Num/
Удалить комментарий - Ctrl + Shift + Num/
Cдвинуть блок вправо - Tab
Сдвинуть блок влево - Shift + Tab
Синтаксический контроль - Ctrl + F7
Процедуры и функции модуля - Ctrl + Alt + P
Перейти к объявлению процедуры или переменной - F12
Контекстная подсказка - Ctrl + Пробел
Свернуть группу (курсор может быть в любом месте группы) - Ctrl + Num -
Развернуть группу (курсор может быть в любом месте группы) - Ctrl + Num +
Cвернуть все группы - Ctrl + Shift + Num -
Развернуть все группы - Ctrl + Shift + Num +
Обновить группировки - Ctrl+ Shift + R
Активизация шаблона - Ctrl + Q
Перейти по операторным скобкам назад - Ctrl + [
Перейти по операторным скобкам вперед - Ctrl + ]
Перейти по операторным скобкам назад с выделением текста - Ctrl + Shift + [
Перейти по операторным скобкам вперед с выделением текста - Ctrl + Shift + ]
Отладчик
Начать/продолжить отладку - F5
Перезапуск приложения для отладки - Ctrl + Shift + F5
Прекратить отладку - Shift + F5
Шагнуть в - F11
Шагнуть через - F10
Шагнуть из - Shift + F11
Идти до курсора - Shift + F10
Установить/снять точку останова - F9
Отключить/включить точку останова - Ctrl + Shift + F9
Список точек останова - Alt + F9
Вычислить выражение - Shift + F9
Открыть табло - Ctrl + Alt + W
Открыть стек вызовов - Ctrl + Alt + C
Редактор картинок
Переключение картинка/коллекция - Ctrl + K
Параметры картинки/коллекции - Shift + Alt + P
Отразить слева направо - Ctrl + H
Отразить сверху вниз - Ctrl + Shift + H
Выделение прямоугольником - Shift + Alt + S
Масштаб - Ctrl + M
Ластик - Ctrl + Shift + E
Заливка - Ctrl + Shift + F
Карандаш - Ctrl + Shift + I
Кисть - Ctrl + Shift + B
Линия - Ctrl + Shift + L
Кривая - Shift + Alt + С
Аэрограф - Ctrl + Shift + A
Текст - Shift + Alt + T
Увеличение масштаба - Ctrl + Num+
Уменьшение масштаба - Ctrl + Num-
Палитра свойств
Сохранить свойства - Enter
Восстановить значения свойства - Esc
Раскрыть категорию свойств - Num+
Закрыть категорию свойств - Num-
Перейти в начало палитры - Home
Перейти в конец палитры - End
Перейти к предыдущему свойству - Up
Перейти к следующему свойству - Down
Прокрутить на страницу вверх - PgUp
Прокрутить на страницу вниз - PgDn
Перейти к предыдущей категории - Ctrl + PgUp
Перейти к следующей категории - Ctrl + PgDn
Редактор карты маршрута
Перейти на следующий элемент карты - Tab
Перейти на предыдущий элемент карты - Shift + Tab
Уменьшить ширину элемента карты - Shift + (Left)
Увеличить ширину элемента карты - Shift + (Right)
Уменьшить высоту элемента карты - Shift + (Up)
Увеличить высоту элемента карты - Shift + (Down)
Перемещение выделенного варианта вверх (только при выделенном варианте в - Ctrl + (Up)
элементе "Выбор варианта")
Перемещение выделенного варианта вниз (только при выделенном варианте в - Ctrl + (Down)
элементе "Выбор варианта")
Поиск - Ctrl + F
Найти следующий - F3
Найти предыдущий - Shift + F3
Замена - Ctrl + H
Конфигурация
Открыть конфигурацию - Alt + К + Enter
Поиск во всех текстах - Alt + К + Т
Объединение конфигураций - Alt + К + О
Загрузить измененную конфигурацию - Alt + K + З
Конвертирование данных - Alt + К + Е
Администрирование
Пользователи - Alt + А + П
Сохранить данные - Alt + А + Х
Восстановить данные - Alt + А + В
Выгрузить данные - Alt + А + Ы
Загрузить данные - Alt + А + Г
Настройка журнала регистрации - Alt + А + Н
Распределенная ИБ - Alt + А + Р
Управление - Alt + А + Р + У
Автообмен - Alt + А + Р + А
Действия
Открыть в отладчике - Alt + Д + Т
Синтаксический контроль запросов - Alt + Д + К
Синтаксический контроль - Alt + Д + И
Процедуры и функции модуля - Alt + Д + Р
Файл
Новый - Ctrl + N
Открыть - Ctrl + O
Сохранить - Ctrl + S
Печать - Ctrl + P
Сравнить файлы - Alt + Ф + Р
Закрыть - Alt + Ф + З
Просмотр - Alt + Ф + Р + Р + Enter
Параметры страницы - Alt + Ф + М
Работа с закладками
Предыдущая закладка - Shift + F2
Закладка - Alt + F2
Следующая закладка - F2
Работа с блоком
Форматировать - Ctrl + Shift +F
Сдвинуть вправо - Tab
Сдвинуть влево - Shift + Tab
Добавить комментарий - Ctrl + Num /
Удалить комментарий - Ctrl + Shift + Num /
Окна
Закрыть окно - Ctrl + F4
Следующее окно - Ctrl + Shift + F6
Предыдущее окно - Ctrl + F6
Каскадом - Alt + О + К
Закрыть окно сообщений - Ctrl + Shift + z
Следующая страница - Ctrl + Alt + F
Предыдущая страница - Ctrl + Alt + B
Разделить окно - Alt + О + Р
Поиск и замена
Заменить - Ctrl + Shift + F3
Искать - Ctrl + F3
Повторить поиск - F3
Искать назад - Alt + F3
Искать вперед - Shift + F3
Переход к строке - Ctrl + Shift + L
Сервис
Калькулятор - Ctrl + F2
Синтаксис помощник - Alt + С + С
Настройка шаблонов - Alt + С + Н
Временная блокировка - Alt + С + В
Запуск предприятия - F11
Запуск отладчика - F12
Помощь
Помощь - F1
Содержание - Shift + F1
Поиск в Синтакс-Помощнике - Ctrl + F1
О программе - Alt + П + О
Обработку ЗагрузкаданныхизТабличногоДокументаконечно должен знать каждый 1С-ник. И сколько бы обработок такого плана не появлялось, эта остается классикой. Даже претензии можно предъявлять если вы в ней что-то не понимаете к самой 1С. Хотя какие претензии, исходный код открыть – изучай, не хочу…
Еще чем мне нравится эта обработка – тем что вы читаете данные из внешнего источника, показываете их с помощью объекта табличное поле и только затем выбираете алгоритм загрузки в 1С. При чем загрузка у Вас происходит в среде 1С без привлечения дополнительных компонентов. Без всяких выпадов в неизвестный объект OLE, полей которые не прочитались в обработке загрузки. Если вы видете данные в табличном поле, то они и будут грузиться по вашему алгоритму.
Но что-то в ней не хватает. Конечно стандарта офисных документов ODF (Open Document Format и между прочим ГОСТ Р ИСО/МЭК 26300-2010). Как говаривал мой начальник – есть чем себя занять. Из всех внешних загрузок, которые сейчас есть к сожалению самыми распостраненными являются OLE(Com+) технологии. Возможно что-то еще появиться, но пока примемся за них.
Залезаем в код и видим несколько однотипных функуций
Функция мПрочитатьТабличныйДокументИзExcel(ТабличныйДокумент, ИмяФайла, НомерЛистаExcel = 1) Экспорт
Функция мПрочитатьТабличныйДокументИзТекста(ТабличныйДокумент, ИмяФайла, НомерЛистаExcel = 1) Экспорт
Пора добавить свою:
И добавим в форму выбора файла ods по тексту.
И выбор функции для ods
ИначеЕсли нРег(ФайлНаДиске.Расширение) = “.ods” Тогда
мПрочитатьТабличныйДокументИзCalc(ТабличныйДокумент,ДиалогВыбораФайла.ПолноеИмяФайла);