Алгоритм решения задачи №5 (ОУ)

(за правильность не ручаюсь, буду благодарен за замечания)

Особенности условия задачи

  1. Складской учет не ведется.
  2. Товары и услуги указываются в одной табличной части.
  3. Списание себестоимости товаров организовано по партиям, в зависимости от метода списания себестоимости (FIFO, по средней или LIFO), который может меняться раз в день (изменение фиксируется соответствующим документом).
  4. Документы задним числом не вводятся, старые документы могут перепроводиться в неоперативном режиме (т.е. необходимо будет уточнять параметр МоментВремени при проведении расходной накладной)
    [свернуть]

1. Настроить конфигурацию

  1. Включить возможность использования обычных форм (нужно для Консоли запросов):
    • Сервис – Параметры – Общие - флаг «Управляемое приложение и обычное приложение»;
    • свойства конфигурации – флаг «Использовать обычные формы в управляемом приложении»;
  2. Настройка конфигурации (свойства):

[свернуть]

2. Настройка интерфейса (через Подсистемы):

  1. Создать Подсистемы (порядок – согласно порядку задачи: <конфигурация> – пкм – Открыть командный интерфейс):
    • Оперативный учет;
    • Бухгалтерский учет;
    • Расчеты;
    • Бизнес-процессы (или Управляемые формы) – по задаче;
    • Сервис.
  2. Упорядочить подсистемы можно в режиме 1С Предприятие (Настройки – Настройка панели разделов).
  3. В созданные подсистемы (Подсистемы – пкм – Все подсистемы) добавить те объекты, которые должны в них входить (отображаться в интерфейсе):
    • Создать Группы команд:
      1. Справочники;
      2. Документы;
      3. ПланыВидовХарактеристик;
      4. РегистрыСведений;
      5. РегистрыОУ;
      6. РегистрыБУ;
      7. РегистрыСПР.
    • Например, подсистема "Оперативный учет" может включать:
      1. Справочник Номенклатура;
      2. Документ Приходная накладная;
      3. Документ Расходная накладная;
      4. Регистр накопления Остатки номенклатуры и т.д.
  4. Распределить объекты подсистем по соответствующим группам команд.
  5. Настроить интерфейс клиентского приложения (<конфигурация> – пкм – Открыть интерфейс клиентского приложения):
    • Сверху убрать Панель функций текущего раздела, добавить Панель открытых;
    • Слева – Панель разделов.
  6. Включить возможность использования Консоли запросов (запускается только под Толстым клиентом):
    • В модуле формы консоли изменить обработку исключения Предупреждение(Сред(ОписаниеОшибки(),69)); на ПоказатьПредупреждение(,Сред(ОписаниеОшибки(),69));

[свернуть]

3. Определить список документов и выполнить начальную настройку конфигурации

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

Документ УстановкаУчетнойПолитики
  1. Добавим документ УстановкаУчетнойПолитики, реквизит МетодСписания, тип ПеречислениеСсылка.УчетнаяПолитика.
  2. Создать форму документа.
  3. Не забыть установить его регистратором для регистра сведений, в котором будет храниться учетная политика.
  4. Оформить процедуру ОбработкаПроведения:

[свернуть]

Документ РасходнаяНакладная
  1. Добавим в документ РасходнаяНакладная реквизит МетодСписания, тип ПеречислениеСсылка.УчетнаяПолитика.
  2. Создадим форму документа, для поля МетодСписания установим свойство Доступность - Ложь.
  3. Оформим в процедуре формы ПриСозданииНаСервере получение значения МетодСписания:

[свернуть]
  • Если в условии упоминаются услуги, то сразу готовим конфигурацию:
    • проверяем (создаем) Перечисления.ВидыНоменклатуры со значениями Товар, Услуга ;
    • в справочник Номенклатура добавляем реквизит ВидНоменклатуры , тип ПеречислениеСсылка.ВидыНоменклатуры ;
  • Если в условии упоминается учетная политика (ФИФО, ЛИФО, средняя), то сразу готовим конфигурацию:
    • проверяем (создаем) Перечисления.УчетнаяПолитика со значениями ФИФО, ЛИФО, Средняя;
    • создать регистр сведений (периодический) УчетнаяПолитика (по нему будем определять метод учетной политики на дату документа):
      • периодичность - по заданию (например, В пределах года);
      • режим записи - Независимый;
      • добавить его в подсистему (например, ОУ);
      • вкладка "Данные" - добавить ресурс МетодСписанияСебестоимости с типом ПеречислениеСсылка.УчетнаяПолитика .
  • Если ведется складской учет, то сразу готовим конфигурацию:
    • добавляем справочник Склады;
    • в регистры накопления добавить измерение Склад , тип СправочникСсылка.Склады;
  • (При желании, сэкономит время на правильный ввод данных в документы) Настроить автоподсчет сумм (строка и документ) в Приходной и Расходной накладных (общий модуль + модули форм документов, в свойствах общего модуля проверить флаги «Клиент», «Сервер»):
    • при изменении в строке табличной части Количество и Цена;
    • при удалении или добавлении копированием.

