Где обучаться программам 1С?

У фирмы 1С есть сеть центров сертифицированного обучения. Но для тех, кто хочет пройти обучение в удобное для себя время по сравнительно небольшим ценам и при этом гарантированно получить ответы на поставленные вопросы, такая возможность сейчас тоже имеется. Столкнулся с системой дистанционного обучения. Очень удобно. Материал подается в виде коротких видео-уроков длительностью 5-12 минут. Есть возможность вернуться к ранее пройденному материалу. По многим курсам в комплект учебных материалов входит пособие в электронном виде.

 

Дистанционные курсы "Курсы по 1С РФ" предлагают очень много бесплатных, но очень ценных материалов, в том числе книга (2098 страниц) по 1С:Бухгалтерии 8 (редакции 3.0)  в формате PDF. Обильно иллюстрированная. Удобно загрузить в планшет или электронную книгу и изучать в любое время, в любом месте и в любой обстановке. 

 

Я изучал базовый курс "Профессиональное программирование в 1С:Предприятии". Курс очень объемный, с массой дополнительных материалов. Успешно выполнившим все практические задания присылается рекомендательное письмо от основателей курсов. Я кратко конспектировал полученные знания. Могу представить отрывок из конспекта:

 

Документы.

Документы предназначены для регистрации событий хозяйственной деятельности (поступление и реализация товаров, поступление и расход денежных средств). По своей сути, документы в базе данных – это аналоги соответствующих бумажных документов. Хотя, некоторые документы управленческого учета могут создаваться независимо (например, оформление в базе мелких контактов с клиентом).

Ключевыми свойствами документа являются номер и дата, именно по ним осуществляется связь между бумажными документами и их аналогами. Дата документа содержит дату и время с точностью до секунды. Она позволяет отслеживать остатки товара на момент совершения хозяйственной операции и определять возможность проведения документа. Возможность проведения – это важное свойство документа, заключающееся в способности изменять состояние учета. Не проведённый документ, по сути, является черновиком. Документ может быть помечен на удаление. Тип данных «ДокументСсылка» может использоваться в других объектах конфигурации для определения значения реквизита «Партия». Номер, дата, пометка удаления, ссылка и отметка о проведении являются стандартными реквизитами, обязательными для любого документа.

Идентификация документов на временной оси

Для точной идентификации документа на временной оси помимо даты используется еще и ссылка на документ, т.к. в одну секунду могут быть оформлены несколько документов.  Так, при большом потоке документов, каждому последующему документу при оперативном проведении (на текущий момент) для удобства автоматически присваивается время на секунду больше, чем предыдущему, если документы проводились почти одномоментно. Однако в результате целое скопление документов может быть оформлено с отметкой последней секунды суток. Комбинация данных «Дата + Ссылка» называется «Моментом времени». Момент времени – это специальный тип данных. Данные этого типа можно сравнивать  между собой по величине.  Для определения момента времени существует одноименный метод МоментВремени().

По умолчанию для вновь вводимых документов платформа сначала устанавливает текущую дату, а время имеет нулевую отметку. Присваивание текущего времени производится в момент записи документа. В момент проведения (повторного проведения) оперативно проводимого документа (т.е. сегодняшней датой) время вновь уточняется (определяется новое значение текущего времени). Это поведение системы следует учитывать при корректировке документов. Так как может сложиться ситуация, что из-за внесенных исправлений в базе документ поступления будет иметь время больше документа реализации. Тогда, при необходимости повторного проведения документа реализации через несколько дней, он может не провестись из-за отсутствия остатков товара на момент времени, установленный в документе.

Поведение системы по присвоению времени определяется в свойстве формы документа «Автовремя» (см. рис. 1), которое по умолчанию выставлено в значение «Текущее или последним». На практике это значение является наиболее применимым. Если дата документа устанавливается интерактивно и не равна текущей дате (например, из предыдущего периода), то в момент записи присваивается самая последняя отметка времени на указанную дату. Ко времени последнего документа любого вида добавляется секунда. При этом максимальное время -23.59.59. Если документов на данную дату не было, то присваивается время 12.00.

Проверка заполнения и значение заполнения

Помимо стандартных реквизитов, остальные реквизиты шапки документа, табличные части и реквизиты табличных частей разработчик определяет самостоятельно. Количество табличных частей и реквизитов может быть неограниченным. Разработчик имеет возможность определять также такие свойства реквизитов и табличных частей, как «Проверка заполнения» и «Значение заполнения» (значение по умолчанию для реквизитов шапки). Если требуется осуществлять проверку заполнения, то соответствующему свойству следует установить значение «Выдавать ошибку» (см. рис. 2). В дальнейшем в процедуре «ОбработкаПроверкиЗаполнения» выдачу ошибки можно отменить, однако соответствующее поле на форме все равно будет подчеркнуто красным пунктиром (предупреждение об обязательности заполнения). Для табличных частей существует стандартный реквизит «Номер строки».

