С Режим Конфигуратор

         

Передача значений точкам серий


Это самый важный метод диаграммы. Он устанавливает значение серии <НомерСерии> в точке <НомерТочки> равным <Значение> с возможностью последующей расшифровки. Все параметры, кроме параметра <Расшифровка> должны быть числовыми выражениями.

Синтаксис:

УстановитьЗначение(<НомерТочки>,<НомерСерии>,<Значение>,<Расшифровка>)

<Расшифровка> - параметр не обязательный, может иметь любой тип. Это значение, которое будет передано предопределенной процедуре ОбработкаЯчейкиТаблицы при двойном щелчке мышью на точке диаграммы. Так можно получать расшифровки точек диаграммы. Удобная штука!



Переменные в запросе


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

|ФИО = Справочник.Сотрудники.Наименование;

|Долж = Справочник.Сотрудники.Должность;

|ДатаПриема = Справочник.Сотрудники.ДатаПриема;

|ДатаУвольнения = Справочник.Сотрудники.ДатаУвольнения;

|";



Пересечение секций


Можно выводить область пересечения горизонтальной и вертикальной секций.

Пока СпрСотр.ПолучитьЭлемент()=1 Цикл

.......Таб.ВывестиСекцию("Сотр|ФИО");

.......Для Месяц = 1 По 12 Цикл

..............Таб.ПрисоединитьСекцию("Сотр|Месяц");

.......КонецЦикла;

КонецЦикла;

Таб.Показать();



Периодические реквизиты


Чтение и запись периодических реквизитов.

Установка даты выборки периодических реквизитов для всего справочника.



Периодические реквизиты


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

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

К периодическому реквизиту можно обращаться при помощи встроенного языка системы 1С:Предприятие — получать и записывать значение реквизита на указываемую дату. Однако, следует иметь в виду, что при получении значения реквизита на какую-то дату извлекается его значение на указанную или (если значение на указанную дату отсутствует) на ближайшую предыдущую дату, а запись значения периодического реквизита выполняется всегда на указанную дату.

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



Подбор


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

Синтаксик: ОткрытьПодбор(<Объект>,<ИмяФормы>,<КонтекстФормы>,<ФлагМножВыбора>,<ТекЗнач>)

ОткрытьПодбор("Справочник.Номенклатура","ФормаДляПодбора",Конт,1);

Процедура ОбработкаПодбора(Элемент,КонтФормы)

...НоваяСтрока();

...Товар = Элемент;

КонецПроцедуры

Эти процедуры и функции часто применяются при программировании на 1С, поэтому знать их обязательно!



Подбор из справочника


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



Подчиненные справочники


Между справочниками может быть установлено отношение подчиненности. В терминах реляционных баз данных, между таблицами устанавливается связь "один-ко-многим". В этом случае каждый элемент подчиненного справочника будет связан с одним из элементов справочника-владельца.Иногда можно сказать, что элементы одного справочника принадлежат элементам другого. Например, в системе может быть справочник НалоговыеЛьготы. Тогда его можно сделать подчиненным справочнику Сотрудники. Это означает, что "Сотрудник владеет налоговыми льготами".

Справочник Сотрудники

Справочник НалоговыеЛьготы

Иванов Иванов Иванов

Петров Петр Петрович

Светлов Михаил Петрович

Цветков Антон Васильевич



Подчиненные справочники


Справочник-владелец, это также справочник-хозяин.

Справочник-владелец и подчиненный справочник также называются связанными

справочниками.

В терминах реляционных баз данных справочник-владелец - это родительская таблица, подчиненный справочник - это дочерняя таблица.



Подсчет дней и часов по календарю


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

Дни = Календари.Служащие.Дней (НачДата, КонДата);

Подсчитаем количество часов для рабочих за заданный период с учетом выходных, праздников и укороченных предпраздничных дней:

Часы = Календари.Рабочие.Часов (НачДата, КонДата);

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



Поиск документа


ДокПрием.НайтиДокумент(Док);

ДокПрием.НайтиПоНомеру(123)



Поиск элемента


СпрСотр = СоздатьОбъект("Справочник.Сотрудники");

Если СпрСотр.НайтиЭлемент(ВыбрСотр)=1 Тогда

....//элемент становится текущим

....СпрСотр.Родитель = грпРаботающие;

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

КонецЕсли;



Поиск элемента в цикле


СпрСотр = СоздатьОбъект("Справочник.Сотрудники");

СпрСотр.ИспользоватьРодителя(грпРаботающие);

СпрСотр.ИспользоватьДату(РабочаяДата());

СпрСотр.ВыбратьЭлементы();

Пока СпрСотр.ПолучитьЭлемент()=1 Цикл

Если СпрСотр.Должность = длжПлотник Тогда

....Прервать; //нашли работающего плотника! выйти из цикла

КонецЕсли;

КонецЦикла;

<действия с найденным элементом>



Поиск операции


Синтаксис: НайтиОперацию([<Документ>])

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

Пример,

Опер = СоздатьОбъект("Операция");

Если Опер.НайтиОперацию(ВыбрДокумент)=1 Тогда

...<операция стала текущей>

КонецЕсли;