Код для подсчета сумм в стрoке и по документу

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

Создать общий модуль РаботаСДокументами :

Создать форму документа, в модуле формы определить процедуры:

[свернуть]

[свернуть]

4. Спроектировать регистры (место хранения данных)

Общий алгоритм:

  1. Определить количество ресурсов – по накапливаемым данным (количество, сумма, себестоимость, сумма продажи и т.д.). Добавить в соответствующий регистр, проверив соответствие типа, длины и точности.
  2. Определить количество измерений – по детализации ресурсов (склад, партия, контрагент, номенклатура и т.д.). Добавить соответствующие измерения.
  3. Проверить установку флага «Запрет незаполненных значений» (при необходимости).
  4. Регистр накопления:
    • Прочее - флаг «Разрешить разделение итогов» - включить.

Проанализируем условие задачи и таблицы из условия:

Метод списания себестоимости (FIFO, по средней или LIFO) может меняться каждый день, изменение фиксируется соответствующим документом.

Т.о. нам понадобится:

  1. документ УстановкаУчетнойПолитики (уже создали ранее), фиксирующий изменение учетной политики;
  2. регистр сведений УчетнаяПолитика, Периодичность - В пределах дня, Режим записи - Подчинение регистратору, вкладка Регистратор - УстановкаУчетнойПолитики, ресурс МетодСписания (тип ПеречислениеСсылка.УчетнаяПолитика);
  3. регистр накопления ОстаткиНоменклатурыБезПартий - для учета остатков при применении метода списания "По средней".

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

Т.о. нам понадобятся 3 регистра накопления:

  1. первый -  остатков;
  2. второй - остатков без партий;
  3. третий - оборотный, по продажам.

В регистрах будут храниться:

  1. Регистр ОстаткиНоменклатуры (для ФИФО и ЛИФО):
    • измерения:
      1. Номенклатура, тип СправочникСсылка.Номенклатура ;
      2. Партия, тип ДокументСсылка.ПриходнаяНакладная ;
    • ресурсы:
      1. Количество;
      2. Себестоимость, тип Число (длина 12, точность 2);
    • регистраторы: ПриходнаяНакладная, РасходнаяНакладная;
  2. Регистр ОстаткиНоменклатурыБезПартий (для По средней):
    • измерения:
      1. Номенклатура, тип СправочникСсылка.Номенклатура ;
    • ресурсы:
      1. Количество;
      2. Себестоимость, тип Число (длина 12, точность 2);
    • регистраторы: ПриходнаяНакладная, РасходнаяНакладная;
  3. Регистр Продажи (вид регистра Обороты) (видео от Леонтьева, с 30 мин):
    • измерение:
      1. Номенклатура, тип СправочникСсылка.Номенклатура ;
    • ресурсы:
      1. Количество;
      2. Себестоимость (дублирование, НО упростит формирование отчета);
      3. СуммаПродажи, тип Число (длина 12, точность 2);

Замечание: Решение на двух регистрах более эффективно (работает быстрее, размеры таблиц меньше), но менее достоверно (необходима синхронизация регистров, на экзамене синхронизацию программно НЕ ДЕЛАТЬ!)

[свернуть]

5. Настройка документов

  1. Добавить реквизиты по заданию (поле Партия в шапку документа РасходнаяНакладная).
  2. Добавить и настроить форму:
    • форму документов создавать после добавления всех реквизитов документа (ускорение разработки).
    • в командном интерфейсе форм в пункт «Перейти» добавить ссылки на регистры, установив соответствующие флажки.
  3. На вкладке «Движения»:
    • Проведение – Разрешить (при ручном вводе движений – Запрещено);
    • Оперативное проведение – Разрешить;
    • Удаление движений – Удалять автоматически при отмене проведения.
  4. Движения формировать через конструктор (табличная часть выбирается только тогда, когда из неё заполняются измерения!) и определить методику проведения:
    • если для заполнения набора записей данные регистра не нужны – новая (если новая и приход – то контроль не нужен);
    • если для заполнения набора записей данные регистра нужны - старая.

[свернуть]

