- 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
- Platforma tranzaksiya açır və sənədi
Проведен = Истинаilə yazır. - Obyekt modulunda
ОбработкаПроведения(Отказ, РежимПроведения)çağırılır — burada hərəkətlər doldurulur. Записывать = Истина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.- 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ı
- 1Konstruktoru aç
ПриходТовараsənədininДвиженияvərəqindəОстаткиТоваровregistrini qeyd et vəКонструктор движенийdüyməsini bas. - 2Mə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. - 3Kodu yoxla
ОКbas: obyekt modulundaОбработкаПроведенияyaranacaq. F5 ilə sənədi keçir vəПерейти › Остатки товаровilə hərəkətlərə bax.
// Модуль объекта документа ПриходТовара
Процедура ОбработкаПроведения(Отказ, РежимПроведения)
Движения.ОстаткиТоваров.Записывать = Истина;
Для Каждого СтрокаТовары Из Товары Цикл
Движение = Движения.ОстаткиТоваров.Добавить();
Движение.ВидДвижения = ВидДвиженияНакопления.Приход;
Движение.Период = Дата;
Движение.Товар = СтрокаТовары.Товар;
Движение.Склад = Склад;
Движение.Количество = СтрокаТовары.Количество;
КонецЦикла;
КонецПроцедурыДата, Склад, Товары. Регистратор 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 — Отказ = Истина.
// Модуль объекта документа РасходТовара
Процедура ОбработкаПроведения(Отказ, РежимПроведения)
Движения.ОстаткиТоваров.Записывать = Истина;
Для Каждого СтрокаТовары Из Товары Цикл
Движение = Движения.ОстаткиТоваров.Добавить();
Движение.ВидДвижения = ВидДвиженияНакопления.Расход;
Движение.Период = Дата;
Движение.Товар = СтрокаТовары.Товар;
Движение.Склад = Склад;
Движение.Количество = СтрокаТовары.Количество;
КонецЦикла;
Движения.ОстаткиТоваров.БлокироватьДляИзменения = Истина;
Движения.ОстаткиТоваров.Записать();
ПроверитьОстатки(Отказ);
КонецПроцедурыПроцедура ПроверитьОстатки(Отказ)
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| Остатки.Товар КАК Товар,
| Остатки.КоличествоОстаток КАК Остаток
|ИЗ
| РегистрНакопления.ОстаткиТоваров.Остатки(&Момент, Склад = &Склад) КАК Остатки
|ГДЕ
| Остатки.КоличествоОстаток < 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
| Harada | Nə yazılır | Nümunə |
|---|---|---|
| Obyekt modulu | bir konkret obyektin hadisələri | ОбработкаПроведения, ПередЗаписью, ОбработкаПроверкиЗаполнения, ОбработкаЗаполнения |
| Menecer modulu | bütün tip üçün ixrac olunan funksiyalar | Документы.РасходТовара.ПечатнаяФорма(Ссылка) |
| Hadisə abunəsi | bir ç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.
// Общий модуль ПроверкиДокументов (флаг «Сервер»)
Процедура ПроверитьДатуПередЗаписью(Источник, Отказ, РежимЗаписи, РежимПроведения) Экспорт
Если Источник.ОбменДанными.Загрузка Тогда
Возврат; // при загрузке из обмена проверки не выполняем
КонецЕсли;
Если Источник.Дата > КонецДня(ТекущаяДатаСеанса()) Тогда
Сообщить("Нельзя записать документ будущей датой");
Отказ = Истина;
КонецЕсли;
КонецПроцедурыПередЗаписью 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.