Поиск по коду


Если СпрСотр.НайтиПоКоду(1) = 1 Тогда

....ЭлементИлиГруппа = СпрСотр.ТекущийЭлемент();

КонецЕсли;



Поиск по наименованию


Если СпрСотр.НайтиПоНаименованию("Работающие")=1 Тогда

....грпРаботающие = СпрСотр.ТекущийЭлемент();

КонецЕсли;

Режим = 1; // 1 - поиск внутри установленного подчинения (родителя) (по умолч.); 0 - поиск во всем справочнике

ФлагПоиска = 0; //1 - найти точное соответствие; 0 - найти наименование по первым символам (по умолч)

СпрСотр.ИспользоватьРодителя(грпРаботающие);

Если СпрСотр.НайтиПоНаименованию("Ив",Режим,ФлагПоиска)=1 Тогда

....ПервыйРаботающийИв = СпрСотр.ТекущийЭлемент();

КонецЕсли;



Поиск по реквизиту


ИмяРекв = "Год"; //у реквизита должен быть установлен флажок Сортировка в Конфигураторе

ФлагГлобПоиска = 1; // 1- искать во всем справочнике, 0 - искать в пределах подчинения

Если СпрСотр.НайтиПоРеквизиту(ИмяРекв,1980,ФлагГлобПоиска)=1 Тогда

.....НайденныйЭлемент = СпрСотр.ТекущийЭлемент();

КонецЕсли;



Поиск в таблице значений


Синтаксис: НайтиЗначение(<Знач>,<Строка>,<Колонка>)

Возвращает число: 0 - значение не найдено; 1 - значение найдено

Если указан параметр <Строка>, то поиск производится только по заданной строке

Если указан параметр <Колонка>, то поиск производится только по заданной колонке

номстр = 0;

Если ТабЗнач.НайтиЗначение (10000, номстр, "Оклад") = 1 Тогда

...ТабЗнач.ПолучитьСтрокуПоНомеру(номстр);

...Сообщить(ТабЗнач.Сотрудник);

КонецЕсли;



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


//поиск по значению

Синтаксис: НайтиЗначение(<Знач>)

Возвращает номер позиции списка, в которой найдено значение или 0, если не найдено

номстр = СписокЗнач.НайтиЗначение (Сотрудник);

//проверка вхождения значения в список

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

//если передается элемент справочника, а в списке хранятся группы справочника

//тогда проверяется вхождение элемента справочника в группу

Если СписокЗнач.Принадлежит(Сотрудник)=1 Тогда

....<действия>

КонецЕсли;



Пометка на удаление


Для контроля ссылочной целостности базы данных удаляемые элементы всего лишь помечаются на удаление. Затем специальной командой меню Операции => "Удаление помеченных объектов" в монопольном режиме система 1С проконтролирует ссылочную целостность и физически удалит элементы из базы данных, если на них нет ссылок в других объектах.

СпрСотр = СоздатьОбъект("Справочник.Сотрудники");

СпрСотр.НайтиЭлемент(ВыбрСотрудник);

СпрСотр.Удалить(0); //пометка на удаление

//можно проверить, помечен ли элемент на удаление

//функция возвращает 1 - если помечен, 0 - если нет

Пометка = СпрСотр.ПометкаУдаления();

//можно снять пометку на удаление

СпрСотр.НайтиЭлемент(ВыбрСотрудник);

СпрСотр.СнятьПометкуУдаления();



Порядок сортировки


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

ПорядокКодов()

ПорядокНаименований()

ПорядокРеквизита(ИмяРекв) //у реквизита должен быть установлен флажок Сортировка в Конфигураторе

ОбратныйПорядок()

Например, ниже открывается выборка сотрудников, отсортированных по номерам по убыванию:

СпрСотр = СоздатьОбъект("Справочник.Сотрудники");

СпрСотр.ПорядокКодов();

СпрСотр.ОбратныйПорядок();

СпрСотр.ВыбратьЭлементы();



Последовательности


Последовательности документов - специальный механизм системы 1С, который позволяет поддерживать правильность итогов и данных проводок документов. Если документы при проведении использует данные бухгалтерских итогов или итогов регистров, то в случае, если задним числом каким-то образом меняются итоги, необходимо автоматически перепроводить все документы, которые использовали измененные итоги. Вот надзором за этим делом и занимаются Последовательности. При описании последовательности в конфигураторе, описывается, какие изменения регистров или бухгалтерских итогов по счетам будут влиять на последовательность, и какие документы входят в эту последовательность (это могут быть документы разного вида). Граница последовательности (ГП) - позиция последнего проведенного с "правильными" итогами документа. Если какие-то итоги изменяются задним числом, граница последовательности отодвигается назад на последний документ, при проведении которого использовались последние "нетронутые" итоги, а все документы, проведенные на основе изменившихся данных итогов, окажутся после границы последовательности. Восстановление последовательности - значит перепроведение всех документов, начиная от границы последовательности, заканчивая точкой актуальности или рабочей датой. Для восстановления последовательности в пользовательском режиме необходимо вызвать пункт Проведение документов… меню Операции.

Методы последовательностей записываются через точку после полного имени последовательности:

