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

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

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

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

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.  добавляем регистр накопления, устанавливаем параметры виртуальной таблицы;
        Рисунки

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

      Код

      [свернуть]
      Код запроса

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

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

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

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

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

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

Видео https://youtu.be/KoYAofD5qws

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

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

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

      [/spoiler2] 

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

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

[свернуть]

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

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