///<summary>
        /// Finding inconsistency between document and its applications.
        /// Run this method at end point of the "Release" process.
        /// Validating case:
        /// Released flag for document and its applications should always
        /// be the same after the "Release" process.
        ///</summary>
        public DataIntegrityValidator <TRegister> CheckApplicationsReleasedForDocument <TAdjust, TAdjgDocType, TAdjgRefNbr, TReleased>(bool disableCheck = false)
            where TAdjust : class, IBqlTable, new()
            where TAdjgDocType : IBqlField
            where TAdjgRefNbr : IBqlField
            where TReleased : IBqlField
        {
            if (IsSkipCheck(disableCheck))
            {
                return(this);
            }

            PXSelectBase <TAdjust> selectTAdjust = new PXSelect <
                TAdjust,
                Where <
                    TAdjgDocType, Equal <Required <TAdjgDocType> >,
                    And <TAdjgRefNbr, Equal <Required <TAdjgRefNbr> >,
                         And <TReleased, NotEqual <Required <TReleased> > > > > >(_graph);

            TAdjust adj = selectTAdjust.SelectSingle(_doc.DocType, _doc.RefNbr, _released);

            if (adj != null)
            {
                PXTrace.WriteInformation(_docCache.GetFullDescription(_doc));
                PXTrace.WriteInformation(selectTAdjust.Cache.GetFullDescription(adj));

                if (_released == true)
                {
                    _errors.Add(new InconsistencyError <InconsistencyCode.releasedDocumentHasUnreleasedApplications>(
                                    new RecordContextInfo(_docCache, _doc),
                                    new RecordContextInfo(selectTAdjust.Cache, adj)));
                }
                else
                {
                    _errors.Add(new InconsistencyError <InconsistencyCode.unreleasedDocumentHasReleasedApplications>(
                                    new RecordContextInfo(_docCache, _doc),
                                    new RecordContextInfo(selectTAdjust.Cache, adj)));
                }
            }

            return(this);
        }