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

Видео по аналогичной задаче

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

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

  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. Пропускаем: Если ведется складской учет, то сразу готовим конфигурацию:
    • добавляем справочник Склады;
    • в регистры накопления добавить измерение Склад , тип СправочникСсылка.Склады;
  5. (При желании, сэкономит время на правильный ввод данных в документы) Настроить автоподсчет сумм (строка и документ) в Приходной и Расходной накладных (общий модуль + модули форм документов, в свойствах общего модуля проверить флаги «Клиент», «Сервер»):
    • при изменении в строке табличной части Количество и Цена;
    • при удалении или добавлении копированием.

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

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

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

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

[свернуть]

[свернуть]

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

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

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

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

Необходимо построить отчеты по продажам товаров за период и остаткам товара на указанную дату. Колонки "Прибыль", "Интервал" и "Срок" в отчете будут содержать вычисляемые данные.

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

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

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

  1. Регистр ОстаткиНоменклатуры:
    • измерения:
      1. Номенклатура, тип СправочникСсылка.Номенклатура ;
      2. Партия, тип ДокументСсылка.ПриходнаяНакладная ;
    • ресурсы:
      1. Количество;
      2. Себестоимость, тип Число (длина 12, точность 2);
  2. Регистр Продажи (вид регистра Обороты) (видео от Леонтьева, с 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. Сформировать движения (через конструктор, табличная часть выбирается только тогда, когда из неё заполняются измерения!) и определить методику контроля остатков:
      • если для заполнения набора записей данные регистра не нужны – новая (если новая и приход – то контроль не нужен);
      • если для заполнения набора записей данные регистра нужны - старая (если используются два регистра, то возможен вариант использования разных методик).

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

  1. Определить текущий метод списания себестоимости.
    Код

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

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

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

        Задача 4 оперативный учет

        [свернуть]
      10. выбираем из регистра КоличествоОстаток, СебестоимостьОстаток (для контроля остатков), обернуть в ЕСТЬNULL() (т.к. левое соединение);
      11. связь таблиц по номенклатуре, ЛЕВОЕ соединение;
      12. закрываем конструктор запросов.
    • устанавливаем параметры запроса:
      1. МоментВремени как МоментВремени();
      2. Ссылкакак Ссылка;
        Код запроса

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

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

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

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

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

      [свернуть]

       

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

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

[свернуть]
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 для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.