d9e5a92d

Что теперь надо делать?

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

Вот теперь можно переходить к формированию отчета АнализПродажПоРегОстаткиНоменклатуры.

Технология его полность повторяет технологию создания предыдущего отчета.

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

Что теперь надо делать?


Далее на закладке Группировка определяем группировку по полю Номенклатура, остальные - в качестве суммируемых.

Условие, кроме как по дате, поставим еще по виду движения, чтобы в отчет не мешались приходы:



89





Конфигурирование в системе "1С:Предприятие 8.0". Решение оперативных задач

Что теперь надо делать?


Далее добавим аналогичный Запрос2 по основной таблице регистра ОстаткиНоменклатуры, но уже с другими временными параметрами, и Запрос3 по таблице остатков регистра

ОстаткиНоменклатуры.

На закладке Итоги указываем итоги по Номенклатура и ставим галочку общие итоги.

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

"ВЫБРАТЬ

| ОстаткиНоменклатуры.Номенклатура КАК Номенклатура,

| ОстаткиНоменклатуры. Номенклатура. Представление,

| СУММА(ОстаткиНоменклатуры.Количество) КАК Кол Тек,

| СУММА(ОстаткиНоменклатуры.СуммаПродажи) КАК Сум Тек,

| СУММА(О) КАК КолПред,

| СУММА(О) КАК СумПред,

| СУММА(О) КАК Ост

|ИЗ

| РегистрНакоплеиия.ОстаткиНоменклатуры КАК ОстаткиНоменклатуры

|ГДЕ

| ОстаткиНоменклатуры.ВидДвижения = ВидДвижения И

| ОстаткиНоменклатуры.Период МЕЖДУ ДатаН1 ИДатаК1

