1С:Предприятие 8.2 /
Разработчикам /
Практикум
Практикум 4. Создание периодического регистра сведений Цены
Создание функции РозничнаяЦена()
Автоматическое заполнение цены в документе ОказаниеУслуги
Перечисление. Реорганизация справочника Номенклатура
Изменение процедуры проведения документа ОказаниеУслуги
Создание регистра накопления СтоимостьМатериалов
Изменение процедуры проведения документа ОказаниеУслуги
Создание оборотного регистра накопления Продажи
Изменение процедуры проведения документа ОказаниеУслуги
Приступим к созданию периодического регистра сведений, который будет хранить развернутые во времени розничные цены материалов и стоимости услуг, оказываемых нашей фирмой.
1. Создайте новый объект конфигурацииРегистрСведений с именем Цены.
2. Установим периодичность этого регистра в пределах секунды.
3. На закладке Данные создадим измерение регистра Номенклатура с типом СправочникСсылка.Номенклатура. Укажем, что это измерение будет ведущим.
Свойство Ведущее имеет смысл использовать лишь тогда, когда измерение имеет тип ссылки на объект базы данных.
Установка свойства Ведущее будет говорить о том, что запись регистра сведений представляет интерес, пока существует этот объект. При удалении объекта, все записи регистра сведений по этому объекту тоже будут автоматически удалены. Кроме того, в форме списка справочника появляется кнопка командной панели Перейти. По ней возможен переход к записям регистра, отобранным по значению выбранного элемента справочника.
3. Создадим новый ресурс Цена, тип Число, длина 15, точность 2, неотрицательное.
4. Запустим 1С:Предприятие в режиме отладки и посмотрим, как работает наш периодический регистр сведений Цена.
5. Выполните команду Операции в†’ Регистр сведений в†’ Цены.
6. Задайте стоимость услуг фирмы и розничные цены на материалы следующим образом:
Поскольку цены хранятся с привязкой к дате, мы можем заранее установить новые цены и быть уверены в том, что новые цены вступят в действие не раньше указанной для
них даты.
Теперь посмотрим, как можно использовать заданные нами цены в документе ОказаниеУслуги.
Создание функции РозничнаяЦена()
Сначала мы создадим функцию, которая будет возвращать нам актуальную розничную цену номенклатуры.
1. Откройте конфигуратор, в ветке Общие в†’ Общие модули создадим новый объект конфигурацииМодуль и назовем его РаботаСоСправочниками.
2. Поместим в нем следующий текст:
Для получения розничной цены мы будем передавать в функцию два парамерта:
- АктуальнаяДата → параметр типа Дата определяет точку на оси времени, в которой нас интересует значение розничной цены;
- ЭлементНоменклатуры → ссылка на элемент справочника Номенклатура, для которого мы хотим получить розничную цену.
В теле процедуры мы сначала создаем вспомогательный объект Отбор. С его помощью определяем, что нас будут интересовать записи регистра, в которых измерение Номенклатура равно переданной в процедуру ссылке на элемент справочника.
Во второй строке мы обращаемся к менеджеру регистра сведений Цены (РегистрыСведений.Цены) и выполняем метод ПолучитьПоследнее(), который возвращает нам значения ресурсов наиболее поздней записи регистра, соответствующей передаваемой дате (АктуальнаяДата) и значениям измерений регистра (Отбор).
Значения ресурсов возвращаются в объекте Структура, поэтому в следующей строке мы получаем искомую нами розничную цену, просто указав имя нужного нам ресурса регистра через точку (ЗначенияРесурсов.Цена).
Теперь проверим, как работает эта функция.
Автоматическое заполнение цены в документе ОказаниеУслуги
При создании документа ОказаниеУслуги нам необходимо обеспечить автоматическое заполнение поля Цена после того, как пользователь выберет услугу. Причем цена услуги должна определяться исходя из даты создаваемого документа.
1. Откройте форму ФормаДокумента в документе ОказаниеУслуги.
2. Откройте свойства поля ввода, расположенного в колонке Номенклатура, и внизу списка найдите событие ПриИзменении.
3. Нажмем на кнопку с лупой и в открывшейся заготовке обработчика события напишем следующий текст:
Прокомментируем содержимое обработчика.
Первая строка обработчика нам уже знакома: мы получаем текущую табличной части документа, так как она понадобится нам в дальнейшем.
Во второй мы устанавливаем полученную цену в документе, вызывая нашу процедуру РозничнаяЦена. Первым параметром мы передаем дату документа, на которую необходимо получить цену. Вторым параметром мы передаем ссылку, которую отображает элемент управления формой, вызвавшей это событие (Элемент.Значение), т.е. ссылку на элемент справочника Номенклатура.
В заключение мы вызываем нашу процедуру РассчитатьСумму из общего модуля РаботаСДокументами для того, чтобы она пересчитала итоговую сумму в строке нашего документа.
4. Запустите 1С:Предприятие в режиме отладки и откройте регистр сведений Цены. Для транзистора Рhilips добавим следующим числом новую цену:
5. Теперь откроем документ ОказаниеУслуги №– 1. Этим документом мы как раз «израсходовали» два таких транзистора.
Установим дату документа равной той дате, когда было задано первое значение цены транзистора, и повторим выбор транзистора в колонке Номенклатура табличной части документа. Автоматически установится первое значение цены.
Теперь изменим дату документа на «правильную» (т.е. ту, которая была) и снова повторим выбор транзистора. Будет установлено новое значение цены:
Таким образом, в документе появляется актуальная на момент создания документа цена услуги.
Перечисление. Реорганизация справочника Номенклатура
1. Создайте новый объект конфигурации Перечисление с именем ВидыНоменклатуры.
2. На закладке Данные добавим два значения перечисления: Материал и Услуга.
3. Затем в справочник Номенклатура добавим новый реквизит ВидНоменклатуры с типом ПеречислениеСссылка.ВидыНоменклатуры.
4. Запустите 1С:Предприятие в режиме отладки и задайте для каждого элемента справочника Номенклатура соответствующее значение реквизита ВидНоменклатуры.
Теперь посмотрим, как можно применить новые данные, полученные благодаря использованию перечисления ВидыНоменклатуры.
Изменение процедуры проведения документа ОказаниеУслуги
Если вы помните, то, когда создавались движения документа ОказаниеУслуги по регистру накопленияОстаткиМатериалов, мы сказали, что они не совсем правильные, поскольку в регистр будут попадать не только записи об израсходованных материалах, но и записи об оказанных услугах.
Теперь мы доработаем документ таким образом, чтобы в регистре появлялись только записи, относящиеся к расходу материалов. Эта доработка будет не совсем эффективна с точки зрения производительности, зато позволит нам получить нужные данные в регистре ОстаткиМатериалов. Более эффективный вариант обработки проведения этого документа мы рассмотрим позже.
1. Скорректируем движения документа, исключив из обработки те строки табличной части, в которых находятся услуги.
Для этого в обработчик события ОбработкаПроведения, расположенный в модуле документа ОказаниеУслуги,
добавим следующий текст (текст следует добавить в начало цикла обхода табличной части документа сразу после слова Цикл):
Теперь модуль будет выглядеть следующим образом:
Добавленный текст исключает из выполнения операторов цикла те строки документа, в которых номенклатура не является материалом. К значению перечисления Материал мы обращаемся, используя менеджер перечисления ВидыНоменклатуры (Перечисления. ВидыНоменклатуры) и указывая в качестве его свойства имя нужного нам значения перечисления.
2. Запустим 1С:Предприятие в режиме отладки и проверим работу процедуры проведения документаОказаниеУслуги.
3. Откройте документ ОказаниеУслуги №– 1.
4. Перед тем как провести документ, откроем список регистратора ОстаткиМатериалов, содержащий движения этого документа.
Сделать это можно двумя способами:
- выполнив команду Операции в†’ Регистр накопления в†’ Остатки материалов из основного меню;
- выполнив команду Перейти в†’ Остатки материалов из командной панели списка документа.
а
5. Проведем документ и убедимся, что в движения по регистру Остатки материалов включаются только строки, содержащие материалы.
6. Проведите все остальные документы. Проверьте список движений регистра Остатки материалов.
Создание регистра накопления СтоимостьМатериалов
1. Создайте регистр накопления с именем СтоимостьМатериалов.
2. Этот регистр будет иметь:
- одно измерение → Материал с типом СправочникСссылка.Номенклатура;
- один ресурс → Стоимость с длиной 15 и точностью 2.
После создания регистр СтоимостьМатериалов должен выглядеть в дереве конфигурации следующим образом:
Теперь мы можем приступить к внесению изменений в процедуры проведения документов .
Изменение процедуры проведения документа ПриходнаяНакладная
1. Откройте в конфигураторе окно редактированияобъекта конфигурации Документ «ПриходнаяНакладная» и перейдите на закладку Движения.
2. В списке регистров отметим, что документ будет создавать теперь движения и по регистру СтоимостьМатериалов.
3. Запустим конструктор движений и согласимся с тем, что существующая процедура ОбработкаПроведения будет замещена.
4. Перед нами откроется окно конструктора движений, которое будет содержать созданные нами ранее движения документа по регистру ОстаткиМатериалов.
Добавим в список регистров, по которым формируются движения, еще один → СтоимостьМатериалов.
5. Выберем для него ту же табличную часть Материалы и заполним выражения.
Для ресурса Стоимость выберем значения реквизита табличной части Сумма.
6. Нажмем ОК и посмотрим на текст, который сформировал для нас конструктор.
7. Как вы видите, конструктор создал два цикла обхода табличной части документа → отдельно для каждого регистра. Так происходит потому, что в общем случае документ может иметь несколько табличных частей, и информация, содержащаяся в каждой из них, может предназначаться для своего отдельного регистра.
В нашем случае табличная часть всего одна, поэтому можно объединить эти два цикла в один, закомментировав следующие строки:
8. Запустите 1С:Предприятие в режиме отладки и перепроведите приходные накладные.
9. Убедитесь, что записи регистров Остатки материалов и Стоимость материалов соответствуют истине.
Изменение процедуры проведения документа ОказаниеУслуги
Для внесения изменения в процедуру обработки проведения документа ОказаниеУслуги будем исходить из пожелания, высказанного руководством фирмы.
Суть его заключается в том, что на первом этапе, при списании материалов, израсходованных в процессе оказания услуги , должна быть возможность указывать различную стоимость одного и того же материала, которая рассчитана руководством исходя из текущих конъюнктурных соображений.
Поскольку в документе ОказаниеУслуги у нас отражена только цена номенклатуры , нам понадобится добавить в табличную часть документа еще одно поле, в котором будет указываться стоимость номенклатуры.
1. Откройте в конфигураторе окно редактирования объекта конфигурации Документ ОказаниеУслуги.
2. На закладке Данные создайте новый реквизит табличной части документа с именем Стоимость, типом Число, длиной 15 и точностью 2.
3. После этого откроем форму ФормаДокумента документа ОказаниеУслуги и добавим в табличное поле колонку, отображающую новый реквизит Стоимость, расположив ее после колонки Номенклатура.
Для этого:
- выделим табличное поле;
- выполним команду контекстного меню Размещение данных (см. рисунок);
- в окне Размещение данных отметим реквизит Стоимость;
- нажмем ОК;
- в табличной части появилась еще одна колонка (последняя) Стоимость. Если вы ее не видите, то раздвиньте границы табличной части;
- зацепив левой кнопкой мыши заголовок, перетащим колонку Стоимость после колонки Номенклатура.
Теперь табличная часть нашего документа будет иметь следующий вид:
4. Теперь создадим движения документа ОказаниеУслуги таким же образом, как мы делали это для документа ПриходнаяНакладная:
- откроем в конфигураторе окно редактирования объекта конфигурации Документ ОказаниеУслуги;
- укажем, что он будет создавать движения по регистру накопления СтоимостьМатериалов;
- запустим конструктор движений документа и добавим в список регистров регистр СтоимостьМатериалов;
- опишем движения документа так, как показано на рисунке.
Обратите внимание, что стоимость вычисляется как произведение стоимости и количества, указанных в табличной части.
5. Нажмем ОК и в тексте , сформированном конструктором, восстановим изменения, внесенные нами ранее (не записывать движения, если номенклатура → не материал). Также объединим два цикла обхода табличной части документа в один.
Проверим, как теперь работает проведение документа ОказаниеУслуги.
6. Запустим 1С:Предприятие в режиме отладки и создадим еще несколько документов «ОказаниеУслуги», учитывая даты, которые мы указали в регистре сведений Цены и указывая стоимость выбранных материалов.
Эти документы понадобятся нам в дальнейшем, поэтому будьте внимательны и обратите внимание на то, что эти документы созданы с разными датами.
7. А теперь проведите эти документы и посмотрите на движения этих документов по регистру СтоимостьМатериалов.
8. Три старых документа об оказании услуг можно уничтожить.
Создание оборотного регистра накопления Продажи
1. Откройте конфигуратор и создайте новый объект конфигурации Регистр накопления. Назовем его Продажи и определим вид регистра - Обороты.
2. На закладке Данные создадим измерения регистра:
- Номенклатура, тип СправочникСсылка.Номенклатура;
- Клиент, тип СправочникСсылка.Клиенты;
- Мастер, тип СправочникСсылка.Сотрудники.
3. У регистра будет три ресурса:
- Количество, тип Число, длина 15, точность 3;
- Выручка, тип Число, длина 15, точность 2;
- Стоимость, тип Число, длина 15, точность 2.
4. Откройте окно редактирования объекта конфигурации Документ ОказаниеУслуги и на закладке Движения укажите, что этот документ будет создавать движения по регистру Продажи.
5. Запустите 1С:Предприятие в режиме отладки и откройте формы списка регистров накопления Продажи и Остатки материалов.
Обратите внимание, что формы практически одинаковы, за исключением состава измерений и ресурсов.
Изменение процедуры проведения документа ОказаниеУслуги
На этот раз мы не будем использовать конструктор движений документа, а внесем необходимые дополнения прямо в обработчик события ОбработкаПроведения документа ОказаниеУслуги.
Откроем в конфигураторе модуль объекта конфигурации Документ ОказаниеУслуги. И найдем в нем процедуру обработчика события ОбработкаПроведения.
Сразу после окончанияобъединенногоцикла создадим еще один цикл обхода табличной части и команду записи движений регистра Продажи.
В тело созданного цикла вставим команды создания движений регистра Продажи.
Все добавленные конструкции вам уже известны.
Обратите внимание лишь на то, что у оборотного регистра отсутствует свойство ВидДвижения, поскольку отражение вида движения (приход или расход) имеет смысл лишь при учете остатков . В случае регистра оборотов нас интересует только значение, которое должно быть записано в ресурс регистра.
Запустим 1С:Предприятие в режиме отладки и перепроведем все документы ОказаниеУслуги. Движения этих документов по регистру Продажи должны иметь следующий вид:
Другие материалы по теме:
оказаниеуслуги, процедуры, движения, накопления, цена, регистр., услуги, основные, цены, 09, продажи, формы, 00, стоимость, номенклатура, объект, количество, справочник., данные, регистр, справочник, действия, конфигурации, документа, документ
Материалы из раздела: 1С:Предприятие 8.2 / Разработчикам / Практикум
Другие материалы по теме:
Источники данных для расчетов бюджетирования
Общесистемные механизмы и принципы
Общие механизмы товарных документов
Практикум 2. Создание документов
Механизмы заполнения табличной части документа «поступление товаров и услуг»
Нас находят: автоматом указывать цены из регистра сведений, Цены ПолучитьПоследнее, создать оборотный регистр накопления сессия в 1с, создание документа Цены на базе конфигурации Регистра Сведений, как получить данные из регистра сведений в справочник, как записать элемент справочника и табличную часть в регистр сведений, Откройте конфигуратор и создайте новый объект конфигурации Регистр сведений Назовите его Цены Установим периодичность этого регистра в пределах секунды 2 Перейдите на закладку Данные и создайте измерение регистра Номенклатура с типом СправочникСсылка Номен, интерактивная запись регистра установка цен номенклатуры, https://stimul kiev ua/materialy htm?a=praktikum_4_sozdanie_periodicheskogo_registra_svedeniy_tseny, регистр накопления продажи товаров ресурс себестоимость
Мы на Facebook