Последовательность.УчетТоваров.ПринадлежитПоследовательности(ТекДокумент);

Здесь "УчетТоваров" - имя последовательности, заданной в конфигурации.



Постановка задачи


Требуется создать простейшую систему складского учета для нескольких складов, которая позволит приходовать и отпускать материалы, а также формировать отчет по остаткам материалов.



Постановка задачи


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



Постановка задачи


Требуется создать простейшую почтовую систему для локальной сети предприятия. Система должна позволять отправлять письма и должен быть общий чат. У каждого пользователя может быть черный список его недругов, от которых он не желает получать письма. Нужно иметь возможность прицеплять к письму различные объекты базы 1С:Предприятие, например, товары, накладные и пр.



Постановка задачи


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



Постановка задачи


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

Конфигурация, по-видимому, должна содержать справочник Книги. У каждой книги есть уникальный библиотечный номер (код). Необходимо отметить, что может быть несколько экземпляров одного и того же произведения.

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

В программе должны фиксироваться следующие события:

Выдача книг читателю из библиотеки на определенный срок

Продление книги

Возврат книги читателем в библиотеку

Потеря книги читателем

Для каждого события в конфигурации необходимо предусмотреть соответствующий документ.

Правила работы библиотеки следующие:

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

Читатель берет книги обычно на месяц, но может сразу взять книгу на больший срок, если явно скажет об этом.

Читатель может продлевать книгу, т.е. сообщать о том, что он вернет ее позже указанного ранее срока.

При просрочке возврата книги, читатель получает предупреждение.

Когда предупреждений у читателя накапливается больше определенного предела, он лишается правом пользования библиотекой на 1 месяц.

При потере книги читатель лишается правом пользования библиотекой на 1 месяц, независимо от количества предупреждений.

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

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



Постановка задачи


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



Постановка задачи


Требуется создать средствами 1С игру "Реверси". Правила игры следующие.

Игра ведется на поле 8х8. Противники ходят по очереди. На каждом ходе игрок может поставить на поле одну фишку своего цвета. Фишки можно ставить только в том случае если одна или несколько фишек противника попадают в окружение. Окруженной считается фишка или ряд фишек если они ограничены с двух противоположных сторон по вертикали, горизонтали или диагонали фишками противника. Окруженные фишки меняют свой цвет. Если игрок не может выполнить ход, то право хода передается противнику. Игра продолжается до тех пор, пока хотя бы один из игроков может ходить. Побеждает тот, чьих фишек в конце игры оказывается больше.



Постановка задачи


Требуется создать средствами 1С игру "Охота на лис". Правила игры следующие.

Цель игры состоит в том, чтобы как можно быстрее найти всех лис на игровом поле.

Игровое поле состоит из информационого и игрового полей.

Игрок имеет возможность открыть любую клетку, щелкнув ее левой кнопкой мыши. Если в клетке находится лиса, то она показывается.

Если лисы нет, в клетке появится цифра, которая указывает, сколько лис находится на горизонтали, вертикали и диагоналях клетки. Игра заканчивается после поимки всех лис.



Постановка задачи


Требуется разработать автоматизированную систему, с помощью которой можно будет производить основную работу по кадровому учету в строительной организации.

Функции отдела кадров:

Прием на работу новых сотрудников

Увольнение сотрудников

Кадровое перемещение

Воинский учет

Оформление отпусков

Оформление больничных листов

Ведение штатного расписания

Отчетность

Более полное описание предметной области приведено здесь.



Постановка задачи


Требуется создать простейшую систему расчета зарплаты, удовлетворяющую следующим минимальным требованиям:

Минимальный кадровый учет (справочник Сотрудники, документы Прием, Перемещение, Увольнение, журнал Кадровые документы)

Две категории сотрудников: "Руководители и специалисты" (сидят на окладе), "Рабочие" (работают по тарифу)

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

Ввод премий сотрудникам.

Расчет подоходного налога с учетом налоговых льгот (стандартных вычетов).

Отчетность по зарплате (ведомость на выплату зарплаты, свод, расчетные листочки, лицевые счета)



Поведение сформированного отчета


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

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



Позиция документа


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

ПозДокумента = Док.ПолучитьПозицию(); // только чтение !

Позиция имеется только у записанного документа.



Правила перерасчета


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

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

Например, для организации правильного перерасчета доплат к основным начислениям следует в качестве ведущих видов расчета указать оклад, тариф, сдельная оплата), а в качестве зависимых видов расчета следует указать доплаты к окладу, доплаты к тарифу и т.д.



Предопределенные процедуры


вызываются системой 1С при наступлении определенных событий. Предопределенные процедуры вызываются системой 1С при наступлении определенных событий, поэтому они являются обработчиками событий. В версии 8.0 имя процедуры может быть любое, необязательно совпадающее с именем события. Кроме того, в версии 8.0 список событий для всех объектов был значительно расширен.



Префикс номера


Если вы используете распределенную базу или желаете, чтобы документы обозначали пользователя, который их создал, полезно пользоваться префиксами - одним или двумя символами, которые подставляются перед собственно номером документа, но при этом "входят" в номер. Не забывайте, что префикс должен быть строковым ("Сч-" или "01", или "1-"), а в свойствах документа должен быть установлен строковый тип номера.

