Меню


Курсы СтимулСправочникПолезные материалы1С:Предприятие 8.2РазработчикамПрактикум

1С:Предприятие 8.2 /
Разработчикам /
Практикум

Оглавление

Практикум 4. Создание периодического регистра сведений Цены

Создание функции РозничнаяЦена()

Автоматическое заполнение цены в документе ОказаниеУслуги

Перечисление. Реорганизация справочника Номенклатура

Изменение процедуры проведения документа ОказаниеУслуги

Создание регистра накопления СтоимостьМатериалов

Изменение процедуры проведения документа ОказаниеУслуги

Создание оборотного регистра накопления Продажи

Изменение процедуры проведения документа ОказаниеУслуги

 

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

1. Создайте новый объект конфигурацииРегистрСведений с именем Цены.

2. Установим периодичность этого регистра в пределах секунды.

і' Регистр сведений Цены Основные Данные Регистраторы Формы Макеты Подсистемы Права Интерфейсы Обмен данными Прочее Действия - Назад Имя: Синоним: Комментарий: Цены Цены Периодичность: В пределах секунды Режим записи: Независимый Основной отбор по периоду

3. На закладке Данные создадим измерение регистра Номенклатура с типом СправочникСсылка.Номенклатура. Укажем, что это измерение будет ведущим.

 ' Регистр сведений Цены 1 Основные 1 Данные =1 = =1 Ў Регистраторы Формы Макеты Подсистемы Права Интерфейсы Обмен данными Прочее В- и. Измерения НЕ п. .... Ресурсы Реквизиты Действия Назад Далее Свойства: Измерение Ў Основные: Имя Синоним Комментарий Номе

Свойство Ведущее имеет смысл использовать лишь тогда, когда измерение имеет тип ссылки на объект базы данных.

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

3. Создадим новый ресурс Цена, тип Число, длина 15, точность 2, неотрицательное.

і' Регистр сведений Цены Основные Данные Регистраторы Формы Макеты Измерені. ....І- Номе В Ресурсы В Цена Подсистемы Реквизит Права Интерфейсы Обмен данными Прочее Действия Назад Да/ Свойства: Ресурс ЕЕЭ Ў Основные: I х V Имя Цена Синоним Цена Комментарий

4. Запустим 1С:Предприятие в режиме отладки и посмотрим, как работает наш периодический регистр сведений Цена.

5. Выполните команду Операции в†’ Регистр сведений в†’ Цены.

6. Задайте стоимость услуг фирмы и розничные цены на материалы следующим образом:

 ' Список Цены _ п ДеЙСТВИЯ Ў 1{ UaV: [И Щ 13 Период Номенклатура Цена 131.07.2003 0:00:00 Т ранзистор Philips 2N2369 5,00 V А 31.03.2003 0:00:00 Строчный трансформатор Samsung 300,00 V А 31.03.2003 0:00:00 Строчный трансформатор GoldStar 400,00 V А 31.03.

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

них даты.

Теперь посмотрим, как можно использовать заданные нами цены в документе ОказаниеУслуги.

Создание функции РозничнаяЦена()

Сначала мы создадим функцию, которая будет возвращать нам актуальную розничную цену номенклатуры.

1. Откройте конфигуратор , в ветке Общие в†’ Общие модули создадим новый объект конфигурацииМодуль и назовем его РаботаСоСправочниками.

2. Поместим в нем следующий текст:

 Функция РозничнаяЦена АктуальнаяДата, ЭлементНоменклатуры Экспорт // Создать вспомогательный объект Отбор Отбор = Новый Структура Номенклатура , ЭлементНоменклатуры ; // Получить актуальные значения ресурсов регистра ЗначенияРесурсов = РегистрыСведений.Це

Для получения розничной цены мы будем передавать в функцию два парамерта:

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

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

Значения ресурсов возвращаются в объекте Структура, поэтому в следующей строке мы получаем искомую нами розничную цену, просто указав имя нужного нам ресурса регистра через точку(ЗначенияРесурсов.Цена).

Теперь проверим, как работает эта функция.

Автоматическое заполнение цены в документе ОказаниеУслуги

При создании документа ОказаниеУслуги нам необходимо обеспечить автоматическое заполнение поля Цена после того, как пользователь выберет услугу. Причем цена услуги должна определяться исходя из даты создаваемого документа.