6.1 Обработка проведения документа ПриходнаяНакладная

Особенности:

  1. Приходная накладная записывает движения в регистры накопления ОстаткиНоменклатуры и ОстаткиНоменклатурыБезПартий.
  2. В запросе:
    • условие - по ссылке на документ;
    • группировка по Номенклатура,
    • суммируем Количество и Себестоимость.

Порядок действий:

  1. Отметить ПриходнаяНакладная как регистратор для регистров ОстаткиНоменклатуры и ОстаткиНоменклатурыБезПартий;
  2. Сформировать движения (через конструктор), вручную заполнив в колонке "Выражение" поля Партия и Себестоимость; Задача ОУ_1 ПриходнаяНакладная
  3. Сформировать запрос для выборки данных из документа для движений, указав:
    • условия: ссылка на документ, вид номенклатуры - Товар;
    • в качестве Партия  - Ссылка;
    • в качестве Себестоимость - Выборка.Сумма (код процедуры ОбработкаПроведения см. ниже).
  4. Завести пользовательские данные в режиме 1С Предприятие, провести документ, проверить движения (добавить ссылку на соответствующий регистр в форму документа: (три верикальные точки) – Окно – Настройка панели навигации формы).

Код процедуры ОбработкаПроведения документа ПриходнаяНакладная:

[свернуть]

6.2 Обработка проведения документа РасходнаяНакладная

Код процедуры ОбработкаПроведения

[свернуть]

Особенности:

  1. В документ РасходнаяНакладная нужно добавить реквизит МетодСписания, тип  ПеречислениеСсылка.УчетнаяПолитика (т.к. документ может проводиться неоперативно, то есть необходимость отслеживать метод списания на момент создания документа).
  2. При создании формы на сервере обработать получение метода списания и его запись в реквизит МетодСписания (см. выше).
  3. При обработке проведения не забывать о проверке на "товар - услуга" (услуги в регистр накопления ОстаткиНоменклатуры не пишутся, и т.д.).
  4. Т.к. документы задним числом не вводятся, но старые документы могут перепроводиться в неоперативном режиме, то необходимо будет уточнять параметр МоментВремени.
  5. Сформировать движения (через конструктор, табличная часть выбирается только тогда, когда из неё заполняются измерения!) и определить методику контроля остатков:
      • если для заполнения набора записей данные регистра не нужны – новая (если новая и приход – то контроль не нужен);
      • если для заполнения набора записей данные регистра нужны - старая (если используются два регистра, то возможен вариант использования разных методик).

Порядок действий:

  1. Определить текущий метод списания себестоимости (в этой задаче он определяется для документа в процедуре формы документа ПриСозданииНаСервере()  )
    Код

    [свернуть]
  2. Очистить движения регистров.
    Код

    [свернуть]
  3. Устанавливаем на регистры блокировку: 
    • копируем из Синтакс-помощника;
    • исправляем для обоих регистров накопления;
      Код

      [свернуть]
  4. Получить из регистра данные для проведения: 
    • запросом с обработкой результатов получаем данные для проведения из табличной части и регистра накопления ОстаткиНоменклатуры.Остатки(с отбором ВидНоменклатуры <> Услуга):
      1. выбираем из табличной части Номенклатура, Количество, Номенклатура.Представление, Сумма;
      2. группируем по Номенклатура (убираем возможные дубли);
      3. суммируем по Количество (определяем общее количество списываемой номенклатуры для контроля остатков), Сумма (определяем сумму продажи);
      4. ставим условия:
        • Ссылка на эту РасходнуюНакладную;
        • условие на  ВидНоменклатуры при отборе ставить не будем, т.к. в регистр Продажи должны писаться не только Товары, но и Услуги;
      5. помещаем во временную таблицу;
      6. индексируем по Номенклатура (будем далее соединять по этому полю);
      7. добавляем второй запрос пакета запросов для получения данных из регистра накопления ОстаткиНоменклатуры.Остатки;
      8. добавляем временную таблицу, выбираем НоменклатураНоменклатура.Представление(представления нужны для вывода сообщений), Количество, СуммаВидНоменклатуры;
      9.  добавляем регистры накопления, устанавливаем параметры виртуальной таблицы;
        Рисунки

        [свернуть]
      10. выбираем из регистров КоличествоОстаток, СебестоимостьОстаток, КоличествоБезПартийОстаток, СебестоимостьБезПартийОстаток (для контроля остатков), обернуть в ЕСТЬNULL() (т.к. левое соединение будет);
      11. связь таблиц по номенклатуре, ЛЕВОЕ соединение;
      12. на вкладке "Порядок" из регистра ОстаткиНоменклатурыОстатки добавить поле Партия.МоментВремениСортировка -  Возрастание (для ФИФО);
      13. на вкладке "Итоги" построим иерархию для партий товаров:
        • "Группировочное поле" - Номенклатура;
        • "Итоговое поле" - СУММА(КоличествоОстаток) из регистра, МАКСИМУМ(Количество) из документа - именно их мы будем сравнивать при контроле остатков, МАКСИМУМ(Сумма) - сумма продажи, МАКСИМУМ(НоменклатураВидНоменклатуры);
          Рисунок

          Задача ОУ1

          [свернуть]
      14. закрываем конструктор запросов.
    • откорректируем текст запроса по учетной политике (ФИФО или ЛИФО);

      Код

      [свернуть]
    • устанавливаем параметры запроса:
      1. МоментВремени (в зависимости от режима проведения)

        [свернуть]
      2. Ссылкакак Ссылка();
        Код запроса к этому моменту

        [свернуть]
    • выполняем запрос и обходим группы номенклатуры;
      Код

      [свернуть]
    • выполняем контроль остатков по сгруппированным в ИТОГАХ номенклатурным позициям (детальные записи при нехватке обходить смысла нет);
      Код

      [свернуть]
    • списываем номенклатуру по партиям с контролем "проблемы копеек" и записываем движения в регистр ОстаткиНоменклатуры (только, если не Услуга);
      Код

      [свернуть]
    • записываем движения в регистр Продажи и взводим флаги на запись;
      Код

      [свернуть]
  5. Завести пользовательские данные в режиме 1С Предприятие, провести документ, проверить движения (добавить ссылку на соответствующий регистр в форму документа: (три верикальные точки) – Окно – Настройка панели навигации формы).
    [свернуть]