Док = СоздатьОбъект("Документ.Счет");

ПрефДок = Лев(ИмяПользователя(),2);

Док.ПрефиксНомера(ПрефДок + "-");

Док.Новый();

Этот метод изменяет префикс по умолчанию, или возвращает текущее значение префикса, если использовать метод без параметра. А вот другая возможность:

Док = СоздатьОбъект("Документ.Счет");

ПрефДок = Лев(ИмяПользователя(),2);

Док.Новый();

Док.УстановитьНовыйНомер(ПрефДок + "-"); // такая нумерация работает очень корректно

В отличие от предыдущего этот метод устанавливает (а точнее переустанавливает введенный по умолчанию при исполнении метода Новый()) новый номер с указанным префиксом.



Приход товара


Экранная форма документа выглядит следующим образом:

При проведении документа производятся движения в регистре Остатки:

Процедура ОбработкаПроведения()

ВыбратьСтроки();

Пока ПолучитьСтроку()=1 Цикл

Регистр.Остатки.Товар = Товар;

Регистр.Остатки.Количество = Количество;

Регистр.Остатки.ДвижениеПриходВыполнить();

КонецЦикла;

КонецПроцедуры



Приходная накладная


10.2 (Материалы.Покупные полуфабрикаты и комплектующие изделия, конструкции и детали)

60 (Расчеты с поставщиками и подрядчиками)

19.3 (Налог на добавленную стоимость.Налог на добавленную стоимость по приобретенным материально-производственным запасам)

60 (Расчеты с поставщиками и подрядчиками)



Приходный ордер


50.1 (Касса.Касса организации)

62 (Расчеты с покупателями и заказчиками)



Простая процедура. После слова КонецПроцедуры


Процедура РассчитатьНалог(Сотрудник, НекаяДата)
КонецПроцедуры
Простая процедура. После слова КонецПроцедуры точка с запятой не нужна, потому что это не оператор, а операторная скобка
Функция РассчитатьНалог(Сотрудник, НекаяДата)
Возврат Налог;
КонецФункции
Функция должна обязательно возвращать результат.
Если Оклад > 10000 Тогда

......Результат = "Жить можно";

Иначе

......Результат = "Плохо";

КонецЕсли;
Простое условие. После слова КонецЕсли должна быть точка с запятой, потому что так заканчивается оператор Если
Результат = ?(Оклад > 10000, "Нормально","Плохо");
Сокращенное Если.
Если Оклад > 10000 Тогда

......Результат = "Жить можно";

ИначеЕсли Оклад > 5000 Тогда

......Результат = "Плохо";

Иначе

......Результат = "Так жить нельзя";

КонецЕсли;
Множественное условие. Если первое условие не выполняется, то проверяется второе. Если второе условие не выполняется, то третье. Если ни одно из условий не выполняется то выполняется блок Иначе.
Если (Оклад > 10000) И (КодКатегории = 2) Тогда
КонецЕсли;
В составном логическом выражении скобки обязательны! (в версии 8.0 необязательны)
Пока Номер <= 50 Цикл
КонецЦикла;
Простой цикл Пока (цикл с неизвестным числом повторений). После слова КонецЦикла должна быть точка с запятой, потому что так заканчивается оператор Пока
Для Номер = 1 По 50 Цикл
КонецЦикла;
Простой цикл Для (цикл с известным числом повторений).

В версии 8.0 есть еще цикл Для Каждого (for each).
Перейти ~метка;
<...>
~метка:
Так оформляются метки и оператор безусловного перехода (GOTO). Чем меньше в вашей программе будет меток, тем лучше.
Пока <условие> Цикл
Если <условие> Тогда

........Продолжить;

КонецЕсли;
КонецЦикла;
Оператор Продолжить передает управление в начало цикла.
Пока <условие> Цикл
Если <условие> Тогда

.........Прервать;


КонецЕсли;
КонецЦикла;
Оператор Прервать производит досрочный выход из цикла. Управление передается на операторы после цикла.
Перем Сотр;
Явное объявление переменной.
Номер = 1;
Переменные можно не объявлять явно. При первом присвоении значения создается новая переменная.
ФИО = Фамилия + " " + Имя + " " + Отчество;
Сложение строк (конкатенация)
НекаяДата = '01.01.2002';
Переменная, которая хранит дату.
Перем глТекущийПользователь Экспорт;
Объявление глобальной переменной в Глобальном модуле. Такие переменные доступны в любом месте конфигурации.
Попытка
а = 10 / 0;
Исключение
Предупреждение("Деление на ноль!");
КонецПопытки;
Обработка исключительных ситуаций.
Если во время выполнения операторов между словами Попытка и Исключение произошла ошибка, то управление передается на операторы между словами Исключение и КонецПопытки
Если ошибки не было, то управление передается на операторы после слова КонецПопытки.
//это комментарий
Так оформляются комментарии.
СпрСотр.ВыбратьЭлементы();
Вызов метода объекта производится как обычно, через точку.

Получить минимальное или максимальное из


