Габец А.П. Гончаров Д.И. 1С Предприятие 8.0. Простые примеры разработки

17,717 views

Published on

0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
17,717
On SlideShare
0
From Embeds
0
Number of Embeds
6
Actions
Shares
0
Downloads
67
Comments
0
Likes
1
Embeds 0
No embeds

No notes for slide

Габец А.П. Гончаров Д.И. 1С Предприятие 8.0. Простые примеры разработки

  1. 1. А.П. Габец, Д.И. Гончаров1С:Предприятие 8.0Простые примеры разработки Москва ООО «1С-Паблишинг» 2005
  2. 2. УДК 658.012.011.56:004.42ББК 65.29 Г12 Габец Андрей Петрович, Гончаров Дмитрий Игоревич Г12 1С:Предприятие 8.0. Простые примеры разработки, М.: ООО «1С-Паблишинг», 2005. - 420 с: ил. ISBN 5-9677-0056-0 Книга представляет собой справочное пособие, иллюстрирующее простые примеры разработки алгоритмов на платформе «1С:Предприятие 8.0». Издание будет полезно начинающим разработчикам, администраторам, у которых на предприятии внедряется система, и продвинутым пользователям, которые хотят самостоятельно дорабатывать прикладные решения. Книга содержит большое количество практических примеров, сгруппированных по тематике использования. Кроме этого книга содержит подробный указатель на используемые в примерах свойства, методы и события встроенного языка. Данная книга дополняет, но не заменяет штатную документацию к программному продукту, входящую в комплект поставки, и позволяет более эффективно использовать возможности программы. Под редакцией М.Г. Радченко. Право тиражирования и распространения книги принадлежит фирме "1С-Паблишинг". Полное или частичное копирование материалов книги без письменного разрешения фирмы "1С-Паблишинг" запрещается. 4601546 025616ISBN 5-9677-0056-0 ООО "1С-Па6лишингм, 2005
  3. 3. ОГЛАВЛЕНИЕВведение 16 Как работать с изданием? 17Примитивные типы, системные функции 18 (D Как явно указать нужную дату? 18 Как проверить дату на пустое значение? 18 Как сравнить две даты (дни)? 19 Как прибавить к дате день, месяц? 19 Как можно проверить тип значения переменной на равенство нужному? 20 Как очистить реквизит формы, имеющий ссылочный тип? 21 Как очистить значение, имеющее тип «Хранилище значения»? 21 Как проверить тип значения, помещенного в реквизит имеющий тип «Хранилище значения»? 21 Как сжать данные, помещаемые в хранилище значения? 22 Как предоставить пользователю возможность выбора значения составного типа? 23 Как применить округление при работе с вычисляемыми числовыми полями в запросе? 24 Как вывести многострочное предупреждение? 24 Как при выполнении обработки сообщить пользователю текущее время? 25 Как вывести число прописью по-русски, но без дробной части? 25 Как вывести число прописью по-русски, с указанием сотых в дробной части? 26 Как вывести прописью число килограммов с указанием дробной части в граммах? 27 Как долларовую сумму вывести прописью по-английски? 27 Как загрузить внешнюю компоненту? 27 Как выполнить команду операционной системы? 28 Как реализовать код процедуры в зависимости от режима выполнения (на клиенте, на сервере, во внешнем соединении) ? 29 Как при групповой обработке объектов реализовать стратегию «либо все, либо ничего»? 30 Как посчитать сумму по формуле сложного процента? 31Универсальные коллекции 32 Массив 32 (D В каких ситуациях обычно используются массивы? 32 ® Как создать массив? 32 ф Как создать многомерный массив? 33 ф Как добавить элементы в массив? 34
  4. 4. Оглавление Ф Как определить размер массива? 34 ф Как обратиться к элементу массива? 34 ® Как перебрать элементы массива? 35 ф Как удалить элемент массива? 36 ф Как удалить все элементы массива? 37 Как удалить повторяющиеся элементы массива? 37 Как скопировать массив? 38 Как проверить, что два массива идентичны? 39 В массив выгружены данные, содержащие наименования контрагентов. Как их отсортировать? 40 Есть массив, в который выгружены значения типа СправочникСсылка.Номенклатура. Как удалить все пустые значения массива? 41 Как получить массив номенклатурных позиций, использованных в табличных частях «Номенклатура» и «Тара» накладной? 42 Есть две таблицы значений. Как получить массив совпадающих имен колонок? 43 Как в запросе сделать отбор по нескольким вариантам заполнения реквизита типа «ПеречислениеСсылка»? 44 Как из регистра сведений «РасчетчикиЗарплатыОрганизации» получить в виде массива всех расчетчиков зарплаты определенного подразделения организации? 45 Структура 47 Ф В каких ситуациях обычно используются объекты типа «Структура»? 47 ф Как создать структуру? 47 ф Как добавить элементы в структуру? 48 Ф Как обратиться к элементу структуры? 48 ф Как перебрать элементы структуры? 49 ф Как удалить элемент структуры? 50 Как в структуре установить значение для элемента с определенным ключом? 50 Как получить в структуру многомерные данные? Как собрать информацию по установленным в форме журнала отборам? 51 Как определить, есть ли в структуре элемент с ключом «Контрагент», и если есть, но содержит пустое значение справочника или Неопределено — удалить этот элемент? 52 Как из табличной части «Товары» документа получить все строки, где значение реквизита «Цена» равно нулю, а значение реквизита «СтавкаНДС» равно значению «НДС 18» перечисления «СтавкиНДС»? 53 Как получить данные о текущей учетной политике бухгалтерского учета организации из периодического регистра сведений на заданную дату? 53 Как сформировать структуру названий реквизитов табличной части произвольного документа? 55 Как получить запросом данные табличной части документа, имея структуру названий реквизитов табличной части? 55 Соответствие 57
  5. 5. Оглавление ф В каких ситуациях обычно используются объекты типа «Соответствие»? 57 ф Как создать соответствие? 57 ф Как добавить элементы в соответствие? 57 ф Как обратиться к элементу соответствия? 58 Ф Как перебрать элементы соответствия? 58 ф Как удалить элемент соответствия? 59 Как получить данные из соответствия? 59 Как получить многоуровневое соответствие видов расчетов, обладающих базовыми видами расчетов? 60 Список значений, таблица значений, дерево значений 63 ф В каких ситуациях обычно используются списки значений, таблицы значений, дерево значений? 63 ф Как создать список значений? 64 ф Как добавить элементы в список значений? 64 ф Как найти элемент списка значений? 65 ф Как обратиться к элементу списка значений? 65 ф Как перебрать элементы списка значений? 66 ф Как удалить элемент списка значений? 66 ф Как создать таблицу значений и заполнить ее поля? 67 ф Как найти значение в таблице значений? 68 ® Как перебрать строки таблицы значений? 69 ф Как удалить строки (колонки) таблицы значений? 69 Как заполнить таблицу значений, если имена колонок содержатся в переменных? 71 Как заполнить всю колонку таблицы значений нужным значением? 71 Как таблицу значений «ТаблицаПолучатель» заполнить данными таблицы значений «ИсходнаяТаблица»? 72 Как добавить колонки к таблице значений «ТаблицаЗначений» с ограничениями по типу? 74 Как изменить тип значения колонки таблицы значений, полученной выгрузкой из запроса? 75 Как самостоятельно заполнить дерево значений? 76Прикладные объекты 78 Справочники 78 Ф Как создать элемент (группу) справочника? 78 ф Как найти элемент справочника? 80 ф Как удалить элемент справочника? 81 ф Как перебрать элементы справочника? 82 ф Как выбрать все элементы из определенной группы? 83 Ф Как перебрать элементы подчиненного справочника с помощью запроса? 85 Ф Как перебрать элементы подчиненного справочника с помощью выборки справочника? 86 ф Как открыть форму списка (элемента) справочника? 86
  6. 6. Оглавление ф Как добавить запись в табличную часть элемента справочника? 87 ф Как удалить строки из табличной части справочника? 87 Ф Как перебрать строки табличной части справочника? 88 Ф Как создать элемент в нужной группе? 89 Как узнать, есть ли у текущего элемента подчиненные? 90 Как узнать количество подчиненных элементов у выбранного элемента справочника? 91 Как узнать количество подчиненных элементов у выбранного элемента справочника, если количество подчиненных справочников больше чем один? 93 Как получить всех родителей выбранного элемента справочника? 94 Как получить запросом «полный» код элементов справочника, если тип кода - Строка? 96 Как получить все элементы справочника, содержащие в наименовании определенную подстроку, со всей иерархией, в которую они входят? 97 Как найти все элементы справочника, в которых не заполнен строковый реквизит? 98 Как перенести все элементы справочника «Контрагенты» из одной группы в другую? 99 Как организовать программный выбор элемента справочника? 100 Как сохранить фотографию сотрудника в справочнике «Сотрудники»? 102 Документы 104 ® Как создать новый документ? 104 ф Как найти документ? 104 Ф Как открыть форму документа? 105 ф Как изменить значение реквизита и записать документ? 106 Ф Как добавить строку в табличную часть документа, имея ссылку на документ? 107 ф Как удалить строки из табличной части документа? 107 ф Как перебрать строки документа? 108 ф Как выгрузить табличную часть документа? 108 ф Как посчитать итог в табличной части документа? 108 ф Как провести документ? 109 ф Как перебрать документы? 109 ф Как пометить на удаление все приходные накладные? 111 ф Как, имея ссылку на документ, создать в базе его копию? 111 ф Как, имея ссылку на документ, прочитать его движения по регистру? 112 Как определить, по каким регистрам документ выполнил движения? 113 Как в табличной части документа удалить строки с нулевым значением реквизита «Количество»? 115 Как очистить колонку «СтавкаНДС» в табличном поле «Товары» уже заполненного документа? 116 Как заполнить значения свойств нового документа на основании существующего? 117
  7. 7. Оглавление Как получить перечень приходных накладных, в которых не заполнены номенклатурные позиции? 118 Как на дату расходной накладной определить курс валюты управленческого учета? Валюта управленческого учета храниться в периодическом регистре сведений 119 Как из формы документа вызвать его неоперативное проведение? 120 Как в обработке проведения получить остатки, актуальные на позицию документа? 121 Как определить количество документов и количество разных значений реквизита в таблице записей документа? 122 В последовательность «ПартионныйУчет» добавлено измерение «Организация». Как теперь получить данные по границам последовательности для каждого значения этого измерения? 123Хранение сведений 124 ® Как добавить запись в непериодический независимый регистр сведений? 124 ф Как считать содержимое непериодического независимого регистра сведений? «СобственныеКонтрагенты»? 125 Ф Как удалить все записи из независимого регистра сведений? 126 ф Как удалить записи независимого регистра сведений с отбором по конкретной организации? 126 ф Как добавить запись в периодический независимый регистр сведений? 127 ф Как прочитать (изменить) записи в периодическом независимом регистре сведений? 128 ф Как удалить записи в периодическом независимом регистре сведений? 128 Как в периодическом независимом регистре сведений «КурсыВалют» удалить все записи по валютам с наименованиями «EUR» и «USD», период которых меньше 01 января 2005 года? 129 Как прочитать данные, актуальные на определенную дату, из регистра сведений «Курсы валют» с отбором по нескольким валютам (отбор по измерениям)? 131 Как поменять период у записей периодического независимого регистра, соответствующих ряду условий? 132 Как «сделать периодическим» реквизит уже заполненного справочника? 134 ф Как добавить записи в регистр сведений, подчиненный регистратору? 137 ф Как прочитать (изменить) записи в регистре сведений, подчиненном регистратору? 138 ф Как удалить записи из регистра сведений, подчиненного регистратору? 139Бухгалтерский учет 140 Ф Как в регистре бухгалтерии сформировать проводки? 140 ф Как получить остаток по счету? 142 ф Как получить обороты по счету? 143 ф Как получить остатки но счетам? 143
  8. 8. Оглавление Ф Как перенести остаток со счета на счет? 144 Как найти первый документ, приведший к появлению кредитового остатка на счете? 145 Как выбрать все счета, в аналитике которых присутствуют либо вид субконто «Контрагент», либо вид субконто «Договор»? 146 Как выбрать все счета, в аналитике которых присутствуют как вид субконто «Контрагент», так и вид субконто «Номенклатура»? 147 Как добавить новый вид субконто к счету? 147 Как из регистра бухгалтерии «Хозрасчетный» получить обороты только по валютным счетам? 149 Как выбрать в регистре бухгалтерии «Хозрасчетный» обороты по «60-ым» счетам, исключив внутренние обороты между ними? 151 Как реализовать метод «красного сторно» для регистра бухгалтерии? 152 Сложные периодические расчеты 154 (D Как получить сумму начисления по конкретному виду расчета указанному сотруднику в указанном периоде? 154 (D Как получить сумму всех начислений указанному сотруднику в указанном периоде? 155 Как получить таблицу перерасчетов по перерасчетам нескольких регистров? 156 Как для документа «НачислениеЗарплатыРаботникам» определить номера строк записей полностью вытесненных видов расчета? 157 Как сформировать расчетный листок сотрудника? 158 Как организовать сторнирование уже произведенных расчетов прошлых периодов? 159 Бизнес-процессы 162 Как определить бизнес процесс, в котором количество последовательных этапов определяется индивидуально на момент старта экземпляра процесса? 162 Как при работе с бизнес процессами отказаться от стандартного способа формирования задачи и сформировать ее программно? 167 Прочие прикладные объекты 169 ф Как, не открывая форму внешней обработки, выполнить ее процедуру для определенного объекта? 169 (D Как быстро получить информацию, по всем объектам, находящимся в компетенции конкретного менеджера (элемент справочника «Пользователи») по продажам? 169 Формы и элементы управления 172 Работа с формами 172 (D Как открыть форму документа? 172 Ф Как открыть форму внешней обработки? 172 (D Как отрыть форму отчета так, чтобы она не перекрывала собой ту форму, из которой она открыта? 173
  9. 9. Оглавление ® Как открыть форму отчета на весь экран? 173 Как из формы документа открыть форму списка данного документа, спозиционировавшись на нем же? 174 ® В документе есть реквизит «Контрагент». Как открыть форму подчиненного ему справочника «ДоговорыКонтрагентов»? 175 ф Как в форме отобразить картинку, сохраненную в реквизите справочника? 176 ф Как в журнале документов «УчетКадров» отобрать только документы «ПриемНаРаботу»? 176 ф Как узнать интервал дат в открытом текущем журнале? 177 Как при открытии справочника сделать отбор по контрагентам, входящим в список? 177 Как обеспечить, чтобы для выбора значения покупателя в расходной накладной справочник контрагенты открывался сразу с открытой группой «Покупатели»? 178Табличное поле 181 ф Как запретить пользователю изменять порядок следования колонок в табличном поле? 181 Ф Как запретить пользователю изменять любые настройки колонок табличного поля? 181 ф Как вывести информацию о том, какой отбор установлен в журнале документов? 182 ф Как в форме справочника установить курсор на элемент с известным наименованием? 182 ф Как в форме списка сделать отбор по значению реквизита? 183 ф Как запретить выдачу сообщения: «Введенные данные не отображены в списке, так как не соответствуют отбору» при добавлении новых элементов в справочник? 184 ф Как заполнить ячейку табличного поля данными? 185 Как изменить цвет фона ячейки табличного поля в зависимости от значения, выводимого в нее? 186 Как в табличное поле «ВыбранныеКонтрагенты» добавить новую колонку «ОсновнойДоговор», заполнить ее значения и дать возможность открытия этих значений? 187 Как задать список выбора для колонки «ВидДокумента» табличного поля? 189 Как обеспечить возможность отбора и сортировки данных по реквизитам, не отображаемым в табличном поле формы списка справочника? 190 Как реализовать перетаскивание между элементами управления? 190 Как вывести остатки на складах в списке номенклатуры? 193Другие элементы управления 194 ® В форме есть панель со страницами. Как разместить картинку на закладке? 194 Ф Как обеспечить, чтобы при открытии формы уже записанного элемента справочника «Контрагенты» активной была закладка «СчетаИДоговоры» панели «Панель»? 195 Как организовать выбор из нескольких списков документов для открытия? 195 Как можно организовать подстановку обращения к персоне? 197
  10. 10. Оглавление Как в командной панели создать подменю с кнопками? 198 Как созданной кнопке назначить «горячие клавиши»? 200 Как реализовать заполнение возможных значений поля выбора «ОбрабатываемаяТабличнаяЧасть» при заполнении поля ввода «ОбрабатываемыйДокумент»? 201 ф Если пользователь указал несколько дат в поле календаря - как их перебрать? 202 ф Как организовать работу с индикатором? 203 Как у элемента управления сменить источник данных? 205 ф Как задать представление даты, отображаемое в поле ввода по-умолчанию? 206 Ф Как вывести текст в поле картинки в том случае, если картинка не выбрана? 209 Ф Как открыть пользователю стандартный диалог выбора цвета? 211 Как заполнить список в форме данными запроса? 212 ф Как отобразить в форме файл графической схемы? 212 Интерфейсы, стили 213 ф Как задать различные стили 1С:Предприятия для различных категорий пользователей? 213 Есть список имен интерфейсов с пометками. Как сделать помеченные интерфейсы видимыми? 214 Как из формы обработки отключить глобальный обработчик ожиданий? 215 Запросы, отчеты 216 Запросы 216 Как получить данные из табличной части документов? 216 Как получить данные из табличной части документов и представить их в иерархическом виде? 217 Как подсчитать количество одинаковых элементов в выбираемых данных? 218 Как применять условия для отбора по значениям полей, вычисленных как результат агрегатной функции? 219 Как ограничить выборку из виртуальной таблицы? 220 Как просуммировать данные по одинаковым значениям одного из полей выборки? 221 Как получить только те записи, в которых значение определенного поля превышает указанное значение? 223 Как обратиться к подчиненным полям в запросе? 224 Как объединить результаты нескольких запросов? 225 Как выбрать данные из двух таблиц, удовлетворяющие определенному условию? 226 Как дополнить данные одной таблицы данными, выбранными из другой таблицы по определенному условию? 227 Как объединить данные из двух таблиц по определенному условию? 228 Как вывести некоторое значение вместо NULL в запросе? 23110
  11. 11. Оглавление Как вместе с данными некоторой таблицы получить общие итоги из этой же таблицы? 231 Как получить иерархические итоги по группе справочника? 233 Как по состоянию на заданную дату по регистру «ОстаткиНаСкладе» найти последний документ «ПоступлениеТоваровУслуг», по которому приходила номенклатура? 235 Как подсчитать количество записей с одинаковым значением некоторого поля? 237 Как в итоговых записях вывести количество различных записей? 239 Как узнать количество записей в результате запроса? 240 Как проверить достаточность остатков товаров на складах, указанных в документе? 240 Как в запросе осуществить отбор по значению перечисления? 243 Как получить курсы валют на две интересующие даты? 245 Как одним запросом получить таблицу расхождений курсов взаиморасчетов всех выписанных документов «ЗаказПокупателя» с официальным курсом? 246 Как написать запрос таким образом, чтобы на определенном уровне иерархии запроса считались одни итоговые функции, а на другом уровне другие? 248 Как получить перечень документов, приведших данные подчиненного периодического регистра сведений к определенному состоянию? 250 Как установить параметры запроса, если текст запроса заранее не известен? 252 Анализ данных 253 ф Как получить данные о товарах продаваемых вместе? 253 (D Как порекомендовать сопутствующие товары? 254 (D Как посмотреть, что будет покупаться в дальнейшем? 255Представление результатов отчетов 257 Табличный документ, текстовый документ 257 Как вывести результат запроса в табличный документ? 257 Как вывести данные в табличный документ с возможностью сворачивания и разворачивания данных по группировкам? 260 Как при выводе данных в табличный документ свернуть все выводимые группировки? 260 Как при выводе данных в табличный документ произвольно определить состав свернутых и развернутых группировок? 261 (D Как выгрузить результат запроса с показом иерархии? 261 (D Где и как можно увидеть макет, автоматически генерируемый построителем отчета? 262 Ф Как из построителя отчета передать данные в сводную таблицу? 263 Отчет формируется построителем отчета. Как убрать одну из колонок, поместив ее данные в расшифровку другой? 264 11
  12. 12. Оглавление Как сохранить настройки построителя отчета до следующего открытия формы отчета? 266 Как организовать показ примечаний в формируемом табличном документе? 268 ф Как обеспечить, чтобы при вводе на печать не печатались первая колонка и первая строка табличного документа «ДокументРезультат»? 271 Ф Как обеспечить фиксацию верхней части табличного документа, генерируемого построителем отчета, по срезу шапки таблицы? 271 ф Табличный документ формируется построителем отчета. Как при печати табличного документа обеспечить вывод шапки таблицы на каждой странице? 272 ф Как при выводе на печать «длинного» документа указать в колонтитулах страниц номер документа, дату и номер страницы? 273 ® Табличный документ формируется по макету, автоматически генерируемому построителем отчета. Как задать ориентацию страницы при печати? 273 Табличный документ формируется построителем отчета. Как для всех выводимых числовых показателей установить вывод без дробной части? 274 ф Как для построителя отчета совместить назначение своего макета и применение одного из стандартных макетов оформления? 276 Как при получении данных из запроса обойти только итоговые записи? 276 Как при получении данных из запроса обойти только иерархические итоговые записи? 278 ф Как вывести картинку в табличный документ? 279 Как вывести картинку в табличный документ без изменения макета? 280 Как работать со сводной таблицей? 280 Как программно разместить данные в сводной таблице и оформить ее? 282 Как создать печатную форму посредством текстового шаблона? 283 Диаграммы 287 ф Как заполнить диаграмму данными? 287 Как заполнить данными измерительную диаграмму? 289 ф Как вывести результат запроса в сводную диаграмму? 291 ф Как заполнить диаграмму Ганта данными? 293 Как связать интервалы диаграммы Ганта? 295 Как обработать интерактивное изменение интервалов диаграммы Ганта? 296 Как разместить непериодические метки в диаграмме Ганта? 298 Как выделить некоторые интервалы фона диаграммы Ганта? 300 Географическая схема 301 ф Как отобразить в форме файл географической схемы? 301 ф Как отобразить в форме макет географической схемы? 301 ф Как изменить масштаб географической схемы? 30112
  13. 13. Оглавление Как отобразить на географической схеме выбранный город? 302 Как использовать таблицу значений в качестве источника данных географической схемы? 303Администрирование 305 Запуск 1С:Предприятия из командной строки 305 © Как запустить 1С:Предприятие из командной строки? 305 Как из командной строки заставить 1С:Предприятие сделать выгрузку базы данных? 306 Как из командной строки обновить изменения текущей конфигурации в конфигурации базы данных? 306 Как выполнить тестирование и исправление информационной базы без проверки ссылочной целостности в автоматическом режиме? 307 Как выполнить проверку конфигурации в автоматическом режиме с выводом результатов проверки в файл? 307 Как сократить журнал регистрации программно? 309 Как выгрузить модули прикладного решения в виде текстовых файлов из командной строки? 309 Как загрузить в прикладное решение файлы справки, сохраненные в формате htm? 310 Разное 311 ф Как поменять значение рабочей даты? 311 Ф Как установить/снять монопольный режим? 311 ф Как внести запись в журнал регистрации? 312 ф Как получить данные о зарегистрированных пользователях информационной базы? 313 ф Как определить общую системную информацию? 314 Как программно добавить пользователя в информационную базу? 315 Как создать собственный лог-файл для записи результатов работы внешней обработки? 317 Как в форме отобразить список пользователей, которые работают с данной информационной базой? 318 Как выгрузить журнал регистрации в XML-формате? 318 Как принудительно завершить работу всех пользователей информационной базы в клиент-серверном варианте работы? 320Интеграция 321 Текстовый файл 321 ф Как выгрузить данные из справочника в текстовый файл? 321 ф Как загрузить данные из текстового файла? 322 Работа с текстом. Модель последовательного доступа 322 XML 324 ф Как из одной базы перенести документ в другую базу? 324 13
  14. 14. Оглавление Как можно сформировать XML-документ произвольной структуры? 326 Как сформировать XML-документ в строку? 327 Как можно обмениваться данными, используя XML- сериализацию через файлы других форматов? 328 Как можно загрузить XML документ произвольной структуры? 329 DBF-файлы 331 ф Как можно построить выгрузку-загрузку посредством файлов DBF? 331 Работа с HTML-документами 332 Ф Заполнение HTML-анкет 332 Работа с файлами 335 ф Как организовать диалог выбора текстового файла? 335 Ф Как прочитать информацию о файле? 336 ф Как получить список файлов в указанном каталоге? 336 Как переместить файл, выложенный на ftp к себе на локальный компьютер? 337 Как разделить большой файл на несколько файлов определенного размера? 337 Как поместить файлы в архив? 338 Как сравнить два текстовых файла? 338 Как организовать контроль формирования файла внешним приложением? 340 ActiveX 341 Ф Как использовать элементы управления ActiveX? 341 Макеты Active Document 343 Как сформировать новый договор на основании файла Microsoft Word? 343 Работа с Интернет 345 Работа с электронной почтой 345 Как организовать работу с электронной почтой через установленного почтового клиента? 345 Как организовать работу с почтой без установленного почтового клиента на компьютере пользователя? 346 Работа с файлами 349 Загрузка файлов по FTP 349 Выполнение HTTP запроса 350 Работа с СОМ-объектами 351 ф Как из одной базы 1С:Предприятие 8.0 перенести остатки товаров в другую базу, используя СОМ-соединение 351 Пример обращения к программе 1С:Предприятие 8.0 из модуля MS Excel через СОМ-соединение 353 ф Как организовать считывание данных из файлов *.xls? 355 Как запустить макрос, записанный в книге Microsoft Excel? 356 Как создать документ программы Microsoft Excel no оформлению, приведенному в другом документе? 357 ф Как выгрузить прайс-лист в документ программы Microsoft Word? 35914
  15. 15. Оглавление ф Как выполнить запрос к произвольной базе данных SQL? 362 Automation Client/Server (OLE) 363 ф Как из одной базы 1С:Предприятие 8.0 интерактивно заполнить документ в другой базе, используя Automation Client/Server (OLE)? 363 Как из таблицы Excel загрузить список номенклатуры в 1С:Предприятие с возможностью редактирования? 364 Обмен данными 366 <Э Как организовать работу удаленных складов? 366 Как при создании начального образа управлять тем, какие виды объектов перегружаются, а какие нет? 369 Как просмотреть объекты, для которых зарегистрированы изменения? 371 Как организовать обмен данными между произвольными конфигурациями 1С:Предприятие 8.0? 372 Как принудительно зарегистрировать изменения объектов? 379 WEB-расширение 380 ф Как в форме списка номенклатуры отменить все установленные отборы? 380 Как запретить перенос содержимого ячеек в форме списка расходных накладных? 382 Как открыть список расходных накладных с отбором, установленным по определенному складу? 384 Как добавить кнопку для ввода документа на основании? 388Указатель 389 15
  16. 16. Введение Идея написать эту книгу возникла у нас не случайно. Платформа системы «1С: Предприятие 8.0» специально ориентирована на то, что ее будут использовать не только как средство разработки, но и как инструмент быстрой доработки «на месте». В таких случаях специалисту важно в сжатые сроки решить конкретную задачу без долгого изучения всех возможностей системы. Как преподаватели учебного центра - мы, разумеется, только за то, чтобы специалист был изначально методологически и всесторонне «подкован». Но как практикующие разработчики, кроме всего прочего, зачастую и сами с большей радостью используем описанные примеры решения тех или иных задач, нежели пытаемся воссоздать их по памяти или по методическим материалам. Собственно говоря, именно с целью помочь в подобных ситуациях, и была написана эта книга. Основой ее создания послужил опыт преподавания «программистских курсов» по системе, работа на конкретных внедрениях и активное общение в форумах, посвященных данному кругу проблем. Фактически книга составлена в результате анализа того, какие задачи приходится решать чаще всего как начинающим, так и продвинутым разработчикам. При подборе примеров мы исходили из того, что спектр навыков и знаний специалистов, которые будут работать с данным изданием, может быть очень широк. Поэтому пусть Вас не смущают некоторые особо «бородатые» советы или, наоборот, - отсутствие подробного описания тех или иных технологий. А для тех, кто практически не знаком с системой «1С:Предприятие 8.0», материал самых простых примеров, объясняющих азы использования объектов и механизмов системы, помечен специальным значком ф. Кроме этого, поскольку работа с настоящим изданием не требует досконального чтения всего материала, по тексту намеренно вставлены повторы некоторых приемов или предостережений в тех случаях, когда это имеет смысл. Также следует заметить, что мы стремились сделать именно сборник простых примеров, поэтому некоторые материалы вошли в издание в «разрезанном» виде. То есть вместо сложных и громоздких «сквозных» примеров, мы старались представить отдельные части, «кирпичики», из которых впоследствии можно собрать желаемое.16
  17. 17. Введение Стиль изложения соответствует цели издания, поэтому материал предоставляется в форме вопросов и ответов, как, например, в следующем разделе:Как работать с изданием? Решение данного вопроса - многовариантно. Можно читать классическим способом. От начала до конца, помечая или закладывая понравившиеся места. Впоследствии, при возникновении конкретных вопросов, зрительная память или закладки помогут найти нужное решение. Можно читать выборочно. Любимая поговорка крутых программистов: «Мануал открывать надо уже в последний момент». То есть, проблема возникла - нашли раздел и попытались найти решение, или идею решения по аналогии. Но поговорку, на самом деле, мы совсем не одобряем! Можно вообще не читать. Не читать комментарии. А рассматривать издание как сборник «шпаргалок» кода, решающего те или иные вопросы. Остальные варианты использования издания или не очень нравятся авторам, или достаточно опасны. Например, не надо рассматривать эту книжку как замену полноценного обучения или работы с методическими материалами. 17
  18. 18. Примитивные типы, системные функции Как явно указать нужную дату? Для указания нужной даты можно пользоваться: • литералом вида ТГГГММДДччммсс встроенного языка; • встроенной функцией преобразования значений Дата(); • литералом типа Дата языка запросов. В таблице ниже приводится ряд возможностей явного указания даты при помощи встроенного языка: Выражение Значение результата (тип) 20050308 08.03.2005 0:00:00 (Дата) Дата(2005, 1,1) 01.01.2005 0:00:00 (Дата) Дата(1, 1, 1) 01.01.0001 0:00:00 (Дата) Дата(2005, 1, 1, 10, 29, 50) 01.01.2005 10:29:50 (Дата) В случае же, если в тексте запроса необходимо жестко указать некую дату - используется литерал ДАТАВРЕМЯ(). Например, поле со значением 01.01.2005 0:00:00 можно получить так:Как проверить дату на пустое значение? Значение типа Дата не бывает «пустым». Если в явном виде значение переменной типа Дата не задано, она будет иметь значение по умолчанию: начало первого дня первого месяца первого года (00 часов 00 минут 00 секунд). Поэтому проверку проще сделать так:18
  19. 19. Примитивные типы, системные функцииКак сравнить две даты (дни)? Точность данных типа Дата - до секунды. А сравнивать нужно именно дни. Тогда проще предварительно для сравниваемых дат воспользоваться функцией, которая возвращает, например, дату начала дня. А потом уже сравнивать полученные значения.Как прибавить к дате день, месяц? Так как тип Дата содержит дату и время с точностью до секунды, то для того чтобы к некоторой дате прибавить один день, нужно увеличить ее значение на количество секунд, содержащихся в одном дне: Для увеличения или уменьшения даты на некоторое количество месяцев, можно использовать: • функции работы со значением типа Дата во встроенном языке; • функции работы со значением типа Дата в запросах. В таблице ниже приводится ряд возможностей использования функций встроенного языка: Выражение Значение результата (тип) ДобавитьМесяц(Дата(2005, 1, 31), 1) 28.02.2005 0:00:00 (Дата) ДобавитьМесяц(Дата(2005, 2, 28), -1) 28.01.2005 0:00:00 (Дата) КонецМесяца(ДобавитьМесяц(Дата(2005, 2, 28), -1)) 31.01.2005 23:59:59 (Дата) 19
  20. 20. Примитивные типы, системные функции А вот пример функции, добавляющей количество дней к исходной дате при помощи запроса: В тексте запроса используем функцию ДОБАВИТЬКДАТЕ(). В качестве параметров ей необходимо передать исходную дату, тип добавляемых периодов (в нашем случае жестко прописали «День») и количество добавляемых периодов. Первый и последний параметры передали запросу, считав их из параметров (заголовка) нашей функции. Далее запрос выполняется, и из него получаем значение выходного поля по первой (и единственной) строке. Результаты выполнения вышеприведенной функции будут такими: ПолучитьДень(20052802, 10) = 10.03.2005 0:00:00 ПолучитьДень(20042802, 10) - 09.03.2004 0:00:00, поскольку 2004 год был високосным!Как можно проверить тип значенияпеременной на равенство нужному?20
  21. 21. Примитивные типы, системные функции ТипЗнч() - функция языка, возвращающая по значению его тип. Тип () - функция языка, возвращающая значение типа Тип по строковому имени типа.Как очистить реквизит формы, имеющийссылочный тип? К примеру, реквизит (имя «Товар») имеет тип СправочникСсылка.Номенклатура. Для очистки значения в связанном с ним элементе управления на форме, необходимо выполнить строку кода: То есть необходимо установить значение по умолчанию. А им, в данном случае, будет пустая ссылка на элемент справочника «Номенклатура».Как очистить значение, имеющее тип«Хранилище значения»? Очистить значение, записанное в реквизит или ресурс (имя «РеквизитХранилище») можно следующим образом:Как проверить тип значения, помещенного вреквизит имеющий тип «Хранилищезначения»? По причинам не связанным с возможностями системы 1С:Предприятие 8.0, в реквизит «Фотография» (тип ХранилищеЗначения) справочника «Сотрудники» помещалась либо Строка (преобразованная к типу ХранилищеЗначения), либо Картинка (преобразованная к типу ХранилищеЗначения). Как проверить, что было записано? 21
  22. 22. Примитивные типы, системные функции Проверку можно осуществить, используя следующие строки кода: Следует отметить, что в реквизит имеющий тип ХранилищеЗначения можно поместить только значение, имеющее тип ХранилищеЗначения. Работа со значением, помещенным в хранилище значения, может начаться только после его получения (метод Получить()). После получения значение «восстанавливает свой прежний тип». Если полученное значение равно Неопределено, то это означает, что никакое значение в реквизит не записывалось.Как сжать данные, помещаемые в хранилищезначения? Допустим, в реквизит «СопроводительнаяИнформация» (тип значения - Хранилище значения) помещается значение переменной «ПомещаемоеЗначение». Нужно обеспечить максимальное сжатие данных закладываемого значения. Вторым параметром конструктора хранилища значения передается объект СжатиеДанных. Он тоже получен соответствующим конструктором, с указанием максимального уровня сжатия.22
  23. 23. Примитивные типы, системные функцииКак предоставить пользователю возможностьвыбора значения составного типа? Для реализации этой задачи необходимо воспользоваться конструктором объекта ОписаниеТипов. А для него необходимо передавать в качестве параметра массив разрешенных для вводимого значения типов значения. Когда конструктором «ОписаниеВозможныхТипов» собрано - применяем функцию для вызова диалога ввода данных ВвестиЗначение(). Первым параметром функции необходимо указать доступную в данном модуле переменную для принятия введенного значения. Вторым - заголовок открываемого окна. Третьим - объект ОписаниеТипов. После ввода значения пользователем можно считать значение с переменной, переданной первым параметром. 23
  24. 24. Примитивные типы, системные функцииКак применить округление при работе свычисляемыми числовыми полями в запросе? Например, составляется запрос для оценок средней цены продажи по данным регистра «Продажи». Для получения данных с точностью до двух знаков после запятой текст запроса может выглядеть следующим образом: Источником для запроса является виртуальная таблица «РегистрНакопления.Продажи.Обороты», построенная по данным регистра в интервале между «ДатаНач» и «ДатаКон». В качестве выходных полей берем «Номенклатура» и результат деления значения полей источника «СтоимостьОборот» и «КоличествоОборот». Причем оператором ВЫРАЗИТЬ() тип последнего поля приводится к примитивному типу ЧИСЛО с определенным форматом (длинна 15, точность 2).Как вывести многострочное предупреждение? Переменные «Остаток» и «Зарезервировано» содержат значения, которые необходимо вывести в виде предупреждения. Кроме того, нужно еще вывести свободный остаток, вычисляемый по формуле: СвободныйОстаток = Остаток - Зарезервировано. Все это может быть выполнено следующим образом:24
  25. 25. Примитивные типы, системные функции Процедура глобального контекста Предупреждение() выводит на экран модальное окно предупреждения. Текст предупреждения передается первым параметром, вторым - таймаут, содержащий указание количества секунд, через которое окно самостоятельно закроется (если раньше его не закроет пользователь), третьим - указывается заголовок окна. Многострочность предупреждения в нашем примере осуществляется за счет добавления значения ПС (перевод строки) системного набора значений СИМВОЛЫ в текст предупреждения. Обратите внимание на вычисление свободного остатка в скобках - для обеспечения корректности выполнения арифметических действий и преобразования данных к типу Строка. Кроме того, хотелось бы предупредить об опасности попыток применения процедуры Предупреждение() в ходе проведения документов. Проведение документов выполняется в транзакции, поэтому использование каких либо интерфейсных решений, останавливающих работу системы, является совершенно неприемлемым. В подобных случаях лучше информировать пользователей посредством Сообщить().Как при выполнении обработки сообщитьпользователю текущее время? Метод ТекущаяДата() возвращает системную дату. Тип значения - Дата. В его значение входит и дата и время. Для получения представления только времени можно применяем функцию Формат().Как вывести число прописью по-русски, но бездробной части? Для этого используется функция ЧислоПрописью(). У нее могут быть указаны в качестве параметров: • преобразуемое число; • форматная строка; • параметры предмета исчисления (вид этой форматной строки определяется значением кода локализации). 25
  26. 26. Примитивные типы, системные функции Все возможные варианты локализаций описаны в файле Locllnfo.txt, входящем в комплект поставки программы. Для решения нашей задачи можно использовать следующий текст: В форматной строке указываем код локализации - Русский(Россия). В параметрах предмета исчисления показываем, что дробная часть не должна содержать ни одного разряда. Для ВыводимоеЧисло = 234,4 результат будет: «Двести тридцать четыре».Как вывести число прописью по-русски, суказанием сотых в дробной части? В параметрах предмета исчисления указываем возможные спряжения и склонения слов «целая» и «сотая», а так же количество разрядов дробной части, которые будут выводиться прописью. В форматной строке указываются код языка локализации и необходимость вывода дробной части прописью. Для ВыводимоеЧисло - 123,45 результат будет: «Сто двадцать три целых сорок пять сотых».26
  27. 27. Примитивные типы, системные функцииКак вывести прописью число килограммов суказанием дробной части в граммах? В отличие от вышеприведенного примера здесь предметами исчисления являются килограммы и граммы, а количество разрядов дробной части - три. Для ВыводимоеЧисло = 12,345 результат будет: «Двенадцать килограммов триста сорок пять граммов»Как долларовую сумму вывести прописью по-английски? Для ВыводимоеЧисло = 1 232,45 результат будет: «One thousand two hundreds thirty two dollars 45 cents»Какзагрузитьвнешнююкомпоненту? Загрузим компоненту, позволяющую работать со сканером штрих- кодов: 27
  28. 28. Примитивные типы, системные функции В случае ошибки загрузки компоненты или создания объекта возникает исключительная ситуация, которую рекомендуется отрабатывать с помощью конструкции Попытка.Как выполнить команду операционнойсистемы? К примеру, требуется удалить все файлы из указанного каталога. Для реализации данной возможности достаточно выполнить следующую строку кода: Для просмотра доступных команд можно в командной строке системы выполнить команду «help». Вызвать командную строку, можно выполнив строку кода: Кроме этого, для запуска внешнего приложения (или открытия файла с использованием ассоциированного с ним приложения) может быть использован метод глобального контекста ЗапуститьПриложение(). В этом случае запуск приложения будет осуществляться непосредственно, минуя командный интерпретатор. Например:28
  29. 29. Примитивные типы, системные функцииКак реализовать код процедуры в зависимостиот режима выполнения (на клиенте, насервере, во внешнем соединении) ? Если алгоритм должен выполняться по-разному в зависимости от места выполнения процедуры, то можно воспользоваться инструкциями препроцессора: 29
  30. 30. Примитивные типы, системные функцииКак при групповой обработке объектовреализовать стратегию «либо все, либоничего»? Требуется загрузить либо все данные по справочнику «Единицы измерения», либо, в случае возникновения ошибки, нужно чтобы ни один элемент не был записан. Для реализации стратегии «либо все, либо ничего» можно использовать следующий фрагмент кода: Если необходимо но мере накопления каких-либо признаков «искусственно» отменить действия, совершаемые в транзакции, можно использовать метод системы:МО
  31. 31. Примитивные типы, системные функцииКак посчитать сумму по формуле сложногопроцента? Возведение в степень реализуется функцией Pow(). Первым параметром передается основание степени, вторым - показатель степени. Замечание: кроме работы со степенями математический аппарат системы позволяет работать с корнями, логарифмами и тригонометрическими функциями. 31
  32. 32. Универсальные коллекцииМассив В каких ситуациях обычно используютсямассивы? Массив является универсальной коллекцией, то есть объектом, предназначенным для работы с временными наборами данных в течение сеанса работы пользователя. Необходимость в его использовании возникает, когда требуется работать с временным набором данных. Чаще всего это промежуточные операции обработки информации: подготовка отборов, реализация поиска, подготовка группирования, передача параметров и проч. Массивы могут создаваться оператором Новый или получаться в результате применения методов некоторых объектов. Как создать массив? Создание массивов чаще всего происходит посредством оператора Новый: где «СозданныйМассив» - имя переменной, которая будет содержать созданный объект типа Массив. После создания к массиву можно добавлять элементы (произвольное количество). Если же мы хотим создать массив с заранее определенной размерностью, это можно сделать так: В результате в переменной «СозданныйМассив» будет создан массив с десятью значениями. Для такого массива можно потом сразу обращаться к любому из десяти значений (начиная с нулевого по девятое) для записи или для чтения. А при необходимости к такому массиву можно так же еще добавлять новые элементы. Первый же добавленный элемент получит индекс «10».32
  33. 33. МассивКак создать многомерный массив? Массив является линеЀ

×