1. Откройте форму ФормаДокумента в документе ОказаниеУслуги.

2. Откройте свойства поля ввода, расположенного в колонке Номенклатура, и внизу списка найдите событие ПриИзменении.

3. Нажмем на кнопку с лупой и в открывшейся заготовке обработчика события напишем следующий текст:

Е Процедура ПереченьНоменклатурыНоменклатураПриИзменении Элемент // Получить текущую строку табличной части СтрокаТабличнойЧасти = ЗлементыФормы.ПереченьНоменклатуры. ТекущиеДанные; // Установить цену СтрокаТабличнойЧасти.Цена = РаботаСоСправочниками. Розн

Прокомментируем содержимое обработчика.

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

Во второй мы устанавливаем полученную цену в документе, вызывая нашу процедуру РозничнаяЦена. Первым параметром мы передаем дату документа, на которую необходимо получить цену. Вторым параметром мы передаем ссылку, которую отображает элемент управления формой, вызвавшей это событие (Элемент.Значение), т.е. ссылку на элемент справочника Номенклатура.

В заключение мы вызываем нашу процедуру РассчитатьСумму из общего модуля РаботаСДокументами для того, чтобы она пересчитала итоговую сумму в строке нашего документа.

4. Запустите 1С:Предприятие в режиме отладки и откройте регистр сведений Цены. Для транзистора Рhilips добавим следующим числом новую цену:

 ' Список Цены _ п Действия м 71 • 8Й Период Номенклатура Цена /Ч 31.07.2008 0:00:00 Т ранзистор Philips 2N2369 5,00 01.08.2008 0:00:00 Т ранзистор Philips 2N2369 7,00 v

5. Теперь откроем документ ОказаниеУслуги №– 1. Этим документом мы как раз «израсходовали» два таких транзистора.

Установим дату документа равной той дате, когда было задано первое значение цены транзистора, и повторим выбор транзистора в колонке Номенклатура табличной части документа. Автоматически установится первое значение цены.

Оказание услуги: Оказание услуги от 31...: _ п Перейти Номер: 000000001 Дата: 31.07.2003 0:00:00 Ш Склад: Основной . .. х Клиент: И ванов М ихаил Ю рьевич . .. х М астер: Гусаков Н иколай Дмитриевич в1 І Ы ЇВ мок І І N Номенклатура Количество Цена Сумма 1

Теперь изменим дату документа на «правильную» (т.е. ту, которая была) и снова повторим выбор транзистора. Будет установлено новое значение цены:

Оказание услуги: Оказание услуги ІІІІІІІІІІІІІІІІ от 28...: _ П Перейти Номер: 000000001 Дата: 28.08.2003 0:00:00 Ш Склад: Основной . .. х Клиент: И ванов М ихаил Ю рьевич . .. х М астер: Гусаков Н иколай Дмитриевич в1 І Ы ЇВ мок І І N Номенклатура Количес

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

Перечисление. Реорганизация справочника Номенклатура

1. Создайте новый объект конфигурации Перечисление с именем ВидыНоменклатуры.

2. На закладке Данные добавим два значения перечисления: Материал и Услуга.

Перечисление ВидыНоменклатуры _ п Основные Данные Формы Макеты Подсистемы Знамения перечисления: Ш'14 Значения Материал Услуга Далее Закрыть Справка

3. Затем в справочник Номенклатура добавим новый реквизит ВидНоменклатуры с типом ПеречислениеСссылка.ВидыНоменклатуры.

Е Справочник Номенклатура Свойства: Реквизит Основные Иерархия Владельцы Данные Нумерация Формы Макеты Подсистемы Ввод на основании Права Интерфейсы Обмен данными Прочее Длина кода Длина наименования гТип кода — Число Строка г Основн О В вр 0 В ВР П[М]! Ў

4. Запустите 1С:Предприятие в режиме отладки и задайте для каждого элемента справочника Номенклатура соответствующее значение реквизита ВидНоменклатуры.

правочник Номенклатура _ П х О Перейти Ў В-_! Номенклатура В-_! Материалы В-_ Прочее В Рааиодетали В-_ Услуги В-_ Телевизоры Код Наименование _ 1 Материалы 18 Радиодетали - 6 Строчный трансформатор Є о1с 1аг с Гтпоин.МЙ тпднгфопмдтоп дт м шп_ В-_1 Стиральн

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