ОкончатЦена = Окр(Цена*0.5, 2);
Округление.
Рублей = Цел(Цена);
Получить целую часть числа.
ОблНал = Макс(ОблНал-Льготы,0);

МинЗнач = Мин(значение1,значение2,значение3);
Получить минимальное или максимальное из значений. Можно передавать несколько параметров (больше двух)
Длина = СтрДлина("Иванов Иван Иванович");
Получить длину строки.
ФИО = СокрЛ(ФИО); //убрать пробелы слева

ФИО = СокрП(ФИО); //убрать пробелы справа

ФИО = СокрЛП(ФИО); //убрать пробелы слева и справа
Отсечение пробелов.
АБ = Лев("АБВГДЕ",2);

ГДЕ = Прав("АБВГДЕ",3);

БВГ = Сред("АБВГДЕ",2,3);
Вырезание подстроки слева, справа и из середины.
НомерСимвола = Найти(ФИО, " "); //найти позицию первого пробела
Поиск вхождения подстроки в строку.
НоваяСтрока = СтрЗаменить(ПрежняяСтрока," ", "_");
Замена одной подстроки на другую.
ФИОЗаглавнымиБуквами = ВРЕГ(ФИО)

ФИОстрочнымиБуквами = нрег(ФИО)
Изменение регистра букв.
СегодняВ1С = РабочаяДата(); //дата в параметрах 1С

СегодняВСистеме = ТекущаяДата(); //дата в операционной системе

СейчасВСистеме = ТекущееВремя();
Получить текущую дату и время.
НачалоМесяца = НачМесяца(НекаяДата);

КонецМесяца = КонМесяца(НекаяДата);

НачалоГода = НачГода(НекаяДата);

КонецГода = КонГода(НекаяДата);
Получение начала/конца месяца/года по некой дате.
Год = ДатаГод(ДатаРождения);

Месяц = ДатаМесяц(ДатаРождения);

Число = ДатаЧисло(ДатаРождения);
Выделить из даты год, месяц и число.
ДатаЧерезДваМесяца = ДобавитьМесяц(НекаяДата,2);
Прибавление к дате нескольких месяцев. Если число отрицательное, то отсчет ведется назад.
ПериодСтрокой = ПериодСтр(Дата1, Дата2);
Строковое представление периода, например "Январь 2002".
НекаяДата = Дата("01.01.2002");

Сообщение = "Месяц " + Строка(НомерМесяца);

НекоеЧисло = Число("5");
Преобразование типов.


СуммаСКопейками = Формат(Сумма,"Ч10.2-");
Форматирование чисел, сумм и дат. Очень много вариантов форматирования!
СуммаПрописью = Пропись(Сумма);
Сумма прописью. Часто применяется в денежных документах.
Если Вопрос("Вы уверены?","Да+Нет")="Да" Тогда
Вопрос пользователю. Можно спросить "Да+Нет", "Повтор+Отмена" и т.д.
Предупреждение("Случилась ошибка!");
Сообщениию пользователю в виде окошка. Программа приостанавливается, пока пользователь не нажмет ОК.
Сообщить("Документ проведен!");
Сообщение пользователю в окно сообщений. Программа работает дальше.
Состояние("Выполнено на " + Строка(Проценты) + "%");
Сообщение пользователю в строку статуса.
глТекущийПользователь = ИмяПользователя();
Получить имя текущего пользователя.
Права = НазваниеНабораПрав();
Получить название набора прав текущего пользователя.
ТекКаталогБазы = КаталогИБ();
Получить каталог, где находится информационная база.
НачатьТранзакцию();
Если <условие ошибки> Тогда

............ОтменитьТранзакцию();

КонецЕсли;
ЗафиксироватьТранзакцию();
Обработка транзакций. Транзакция - это совокупность действий, которая выполняется или вся целиком, или не выполняется ни одно из действий. Т.е. это единый блок действий, который или выполнен целиком, или не выполнен совсем. Транзакции необходимы для сохранения целостности базы данных.
СпрСотр = СоздатьОбъект("Справочник.Сотрудники");
Возвращает ссылку на объект.
Если ТипЗначенияСтр(Параметр)="Справочник" Тогда
Определяет тип значения.

ТекстДок.Открыть("catalog.txt");


ТекстДок = СоздатьОбъект("Текст");

ТекстДок.Открыть("catalog.txt");

ТекстДок.ЗаменитьСтроку(52, "Установка оборудования......" + Стоимость);

ТекстДок.ВставитьСтроку(53, "Замена оборудования... ");

ТекстДок.УдалитьСтроку(10);

ТекстДок.ДобавитьСтроку("Конец файла");
ТекстДок2 = СоздатьОбъект("Текст");

ТекстДок2.Шаблон(1);
Для н = 1 По ТекстДок.КоличествоСтрок(1) Цикл

..........стр = ТекстДок.ПолучитьСтроку(н);

..........стр2 = "[н]" + стр;

.........ТекстДок2.ДобавитьСтроку(стр2);

КонецЦикла;

ТекстДок2.Записать("catalog2.txt");

ТекстДок2.ТолькоПросмотр(1);

