//{СИБ проверяется чтобы не были выбраны группы в реквизитах документа
//или в реквизитах таб частей документа для перечисленных в массиве справочников
Процедура кс_ПередЗаписьюДокументаПроверитьВыборГруппВРеквизитах(Источник, Отказ, РежимЗаписи, РежимПроведения) Экспорт
Если Источник.ОбменДанными.Загрузка Тогда
Возврат;
КонецЕсли;
//{ПроверитьВыборГруппВРеквизитах
Реквизиты = Источник.ЭтотОбъект.Метаданные().Реквизиты;
ТабличныеЧасти = Источник.ЭтотОбъект.Метаданные().ТабличныеЧасти;
Массив = Новый Массив;
Массив.Добавить(Новый ОписаниеТипов("СправочникСсылка.СтатьиЗатрат"));
Массив.Добавить(Новый ОписаниеТипов("СправочникСсылка.ПрочиеДоходыИРасходы"));
Массив.Добавить(Новый ОписаниеТипов("СправочникСсылка.НоменклатурныеГруппы"));
Для каждого Реквизит Из Реквизиты Цикл
Для й=0 По Массив.Количество()-1 Цикл
Если Реквизит.Тип = Массив[й] Тогда
Если Источник[Реквизит.Имя].ЭтоГруппа Тогда
Сообщить("Реквизит документа """+Источник.ЭтотОбъект.Метаданные()+"."+Реквизит+"""
| Содержит группу, а не элемент справочника """+Массив[й]+""".", СтатусСообщения.Важное);
Отказ = Истина;
КонецЕсли;
КонецЕсли;
КонецЦикла;
КонецЦикла;
Для Каждого ТабличнаяЧасть Из ТабличныеЧасти Цикл
Для Каждого Реквизит Из ТабличнаяЧасть.Реквизиты Цикл
Для й=0 По Массив.Количество()-1 Цикл
Если Реквизит.Тип = Массив[й] Тогда
Для Каждого Стр Из Источник[ТабличнаяЧасть.Имя] Цикл
Если Стр[Реквизит.Имя].ЭтоГруппа Тогда
Сообщить("Реквизит табличной части """+ТабличнаяЧасть+""" документа """+Источник.ЭтотОбъект.Метаданные()+"."+Реквизит+"""
| в строке """+Стр.НомерСтроки+"""
| содержит группу, а не элемент справочника """+Массив[й]+".""", СтатусСообщения.Важное);
Отказ = Истина;
КонецЕсли;
КонецЦикла;
КонецЕсли;
КонецЦикла;
КонецЦикла;
КонецЦикла;
//Проверка групп}
КонецПроцедуры //СИБ}
//{СИБ - проверяется чтобы не были пустые реквизиты в шапке для перечисленных в массиве справочников
//
Процедура кс_ПроверитьНаЗаполненностьВыбранныеРеквизиты(Источник, Отказ, РежимЗаписи, РежимПроведения) Экспорт
//Процедура на тестировании заявителя
Если Источник.ОбменДанными.Загрузка Тогда
Возврат;
КонецЕсли;
Реквизиты = Источник.ЭтотОбъект.Метаданные().Реквизиты;
//{СИБ проверить ЗаполненностьРеквизитов
//1. Статьи ДДС
//2. Типы договоров
//3. Статьи затрат
//4. Номенклатурные группы
//5. Виды расчетов с сотрудниками
Массив = Новый Массив;
Массив.Добавить(Новый ОписаниеТипов("СправочникСсылка.СтатьиДвиженияДенежныхСредств"));
Массив.Добавить(Новый ОписаниеТипов("СправочникСсылка.КС_ТипыДоговоров"));
Массив.Добавить(Новый ОписаниеТипов("СправочникСсылка.СтатьиЗатрат"));
Массив.Добавить(Новый ОписаниеТипов("СправочникСсылка.НоменклатурныеГруппы"));
Массив.Добавить(Новый ОписаниеТипов("СправочникСсылка.КС_ВидыРасчетовССотрудниками"));
Для каждого Реквизит Из Реквизиты Цикл
Для й=0 По Массив.Количество()-1 Цикл
Если Реквизит.Тип = Массив[й] Тогда
//Если Источник[Реквизит.Имя].Ссылка = Неопределено ИЛИ Источник[Реквизит.Имя].Ссылка = Источник[Реквизит.Имя].ПустаяСсылка Тогда
Если НЕ ЗначениеЗаполнено(Источник[Реквизит.Имя].Ссылка) Тогда
Сообщить("Реквизит документа """+Источник.ЭтотОбъект.Метаданные()+"."+Реквизит+"""
| НЕ ЗАПОЛНЕН! """+Массив[й]+".""", СтатусСообщения.Важное);
Отказ = Истина;
КонецЕсли;
КонецЕсли;
КонецЦикла;
КонецЦикла;
//СИБ}
КонецПроцедуры //СИБ}
//{СИБ - проверяется чтобы не были пустые реквизиты таб. частей документа для перечисленных в массиве справочников
//
Процедура кс_ПроверитьНаЗаполненностьВыбранныеРеквизитыВТабЧастях(Источник, Отказ, РежимЗаписи, РежимПроведения) Экспорт
Если Источник.ОбменДанными.Загрузка Тогда
Возврат;
КонецЕсли;
ТабличныеЧасти = Источник.ЭтотОбъект.Метаданные().ТабличныеЧасти;
//{СИБ проверить ЗаполненностьРеквизитов
//1. Статьи ДДС
//2. Типы договоров
//3. Статьи затрат
//4. Номенклатурные группы
//5. Виды расчетов с сотрудниками
Массив = Новый Массив;
Массив.Добавить(Новый ОписаниеТипов("СправочникСсылка.СтатьиДвиженияДенежныхСредств"));
Массив.Добавить(Новый ОписаниеТипов("СправочникСсылка.КС_ТипыДоговоров"));
Массив.Добавить(Новый ОписаниеТипов("СправочникСсылка.СтатьиЗатрат"));
Массив.Добавить(Новый ОписаниеТипов("СправочникСсылка.НоменклатурныеГруппы"));
Массив.Добавить(Новый ОписаниеТипов("СправочникСсылка.КС_ВидыРасчетовССотрудниками"));
Для Каждого ТабличнаяЧасть Из ТабличныеЧасти Цикл
Для Каждого Реквизит Из ТабличнаяЧасть.Реквизиты Цикл
Для й=0 По Массив.Количество()-1 Цикл
Если Реквизит.Тип = Массив[й] Тогда
Для Каждого Стр Из Источник[ТабличнаяЧасть.Имя] Цикл
Если НЕ ЗначениеЗаполнено(Стр[Реквизит.Имя].Ссылка) Тогда
Сообщить("Реквизит табличной части"""+ТабличнаяЧасть+""" документа """+Источник.ЭтотОбъект.Метаданные()+"."+Реквизит+"""
| в строке """+Стр.НомерСтроки+"""
| НЕ ЗАПОЛНЕН """+Массив[й]+".""", СтатусСообщения.Важное);
Отказ = Истина;
КонецЕсли;
КонецЦикла;
КонецЕсли;
КонецЦикла;
КонецЦикла;
КонецЦикла;
//СИБ}
КонецПроцедуры
//СИБ}
//А МОЖНО УПРОСТИТЬ И УЛУЧШИТЬ ПРОВЕРКУ НА ЗАПОЛНЕННОСТЬ, ЕСЛИ ДЕЛАТЬ ЕЕ В ПРОВОДКАХ - коллеги посоветовали
//При проведении документа проверяем на заполненность обязательные реквизиты
//если в проводках не заполнено, то Отказ=Истина и запускаем проверку заполненности по шапке и по ТЧ (для вывода сообщению пользователю)
Процедура кс_ПроверитьНаЗаполненностьВыбранныеРеквизитыПриПроведении(Источник, Отказ, РежимПроведения) Экспорт
//Процедура на тестировании заявителя
Если Источник.ОбменДанными.Загрузка Тогда
Возврат;
КонецЕсли;
ПроводкиДок = Источник.ЭтотОбъект.Движения.Хозрасчетный;
//1. Статьи ДДС
//2. Типы договоров
//3. Статьи затрат
//4. Номенклатурные группы
//5. Виды расчетов с сотрудниками
Массив = Новый Массив;
Массив.Добавить(Новый ОписаниеТипов("СправочникСсылка.СтатьиДвиженияДенежныхСредств"));
Массив.Добавить(Новый ОписаниеТипов("СправочникСсылка.КС_ТипыДоговоров"));
Массив.Добавить(Новый ОписаниеТипов("СправочникСсылка.СтатьиЗатрат"));
Массив.Добавить(Новый ОписаниеТипов("СправочникСсылка.НоменклатурныеГруппы"));
Массив.Добавить(Новый ОписаниеТипов("СправочникСсылка.КС_ВидыРасчетовССотрудниками"));
Для Каждого Проводка Из ПроводкиДок Цикл
Для й=0 По Массив.Количество()-1 Цикл
Для Каждого Субк Из Проводка.СубконтоДт Цикл
Если Субк.Ключ.ТипЗначения = Массив[й] Тогда
Если НЕ ЗначениеЗаполнено(Субк.Значение) Тогда
Отказ = Истина;
КонецЕсли;
КонецЕсли;
КонецЦикла;
Для Каждого Субк Из Проводка.СубконтоКт Цикл
Если Субк.Ключ.ТипЗначения = Массив[й] Тогда
Если НЕ ЗначениеЗаполнено(Субк.Значение) Тогда
Отказ = Истина;
КонецЕсли;
КонецЕсли;
КонецЦикла;
КонецЦикла;
КонецЦикла;
//Теперь, если мы обнаружили не заполненные реквизиты, проверяем документ
//единственное - эта проверка может быть избыточной
//(пр: документ "Поступление на р/с" реквизит "СтатьяДДС" есть и в шапке, и в ТЧ, но по факту заполняется только в одном месте)
Если Отказ = Истина Тогда
Реквизиты = Источник.ЭтотОбъект.Метаданные().Реквизиты;
ТабличныеЧасти = Источник.ЭтотОбъект.Метаданные().ТабличныеЧасти;
Для каждого Реквизит Из Реквизиты Цикл
Для й=0 По Массив.Количество()-1 Цикл
Если Реквизит.Тип = Массив[й] Тогда
//Если Источник[Реквизит.Имя].Ссылка = Неопределено ИЛИ Источник[Реквизит.Имя].Ссылка = Источник[Реквизит.Имя].ПустаяСсылка Тогда
Если НЕ ЗначениеЗаполнено(Источник[Реквизит.Имя].Ссылка) Тогда
Сообщить("Реквизит документа """+Источник.ЭтотОбъект.Метаданные()+"."+Реквизит+"""
| НЕ ЗАПОЛНЕН! """+Массив[й]+".""", СтатусСообщения.Важное);
Отказ = Истина;
КонецЕсли;
КонецЕсли;
КонецЦикла;
КонецЦикла;
Для Каждого ТабличнаяЧасть Из ТабличныеЧасти Цикл
Для Каждого Реквизит Из ТабличнаяЧасть.Реквизиты Цикл
Для й=0 По Массив.Количество()-1 Цикл
Если Реквизит.Тип = Массив[й] Тогда
Для Каждого Стр Из Источник[ТабличнаяЧасть.Имя] Цикл
Если НЕ ЗначениеЗаполнено(Стр[Реквизит.Имя].Ссылка) Тогда
Сообщить("Реквизит табличной части"""+ТабличнаяЧасть+""" документа """+Источник.ЭтотОбъект.Метаданные()+"."+Реквизит+"""
| в строке """+Стр.НомерСтроки+"""
| НЕ ЗАПОЛНЕН """+Массив[й]+".""", СтатусСообщения.Важное);
Отказ = Истина;
КонецЕсли;
КонецЦикла;
КонецЕсли;
КонецЦикла;
КонецЦикла;
КонецЦикла;
КонецЕсли; //Если Отказ = Истина
КонецПроцедуры
========================================================================================
//Текст процедуры для подписки при проведении Так будет более правильно делать методологически
Процедура кс_ПроверитьНаЗаполненностьВыбранныеРеквизитыПриПроведении(Источник, Отказ, РежимПроведения) Экспорт
Если Источник.ОбменДанными.Загрузка Тогда
Возврат;
КонецЕсли;
ПроводкиДок = Источник.ЭтотОбъект.Движения.Хозрасчетный;
// В целях контроля аналитического учета сделать обязательной к заполнению (во всех документах, где это применимо), следующую аналитику:
//1. Статьи ДДС
//2. Типы договоров
//3. Статьи затрат
//4. Номенклатурные группы
//5. Виды расчетов с сотрудниками
Массив = Новый Массив;
Массив.Добавить(Новый ОписаниеТипов("СправочникСсылка.СтатьиДвиженияДенежныхСредств"));
Массив.Добавить(Новый ОписаниеТипов("СправочникСсылка.ТипыДоговоров"));
Массив.Добавить(Новый ОписаниеТипов("СправочникСсылка.СтатьиЗатрат"));
Массив.Добавить(Новый ОписаниеТипов("СправочникСсылка.НоменклатурныеГруппы"));
Массив.Добавить(Новый ОписаниеТипов("СправочникСсылка.ВидыРасчетовССотрудниками"));
Для Каждого Проводка Из ПроводкиДок Цикл
Для й=0 По Массив.Количество()-1 Цикл
Для Каждого Субк Из Проводка.СчетДт.Ссылка.ВидыСубконто Цикл
Если Субк.ВидСубконто.ТипЗначения = Массив[й] Тогда
Если НЕ ЗначениеЗаполнено(Проводка.СубконтоДт[Субк.ВидСубконто]) Тогда
Сообщить("НЕ ЗАПОЛНЕНА аналитика по Дт """+Субк.ВидСубконто.ТипЗначения+""".", СтатусСообщения.Важное);
Отказ = Истина;
КонецЕсли;
КонецЕсли;
КонецЦикла;
Для Каждого Субк Из Проводка.СчетКт.Ссылка.ВидыСубконто Цикл
Если Субк.ВидСубконто.ТипЗначения = Массив[й] Тогда
Если НЕ ЗначениеЗаполнено(Проводка.СубконтоКт[Субк.ВидСубконто]) Тогда
Сообщить("НЕ ЗАПОЛНЕНО аналитика по Кт """+Субк.ВидСубконто.ТипЗначения+""".", СтатусСообщения.Важное);
Отказ = Истина;
КонецЕсли;
КонецЕсли;
КонецЦикла;
КонецЦикла;
КонецЦикла;
//Теперь, если мы обнаружили не заполненные реквизиты, проверяем документ
//единственное - эта проверка может быть избыточной
//(пр: документ "Поступление на р/с" реквизит "СтатьяДДС" есть и в шапке, и в ТЧ, но по факту заполняется только в одном месте)
Если Отказ = Истина Тогда
Реквизиты = Источник.ЭтотОбъект.Метаданные().Реквизиты;
ТабличныеЧасти = Источник.ЭтотОбъект.Метаданные().ТабличныеЧасти;
Для каждого Реквизит Из Реквизиты Цикл
Для й=0 По Массив.Количество()-1 Цикл
Если Реквизит.Тип = Массив[й] Тогда
//Если Источник[Реквизит.Имя].Ссылка = Неопределено ИЛИ Источник[Реквизит.Имя].Ссылка = Источник[Реквизит.Имя].ПустаяСсылка Тогда
Если НЕ ЗначениеЗаполнено(Источник[Реквизит.Имя].Ссылка) Тогда
Сообщить("Реквизит документа """+Источник.ЭтотОбъект.Метаданные()+"."+Реквизит+"""
| НЕ ЗАПОЛНЕН! """+Массив[й]+".""", СтатусСообщения.Важное);
Отказ = Истина;
КонецЕсли;
КонецЕсли;
КонецЦикла;
КонецЦикла;
Для Каждого ТабличнаяЧасть Из ТабличныеЧасти Цикл
Для Каждого Реквизит Из ТабличнаяЧасть.Реквизиты Цикл
Для й=0 По Массив.Количество()-1 Цикл
Если Реквизит.Тип = Массив[й] Тогда
Для Каждого Стр Из Источник[ТабличнаяЧасть.Имя] Цикл
Если НЕ ЗначениеЗаполнено(Стр[Реквизит.Имя].Ссылка) Тогда
Сообщить("Реквизит табличной части"""+ТабличнаяЧасть+""" документа """+Источник.ЭтотОбъект.Метаданные()+"."+Реквизит+"""
| в строке """+Стр.НомерСтроки+"""
| НЕ ЗАПОЛНЕН """+Массив[й]+".""", СтатусСообщения.Важное);
Отказ = Истина;
КонецЕсли;
КонецЦикла;
КонецЕсли;
КонецЦикла;
КонецЦикла;
КонецЦикла;
КонецЕсли; //Если Отказ = Истина
КонецПроцедуры