Нумерация документов

Номера документам могут присваиваться как автоматически, так и вручную. Для документов существует специальное свойство «Автонумерация» (тип значения Булево). Кроме того можно присваивать такие свойства для нумерации документов, как «Контроль уникальности», «Тип номера» (строковый или числовой) и длина номера (см. рис. 3). Строковый тип позволяет указывать для номеров префикс, с помощью которого можно разграничить документы разных юридических лиц. Для установки префикса используется процедура «ПриУстановкеНовогоНомера» в модуле объекта. Существует также свойство «Периодичность», которое принимает значения: непериодический, в пределах года (применяется наиболее часто), месяца, дня. По истечении указанного периода нумерация начинается заново. Для обеспечения сквозной нумерации документов разного вида создается и используется общий нумератор, который выбирается в строке «Нумератор».

Проведение документов

При проведении документы могут формировать движения по регистрам, которые в свою очередь являются основанием для отчетов. Таким образом, проведенный документ может влиять на финансовый результат.  Однако следует отметить, что существуют документы, которые при проведении не формируют движений ни в одном из регистров. С другой стороны, бывают ситуации, когда не проведенный (сохраненный) документ формирует движения по регистрам. Наиболее универсальный способ просмотреть движения по регистру – это выбрать его через Главное меню/ «Все функции». Самый удобный – из панели навигации самого документа (если разработчик позаботился об этом).

Процедура «ОбработкаПроведения» располагается в модуле объекта документа. В ней разработчик описывает алгоритмы формирования движений и их записи в регистры. У данной процедуры есть два параметра «Отказ» и «Режим». При установке параметра «Отказ» в значение «Истина» проведение не выполняется. С помощью параметра «Режим» определяется оперативный или неоперативный режим проведения документа. Оперативное проведение – проведение в реальном текущем времени, а не задним числом и не будущей датой.

Если документ проводится текущим моментом времени (на сегодняшнюю дату), то для любого документа списания (реализации) необходимо проверять: достаточно ли на складе списываемого товара. Для документа, проводимого задним числом, контроль остатков не целесообразен, так как регистрируется уже совершившийся факт и товар уже отгружен. Хотя дополнительная проверка остатков позволила бы вовремя выявлять ошибки пользователей, но при этом снизилась бы производительность системы. Как вариант, можно использовать периодический контроль отрицательных остатков с помощью отчетов или обработок, позволяющих корректировать отрицательные остатки.

Сама возможность проведения определяется в окне редактирования объекта (документа) на закладке «Движения». Документы, которые не влияют на финансовое состояние компании, не проводятся. Помимо разрешения на проведение документа, отдельно устанавливается разрешение на возможность оперативного проведения (см. рис.4).

Свойство «Удаление движений» имеет три значения: «Удалять автоматически», «Удалять автоматически при отмене проведения» и «Не удалять автоматически». По умолчанию используется значение «Удалять автоматически при отмене проведения», так как в платформе 8.2 повторное проведение документа проводится в режиме «замещения» старых записей новыми, и нет необходимости предварительного удаления старых записей. Кроме того, на данной закладке галочками отмечаются регистры, по которым документ может делать движения.

Наиболее простым способом создания движений по документу является использование «Конструктора движений». Алгоритм, построенный с помощью данного конструктора, далеко не всегда является оптимальным. Конструктор просто берет данные документа и записывает их в регистр, а в ряде случаев требуются более сложные действия. Однако сформированный алгоритм бывает удобно использовать в качестве начального каркаса.

Для вызова конструктора движений используется соответствующая кнопка (см. рис.4), при нажатии на которую система предлагает выбрать регистр, по которому следует сформировать движения (если до этого галочкой было отмечено более одного регистра). После выбора регистра откроется форма самого конструктора (см. рис.5). Далее следует выбрать тип движения регистра («Приход» или «Расход»), при необходимости определить табличную часть документа. После нажатия кнопки «Заполнить выражения» система произведет автоматическое сопоставление полей (в левом нижнем углу) и реквизитов (в правом верхнем) по идентификаторам (названиям). Кроме того, при активизации любого поля, система галочками помечает для самостоятельного выбора реквизиты, соответствующие по типу данных. В установленных соответствиях реквизиты можно преобразовать в выражения. Там, где соответствия не установлены вовсе, также можно использовать произвольное выражение. Если необходимо сформировать движения по нескольким регистрам, в конструкторе можно добавлять регистры и также делать по ним нужные настройки. После нажатия кнопки «ОК» указанные настройки будут трансформированы в программный код (см. рис.6). Следует иметь в виду, что после повторного использования конструктора движений изменения в коде, внесенные вручную, будут утеряны.