ТекстДок2.Показать();

Пример автоматической процедуры восстановления последовательности


// получим границу последовательности

ПозицияНач = СформироватьПозициюДокумента (Последовательность.ОсновнаяПоследовательность.ПолучитьПозицию(), 1);

Док = СоздатьОбъект("Документ");

// отберем док-ты посл-ти "ОсновнаяПоследовательность"

Док.ВыбратьПоПоследовательности(ПозицияНач, ПолучитьПозициюТА(), "ОсновнаяПоследовательность");

Пока Док.ПолучитьДокумент() = 1 Цикл

Док.Провести(); // перепроводим документы

Сообщить("Восстановление последовательности "+Док);

КонецЦикла;



Пример использования диаграммы в 1С: Бухгалтерия


Процедура СформироватьДиаграмму(Диаграмма1)

// Блокируем обновление, пока обрабатываются данные

Диаграмма1.Обновление(0);

Диаграмма1.Заголовок = "Поступления от покупателей";

Диаграмма1.УстановитьИмяСерии(1, "Рубли");

Диаграмма1.АвтоУстановкаИменТочек(1);

// Заполним диаграмму значениями

БухИт = СоздатьОбъект("БухгалтерскиеИтоги");

Бухит.ВыполнитьЗапрос(НачКвартала(РабочаяДата()),

КонКвартала(РабочаяДата()),"60.1",,,1,"Неделя","С");

БухИт.ВыбратьПериоды();

А = 1;

// дебетовые обороты по счету 60.1 покажут поступления

// денег от покупателей

Пока БухИт.ПолучитьПериод() = 1 Цикл

Диаграмма1.УстановитьЗначение(А, 1, БухИт.ДО());

А = А +1;

КонецЦикла;

// после наполнения данными перерисовываем

Диаграмма1.Обновление(1);

КонецПроцедуры

Результат работы процедуры на рис.2:



Полный список предопределенных процедур


Предопределенные процедуры глобального модуля
ПриНачалеРаботыСистемы()

ПриЗавершенииРаботыСистемы()

ПриЗаписиКонстанты()

ПриЗаписиИстории()

ПриСменеРасчетногоПериода()
Модуль формы списка справочника
ПриОткрытии()

ПриЗакрытии()

ПриЗаписи()

ПриВводеСтроки()

ПриВыбореРодителя()

ПриВыбореВладельца()
Модуль формы элемента справочника
ВводНового()

ПриЗаписи()
Модуль журнала документов
ПриУстановкеИнтервала()

ПриУстановкеОтбора()
Модуль формы документа
ВводНового()

ВводНаОсновании()

ПриЗаписи()

ПриВводеСтроки()

ПриУдаленииСтроки()
Модуль документа
ОбработкаПроведения()

ОбработкаУдаленияПроведения()

АрхивироватьДокумент()
Модуль журнала расчетов
ПриУстановкеОтбора()

ПриИсправленииРезультата()

ПриВыбореВладельца()
Модуль вида расчета
ПровестиРасчет()
Модуль журнала операций
ПриУстановкеОтбора()

ПриУстановкеИнтервала()
Модуль формы операции
ВводНового()

ПриЗаписи()

ПриВводеСтроки()

ПриУдаленииСтроки()
Модуль журнала проводок
ПриУстановкеОтбора()

ПриУстановкеИнтервала()

ПриПоказеПроводокПоДокументу()
Предопределенные процедуры для Таблиц
ОбработкаЯчейкиТаблицы()

ПриВыбореЯчейкиТаблицы()
Модуль формы списка счетов
ПриВводеСтроки()

ПриВыбореРодителя()

ПриЗаписи()
Модуль формы счета
ВводНового()

ПриЗаписи()
Для организации подбора
ОбработкаПодбора()
Полный список предопределенных процедур и их параметров см. в Синтакс-помощнике.

Диаграмма предоставляет удобное графическое представление


Пример 1

//переместить все текстовые файлы (*.txt) из каталога информационной базы в каталог TXT.
ФС.УстТекКаталог(КаталогИБ());

ИмяФайла = "";

ИмяФайла = ФС.НайтиПервыйФайл("*.txt");

Если ИмяФайла <> "" Тогда

.... ФС.СоздатьКаталог("TXT");

.....ФС.КопироватьФайл(ИмяФайла,ФС.ТекКаталог() + "TXT" + ИмяФайла);

.....ФС.УдалитьФайл(ИмяФайла);

Пока 1=1 Цикл
ИмяФайла = " ";

.....ИмяФайла = ФС.НайтиСледующийФайл()

Если ИмяФайла <> "" Тогда

.....ФС.КопироватьФайл(ИмяФайла,ФС.ТекКаталог() + "TXT" + ИмяФайла);

.....ФС.УдалитьФайл(ИмяФайла);

Иначе

..... Прервать;

КонецЕсли;
КонецЦикла;

Пример 2

//выбрать файл с фотографией сотрудника
ИмяФайла = "";

ИмяКаталога = КаталогИБ();
Если ФС.ВыбратьФайлКартинки(0,ИмяФайла,ИмяКаталога,"Укажите файл с фотографией:",,20)=1 Тогда
ВремКартинка = СоздатьОбъект("Картинка");