Изменение процедуры проведения документа ОказаниеУслуги

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

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

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

Для этого в обработчик события ОбработкаПроведения, расположенный в модуле документа ОказаниеУслуги,

Документ ОказаниеУслуги _ П х Основные Данные Нумерация Движения П оследовательност и Журналы Формы Макеты Подсистемы Ввод на основании Права Интерфейсы Обмен данными Прочее Модуль объекта Режим блокировки Полнотекстовый поиск Автоматический Использовать Д

добавим следующий текст (текст следует добавить в начало цикла обхода табличной части документа сразу после слова Цикл):

Если ТекСтрокаПереченьНоменклатуры.Номенклатура. ВидНоменклатуры {Перечисления.ВидыНоменклатуры.Материал Тогда Продолжить; КонецЕсли;

Теперь модуль будет выглядеть следующим образом:

Е Процедура ОбработкаПроведения Отказ, Режим / / {{_КОНСТРУКТОР_ДВИЖЕНИЙ_РЕГИСТРОВ Для Каждого ТекСтрокаПереченьНоменклатуры Из ПереченьНоменклатуры Цикл Если ТекСтрокаПереченьНоменклатуры.Номенклатура. ВидНоменклатуры Перечисления.ВидыНоменклатуры.Материа

Движение.Материал = ТекСтрокаПереченьНоменклатуры.Номенклатура; Движение.Склад = Склад; Движение.Количество = ТекСтрокаПереченьНоменклатуры.Количество; КонецЦикла; //}}_КОНСТРУКТОР_ДВЖЕНИЙ_РЕГИСТРОВ - КонецПроцедуры

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

2. Запустим 1С:Предприятие в режиме отладки и проверим работу процедуры проведения документаОказаниеУслуги.

3. Откройте документ ОказаниеУслуги №– 1.

4. Перед тем как провести документ, откроем список регистратораОстаткиМатериалов, содержащий движения этого документа.

Сделать это можно двумя способами:

аОказание услуги: Оказание услуги Номер: 000000001 Дета: : : mill Перейти Остатки материалов 23.03.2003 0:00:00 /ш/ Основной. .. X Иванов Михаил Юрьевич. .. X Гусаков Николай Дмитриевич. .. X g S. — ll DK N Номенклатура Количество Цена Сумма 1 Ремонт импорт

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

6. Проведите все остальные документы. Проверьте список движений регистра Остатки материалов.

Создание регистра накопления СтоимостьМатериалов

1. Создайте регистр накопления с именем СтоимостьМатериалов.

2. Этот регистр будет иметь:

После создания регистр СтоимостьМатериалов должен выглядеть в дереве конфигурации следующим образом:

Действия СтоимолстьМатериалов В- — Измерения . .... Материал В Ресурсы . .... Стоимость 2 Реквизиты Формы ЦЛ! Макеты

Теперь мы можем приступить к внесению изменений в процедуры проведения документов .

Изменение процедуры проведения документа ПриходнаяНакладная

1. Откройте в конфигураторе окно редактирования объекта конфигурации Документ «ПриходнаяНакладная» и перейдите на закладку Движения.

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

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

4. Перед нами откроется окно конструктора движений, которое будет содержать созданные нами ранее движения документа по регистру ОстаткиМатериалов.

Добавим в список регистров, по которым формируются движения, еще один → СтоимостьМатериалов.

Конструктор движения регистров

5. Выберем для него ту же табличную часть Материалы и заполним выражения.

Для ресурса Стоимость выберем значения реквизита табличной части Сумма.

Конструктор движения регистров п Ш%4 і / Регистры_ ! + РегистрН акопления. О сгат киМ атериалов +1 РегистрН акопления. Стоимост ьМ атериалов Тип движения регистра: • Приход Расход Т абличная часть: Материалы Реквизиты документа — Дата а Номер а Склад Т екС

6. Нажмем ОК и посмотрим на текст, который сформировал для нас конструктор.

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

В нашем случае табличная часть всего одна, поэтому можно объединить эти два цикла в один, закомментировав следующие строки:

 Процедура ОбработкаПроведения Отказ, Режим / / {{_КОНСТРУКТОР_ДВИКЕНИЙ_РЕГИСТРОВ Для Каждого ТекСтрокаМатериалы Из Материалы Цикл // регистр ОстаткиМатериалов Приход Движение = Движения.ОстаткиНатериалов.Добавить ; Движение.ВидДвижения = ВидДвиженияНакопл

8. Запустите 1С:Предприятие в режиме отладки и перепроведите приходные накладные.

9. Убедитесь, что записи регистров Остатки материалов и Стоимость материалов соответствуют истине.

_ П х Действия Ў fo] Yl f7j Щ Регистратор Но... Актив... Период - Материал Склад Количество /ч + Приходная накладная 000000001 от 27.03.2003... 1 27.03.2003... Строчный трансформатор GoldStar Основной 10,00 LJ + Приходная накладная 000000001 от 27.03.2003.

Изменение процедуры проведения документа ОказаниеУслуги

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

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

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

1. Откройте в конфигураторе окно редактирования объекта конфигурации Документ ОказаниеУслуги.

2. На закладке Данные создайте новый реквизит табличной части документа с именем Стоимость, типом Число, длиной 15 и точностью 2.

3. После этого откроем форму ФормаДокумента документа ОказаниеУслуги и добавим в табличное поле колонку, отображающую новый реквизит Стоимость, расположив ее после колонки Номенклатура.

Для этого:

— Документ ОказаниеУслуги: ФормаДокумента _ п Оказание услуги Номер: Дата: Склад: Клиент: Мастер: 03 і і х X X в1 ь; 4 у І у////////////// у/////// }///7/////// А і, 2 0 ///}//}//}//%ІЇ //////////////////////////////////////////////////// N Номенклатура Ко

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

' ш u й. ч u t т ш N Номенклатура Стоимость Количество Цена Сумма Ш Поле ввода [abil Поле ввода Ш Поле вв... Ш Поле вв... Ш Поле вв... Всего: —г

4. Теперь создадим движения документа ОказаниеУслуги таким же образом, как мы делали это для документа ПриходнаяНакладная:

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

Конструктор движения регистров п Ш%4 і / Регистры_ РегистрН акопления. О сгат киМ атериалов РегистрН акопления. СтоимосгьМ атериалов Тип движения регистра: Приход • Расход Т абличная часть: П ереченьН оменклатуры Реквизиты документа а Номер а Склад а Клиен

5. Нажмем ОК и в тексте, сформированном конструктором, восстановим изменения, внесенные нами ранее (не записывать движения, если номенклатура → не материал). Также объединим два цикла обхода табличной части документа в один.

Е Процедура ОбработкаПроведения Отказ, Режим / / {{_КОНСТРУКТОР_ДВИЗКЕНИЙ_РЕГИСТРОВ Для Каждого ТекСтрокаПереченьНоменклатуры Из ПереченьНоменклатуры Цикл Если ТекСтрокаПереченьНоменклатуры.Номенклатура.ВидНоменклатуры Перечисления.ВидыНоменклатуры.Материа

Проверим, как теперь работает проведение документа ОказаниеУслуги.

6. Запустим 1С:Предприятие в режиме отладки и создадим еще несколько документов «ОказаниеУслуги», учитывая даты, которые мы указали в регистре сведений Цены и указывая стоимость выбранных материалов.

Эти документы понадобятся нам в дальнейшем, поэтому будьте внимательны и обратите внимание на то, что эти документы созданы с разными датами.

Оказание услуги: Оказание услуги 1 rd “о: t Шг I =12 N Номенклатура Стоимость Количество Цена Сумма 1 Подключение электричества 1,000 800,00 800,00 2 Шланг резиновый 100,00 2,000 150,00 300,00 3 Кабель электрический 20,00 1,000 30,00 30,00 4 Ремонт отечест

Оказание услуги: Оказание услуги iliUiUiUili от 03.09.2008 _ Перейти -fe X, —і І ОК t І I“ OZ N Номенклатура Стоимость Количество Цена Сумма 1 Ремонт импортного телевизора 1,000 800,00 800,00 2 Строчный трансформатор Samsung 600,00 1,000 900,00 900,00 LI В

Оказание услуги: Оказание услуги ІІІІІІІІІІІІІШ от 01.09.2008 12: _ п Перейти . ч 3 [ і % —і мок І Ш II N Номенклатура Стоимость Количество Цена Сумма 1 Подключение воды 1,000 800,00 800,00 2 Шланг резиновый 100,00 1,000 150,00 150,00 С Всего: 950.00 О К З

7. А теперь проведите эти документы и посмотрите на движения этих документов по регистру СтоимостьМатериалов.

Гг Список Стоимость материалов Действия fo] Т Регистратор Номер... Акт... Период Материал Стоимость Л Оказание услуги 000000005 от 01.09.2003 12:0... 1 01.09.200312... Шланг резиновый 100,00 Оказание услуги 000000007 от 02.09.2003 0:00... 1 02.09.2003 0:..

8. Три старых документа об оказании услуг можно уничтожить.

Создание оборотного регистра накопления Продажи

1. Откройте конфигуратор и создайте новый объект конфигурации Регистр накопления. Назовем его Продажи и определим вид регистра - Обороты.

Гг Регистр накопления Продажи _ П 3 к Пгипсиию г 1Уи1 Данные Регистраторы Имя: Продажи Синоним: Комментарий: Продажи Формы Макеты Подсистемы Праеа ТЗид Обороты Интерфейсы Обмен данными Прочее Действия Ў Назад Далее Закрыть Справка

2. На закладке Данные создадим измерения регистра:

3. У регистра будет три ресурса:

4. Откройте окно редактирования объекта конфигурации Документ ОказаниеУслуги и на закладке Движения укажите, что этот документ будет создавать движения по регистру Продажи.

5. Запустите 1С:Предприятие в режиме отладки и откройте формы списка регистров накопления Продажи и Остатки материалов.

Обратите внимание, что формы практически одинаковы, за исключением состава измерений и ресурсов.

Изменение процедуры проведения документа ОказаниеУслуги

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

Откроем в конфигураторе модуль объекта конфигурации Документ ОказаниеУслуги. И найдем в нем процедуру обработчика события ОбработкаПроведения.

Документ ОказаниеУслуги Основные Данные Нумераци Движени Последов Журналы Формы Макеты Поденете Ввод на о Права ИнтерФей Обмен да Модуль объекта Прочее Щ Документ ОказаниеУслуги: Модуль объекта 0 Процедура ОбработкаПроведения Отказ, Режим [Г] Действия Наза

Сразу после окончанияобъединенногоцикла создадим еще один цикл обхода табличной части и команду записи движений регистра Продажи.

В тело созданного цикла вставим команды создания движений регистра Продажи.

КонецЦикла; Для Каждого ТекСтрокаПереченьНоменклатуры Из ПереченьНоменклатуры Цикл // регистр Продажи Движение = Движения.Продажи.Добавить ; Движение.Период = Дата; Движение.Номенклатура = ТекСтрокаПереченьНоменклатуры.Номенклатура; Движение.Клиент = Клиен

Все добавленные конструкции вам уже известны.

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

Запустим 1С:Предприятие в режиме отладки и перепроведем все документы ОказаниеУслуги. Движения этих документов по регистру Продажи должны иметь следующий вид:

fГ Список Продажи Действия - [ ] / Регистратор Н... А... Период - Номенклатура Клиент Мастер л Оказание услуги 000000005 от 01.09.2... 1 01.09.2009... Подключение воды Иванов Михаил Юрьевич Деловой Иван Оказание услуги 000000005 от 01.09.2... 2 01.09.2009.


Нас находят: создать оборотный регистр накопления сессия в 1с, создание документа Цены на базе конфигурации Регистра Сведений, как записать элемент справочника и табличную часть в регистр сведений, 1с 8 2 заполнение табличной части документа по регистру, при изменении табличной части формы данные в регистре сведений, пример создания движений при проведении документа по регистру сведений, расписание регистр сведений создать с нуля, регистр цен 1 с, режиме Конфигуратор Откроем окно редактирования объекта конфигурации Документ ОказаниеУслуги - На закладке Движения: укажем что этот документ будет создавать движения еще и по регистру Продажи - На закладке Прочее: наж, реорганизация справочника в 1С 8


Подписка на новости RSS     Добавьте в закладки Google fusion     Мы в Google+    

 

Мы ВКонтакте

 

Мы на Facebook