В первой строке кода внутри процедуры «Обработка проведения» «Движения» – это свойство объекта документ, которое содержит коллекцию наборов записей. Дальше (через точку) указывается имя регистра. После этого идет обращение к свойству «Записывать», которому присваивается значение «Истина». Внутри цикла, обращаясь к методу «Добавить», мы добавляем новую запись. Эта запись в данном случае названа «Движение» (по сути, название могло быть произвольным). Далее заполняются все данные для регистра. После чего принудительная запись не делается (метод «Записать» не вызывается). При завершении транзакции (после завершения обработки проведения) для всех регистров, у которых свойство «Записывать» определено как «Истина», система сама записывает добавленные данные.

Запись может вызываться и явно, но тогда свойству «Записывать» устанавливать значение «Истина» не следует, и в момент завершения транзакции запись в базу осуществляться не будет.

Регистры

Регистры позволяют повысить скорость построения отчетов и минимизировать зависимость производительности отчетов от объема хранимых в базе данных. Регистры хранят аналитические показатели хозяйственной деятельности предприятия в определенных разрезах, в том числе в разрезе времени.

Хранимые в регистрах показатели могут быть показателями остатков. Например, остатки товаров, они могут, как увеличиваться, так и уменьшатся. Это могут быть показатели оборотов. Например, объемы продаж, которые накапливаются только в одном направлении. Кроме того, это могут быть показатели состояния. Введенное значение может иметь любой тип данных и действовать до очередной смены состояния.

В соответствии с хранимыми показателями в системе созданы специальные регистры. А именно, регистры накопления (регистры остатков, регистры оборотов) и регистры сведений. Существуют еще другие виды регистров (регистры бухгалтерии и регистры расчета), которые относятся к соответствующим видам учета.

Работа с регистрами осуществляется на уровне наборов записей, т.е. набор – это минимальная порция по работе с записями. В принципе, в наборе может находиться и одна запись и ни одной записи. Важно понимать, что по умолчанию запись набора происходит в режиме замещения. Т.е. при добавлении записей в набор они заменяют все ранее существовавшие записи в наборе (если не было специального указания с помощью специальных параметров).

Чтобы сфокусироваться на некотором наборе записей производится отбор по регистратору. Исключение составляет независимый регистр сведений. У него нет регистратора, а отбор осуществляется по периоду и комбинации измерений.

Ключевые свойства, характерные для записи регистра

- период (за исключением непериодического регистра сведений), он может быть и больше текущей даты (например, при решении задач планирования);

- регистратор (кроме независимого регистра сведений);

- активность (неактивные записи исключаются из итогов), данное свойство устанавливается сразу для всех записей набора;

- номер строки (кроме независимого регистра сведений), соответствует порядковому номеру записи в наборе;

- вид движения (для регистров накопления с видом «Остатки») «Приход» или «Расход»; в принципе, для регистров с видом «Обороты» запись отрицательных значений ресурсов тоже возможна (например, при отражении возвратов покупателя в регистре продаж), но при этом вид движения не задается.

Идентификация записей в регистре

Для идентификации записи в регистре накопления служит регистратор и номер строки (порядковый номер записи в наборе). Однако следует иметь в виду, что при повторном проведении документа номер строки может измениться. В регистре сведений запись идентифицируется по периоду, регистратору и всему набору измерений.

Для регистров накопления разработчик определяет измерения, ресурсы и реквизиты. Порядок измерений влияет на быстродействие получения данных. Отличительной особенностью реквизитов от измерений является то, что в разрезе реквизитов не ведется учет суммарных показателей. Реквизит - это некая характеристика, которая может присутствовать не во всех движениях документа. Минимально у регистра накопления должен быть хотя бы один ресурс (имеет числовой тип данных) и должен быть задан хотя бы один документ в качестве регистратора.

Представление регистров в базе данных

В базе любой регистр накопления содержит таблицу движений, которая содержит все записи и таблицу итогов, которая содержит итоги в разрезе всех измерений и в явном виде пользователю не выводится. Итоги рассчитаны помесячно. Для получения необходимого результата, значения за не рассчитанный период дополняются из таблицы движений. Записи с нулевыми значениями ресурсов в таблице итогов не хранятся. Это свойство препятствует необоснованному увеличению базы данных. Кроме того для регистров накопления с видом остатки хранятся текущие актуальные итоги (на условную дату 01.11.3999). В итоговых таблицах оборотных регистров хранятся только итоги по оборотам каждого месяца.

