Содержание внутреннего курса для программистов 1С. Часть 1. Итак, занятия проходили с группой из 3 человек, 3 раза в неделю по 1 - 1,5 часа. Формат проведения занятия следующий: преподавателем дается теоретическая тема и ряд практических заданий; они прорабатываются обучающимися самостоятельно (на это могло уходить довольно много времени); на занятии происходит обсуждение непонятных моментов/ концепций/идей и разбор решений. При разборе практических заданий делается акцент на концепцию решения. Основной целью курса являлась базовая подготовка сотрудников в объеме, достаточном для решения задач среднего уровня совместно с наставником. И, конечно, расширение кругозора в мире 1С. Основным источником информации являлась документация (/redirect.php? url=aHR0cHM6Ly9pdHMuMWMucnUvZGIvdjgzMTJkb2M=) по платформе и мозг). Начали мы с архитектуры 1С, не касаясь, собственно программирования. 1. Понятия Платформа - Конфигурация - Информационная база (Инструмент - Структура Данные) 2. Режимы работы (конфигуратор, предприятие), виды клиентов 3. Окно запуска, настройка списка баз, список общих баз 4. Установка и режимы развертывания (файловый, клиент-серверный) 5. Архитектура клиент-серверного варианта (кластер серверов, рабочие серверы, процессы, порты) 6. Консоль администрирования сервера 1С (список баз, как зарегистрировать, свойства базы, блокировка соединений, разница между соединением и сеансом, что такое спящий сеанс) 7. Служба агента сервера 1С (параметры, как включить режим отладки -debug) 8. Расположение файлов (правила именования каталогов, где находятся временные файлы, как очистить кэш, где лежит журнал регистрации) 9. Где хранится список пользователей, как скинуть пароль 10. Исполняемые файлы: 1cestart.exe, 1cv8s.exe, 1cv8.exe, 1cv8c.exe, rphost.exe, ragent.exe, rmngr.exe, RegMSC.cmd, chdbfl.exe 11. Основные параметры запуска 1с из командной строки 12. Утилиты regedit, regsrv32 Далее поговорили о принципах работы в конфигураторе. 1. что такое файлы *.cf, *.dt, .epf, .ert, .cfu, .cfe 2. основные окна, что означает восклицательный знак 3. меню Правка, Конфигурация, Администрирование, Сервис, Справка - возможности (закладки, глобальный поиск/замена, тестирование/исправление, сравнение конфигураций, шаблоны кода/автозамена, окно Параметры - запуск, как запустить сеанс под определённым пользователем, синтаксис-помощник) 4. хранилище конфигураций как средство групповой разработки (что это, какие бывают (файловое, сетевое, веб), как создать/работать, что случится с непустой конфигурацией при подключении к хранилищу, как создать сетевое хранилище (crserver.exe)) 5. конфигурация поставщика (зачем это, как включить изменения, как сравнить, настойка поддержки) 6. Главный вопрос - сколько конфигураций содержится в открытом конфигураторе?) 7. Внесение изменений в конфигурацию (когда необходимо монопольное обновление, когда возможно динамическое обновление) Далее следовало обзорное занятие на тему "Понятие СУБД". 1. СУБД (что это, какие используются в 1с, типы баз данных (сетевые, реляционные, иерархические и т.д.), что такое DDL, DML, SQL, T-SQL (как расшифровывается), СУБДблокировочки и СУБД-версионники) 2. Работа с данными (типы связей между таблицами, понятие ссылочной целостности и каскадного обновления, первичный/внешний ключи записи, индексы (типы, назначение, хранение), понятие покрывающего индекса 3. Эффективность (что понимается под производительностью СУБД, как индекс влияет на производительность, понятие плана запроса СУБД, как выполняется запрос (от кода в 1с до получения данных в СУБД), Table Scan, Index Scan, Clustered Index Scan, Index Seek, Clustered Index Seek, Регламентные операции MS SQL - зачем, какие бывают, как настраиваются 4. Многопользовательская работа (что такое транзакция, блокировка, управляемая блокировка 1с, как повысить эффективность блокировок) 5. Структура хранения таблиц 1с в MS SQL (как получить структуру таблиц СУБД в режиме 1с предприятие, могут ли данные одного объекта ИБ 1с храниться в нескольких таблицах СУБД) На этом вводная часть заканчивается, и начинаются "Основы программирования: алгоритмы и блок-схемы". 1. Понятие алгоритма, его свойства и способы представления (словесная, графическая (блок схемы), формальная (на языке программирования)) 2. Первая практика. При этом здесь мы еще ничего не писали, только рисовали блоксхемы и обсуждали концепцию. Основной задачей было показать как "наложить" эту концепцию на данные и, тем самым, "прошагать" алгоритм. 1. Сформулируйте алгоритм поиска максимального значения из четырех чисел. Представьте алгоритм в виде блок-схемы. 2. Сформулируйте алгоритм решения задачи:Требуется найти самую длинную непрерывную цепочку нулей в последовательности нулей и единиц. Входные данные: последовательности нулей и единиц. Выходные данные: число (длина цепочки). Представьте алгоритм в виде блок-схемы. 3. назначение подпрограмм, процедура/функция, их параметры, понятие контекста переменной, контекст процедуры 4. понятие внешней обработки и базовое понятие управляемой формы (как выяснилось, донести мысль об одновременном существовании объекта формы как на клиенте, так и на сервере с ходу не получается, к этому надо прийти...) 5. Понятие события и его яркий представитель - "ПриОткрытии" 6. Понятие переменной, объявление переменных, типы переменных 7. Вывод результата алгоритма через Сообщить Далее решались задачи с сайта https://pas1.ru (/redirect.php?url=aHR0cHM6Ly9wYXMxLnJ1), Встроенные функции работы с простыми типами (Число, Дата, Строка, Булево), результат выводится через "Сообщить" Сгенерировать случайное число, вывести на экран это число, а также сумму и произведение его цифр Вывести уравнение прямой, проходящей через две точки Обмен значений переменных https://pas1.ru/sum-digits (/redirect.php? url=aHR0cHM6Ly9wYXMxLnJ1L3N1bS1kaWdpdHM=) https://pas1.ru/equation-line (/redirect.php? url=aHR0cHM6Ly9wYXMxLnJ1L2VxdWF0aW9uLWxpbmU=) https://pas1.ru/var-exchange (/redirect.php? url=aHR0cHM6Ly9wYXMxLnJ1L3Zhci1leGNoYW5nZQ==) Функция вычисления f(x) в зависимости https://pas1.ru/f-x (/redirect.php? от значения x url=aHR0cHM6Ly9wYXMxLnJ1L2YteA==) Написать функцию возведения в степень https://pas1.ru/pow-expression (/redirect.php? и вычислить выражение url=aHR0cHM6Ly9wYXMxLnJ1L3Bvdy1leHByZXNzaW9u) Реализовать с использованием процедур. Для заданных, а, b, с вычислить z = max Поясняются методы возвращения (min (a, b), с). Не прибегая к функциям результата работы процедуры (через параметр, min и max. глобальную переменную, реквизит формы). Также говорим про передачу параметров "по значению" Операторы ветвления, циклы. Взаимодействие с пользователем в модальном режиме (функция Вопрос, Предупреждение), понятие и настройка режима использования модальности. Угадать число, которое загадал пользователь, используя только инструкцию if-else. Вводится число. Преобразовать его в другое число, цифры которого будут следовать в обратном порядке по сравнению с введенным числом. Составить таблицу значений функции y = 5 - x2/2 на отрезке [-5; 5] с шагом 0.5. https://pas1.ru/guess-number (/redirect.php? url=aHR0cHM6Ly9wYXMxLnJ1L2d1ZXNzLW51bWJlcg==) https://pas1.ru/turnover-number (/redirect.php? url=aHR0cHM6Ly9wYXMxLnJ1L3R1cm5vdmVyLW51bWJlcg==) https://pas1.ru/function-yx (/redirect.php? url=aHR0cHM6Ly9wYXMxLnJ1L2Z1bmN0aW9uLXl4) https://pas1.ru/rollstring (/redirect.php? url=aHR0cHM6Ly9wYXMxLnJ1L3JvbGxzdHJpbmc=) Четные и нечетные символы разделить https://pas1.ru/string-even-odd (/redirect.php? по разным строкам url=aHR0cHM6Ly9wYXMxLnJ1L3N0cmluZy1ldmVuLW9kZA==) https://pas1.ru/exchange-words (/redirect.php? Поменять слова местами url=aHR0cHM6Ly9wYXMxLnJ1L2V4Y2hhbmdlLXdvcmRz) Вывести слова строки в обратном https://pas1.ru/conversely-words (/redirect.php? порядке url=aHR0cHM6Ly9wYXMxLnJ1L2NvbnZlcnNlbHktd29yZHM=) Коллекции: массив, список значений, структура, соответствие Переворот строки Первый положительный элемент массива Распаковка массива Максимальный из отрицательных элементов поменять местами с последним элементом массива Найти два максимальных элемента массива Поменять местами минимальный и максимальный элементы массива Количество и сумма элементов массива, принадлежащих интервалу https://pas1.ru/array-first-positive (/redirect.php? url=aHR0cHM6Ly9wYXMxLnJ1L2FycmF5LWZpcnN0LXBvc2l0aXZl) https://pas1.ru/unpacking (/redirect.php? url=aHR0cHM6Ly9wYXMxLnJ1L3VucGFja2luZw==) https://pas1.ru/max-negative (/redirect.php? url=aHR0cHM6Ly9wYXMxLnJ1L21heC1uZWdhdGl2ZQ==) https://pas1.ru/two-max (/redirect.php? url=aHR0cHM6Ly9wYXMxLnJ1L3R3by1tYXg=) https://pas1.ru/min-max-exchange (/redirect.php? url=aHR0cHM6Ly9wYXMxLnJ1L21pbi1tYXgtZXhjaGFuZ2U=) https://pas1.ru/array-interval (/redirect.php? url=aHR0cHM6Ly9wYXMxLnJ1L2FycmF5LWludGVydmFs) https://pas1.ru/two-array (/redirect.php? url=aHR0cHM6Ly9wYXMxLnJ1L3R3by1hcnJheQ==) Сумма положительных элементов https://pas1.ru/array-sum-positive (/redirect.php? массива url=aHR0cHM6Ly9wYXMxLnJ1L2FycmF5LXN1bS1wb3NpdGl2ZQ==) Удаление элементов одномерного https://pas1.ru/deleting (/redirect.php? массива url=aHR0cHM6Ly9wYXMxLnJ1L2RlbGV0aW5n) https://pas1.ru/del-nonunic (/redirect.php? Удалить повторяющиеся url=aHR0cHM6Ly9wYXMxLnJ1L2RlbC1ub251bmlj) элементы из массива Сортировка через два массива Многомерные массивы Максимальные элементы столбцов матрицы Найти максимальный элемент диагонали https://pas1.ru/matrix-max-col (/redirect.php? url=aHR0cHM6Ly9wYXMxLnJ1L21hdHJpeC1tYXgtY29s) https://pas1.ru/diagonal-max (/redirect.php? url=aHR0cHM6Ly9wYXMxLnJ1L2RpYWdvbmFsLW1heA==) Поиск максимального элемента среди https://pas1.ru/minmaxmatrix (/redirect.php? минимальных элементов столбцов url=aHR0cHM6Ly9wYXMxLnJ1L21pbm1heG1hdHJpeA==) Отсортировать в матрице столбцы по https://pas1.ru/sorting-columns (/redirect.php? убыванию значений элементов в url=aHR0cHM6Ly9wYXMxLnJ1L3NvcnRpbmctY29sdW1ucw==) первой строке Теперь перебираемся на сторону сервера, в событие "ПриСозданииНаСервере". 1. разделение кода на клиентский и серверный, контекст процедуры, директивы компиляции 2. реквизиты формы как глобальные переменные, временное хранилище, ДанныеФормыСтруктура (функции РеквизитФормыВЗначение/ЗначениеВРеквизитФормы) 3. элементы формы: ПолеВвода, ПолеТаблицы, ПолеПереключателя, Надпись и т.д. 4. элементы формы: кнопка, командная панель 5. Команды формы, событие нажатия на кнопку. Типы данных, существующие на сервере: ТаблицаЗначений. 1. Представить матрицу в виде таблицы значений (3 строки, 3 колонки), отобразить на форме, по нажатию на кнопку считать данные таблицы в двухмерный массив. При открытии формы заполнить таблицу случайными значениями. Заполнять результирующий массив на сервере. Сообщать - на клиенте. 2. Вывести на форму матрицу (3;3) в виде таблицы; вектор (размерность 3), в виде списка значений; колонку матрицы в виде поля ввода и операцию (+,-,/,*) в виде поля со списком выбора. По нажатию на кнопку выполнить операцию между элементами указанной колонки матрицы и вектором, результат вывести через Сообщить Динамическое изменение размерности таблицы/вектора. Учимся добавлять элементы формы динамически. А также первое столкновение с табличным документом. 1. На предыдущую форму добавить поле ввода, задающее размерность матрицы/вектора. По нажатию на кнопку "Установить" формируем строки/колонки. По нажатию кнопки "Выполнить" выводит результат в виде табличного документа. Типы данных, существующие на сервере: ДеревоЗначений 1. осуществляем ввод графа в дерево значений (отображаемое на форме, одна колонка Значение) 2. По нажатию кнопки "Выполнить" выводим путь к узлу/узлам графа, содержащим минимальное значение (используем рекурсию) Зубодробительная задача на применение оператора Выполнить. Причем сначала про него можно не рассказывать и наблюдать попытки запрограммировать нескончаемое количество вариантов операций над разнотипными данными. Также задача полезна для понимания неявного приведения простых типов и для основных "интерфейсных" задач: проверка "на дурака"; обработка исключений; автосохранение данных формы. Больше того, если озвучить задачу как "создать ТЗ на построение универсального калькулятора", то можно пояснить основы сбора требований и уточнения ТЗ. 1. Универсальный калькулятор: на форме 3 реквизита (оператор1 (число, дата, строка, булево), оператор2 (число, дата, строка, булево), операция (строка)) По нажатию на кнопку в надпись на форме выводим результат операции (полученный через использование оператора "Выполнить" Перед выполнением проверяем заполненность реквизитов с помощью функции ПроверитьЗаполнение В случае возникновения исключения выводим сообщение: "Ошибочное значение реквизитов" (конструкция Попытка Исключение) Введённые значения сохраняем (Автосохранение реквизитов формы) Задача анкетирования 1. есть список вопросов, к каждому есть список ответов, один или несколько из них правильные и есть режим определения "правильности ответа" (либо указан хотя бы один верный ответ, либо необходимо выбрать все верные ответы) 2. на форме таблица со вопросами (колонки: поле - вопрос, поле выбора - варианты ответа, значение этого поля - ответ, флаг "ответ корректен") 3. при открытии формы в коде определяем список вопросов, к каждому - список ответов, отмечаем правильные и режим определения верного ответа 4. при начале выбора ответа заполняем список вариантов 5. при нажатии на кнопку "Закончить" заполняем колонку "ответ корректен" в зависимости от режим определения и выводим надпись с текстом "Из <> вопросов <> правильных" Сначала решаем задачу проектирования - определяемся с составом исходных данных и как их хранить. Здесь возможны варианты: две таблицы значений (первая - список вопросов, вторая - список возможных ответов к каждому вопросу), дерево значений (на первом уровне - вопросы, подчинённые строки - ответы) массив структур (элементами массива являются структуры вида (вопрос, массив ответов, массив индексов правильных ответов, режим определения правильности ответа) Задача хорошо себя показала, так как имеет развитие. Сначала исходные данные вопросовответов жестко кодировались при создании формы. Затем ставилась задача придумать формат хранения в файлах (Excel, json, xml, csv). И далее, необходимо было загрузить данные из файла в форму. При этом делался акцент на то, что исходные данных хранятся отдельно - уровень модели. Далее они выводятся в таблицу на форме - уровень представления. И, по окончанию работы с анкетой, пользовательский ввод сравнивается с исходными данными и выдается результат - уровень логики. Кроме этого, результат сначала выводился на форме, а потом - в виде табличного документа. Что мы имеем на данном этапе? Есть понимание общего синтаксиса языка, опыт работы с управляемой формой во внешней обработке, хранения данных в файлах и методы загрузки/ выгрузки этих данных. Что дальше - конечно объекты конфигурации. Вопросы, вынесенные на экзамен по этой части. Блок 1 что случится с непустой конфигурацией при подключении к хранилищу как запустить сеанс под определённым пользователем где находятся временные файлы, как очистить кэш (3 варианта) разница между соединением и сеансом, что такое спящий сеанс чем рабочий сервер отличается от рабочего процесса основные исполняемые файлы клиент-серверного варианта порт агента сервера 1с по умолчанию зачем нужен режим отладки для сервера 1с, как включить сколько конфигураций содержится в открытом конфигураторе Блок 2 свойства и способы представления алгоритма основные функции для работы со строками, как преобразовать строку с разделителем в массив основные функции для работы с числами и датами правила неявного преобразования типов как обратиться к результату выполнения процедуры, что такое передача параметра "по значению" режим использования модальности: настройка, основные функции и их немодальные аналоги коллекции, существующие на клиенте: список, назначение, основные методы Блок 3 основные события управляемой формы директивы компиляции в модуле управляемой формы что такое временное хранилище, как его использовать, на что влияет параметр УникальныйИдентификатор коллекции, существующие на сервере: основные методы и область применения ДанныеФормыСтруктура: что это и зачем используется, преобразование в значение и обратно общий алгоритм динамического добавления элементов на управляемую форму основные интерфейсные задачи формы и приёмы их решения методы загрузи/выгрузки данных в форматах Excel, xml, csv задача анкетирования: постановка, состав исходных данных, методы их хранения (3 варианта), концепция реализации. Продолжение во второй части (https://infostart.ru/public/848537/). Полная версия (/public/848525/) © ООО "Инфостарт", 2006-2018 www.infostart.ru (http://infostart.ru)