Məzmuna keç
Educora
Orta20 dəq9 / 14

Sənədin keçirilməsi: hərəkətlər, qalıq nəzarəti və modullar

`ОбработкаПроведения` emalçısında registr hərəkətləri yarat, mənfi qalıqlara nəzarət et, obyekt və menecer modullarını fərqləndir, hadisə abunələri ilə kodu obyektlərin özünə toxunmadan bağla.

Özünü yoxla
Bu dərsdə öyrənəcəksən
  • Keçirmə zamanı nə baş verdiyini addım-addım izah etmək
  • Hərəkətləri kodla və konstruktorla yaratmaq, qalığa nəzarət etmək
  • Obyekt modulunu, menecer modulunu və hadisə abunələrini yerində istifadə etmək

Anbardar Elvin «Malın satışı» sənədini keçirir. Proqram iki iş görməlidir: anbar qalığını azaltmaq və çay çatmırsa, sənədi keçirməmək. Bu dərsdə keçirmənin «mühərrikini» — ОбработкаПроведения prosedurunu, registr hərəkətlərini və qalıq nəzarətini yazacağıq.

Keçirmə zamanı nə baş verir

  1. Platforma tranzaksiya açır və sənədi Проведен = Истина ilə yazır.
  2. Obyekt modulunda ОбработкаПроведения(Отказ, РежимПроведения) çağırılır — burada hərəkətlər doldurulur.
  3. Записывать = Истина olan qeyd dəstləri yazılır və bu sənədin köhnə hərəkətlərini əvəz edir — ona görə təkrar keçirmə məlumatları ikiqat artırmır.
  4. Kod Отказ = Истина qoyubsa, tranzaksiya ləğv olunur: nə sənəd keçirilir, nə də hərəkətlər yazılır.

Sənədin Движения vərəqində Проведение = Разрешить olmalı və registrlər qeyd edilməlidir. Orada həm də Удаление движений xassəsi var: Удалять автоматически, Удалять автоматически при отмене проведения və ya Не удалять автоматически — bu xassə keçirmə ləğv olunanda və təkrar keçirmədə köhnə hərəkətlərlə nə ediləcəyini müəyyən edir.

Hərəkətlərin yaradılması

  1. 1
    Konstruktoru aç

    ПриходТовара sənədinin Движения vərəqində ОстаткиТоваров registrini qeyd et və Конструктор движений düyməsini bas.

  2. 2
    Mənbəni və ifadələri seç

    Cədvəl hissəsi Товары, hərəkət növü Приход. Заполнить выражения bas — konstruktor registr sahələrini eyniadlı rekvizitlərlə uyğunlaşdıracaq; qalanlarını əl ilə yaz.

  3. 3
    Kodu yoxla

    ОК bas: obyekt modulunda ОбработкаПроведения yaranacaq. F5 ilə sənədi keçir və Перейти › Остатки товаров ilə hərəkətlərə bax.

1C
// Модуль объекта документа ПриходТовара
Процедура ОбработкаПроведения(Отказ, РежимПроведения)
    Движения.ОстаткиТоваров.Записывать = Истина;
    Для Каждого СтрокаТовары Из Товары Цикл
        Движение = Движения.ОстаткиТоваров.Добавить();
        Движение.ВидДвижения = ВидДвиженияНакопления.Приход;
        Движение.Период = Дата;
        Движение.Товар = СтрокаТовары.Товар;
        Движение.Склад = Склад;
        Движение.Количество = СтрокаТовары.Количество;
    КонецЦикла;
КонецПроцедуры
Obyekt modulunda sənədin rekvizitlərinə birbaşa müraciət olunur: Дата, Склад, Товары. Регистратор sahəsini platforma özü doldurur.

Qalığa nəzarət

РасходТовара sənədi qalığı azaldır. Müasir («yeni») metodika belədir: əvvəlcə Расход hərəkətlərini yazırıq, sonra bir sorğu ilə yoxlayırıq ki, qalıq mənfiyə düşməyib. Yazmadan əvvəl БлокироватьДляИзменения = Истина qoyulur ki, paralel işləyən istifadəçilər eyni qalığı eyni anda «xərcləməsin». Mənfi qalıq tapılsa — Отказ = Истина.