Настройка итогов регистров

Следует отметить, что существует возможность настраивать итоги регистров в пользовательском режиме через Главное меню/Все функции/Стандартные/Управление итогами. Откроется форма «Управление итогами – часто использованные возможности». В правом нижнем углу формы существует гиперссылка, для открытия полных возможностей. После нажатия на гиперссылку в открывшейся форме «Управление итогами - полные возможности» для регистров можно включать и отключать итоги (в общем случае итоги должны быть включены). Также можно включать и отключать «Текущие итоги» для регистров остатков (не оборотов). Можно вручную устанавливать период рассчитанных итогов. И, что важно, есть возможность пересчета. В некоторых случаях пересчет позволяет исправить несогласованные данные в регистрах, связанные, например, со сбоями оборудования.

Режим «Разделение итогов» может использоваться при заполнении текущих итогов регистра остатков. Этот режим позволяет производить записи пользователей параллельно. При этом общее количество записей увеличивается, но взаимной блокировки пользователей не происходит. Режим используется в то время, когда чтение данных не происходит (например, запись данных при поступлении товаров). В случае чтения остатков блокировка производится обязательно.  При получении текущих остатков дополнительные записи предстоит просуммировать. Следует отметить, что при очередном пересчете итогов записи суммируются и лишние записи удаляются.

Существуют и программные методы работы с итогами (получить или установить использование итогов, получить или установить использование текущих итогов, получить или установить период рассчитанных итогов, получить или установить режим разделения итогов, пересчитать итоги).

Схема записей в регистры

Запись в регистр накопления осуществляется через набор записей. Запись можно производить не только из обработки проведения (это лишь частный случай), а из любого места конфигурации, где располагается программный код, компилируемый на сервере. Общая схема записей в регистры следующая:

- создание набора записей;

- установка отбора, в том числе для нового набора (в регистрах накопления отбор осуществляется по регистратору, т.е. ссылка на документ-регистратор уже должна существовать);

- создание внутри набора новых записей с помощью метода Добавить();

- запись набора в базу данных.

Варианты записи в регистр накопления:

- при проведении документа в обработке проведения (в модуле объекта);

- в другой процедуре модуля объекта, вызов которой располагается в соответствующем месте;

- предоставление возможностей пользователю по добавлению записей в пользовательском режиме;

- запись вне модуля объекта (с использованием свойств класса ДокументОбъект или напрямую используя набор записей регистра накопления);

- в модуле набора записей.

Запись движений при проведении документа

С обработкой проведения в модуле объекта Документ мы с вами уже сталкивались (см. выше). При этом мы напрямую обращаемся к свойствам и методам класса ДокументОбъект. Ключевым моментом является использование свойства Движения. Представляет оно коллекцию движений (проще говоря, те регистры, которые отмечены галочками на закладке  «Движения»). Мы уже говорили о том, что если свойство записывать установлено в «Истина», то система сама записывает добавленные данные при завершении транзакции. Однако у коллекции движений есть и специальный метод Записать() (например, Движения.Записать()). Процесс записи аналогичен тому, который автоматически производится в конце транзакции. При этом, чтобы избежать повторной записи, при использовании этого метода значение свойства «Записывать» будет автоматически определено как «Ложь». Особенности такого варианта записи в регистр накопления: в обработке проведения набор записей уже существует, и в явном виде его создавать не требуется, отбор по регистратору тоже уже установлен автоматически.

Запись движений при использовании другой процедуры модуля объекта

При использовании в модуле объекта экспортной процедуры, отличной от обработки проведения, для создания новой записи также достаточно обратиться к коллекции «Движения», указать из какого регистра требуется набор записей и вызвать метод Добавить().

Например: Движение = Движения.ТоварыНаСладах.Добавить();

Особенности данного метода:

-доступна коллекция «Движения»;

-запись в этом случае требуется осуществлять с использованием метода Записать() (например: Движения.ТоварыНаСкладах.Записать() );

- можно вызывать данную процедуру вне модуля объекта;

- по умолчанию транзакции в этом случае нет (при необходимости транзакция должна описываться явно);

- таким способом движения могут создаваться у любого записанного документа (в том числе не проведенного, например, если требуется предварительное резервирование товара).

Запись движений в пользовательском режиме