(СГРУППИРОВАТЬ ПО

| ОстаткиНоменклатуры.Номенклатура

90



Решение задач анализа показателей движения. Использование реквизитов

регистра остатков и оборотных регистров

(ОБЪЕДИНИТЬ ВСЕ

I |ВЫБРАТЬ

| ОстаткиНоменклатуры. Номенклатура,

| ОстаткиНоменклатуры.Номенклатура.Представление,

| СУММА(0),

| СУММА(0),

| СУММА(ОстаткиНоменклатуры.Количество),

| СУММА(ОстаткиНоменклатуры.СуммаПродажи),

СУММА(0) [ИЗ

| РегистрНакопления.ОстаткиНоменклатуры КАК ОстаткиНоменклатуры

|ГДЕ

| ОстаткиНоменклатуры.ВидДвижения = ВидДвижения И

| ОстаткиНоменклатуры. Период МЕЖДУ ДатаН2 И ДатаК2

|СГРУППИРОВАТЬ ПО

| ОстаткиНоменклатуры.Номенклатура

| " [

|ОБЪЕДИНИТЬ ВСЕ

|ВЫБРАТЬ

| ОстаткиНоменклатурыОстатки. Номенклатура,

| ОстаткиНоменклатурыОстатки. Номенклатура. Представление,

| СУММА(0),

| СУММА(0),

| СУММА(0),

| СУММА(0),

| СУММА(ОстаткиНоменклатурыОстатки.КоличествоОстаток)

|ИЗ

| РегистрНакопления.ОстаткиНоменклатуры.Остатки(ДатаК1, ) КАК

ОстаткиНоменклатурыОстатки

|СГРУППИРОВАТЬ ПО

ОстаткиНоменклатурыОстатки.Номенклатура

|УПОРЯДОЧИТЬ ПО

| Номенклатура

91



Конфигурирование в системе "1С:Предприятие 8.0 ". Решение оперативных задач

|(ИТОГИ ПО

| ОБЩИЕ,

| Номенклатура";

Чуть ниже определим программно значение параметра

ВидДвижения из системной константы ВидДвиженияНакопления, значение Расход:

Запрос. УстановитьПараметр("ВидДвижения", ВидДвижения Накопления. Расход);

Запрос.УстановитьПараметрС'ДатаК1", ДатаК1); Запрос.УстановитьПараметр("ДатаК2", ДатаК2); Запрос.УстановитьПараметр("ДатаН I", ДатаН 1); Запрос. УстановитьПараметр("ДатаН2", ДатаН2);

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

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

Ну и в чем повышение эффективности? - спросите Вы. А вот чтобы увидеть его - выполним практикум:

Практикум №13

К данному отчету необходимо добавить колонки с вычислением Прибыли (разница суммы продажи и списанной себестоимости) по каждому периоду. Но для этого опять же - изменим структуру регистра — добавим еще один реквизит Прибыль, И при проведении расходной накладной будем бросать туда разницу между суммой продажи по данной партии и ее себестоимостью. Тогда на этапе формирования запроса - данные можно будет езять все из той же основной таблицы регистра ОстаткиНоменклатуры!

4.3. Отчет АнализПродажЗапросПоРег - построение запросом по оборотному регистру

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

92



Решение задач анализа показателей движения. Использование реквизитов

регистра остатков и оборотных регистров

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

Как бы тут еще повысить скорость формирования отчета?

А что если бы какой-то объект содержал сразу только требуемую информацию!



посредством

способом

Итак, строим наш отчет третьим использования оборотного регистра.

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

Оборотный регистр накопления Продажи должен остаться еще от предыдущего курса Введение в конфигурирование...



Что теперь надо делать?


И формирование движений по нему при проведении расходной накладной - так же прописаны ранее:

//по регистру "Продажи"

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

Движение. Пер иод = Дата;

Движение.Регистратор - Ссылка;

Движение.Номенклатура - ВыборкаТоваров.Номенклатура;

Движение.Контрагент = ВыборкаТоваров. Контрагент;

Движение.Количество = ВыборкаТоваров.КолДок;

Движение. Сумма = ВыборкаТоваров.СуммаДок;

КонецЦикла; // по товарам

93



Конфигурирование в системе " 1С:Предприятие 8.0". Решение оперативных задач

Строим конструктором выходных форм непосредственно отчет АнализПродажПоОборотномуРегистру.

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

Что теперь надо делать?


Выставляем параметры виртуальной таблицы еще на этапе ее формирования, определяем поля выходной таблицы.

На закладке Группировка указываем группировки по Номенклатуре с суммированием всех пяти числовых полей:

94



Что теперь надо делать?


Решение задач анализа показателей движения. Использование реквизитов

регистра остатков и оборотных регистров

Что теперь надо делать?


Далее на закладке Объединения/Псевдонимы меняем псевдонимы имен полей выходной результирующей таблицы

И, аналогично, добавляем Запрос2, но уже с другими временными параметрами формирования. И ЗапросЗ, но уже по таблице представления остатков регистра ОстаткиНоменклатуры.

Результирующее объединение трех запросов будет выглядеть примерно так:

95





Конфигурирование в системе "1С:Предприятие 8.0". Решение оперативных задач

Что теперь надо делать?


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

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

Не забываем указать на закладке ВыходнаяФорма тип параметров: Дата

Что теперь надо делать?


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

"ВЫБРАТЬ

| ПродажиОбороты.Номенклатура КАК Номенклатура,

! ПродажиОбороты. Номенклатура. Представление,

96



Решение задач анализа показателей движения. Использование реквизитов

регистра остатков и оборотных регистров

| СУММА(ПродажиОбороты.КоличествоОборот) КАК Кол Тек,

| СУММА(ПродажиОбороты.СуммаОборот) КАК СумТек,

| СУММА(О) КАК КолПред,

| СУММА(О) КАК СумПред,

| СУММА(О) КАК Ост

|ИЗ

| РегистрНакопления.Продажи.Обороты(ДатаН1, ДатаК1, , ) КАК

ПродажиОбороты

|

|СГРУППИРОВАТЬ ПО

| ПродажиОбороты. Номенклатура

ОБЪЕДИНИТЬ ВСЕ

[ВЫБРАТЬ

| ПродажиОбороты. Номенклатура,

| ПродажиОбороты.Номенклатура.Представление,

| СУММА(0),

| СУММА(0),

| СУ ММА(ПродажиОбороты.КоличествоОборот),

| СУММА(ПродажиОбороты.СуммаОборот),

| СУММА(0)

|ИЗ

| РегистрНакопления.Продажи.Обороты(ДатаН2, ДатаК2, , ) КАК

ПродажиОбороты

|

|СГРУППИРОВАТЬ ПО

| ПродажиОбороты.Номенклатура

|ОБЪЕДИНИТЬ ВСЕ

|ВЫБРАТЬ

| Ост. Номенклатура,

| Ост.Номенклатура.Представление,

| СУММА(0),

| СУММА(0),

| СУММА(0),

| СУММА(0),

| СУММА(Ост.КоличествоОстаток)

|ИЗ

| РегистрНакопления.ОстаткиНоменклатуры.Остатки(ДатаК1, ) КАК Ост

97



Конфигурирование в системе 1С:Предприятие 80". Решение оперативных задач

I

(СГРУППИРОВАТЬ ПО

| Ост.Номенклатура

|ИТОГИ ПО

| ОБЩИЕ,

| Номенклатура";

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

Практикум №14

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

Что теперь надо делать?




5. Организация планирования активных продаж. Работа с регистром сведений

5.1. Постановка задачи. Создание необходимых объектов



За отправную точку ведения бизнеса автоматизируемого предприятия берем то. что клиенты сами собой не появляются. Их надо активно искать. Найдя, надо красиво дожимать на покупку. Что-то продав -надо периодически напоминать о себе при каждом удобном случае. Хотя бы поздравить клиента с Новым годом. Поздравив, надо опять же красиво подводить к новой покупке.

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

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

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

Начинаем со справочников:

Что теперь надо делать?


ТипыЗаааний Реквизит!

-В* Табличные части

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



Документ

структуру:

ДневнойОтчетЗадание должен иметь следующую



99



Конфигурирование в системе "1С: Пред приятие 8.0 ". Решение оперативных задач

Что теперь надо делать?


Причем реквизит шапки Менеджер и реквизит МенеджерДД табличной части Работа должны имеет тип СправочникСсылка.ФизическиеЛица:

Что теперь надо делать?


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

Реквизиты ТипЗадания и ДальнейшееДействие, как Вы понимаете, имеют тип значения СправочникСсылка.ТипыЗаданий;

Контрагент - СправочникСсылка.Контрагенты; ТипРезультата - СправочникСсылка.ТипыРезультатов;

100



Организация планирования активных продаж. Работа с регистром

сведений

КомментарийЗадания и КомментарийРезультата - Строка, для возможности внесения неформализуемой информации;

ДатаДД - тип Дата, и соответственно будет указывать - когда надо совершить дальнейшее действие по данному Контрагенту.

Форму документа для удобства можно сделать такой:

Что теперь надо делать?


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

Что теперь надо делать?


Итак, сформируйте форму документа и попробуйте в пользовательской части заполнить пару-тройку документов ДневнойОтчетЗадание.

101



Конфигурирование в системе " 1С:Предприятие 8.0". Решение оперативных задач

общая технология работы выглядит так:

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

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

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

Что теперь надо делать?


Для того, чтобы запланированные дальнейшие действия не терялись -их надо где-то запоминать.

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

А если бы некий объект мог сразу выдать информацию на любую дату, кому и что сейчас надо делать? Оптимально для этого использовать регистр.

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

102



Организация планирования активных продаж:. Работа с регистром

сведений

Однако, как вы сами понимаете - звонить надо всего один раз. Ну, и что же должно произойти при проведении документа?

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

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

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

Добавляем в конфигурацию регистр сведений

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

Что теперь надо делать?


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

Измерения: Менеджер, Контрагент, ТипЗадания - соответствующих типов значения.

Ресурс: ПланДата - тип значения Дата. Потому что:

Кто, кому и что должен делать - это разрезы учета, а когда - это состояние.

103





Конфигурирование в системе "1С:Предприятие 8.0 ". Решение оперативных задач

Что теперь надо делать?


Напомним, почему Планируемая дата это состояние: Завтра может выясниться, что данное действие нужно делать срочно, или наоборот -уже поздно что-то делать.

Указываем возможность документа ДневнойОтчетЗадание быть регистратором данного регистра:

Что теперь надо делать?


И, используя конструктор, строим алгоритм проведения данного документа:

104



Что теперь надо делать?


Организация планирования активных продаж. Работа с регистром

сведений

Текст процедуры стоит немножко видоизменить:

Процедура ОбработкаПроведения(Отказ, Режим)

Если Менеджер.Пустая() Тогда //1

Сообшить("Не заполнено поле менеджер!");

Сообшить("ДневнойОтчетЗадание " + Номер+ " от " +Дата+" не проводится!");

Отказ = Истина; КонецЕсли;

Для Каждого ТекСтрокаРабота Из Работа Цикл

//отсекаем проведение по строкам,

//где не требуется дальнейшее действие

Если ТекСтрокаРабота.ДальнейшееДействие.Пустая() Тогда //2

Продолжить; КонецЕсли;

//назначен ли другой исполнитель?

Если ТекСтрокаРабота.МенеджерДД.ПустаяО Тогда //3

Исполнитель = Менеджер;

Иначе

105



Конфигурирование в системе " 1С:Предприятие 8.0 ". Решение оперативных задач



Исполнитель = ТекСтрокаРабота.МенеджерДД; КонецЕсли;

// регистр ОтложенныеДействия

Движение = Движения.ОтложенныеДействия.Добавить();

Движение.Период = Дата;

Движение. Менеджер = Исполнитель;

Движение. Контрагент = ТекСтрокаРабота.Контрагент;

Движение.ТипЗадания = ТекСтрокаРабота.ДальнMйшееДействие;

Движение.ПланДата = ТекСтрокаРабота.ДатаДД; КонецЦикла;

// записываем движения регистров Движения .ОтложенныеДействия.Записать(); КонецПроцедуры

//4



Комментарий к тексту процедуры:

//1 Убедимся, что в документе заполнен реквизит шапки Менеджер, иначе вроде как непонятно, кому было задание и из-за кого понадобилось дальнейшее действие.

//2 В цикле перебора строк табличной части Работа определимся, а заполнено ли поле ДальнейшееДействие для данной строки, а то может и запоминать ничего в регистре не надо.

//3 Разрешим не заполнять менеджера дальнейшего действия. В этом случае исполнителем будем назначать все того же менеджера из шапки.

//4 Выполняем движения по регистру.

5.2. Работа с регистром сведений. Получение

последних значений, используя объектную модель системы 1С:Предприятие 8.0

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

Чаще всего используются ПолучитьПоследнее() и СрезПоследннх()

- для получения наиболее поздних на требуемую дату значений (состояний),

Но иногда требуется решение обратной задачи: Есть некая дата и надо получить наиболее ранние значения, то есть фактически - данные с другой стороны.

Разберем более подробно синтаксис классических методов:

106



Организация планирования активных продаж. Работа с регистром

сведений

ПолучитьПоследнее(Конец периода, Отбор)

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

Параметры:

Конец периода (необязательный)

Тип: Дата, МоментВремени или Граница. Определяет момент

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

задаваться значениями типа Дата, МоментВремени или Граница. Если

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

последней записи регистра.

Значение по умолчанию: Неопределено.

Отбор (необязательный)

Тип: Структура. Структура, содержащая отбор по измерениям

регистра.

В переданной структуре должны содержаться те измерения, по

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

задается имя и значение отбора.

Значение по умолчанию: Неопределено.

СрезПоследних(Конец периода, Отбор)

Метод возвращает данные в виде объекта ТаблицаЗначений. содержащего как значения ресурсов, так и измерений.

Параметры:

Конец периода (необязательный)

Тип: Дата, МоментВремени или Граница. Определяет момент времени, заканчивая которым необходимо выбрать записи. Значение по умолчанию: Неопределено.

Отбор (необязательный)

Тип: Структура. Структура, содержащая отбор по измерениям

регистра.

В переданной структуре должны содержаться те измерения, по

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

задается имя и значение отбора.

Значение по умолчанию: Неопределено.

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

107



Конфигурирование в системе " 1С: Предприятие 8.0". Решение оперативных задач

Чтобы эта информация не мешала основной работе - добавим внизу

формы панель

Что теперь надо делать?


сделаем внизу две закладки Кнопки и

ОтлКонтакты



Что теперь надо делать?






Кнопки формы разместим на закладке Кнопки, а на закладку

ОтлКонтакты поместим Табличное поле

Что теперь надо делать?


с именем

ТаблицаОтложенныхКонтактов.

Теперь осталось заполнять эту таблицу при активации строки таблицы Работа или при изменении в ней Контрагента.

В обоих случаях будем вызывать процедуру

ПоказатьОтложенноеПоКонтрагенту ():

Процедура ПоказатьОтложенноеПоКонтрагенту()

ФильтрКонтрагент = Новый Структура(); //1

ТекКонтрагент=ЭлементыФормы.Работа.ТекущиеДанные.Контрагент; ФильтрКонтрагент. Встав ить( "Ко нтрагент",ТекКонтрагент);

ТЗ = РегистрыСведений. ОтложенныеДействия.СрезПоследних(Дата, ФильтрКонтрагент);

//2



ЭлементыФормы.ТаблицаОтложенныхКонтактов. Значение = ТЗ; ЭлементыФормы.ТаблииаОтложенныхКонтактов.СоздатьКолонки();

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

//3



108



Организация планирования активных продаж. Работа с регистром

сведений

Комментарий к тексту процедуры:

//1 Готовим структуру, содержащую фильтр по нужному контрагенту.

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

документа записей регистра по нужному контрагенту.

//3 выводим полученную таблицу в форму.

Практикум №15

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

5.3. Работа с регистром сведений. Получение данных, используя табличную модель системы 1С:Предприятие 8.0. (работа с запросами)

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

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

РегистрСведений.имяРегистра.СрезПоследних(Дата, Условие).

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

Если этот параметр не указывать - будут выбираться самые последние записи.

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

И последнее замечание - при выполнении запроса будут использоваться только активные записи регистра!

На выходе получаем таблицу вида:

109



Конфигурирование в системе " 1С:Предприятие 8.0". Решение оперативных задач



РегистрСведений.Имя.

СрезПоследних(Дата,Условие)

Поле

Тип

Период

Дата

Регистратор

ДокументСсылка.Имя

НомерСтроки

Число

Активность

Булево

Измерение

Тип измерения

Ресурс

Тип ресурса

Реквизит

Тип реквизита

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

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

В форму документа ДневнойОтчетЗадание добавим элемент

управления Кнопка

Что теперь надо делать?


Имя пусть будетЗаполнитьОтложенными.

В модуле формы документа пропишем текст процедуры-обработчика нажатия:

Процедура ЗаполнитьОтложеннымиНажатие(Элемент)

//а есть ли менеджер?

Если Менеджер.Пустая() Тогда //1

Сообщить("Укажите, пожалуйста, менеджера!"); Возврат; КонецЕсли;

//собираем данные по отложенным заданиям для менеджера

Запрос = Новый Запрос; 112

Запрос.Текст = "ВЫБРАТЬ

| Менеджер,

| Контрагент,

J ТипЗадания,

110



Организация планирования активных продаж. Работа с регистром

сведений

ТЧЧЧИГ П—1—ШИШИ ШШИЧ ИГ "и IHlHf Til"—ЩИ* i tfim 1 гтпТпу Щ ШШЧ *• mm И I4WH \\ — ¦ ЩЦЧИ I ill Ш и пн.Т т1"||111ГШ lir.l и I. .1.1 .....ТПИн П ПиПи.и и ¦.||Щ11ПГ"-'ГгИПп ¦ п\ш -r~iM7jiii[j.j".iL Ч

| ПланДата

|ИЗ

| РегистрСведений.Отложенные Действия.СрезПоследних(Пар Дата,

| Менеджер = ПарМенеджер)

|Где

| ПланДата = ПарДата

I";

Запрос .У становитьПараметр(" Пар Дата", Дата);

Запрос. У становитьПараметр("ПарМенеджер", Менеджер);

Результат = Запрос.Выполнить();

СтрокаДаниых = Результат. В ыбрать(); //3

ТаблЧасть= ЭлементыФормы.Работа; Пока СтрокаДанных.Следуюший() Цикл

Сост= ТаблЧасть.ДобавитьСтроку();

Сост.Контрагент = СтрокаДанных.Контрагент;

Сост.ТипЗадания = СтрокаДанных.ТипЗадания; КонецЦикла;

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

Комментарий к тексту процедуры:

//1 Проверяем, заполнен ли Менеджер в документе;

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

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

Практикум №16

Сформируйте, пожалуйста, посредством конструктора выходных форм отчет, позволяющий получать срез последних записей на произвольную дату с произвольной фильтрацией по Менеджеру, Контрагенту или ТипуЗадания. Причем необходимо отсекать строки, в которых ПланДата - пустая. Подсказка: Получить пустую дату можно, например, посредством литерала: '0001-01-01' (в апострофах).

111



Конфигурирование в системе "1С:Предприятие 8.0". Решение оперативных задан

5.4. Проведение документа Дневной отчет с погашением выполненных заданий

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

А поскольку лучший способ научить плавать - бросить поглубже в воду:

Практикум №1 7

Переписать проведение документа ДневнойОтчетЗадание по

технологии Алгоритм сложного проведения документов в системе

1С:Предприятие 8.0.

В регистр ОтложенныеДействия надо вносить новые отложенные

задания (дальнейшие действия). Если МенеджерДД не указан -

вписывать в качестве исполнителя Менеджера из шапки

документа.

Если дальнейшего действия нет, а задание выполнено - необходимо

проверить, не было ли его в регистре отложенных действий - и если

есть - погасить.

При проведении надо контролировать заполнение всех необходимых

реквизитов.

При оперативном проведении блокировать соответствующие

таблицы регистра.

112

I



6. Большая самостоятельная работа Резервирование товаров и планирование активных продаж

Задача:

Необходимо ввести в систему возможность резервировать товары на

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

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

При проведении документа Счет товар попадает в резерв под этого

клиента.

Далее на основании документа Счет выписывается документ

Расходная. Пользователь может оставить все товарные позиции и их

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

Расходной. Это значит, что клиент забирает зарезервированный

товар по частям.

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

не только со склада, но и с резерва.

Таким образом, когда на основании счета заводится документ

Расходная, то в табличную часть должны переходить только те

товары, которые на данный момент остаются в резерве.

Кроме того, необходимо предусмотреть ситуацию, когда по каким-то

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

сделанный каким-то счетом. Чтобы разблокировать такой товар, в

систему необходимо ввести документ СнятиеРезерваТоваров. я*

Ну и естественно, при проведении счетов и расходных накладных

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

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

учесть еще и заблокированные товары!

Кроме всего прочего, необходимо создать отчеты, которые бы

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

какие счета; как происходило движение резерва товаров в интервале

дат (какими документами товар заводился в резерв, какими

списывался).

Создать блок аналитических отчетов, показывающих активность

менеджеров/клиентов.

Этапы работ.

  1. Создать регистр РезервыНоменклатуры. Поскольку для

    отчетности по резервам нужны разрезы Номенклатура и

    ПоСчету - это и будут измерения нового регистра (тип значений

    - соответствующий). Ресурсом будет только Резерв. (Про деньги

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

    конкретные партии. Главное, чтобы покупателю просто хватило

    товара, когда он придет забирать свой резерв).
  2. Создать документ Счет. В шапке реквизиты Контрагент и

    числовой СрокРезервирования (имеется ввиду - число дней).

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

    Расходная. (Срок резервирования понадобится для принятия

    решения - снимать просроченный резерв или нет. В табличной


Конфигурирование в системе "1С:Предприятие 8.0 ". Решение оперативных задач

части для самого резервирования нужны, вроде, только реквизиты Номенклатура и Количество. Но ведь в реальной жизни Счет - это счет на оплату. Так что без денег не обойтись). Кроме того, не забывайте о сервисе для пользователя. При подборе товара из справочника должна подставляться в документ дена продажи; своевременно должна перерасчитываться общая сумма в строке. 3. Прописать проведение документа Счет по регистру РезервыНоменклатуры. Не забудьте предварительно проверить две вещи: есть ли нужный товар на складе и находится ли он в свободном остатке. Для этого, кроме остатка товара в регистре ОстаткиНоменклатуры, необходимо будет еще учесть остатки по регистрам РезервыНоменклатуры, БлокировкаТовара.

  1. Прописать ввод документа Расходная на основании документа

    Счет. Контрагента необходимо брать из шапки. А вот при

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

    находится ли этот товар до сих пор в резерве (может он уже

    отпущен другой расходной накладной). И количество,

    соответственно, брать из остатка данного резерва в регистре

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

    помнила, на основании какого счета она выписана, необходимо

    добавить в нее реквизит шапки типа ДокументСсылка, и при

    вводе на основании - вписывать в него документ-источник, т.е.

    Счет.
  2. Прописать проведение документа Расходная по регистру

    РезервыНоменклатуры. Необходимо списывать с набора

    измерений Номенклатура и ПоСчету указанное в табличной

    части Товары количество товара. Кроме того, необходимо

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

    Необходимо еще учесть резервы. Но из цифры сводного резерва

    данного товара, конечно, надо вычесть резерв, сделанный счетом-

    хозяином данной Расходной. Предусмотрите, кстати, случаи,

    когда накладная вводится вообще без счета в основании, и когда

    пользователь в накладной поставил количество большее, чем в

    счете.
  3. Необходимо создать документ СнятиеСРезерва. В табличной

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

    СнятиеСРезерва сможет снять резерв с нескольких счетов. Кроме

    того, при позиционировании на конкретной строке документа

    нужно показать в форме еще Дату Счета, Дату окончания

    резервирования, Клиента и Сумму счета.
  4. Прописать проведение документа СнятиеСРезерва. При этом

    необходимо выбирать остатки резервов на текущий документ по

    каждому из снимаемых счетов из регистра РезервыТоваров и

    выполнять для них отрицательные движения.
  5. Сделать на форме документа СнятиеСРезерва кнопку

    Заполнить и создать механизм автоматического заполнения

114



Большая самостоятельная работа Резервирование товаров и

планирование активных продаж



табличной части просроченными счетами. Для этого необходимо

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

  1. Создать отчет Зарезервировано на произвольную дату.
  2. Создать отчет ДвижениеРезервов в интервале дат, используя

    запрос по регистру РезервыТоваров. Отчет должен показывать

    информацию о начальном остатке, приходе, расходе и конечном

    остатке резервов. В отчете должен быть режимы: Кратко - когда

    представляются обобщенные данные только по товарам, и режим

    Подробно - когда движения по регистру представляются в

    разрезах и товаров, и документов, эти движения выполнивших.
  3. Сформировать отчет активность менеджеров/клиентов за период

    по данным конфигурации (то есть по документам) с разрезами

    Менеджер/Клиент и данными:

    ЗапланированоКонтактов/ОтработаноКонтактов/Выставленосчетов

    /СуммарныйОборотПродаж;
  4. Создать Оборотный регистр под предыдущее задание, прописать

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

    регистру отчет.

13

** Создать обработку ФормированиеСчетовПоЗаданиям. На диалоге разместить табличное поле, куда при выборе даты обработки попадет список контрагентов, на которых имеется отложенное задание ВыставитьСчет на эту дату. Пользователь, позиционируясь на любом из Контрагентов, будет нажимать кнопку СформироватьСчет - программно должна открываться форма нового счета с уже заполненным Контрагентом.



115



Конфигурирование в системе "1С:Предприятие 8.0 ". Решение оперативных задач

7. Заключение

Итак, уважаемый Коллега, позади пройденный курс.

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

А значит - не сдерживайте себя - беритесь сразу за работу.

А если в голове теперь много всего, но вот уверенности - не очень?

Хм, признайтесь - ведь не все практикумы выполнили? И большую самостоятельную работу, наверное, до последнего пункта не доделали... Значит - ближайшие задачи ясны? Не стесняйтесь - чем раньше сделаете - тем увереннее себя будете чувствовать.

Если уверенности совсем нет - начните самостоятельно все с первой страницы еще раз. Люди не рождаются программистами в системе 1С:Предприятие 8.0. Все проходят через стадию вот - вроде, все понимаю, но сам сделать ничего не могу. Главное захотеть и не сдаваться.

В любом случае, ко всем пожелание только одно - побольше практики! Ведь как говорил классик?

ПРАКТИКА - КРИТЕРИЙ ИСТИНЫ Успехов в Вашей, иногда нелегкой,

но такой захватывающей работе!



Содержание раздела