7. Сделать отчет по задаче

Например, создадим отчет следующего вида:

  1. Создать новый отчет ПродажиЗаПериод, разместить в нужной подсистеме (например, ОУ).
  2. Добавить новый НаборДанных-запрос.
  3. В конструкторе запроса:
    • добавить таблицу регистр ПродажиОбороты;
    • выбрать из него поля Номенклатура, КоличествоОборот, СебестоимостьОборот, СуммаПродажиОборот (для удобства можно переименовать, убрав ...Оборот);
    • в параметрах виртуальной таблицы регистра ПродажиОбороты указать параметры &НачалоПериода и &КонецПериода ;
  4. На вкладке Вычисляемые поля добавить вычисляемое поле Прибыль, которое рассчитывается как «Сумма продаж» – «Себестоимость» (поле Выражение), установить соответствующий заголовок.
  5. Добавить ресурсы (все).
  6. На вкладке Параметры добавить СтандартныйПериод ;
    Рисунок

    Добавление СтандартныйПериод

    [свернуть]
  7. На вкладке Настройки :
    1. добавить в отчет:
      • новую группировку (детальные записи, не выбирая поле), без иерархии, установить для неё имя Заголовок (здесь будем выводить текст "Продажи за период...");
        • внизу выбрать <Детальные записи> (Заголовок), перейти на вкладку Другие настройки - (в самый низ) - Вариант использования группировки - выбрать  Дополнительная информация ;
      • новую группировку (детальные записи, не выбирая поле), без иерархии;
    2. внизу выбрать Отчет, перейти на вкладку Другие настройки :
      • Макет оформления - Античный ;
      • Расположение общих итогов по горизонтали (и по вертикали) - Нет ;
      • Выводить параметры - выбрать  Не выводить ;
  8. вверху на  вкладке Макеты добавить заголовок (как в задании):
      1. добавить макет группировки, выбрать группировку Заголовок;
      2. в табличном документе в ячейке размещаем текст заголовка из задания с параметрами ("Продажи за период с [НачалоПериода] по [КонецПериода]"), форматируем шрифт как  в задании, в свойствах ячейки меняем заполнение на Шаблон, связываем эту ячейку с макетом Заголовок в поле Область ;
      3. связываем параметры [НачалоПериода] и [КонецПериода] шаблона с соответствующими параметрами отчета (в поле ПараметрыДанных);
      4. форматируем вывод даты в свойствах ячейки (Формат - Дата) как в задании.
  9. возвращаемся на вкладку Настройки, далее - вниз, "Настройки: Отчет":
    • Параметры: Период - Произвольный период, указываем дату начала и дату окончания как в шапке отчета, устанавливаем флаг "Включать в пользовательские настройки";
      Рисунок
      [свернуть]

      [/spoiler2] 

    • Выбранные поля - Номенклатура ;
    • устанавливаем выравнивание в ячейках по центру:  Условное оформление, в колонках: Оформление - Горизонтальное положение, Оформляемые поля - выбрать все (кроме Номенклатура), Область использования - Везде ;