1C
// Модуль объекта документа РасходТовара
Процедура ОбработкаПроведения(Отказ, РежимПроведения)
    Движения.ОстаткиТоваров.Записывать = Истина;
    Для Каждого СтрокаТовары Из Товары Цикл
        Движение = Движения.ОстаткиТоваров.Добавить();
        Движение.ВидДвижения = ВидДвиженияНакопления.Расход;
        Движение.Период = Дата;
        Движение.Товар = СтрокаТовары.Товар;
        Движение.Склад = Склад;
        Движение.Количество = СтрокаТовары.Количество;
    КонецЦикла;

    Движения.ОстаткиТоваров.БлокироватьДляИзменения = Истина;
    Движения.ОстаткиТоваров.Записать();
    ПроверитьОстатки(Отказ);
КонецПроцедуры
1C
Процедура ПроверитьОстатки(Отказ)
    Запрос = Новый Запрос;
    Запрос.Текст =
    "ВЫБРАТЬ
    |    Остатки.Товар КАК Товар,
    |    Остатки.КоличествоОстаток КАК Остаток
    |ИЗ
    |    РегистрНакопления.ОстаткиТоваров.Остатки(&Момент, Склад = &Склад) КАК Остатки
    |ГДЕ
    |    Остатки.КоличествоОстаток < 0";
    Запрос.УстановитьПараметр("Момент", Новый Граница(МоментВремени(), ВидГраницы.Включая));
    Запрос.УстановитьПараметр("Склад", Склад);

    Выборка = Запрос.Выполнить().Выбрать();
    Пока Выборка.Следующий() Цикл
        Сообщить(СтрШаблон("Товара %1 не хватает: %2", Выборка.Товар, -Выборка.Остаток));
        Отказ = Истина;
    КонецЦикла;
КонецПроцедуры
Новый Граница(…, ВидГраницы.Включая) sənədin öz hərəkətlərini də qalığa daxil edir. Sorğu dilini növbəti modulda ətraflı öyrənəcəyik.

Obyekt modulu, menecer modulu və hadisə abunələri

HaradaNə yazılırNümunə
Obyekt modulubir konkret obyektin hadisələriОбработкаПроведения, ПередЗаписью, ОбработкаПроверкиЗаполнения, ОбработкаЗаполнения
Menecer modulubütün tip üçün ixrac olunan funksiyalarДокументы.РасходТовара.ПечатнаяФорма(Ссылка)
Hadisə abunəsibir çox obyekt üçün ümumi emalçıbütün sənədlərdə tarixin yoxlanması

Hadisə abunəsi (Общие › Подписки на события) üç xassə ilə qurulur: Источник (hansı obyektlər), Событие (məsələn, ПередЗаписью) və Обработчик — server ümumi modulunda ixrac olunan prosedur. Bu, tipik konfiqurasiyanın obyektlərinin modullarına toxunmadan onların davranışını genişləndirməyə imkan verir.

1C
// Общий модуль ПроверкиДокументов (флаг «Сервер»)
Процедура ПроверитьДатуПередЗаписью(Источник, Отказ, РежимЗаписи, РежимПроведения) Экспорт
    Если Источник.ОбменДанными.Загрузка Тогда
        Возврат;  // при загрузке из обмена проверки не выполняем
    КонецЕсли;
    Если Источник.Дата > КонецДня(ТекущаяДатаСеанса()) Тогда
        Сообщить("Нельзя записать документ будущей датой");
        Отказ = Истина;
    КонецЕсли;
КонецПроцедуры
Sənədin ПередЗаписью hadisəsinə abunə emalçısı. ОбменДанными.Загрузка yoxlaması məlumat mübadiləsi zamanı yoxlamaları söndürmək üçün standart qaydadır.

Əsas fikirlər

  • Keçirmə tranzaksiyada gedir: ОбработкаПроведения hərəkətləri doldurur, Отказ = Истина hər şeyi ləğv edir.
  • Записывать = Истина olan qeyd dəstləri sənədin köhnə hərəkətlərini əvəz edir.
  • Yeni metodika: hərəkətləri yaz → Остатки virtual cədvəli ilə mənfi qalığı bir sorğu ilə yoxla.
  • Obyekt modulu — bir obyektin hadisələri, menecer modulu — bütün tipin funksiyaları.
  • Hadisə abunələri obyektlərin moduluna toxunmadan davranışı genişləndirir.

Özünü yoxla

10 sual. Hər düzgün cavab XP qazandırır.

1 / 10
Sənədi ikinci dəfə keçirəndə registrdəki köhnə hərəkətlərə nə olur?