ВремКартинка.Загрузить(ИмяКаталога + ИмяФайла);

КартинкаНаФорме.УстановитьКартинку(ВремКартинка);
КонецЕсли;
Диаграмма предоставляет удобное графическое представление некоторого набора данных, чаще всего результатов каких-либо изменений. 1С предоставляет собственный (надо сказать, приятный) инструмент такого графического представления - объект "Диаграмма". Область диаграммы состоит из нескольких частей: область построения (там создается рисунок), заголовка (надписи над рисунком), легенды (расшифровки меток серий). В диаграмме имеются серии (т.е. наборы значений) и точки, из которых состоят серии (см. рис.1).

Присоединить секцию


Присоединить секцию -- означает прицепить ее к таблице справа.

Таб.ВывестиСекцию("НомерПП");

Для Месяц = 1 По 12 Цикл

.......Таб.ПрисоединитьСекцию("Месяц");

КонецЦикла;

Таб.Показать()



Продукты


Кефир жирность 1.5% МПР-0342

6.90

9.32

шт.

Яблоки "Голден" ФРЯ-908

17.50

25

кг.

Теперь нажмем [Печать] в форме списка справочника. Это будет выглядеть примерно так. Любуемся результатом;

Полученную табличную печатную форму мы можем послать на принтер;

Выходим из 1С:Предприятия. Так как сохранить изменения в конфигураторе мы можем только если ВСЕ пользователи выйдут из программы 1С:Предприятие. Не вышедших можно найти, если воспользоваться Монитором, но и он ничего не покажет, если кто-то открыл окно для ввода имени пользователя и пароля и не вошел. Таких надо учить...

2.6 Продолжение работы с товарами.

У нас есть справочник номенклатуры. В нем у каждого товара мы указали основную единицу измерения. Но мы ведь можем работать и с большими количествами. Например мы можем продать ящик яблок, в ящике, к примеру, 25 кг. Или ящик с тарелками, где их 12 штук. Мы можем пользоваться и другими единицами, если их занесем, соответственно, как значения перечисления ЕдИзм. Это не возбраняется. Хорошо посмотреть "Общероссийский классификатор единиц измерения". Но вернемся к нашей программе. Мы пришли к выводу, что нам необходимо как-то указать, что товар может измеряться не только в базовой единице, но и в каких-то кратных ей других единицах измерения. Так яблоки у нас будут либо в килограммах, либо в ящиках по 25 кг., тарелки либо в штуках, либо в ящиках комплектом на дюжину персон, кефир либо в пакетах по 1 штуке, либо в ящиках по 15 штук пакетов.

Эта задача в 1С решается следующим способом. Мы заведем новый справочник подчиненный справочнику товаров. Подчиненность означает, что каждая запись справочника товаров может иметь, принадлежащие только ей, одну, либо несколько, либо вообще не иметь, записей в подчиненном справочнике. Тут неплохо ознакомится с теорией реляционных баз данных. Литературы по этому вопросу есть много. Например книги Баркера, любая книжка по MS Access для начинающих и т.д.

Опишем каким мы хотим видеть наш подчиненный справочник. Название ему дадим "Единицы". В нем должны быть перечислены единицы измерения товара, включая базовую, и коэффициенты пересчета этих единиц в базовую, для базовой это "1". Реализуем нашу идею.




Создаем новый справочник;

Идентификатор - "Единицы", Комментарий - "единицы измерения товара";

В интерфейс вставлять не будем, это служебный справочник;

[Готово]. Появилось окно свойств справочника;

ГЛАВНОЕ: В поле подчинен выбираем справочник "Номенклатура". Этим мы и указываем характер их отношений;



Количество уровней - 1, следовательно групп у нас не будет, и зачем?. Длина кода - 5, длина наименования - 0. Мы не будем использовать это поле за ненадобностью. Серии кодов в пределах подчинения, тип кода - текст, сюда мы будем заносить текстовое представление названия единицы измерения, основное представление - код (другого варианта и нет). Автоматическая нумерация и контроль уникальности нам не нужны;

Занесем два новых реквизита: Первый - "Ед", тип - П.ЕдИзм. Второй - "Коэффициент", тип Число 5.0, неотрицательный;

Редактировать будем в диалоге;

Создаем форму элемента;

Если Вы обратили внимание, предопределенное поле Наименование нам для выбора не предложили, это потому, что мы указали его длину = 0;

Расставим поля как-нибудь поудобнее, но можем оставить и так;

Поле ввода кода сделаем недоступным - сюда мы будем, как и договорились ранее, автоматически заносить строковое представление названия единицы измерения;

Пусть поле ввода "Коэффициент" у нас будет с кнопкой выбора - так симпатичнее;

В поле ввода "Ед" добавим в формулу процедуру Ед();

В модуле формы пишем код процедуры Ед():

Процедура Ед()

  Код=Строка(Ед);

// Здесь функцией Строка() мы получаем строковое

// представление значения перечисления

КонецПроцедуры

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

Процедура ВводНового()

  Ед=Владелец.ЕдИзм;