Окончательно внешний вид отчета (например, выравнивание в колонках для шапки таблицы и данных в колонках) также настраивается в режиме Предприятие через меню "Ещё" - "Изменить вариант" - "Условное оформление".

[свернуть]
7.1. Сделать отчет по задаче

Например, создадим отчет следующего вида:

Отчет по задаче ОУ 3

  1. Создать новый отчет ОтчетПоЗадачеОУ3_1, разместить в нужной подсистеме (например, ОУ).
  2. Вкладка Наборы данных - добавить новый НаборДанных-запрос.
  3. В конструкторе запроса:
    • добавить таблицу регистр ОстаткиНоменклатурыОстатки;
    • в параметрах виртуальной таблицы регистра ОстаткиНоменклатурыОстатки указать параметр Период - &МоментВремени , Использование - Всегда (уберет поле флажка в отчете);
    • выбрать из регистра поля Номенклатура, Партия, СебестоимостьОстаток, КоличествоОстаток (для удобства можно переименовать, убрав ...Остаток);
  4. На вкладке Порядок конструктора запроса:
    • добавить поля Номенклатура, Партия,  в колонке Сортировка – Возрастание ;
  5. Вернуться на вкладку Наборы данных, установить именования полей таблицы согласно рисунку, а также выражение представления для вывода текста "Прих. накладная №..." "Прих. накладная № " + Партия.Номер (номер будет выводиться с лидирующими нулями, если нужен сокращенный номер, то его можно установить в накладной);
    Рисунок

    Отчет по задаче 3 оперативный учет

    [свернуть]
  6. Вкладка Ресурсы - добавляем ресурсы Количество и Себестоимость (т.к. нужно будет суммировать по группировке Номенклатура).
  7. На вкладке Параметры добавить МоментВремени , тип Дата (можно использовать и стандартный Период, но нужно тогда изменить настройки регистра);
  8. На вкладке Настройки :
    1. добавить в отчет:
      • новую группировку (детальные записи, не выбирая поле), без иерархии, установить для неё имя Заголовок (здесь будем выводить текст "Продажи за период...");
        • внизу выбрать <Детальные записи> (Заголовок), перейти на вкладку Другие настройки - (в самый низ) - Вариант использования группировки - выбрать  Дополнительная информация ;
      • новую группировку Номенклатура, без иерархии, выбранные поля - Номенклатура, Количество, Стоимость (выведет суммы в строке группировки);
      • новую группировку (детальные записи, не выбирая поле), без иерархии, подчинить группировке Номенклатура, выбрать поля Партия, Количество, Стоимость ;
    2. внизу выбрать Отчет, перейти на вкладку Другие настройки :
      • Выводить параметры - выбрать  Не выводить ;
      • Макет оформления - Античный ;
      • Расположение общих итогов по горизонтали (и по вертикали) - Нет ;
      • Расположение полей группировок - Отдельно и только в итогах (выведет поле Номенклатура в отчете как отдельное);
  9. вверху на  вкладке Макеты добавить заголовок (как в задании):
      1. добавить макет группировки, выбрать группировку Заголовок;
      2. в табличном документе в ячейке размещаем текст заголовка из задания с параметрами ("Остатки товаров на [МоментВремени]"), форматируем шрифт как  в задании, в свойствах ячейки меняем заполнение на Шаблон, связываем эту ячейку с макетом Заголовок в поле Область ;
      3. связываем параметр [МоментВремени] шаблона с соответствующими параметрами отчета (в поле ПараметрыДанных);
      4. форматируем вывод даты в свойствах ячейки (Формат - Дата) как в задании.
  10. возвращаемся на вкладку Настройки, далее - вниз, "Настройки: Отчет":
    • Параметры: МоментВремени, указываем дату как в шапке отчета, устанавливаем флаг "Включать в пользовательские настройки";
    • Выбранные поля - все выбрать ;
    • устанавливаем Условное оформление, как на рисунке из задания:
      1. меняем шрифт заголовка (группировка Дополнительная информация) ;
      2. для группировки Номенклатура меняем цвет фона и устанавливаем полужирный шрифт в группировке;
      3. для детальных записей устанавливаем шрифт;
      4. для всего отчета - цвет текста, горизонтальное и вертикальное выравнивание, шрифт и отступ (при необходимости).
  11. При желании можно сразу изменить именование варианта (представление).

[свернуть]

Добавить комментарий

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