Для предоставления пользователю возможности по добавлению записей в регистр накопления в режиме 1С:Предприятие разработчиками создается специальный документ. В конфигураторе на закладке «Движения» свойству «Проведение» данного документа присваивается значение «Запретить», галочкой отмечаются регистры, которые будут редактироваться. Создание реквизитов не требуется. Создается управляемая форма документа, на которой с закладки «Реквизиты» на закладку «Элементы» следует перетащить из коллекции движений набор записей по соответствующему регистру. Такого рода документы требуют аккуратного обращения со стороны пользователей, а со стороны разработчиков может потребоваться реализация всевозможных проверок (в модуле объекта в процедуре «ПередЗаписью» заполнять поле период датой документа, в свойствах измерений самого регистра установить галочку «Запрет незаполненных значений»).

Запись движений вне модуля объекта (с использованием свойств класса ДокументОбъект).

При осуществлении записи в регистр вне модуля документа, обработчик события (нажатие на соответствующую кнопку) может вызываться, например, из формы элемента справочника. При этом обработчик и процедура записи в регистр могут располагаться в модуле формы элемента справочника. Предположим, что значением одного из реквизитов справочника является ссылка на документ. Эта ссылка будет передаваться из обработчика события в процедуру записи вместе со ссылкой на сам объект справочника (Например, справочник «Номенклатура» содержит реквизит «Партия» с типом данных «ДокументСсылка»). В процедуре ссылка на документ преобразуется в объект:

Документ = СсылкаНаДокумент.ПолучитьОбъект();

Далее определяется набор записей:

Набор = Документ.Движения.ТоварыНаСкладах;

Чтобы новые записи не заменяли ранее существующие, используется строка кода: Набор.Прочитать();

Далее в набор добавляются новые движения:

Движение = Набор.Добавить();

Следом определяются все свойства движения и производится запись набора:

Набор.Записать();

Запись движений вне модуля объекта (с использованием набора записей регистра накопления).

В этом случае набор записей (движений) создается самостоятельно, без обращения к документу:

Набор = Регистры накопления.ТоварыНаСкладах.СоздатьНаборЗаписей();

Необходимо установить отбор по регистратору:

Набор.Отбор.Регистратор.Значение = Документ; //(где Документ – это ссылка на объект Документ).

Теперь можно добавлять движения в набор и заполнять их свойства (определять значения измерений, ресурсов и реквизитов). В итоге набор следует записать. Чтобы не пропадали ранее созданные записи по регистратору, можно вместо использования метода Прочитать() перед добавлением движений, использовать специальный параметр метода Записать(). Этот параметр называется «Замещать», имееи тип данных Булево и по умолчанию установлено значение «Истина». Поэтому код записи может выглядеть следующим образом:

Набор.Записать(Ложь);

Запись движений из модуля набора записей.

В модуле набора создается экспортная процедура, которая может вызываться из вне. В данном модуле можно напрямую обращаться к свойствам и методам набора записей, в том числе к методу Добавить() и Записать().

Движение = Добавить();

В промежутке между добавлением и записью устанавливаются свойства движения. Не очевидные свойства должны передаваться при вызове функции через параметры. В итоге производится запись:

Записать(); или Записать(Ложь);

Следует отметить, что при использовании методов записи в регистры, минуя обработку проведения, разработчику следует позаботиться о  возможности повторного проведения (или отмены проведения) данного документа.

Ограничение считываемых данных по периоду

При получении необходимых данных из регистров накопления, можно ограничивать свой выбор по периоду. Период может определяться тремя типами данных: Дата (документа), МоментВремени (Дата + Ссылка) и Граница. В одну секунду может быть введено достаточно большое количество документов. При этом остатки необходимо получать именно на позицию данного документа (которая определяется моментом времени), а не на начало секунды.

Если необходимо получить остатки на конец месяца, то следует иметь в виду, что временем конца месяца является 23.59.59. Документы, введенные с таким временем, на период «конец месяца» отобраны не будут. Чтобы получить остатки на конец месяца, необходимо либо добавить одну секунду, либо использовать специальный тип данных «Граница», который позволяет включать граничное значение (последнюю секунду) и получать правильные остатки.

Для объектного способа получения данных код может выглядеть примерно так:

Граница = Новый Граница(КонецМесяца(Дата), ВидГраницы.Включая);

Отбор = Новый Структура(«Номенклатура», Товар);

Отбор.Вставить(«Склад», Склад);

ТаблицаЗначений = РегистрыНакопления.ТоварыНаСкладах.Остатки(Граница,Отбор);

Остаток = ТаблицаЗначений.Итог(«Количество»);

При составлении отчета в системе компоновки данных параметр «Период» будет вычисляться следующим образом:

ДобавитьКДате(КонецПериода(&Период, «Месяц»), «Секунда»,1)

 

Бесплатный хостинг uCoz