// А вот это важно. Здесь "Владелец" это указание на запись в справочнике



// "Номенклатура", которой будет принадлежать эта единица измерения

  Коэффициент=1;

  Код=Строка(Ед);

КонецПроцедуры

В 1С ссылки на реквизиты таблиц имеют такой же вид как и ссылки на атрибуты и методы объектов (через "."), а не как в VBA, где используется "!";

Для закрепления информации о ссылке "Владелец" внесем текстовое поле, которое в форме элемента будет нам выводить код и наименование товара-владельца:

В диалоге вставим из меню Вставить командой "Текст" текстовое поле;

В окошке свойств этого текста очистим поле "Заголовок";

На закладке "Дополнительно" введем формулу "("+СокрЛП(Владелец.Код)+") "+СокрЛП(Владелец.Наименование)

Здесь СокрЛП() - это функция, которая удаляет пробелы в конце и в начале текстовой строки, "(" - текстовое выражение в коде в 1С заключают в кавычки, + в 1С служит и знаком конкатенации текстовых выражений;

На закладке "Шрифт" выберем какой нибудь шрифт и оформление по нашему вкусу;

Нажмем [ОК];

Разместим это текстовое поле где ни будь сверху формы;

Скопируем это текстовое поле в буфер обмена;

Форма элемента готова. Закроем ее;

Создадим форму списка;

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

Форму списка можно закрыть;

Сохраняем изменения и входим в 1С:Предприятие;

Войдем в справочник номенклатуры;

Найдем "Кефир" и установим на него курсор;

Из меню Действия командой "Подчиненный справочник" вызовем справочник "Единицы". Если бы у нас было несколько справочников подчиненных справочнику товаров, то нам пришлось бы выбирать из списка;

Введем новый элемент. Это будет элемент с базовой единицей. Ничего изменять не будем и сохраним его;

Теперь введем еще один элемент - с производной единицей измерения;

Единица Ц ящик (ящ.), коэффициент - 15;

В списке единиц у нас две записи;

Переключимся в справочник товаров и установим курсор на яблоках;



Возвращаемся в справочник единиц - он пуст. Две единицы, что мы только что ввели относятся к кефиру, соответственно в списке записей относящихся к яблокам их и не должно быть;

Введем аналогичным образом две записи для яблок: килограмм (кг.) коэффициент - 1, ящик (ящ.) коэффициент - 25;

Для остальных товаров внесем записи, как было сказано в начале главы. Обратите внимание, мы не можем создать подчиненные записи к элементу типа группа;

Разместив на экране рядом справочники товаров и единиц и переходя курсором по записям о товарах, мы можем видеть как в справочнике единиц меняются наборы записей;

Закроем справочник товаров. Установим курсор в справочнике единиц на любой записи;

Через меню Действия выполним команду "Иерархический список";

В справочнике единиц стало видно сразу множество записей;

Переходя по ним курсором, мы видим как меняется содержание текстового поля вверху списка, где мы указали выводить код и наименование владельца;

Остановимся на какой либо из записей;

Через меню Действия выполним команду "Иерархический список";

Снова в списке остались только записи относящиеся к какому-то одному товару;

Через меню Действия выполним команду "Справочник-владелец";

Открылся справочник товаров. Курсор в нем установился на том товаре, который являлся владельцем текущей единицы измерения;

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

Закроем 1С:Предприятие.



Создаем новый справочник;

Идентификатор - "Единицы", Комментарий - "единицы измерения товара";

В интерфейс вставлять не будем, это служебный справочник;

[Готово]. Появилось окно свойств справочника;

ГЛАВНОЕ: В поле подчинен выбираем справочник "Номенклатура". Этим мы и указываем характер их отношений;



Количество уровней - 1, следовательно групп у нас не будет, и зачем?. Длина кода - 5, длина наименования - 0. Мы не будем использовать это поле за ненадобностью. Серии кодов в пределах подчинения, тип кода - текст, сюда мы будем заносить текстовое представление названия единицы измерения, основное представление - код (другого варианта и нет). Автоматическая нумерация и контроль уникальности нам не нужны;

Занесем два новых реквизита: Первый - "Ед", тип - П.ЕдИзм. Второй - "Коэффициент", тип Число 5.0, неотрицательный;

Редактировать будем в диалоге;

Создаем форму элемента;

Если Вы обратили внимание, предопределенное поле Наименование нам для выбора не предложили, это потому, что мы указали его длину = 0;

Расставим поля как-нибудь поудобнее, но можем оставить и так;

Поле ввода кода сделаем недоступным - сюда мы будем, как и договорились ранее, автоматически заносить строковое представление названия единицы измерения;

Пусть поле ввода "Коэффициент" у нас будет с кнопкой выбора - так симпатичнее;

В поле ввода "Ед" добавим в формулу процедуру Ед();

В модуле формы пишем код процедуры Ед():

Процедура Ед()

  Код=Строка(Ед);

// Здесь функцией Строка() мы получаем строковое

// представление значения перечисления

КонецПроцедуры

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

Процедура ВводНового()

  Ед=Владелец.ЕдИзм;

// А вот это важно. Здесь "Владелец" это указание на запись в справочнике