İçeriğe geç
Educora
Orta20 dk9 / 14

Belge işleme: hareketler, bakiye kontrolü ve modüller

`ОбработкаПроведения` işleyicisinde register hareketleri oluştur, negatif bakiyeleri denetle, nesne ve yönetici modüllerini ayırt et ve nesnelerin kendisine dokunmadan olay abonelikleriyle kod bağla.

Kendini test et
Bu derste öğreneceklerin
  • İşleme sırasında ne olduğunu adım adım açıklamak
  • Hareketleri kodla ve sihirbazla oluşturmak, bakiyeyi denetlemek
  • Nesne modülünü, yönetici modülünü ve olay aboneliklerini yerinde kullanmak

Depocu Elvin bir “Mal satışı” belgesini işliyor. Program iki şey yapmalı: stok bakiyesini azaltmak ve çay yetmiyorsa belgeyi işlememek. Bu derste işlemenin motorunu yazacağız: ОбработкаПроведения prosedürü, register hareketleri ve bakiye kontrolü.

İşleme sırasında ne olur

  1. Platform bir işlem açar ve belgeyi Проведен = Истина ile yazar.
  2. Nesne modülünde ОбработкаПроведения(Отказ, РежимПроведения) (Posting) çağrılır; hareketler burada doldurulur.
  3. Записывать = Истина olan kayıt kümeleri yazılır ve bu belgenin eski hareketlerinin yerine geçer; bu yüzden yeniden işleme verileri ikiye katlamaz.
  4. Kod Отказ = Истина (Cancel) atadıysa işlem geri alınır: ne belge işlenir ne de hareketler yazılır.

Belgenin Движения (Register kayıtları) sekmesinde Проведение (İşleme) Разрешить (İzin ver) olmalı ve register'lar işaretlenmelidir. Orada ayrıca Удаление движений özelliği bulunur: Удалять автоматически, Удалять автоматически при отмене проведения ya da Не удалять автоматически; işleme iptalinde ve yeniden işlemede eski hareketlere ne olacağını belirler.

Hareketleri oluşturma

  1. 1
    Sihirbazı aç

    ПриходТовара belgesinin Движения sekmesinde ОстаткиТоваров register'ını işaretle ve Конструктор движений (Hareket sihirbazı) düğmesine tıkla.

  2. 2
    Kaynağı ve ifadeleri seç

    Tablo bölümü Товары, hareket türü Приход. Заполнить выражения (İfadeleri doldur) düğmesine tıkla; sihirbaz register alanlarını aynı adlı özniteliklerle eşleştirir, geri kalanını elle yaz.

  3. 3
    Kodu kontrol et

    ОК'e tıkla: nesne modülünde ОбработкаПроведения oluşur. F5 ile bir belge işle ve hareketlerini Перейти › Остатки товаров (Git) ile gör.

1C
// Модуль объекта документа ПриходТовара
Процедура ОбработкаПроведения(Отказ, РежимПроведения)
    Движения.ОстаткиТоваров.Записывать = Истина;
    Для Каждого СтрокаТовары Из Товары Цикл
        Движение = Движения.ОстаткиТоваров.Добавить();
        Движение.ВидДвижения = ВидДвиженияНакопления.Приход;
        Движение.Период = Дата;
        Движение.Товар = СтрокаТовары.Товар;
        Движение.Склад = Склад;
        Движение.Количество = СтрокаТовары.Количество;
    КонецЦикла;
КонецПроцедуры
Nesne modülünde belgenin özniteliklerine doğrudan erişilir: Дата, Склад, Товары. Регистратор alanını platform kendisi doldurur.

Bakiye kontrolü

РасходТовара belgesi bakiyeyi azaltır. Modern (“yeni”) yöntem şöyledir: önce Расход hareketleri yazılır, ardından tek bir sorguyla bakiyenin eksiye düşmediği kontrol edilir. Yazmadan önce БлокироватьДляИзменения = Истина (LockForUpdate) ayarlanır; böylece paralel çalışan kullanıcılar aynı stoku aynı anda “harcayamaz”. Negatif bakiye bulunursa Отказ = Истина.

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

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

    Выборка = Запрос.Выполнить().Выбрать();
    Пока Выборка.Следующий() Цикл
        Сообщить(СтрШаблон("Товара %1 не хватает: %2", Выборка.Товар, -Выборка.Остаток));
        Отказ = Истина;
    КонецЦикла;
КонецПроцедуры
Новый Граница(…, ВидГраницы.Включая), belgenin kendi hareketlerini de bakiyeye dahil eder. Sorgu dilini bir sonraki modülde ayrıntılı öğreneceğiz.

Nesne modülü, yönetici modülü ve olay abonelikleri

NeredeNe yazılırÖrnek
Nesne modülübelirli bir nesnenin olaylarıОбработкаПроведения, ПередЗаписью, ОбработкаПроверкиЗаполнения, ОбработкаЗаполнения
Yönetici modülütüm tür için dışa aktarılan fonksiyonlarДокументы.РасходТовара.ПечатнаяФорма(Ссылка)
Olay aboneliğibirçok nesne için tek işleyicitüm belgelerde tarih kontrolü

Bir olay aboneliği (Общие › Подписки на события) üç özellikle kurulur: Источник (Kaynak — hangi nesneler), Событие (Olay, örneğin ПередЗаписью) ve Обработчик (İşleyici) — bir sunucu ortak modülündeki dışa aktarılan prosedür. Tipik bir konfigürasyonun nesnelerinin davranışını onların modüllerine dokunmadan genişletmeyi sağlar.

1C
// Общий модуль ПроверкиДокументов (флаг «Сервер»)
Процедура ПроверитьДатуПередЗаписью(Источник, Отказ, РежимЗаписи, РежимПроведения) Экспорт
    Если Источник.ОбменДанными.Загрузка Тогда
        Возврат;  // при загрузке из обмена проверки не выполняем
    КонецЕсли;
    Если Источник.Дата > КонецДня(ТекущаяДатаСеанса()) Тогда
        Сообщить("Нельзя записать документ будущей датой");
        Отказ = Истина;
    КонецЕсли;
КонецПроцедуры
Bir belgenin ПередЗаписью (BeforeWrite) olayı için abonelik işleyicisi. ОбменДанными.Загрузка kontrolü, veri alışverişi sırasında denetimleri atlamanın standart yoludur.

Önemli noktalar

  • İşleme bir işlem içinde yürür: ОбработкаПроведения hareketleri doldurur, Отказ = Истина her şeyi iptal eder.
  • Записывать = Истина olan kayıt kümeleri belgenin eski hareketlerinin yerine geçer.
  • Yeni yöntem: hareketleri yaz → Остатки sanal tablosuna tek sorguyla negatif bakiyeyi kontrol et.
  • Nesne modülü — bir nesnenin olayları; yönetici modülü — tüm türün fonksiyonları.
  • Olay abonelikleri, nesnelerin modüllerine dokunmadan davranışı genişletir.

Kendini test et

10 soru. Her doğru cevap XP kazandırır.

1 / 10
Bir belge ikinci kez işlendiğinde register'daki eski hareketlerine ne olur?