Проверка на наличие определенного реквизита во всех документах

Проверка на наличие определенного реквизита во всех документах

Реквизит = Метаданные.Документ("АвансовыйОтчет").РеквизитШапки("Основание").Выбран(); Если Реквизит = 1 Тогда Сообщить("У документа есть такой реквизит"); Иначе Сообщить("У документа нет такого реквизита"); КонецЕсли;

Как применить подобный шаблон ко всем документам. ВСЕМ Спасибо за внимание.

  • Скопировать ссылку
  • Перейти

ВидыДок = ""; Для Инд=1 По ВыбранныеДокументы.РазмерСписка() Цикл ВидыДок = ВидыДок + Документы.ПолучитьЗначение(ВыбранныеДокументы.ПолучитьЗначение(Инд))+","; КонецЦикла;

Если ПустаяСтрока(ВидыДок)=1 Тогда Возврат; КонецЕсли;

Если (ВыбКонтрагент.Выбран()=1) Тогда Док.ВыбратьПоЗначению(ДатаНачала,ДатаКонца,"Контрагент",ВыбКонтрагент); ИначеЕсли (ВыбПроект.Выбран()=1) Тогда Док.ВыбратьПоЗначению(ДатаНачала,ДатаКонца,"Проект", ВыбПроект); ИначеЕсли (ВыбАвтор.Выбран()=1) Тогда Док.ВыбратьПоЗначению(ДатаНачала,ДатаКонца,"Автор", ВыбАвтор); ИначеЕсли (ВыбФирма.Выбран()=1) Тогда Док.ВыбратьПоЗначению(ДатаНачала,ДатаКонца,"Фирма", ВыбФирма); ИначеЕсли (ВыбЮрЛицо.Выбран()=1) Тогда Док.ВыбратьПоЗначению(ДатаНачала,ДатаКонца,"ЮрЛицо", ВыбЮрЛицо); ИначеЕсли (ВыбФизЛицо.Выбран()=1) Тогда Док.ВыбратьПоЗначению(ДатаНачала,ДатаКонца,"ФизЛицо", ВыбФизЛицо); ИначеЕсли (ВыбСклад.Выбран()=1) Тогда Док.ВыбратьПоЗначению(ДатаНачала,ДатаКонца,"Склад", ВыбСклад); ИначеЕсли (ВыбСотр.Выбран()=1) Тогда Док.ВыбратьПоЗначению(ДатаНачала,ДатаКонца,"Сотрудник", ВыбСотр); Иначе Док.ВыбратьДокументы(ДатаНачала,ДатаКонца); КонецЕсли;

Если (ТипЗначенияСтр(Таб) <> "Таблица") ИЛИ (Обновить = 0) Тогда Таб = СоздатьОбъект("Таблица"); Иначе Таб.Очистить(); КонецЕсли; Таб.ИсходнаяТаблица( "РеестрДокументов" );

Расшифровка = СоздатьОбъект("СписокЗначений"); Расшифровка.Установить("Отчет", "РеестрДокументов");

// все настройки помещаем в список Расшифровка.Установить("ДатаНачала", ДатаНачала); Расшифровка.Установить("ДатаКонца", ДатаКонца);

Расшифровка.Установить("ВыбФирма", ВыбФирма); Расшифровка.Установить("ВыбЮрЛицо", ВыбЮрЛицо); Расшифровка.Установить("ВыбФизЛицо", ВыбФизЛицо); Расшифровка.Установить("ВыбКонтрагент", ВыбКонтрагент); Расшифровка.Установить("ВыбАвтор", ВыбАвтор); Расшифровка.Установить("ВыбПроект", ВыбПроект); Расшифровка.Установить("ВыбСклад", ВыбСклад);

Расшифровка.Установить("ВклПроведенные",ВклПроведенные); Расшифровка.Установить("ВклТекущие", ВклТекущие); Расшифровка.Установить("ВклУдаленные", ВклУдаленные);

Расшифровка.Установить("ВыбранныеДокументы", ВыбранныеДокументы); Расшифровка.Установить("ВсеДокументы", ВсеДокументы);

Если ВыбЮрЛицо.Выбран()>0 Тогда Заг=Заг+"По юр. лицу "+СокрП(ВыбЮрЛицо)+". "; КонецЕсли; Если ВыбФизЛицо.Выбран()>0 Тогда Заг=Заг+"По физ. лицу "+СокрП(ВыбФизЛицо)+". "; КонецЕсли; Если ВыбФирма.Выбран()>0 Тогда Заг=Заг+"По фирме "+СокрП(ВыбФирма)+". "; КонецЕсли; Если ВыбКонтрагент.Выбран()>0 Тогда Заг=Заг+"По контрагенту "+СокрП(ВыбКонтрагент)+". "; КонецЕсли; Если ВыбАвтор.Выбран()>0 Тогда Заг=Заг+"Автор документов: "+СокрП(ВыбАвтор)+". "; КонецЕсли; Если ВыбПроект.Выбран()>0 Тогда Заг=Заг+"Проект документов: "+СокрП(ВыбПроект)+". "; КонецЕсли; Если ВыбСклад.Выбран()>0 Тогда Заг=Заг+"Склад документов: "+СокрП(ВыбСклад)+". "; КонецЕсли;

Таб.ВывестиСекцию("Кнопки"); Таб.ВывестиСекцию("Шапка"); Таб.ВывестиСекцию("ШапкаТаблицы");

// выводим шапку на каждой странице НачПовт = Таб.ВысотаСекции("Кнопки") + Таб.ВысотаСекции("Шапка"); КонПовт = НачПовт + Таб.ВысотаСекции("ШапкаТаблицы"); Таб.ПовторятьПриПечатиСтроки(НачПовт + 1, КонПовт);

НПП=0; ПечИтогСумма = 0;

СуммыПоВалютам = СоздатьОбъект("ТаблицаЗначений"); СуммыПоВалютам.НоваяКолонка("Валюта", "Справочник.Валюты"); СуммыПоВалютам.НоваяКолонка("Сумма", "Число");

Пока Док.ПолучитьДокумент()=1 Цикл

//Проверка статуса Если (Док.ПометкаУдаления()>0) Тогда Если ВклУдаленные=0 Тогда Продолжить; КонецЕсли; ИначеЕсли (Док.Проведен()>0) Тогда Если ВклПроведенные=0 Тогда Продолжить; КонецЕсли; Иначе Если ВклТекущие=0 Тогда Продолжить; КонецЕсли; КонецЕсли;

//Проверка юр. лица, к которому относится документ Если ВыбЮрЛицо.Выбран() = 0 Тогда ИначеЕсли (Док.ЮрЛицо <> ВыбЮрЛицо) Тогда Продолжить; КонецЕсли;

//Проверка фирмы, к которой относится документ Если ВыбФирма.Выбран() = 0 Тогда ИначеЕсли (Док.Фирма <> ВыбФирма) Тогда Продолжить; КонецЕсли;

//Проверка физ. лица, к которому относится документ Если ВыбФизЛицо.Выбран() = 1 Тогда Если глЕстьРеквизитШапки("ФизЛицо",Док.Вид()) = 1 Тогда Если (Док.ФизЛицо <> ВыбФизЛицо) Тогда Продолжить; КонецЕсли; Иначе Продолжить; КонецЕсли; КонецЕсли;

//Проверка автора Если ВыбАвтор.Выбран() = 0 Тогда ИначеЕсли (Док.Автор <> ВыбАвтор) Тогда Продолжить; КонецЕсли;

//Проверка проекта Если ВыбПроект.Выбран() = 0 Тогда ИначеЕсли (Док.Проект <> ВыбПроект) Тогда Продолжить; КонецЕсли;

//Проверка сотрудника Если ВыбСотр.Выбран() = 1 Тогда Если глЕстьРеквизитШапки("Сотрудник",Док.Вид()) = 1 Тогда Если (Док.Сотрудник <> ВыбСотр) Тогда Продолжить; КонецЕсли; Иначе Продолжить; КонецЕсли; КонецЕсли;

//Проверка склада Если ВыбСклад.Выбран() = 1 Тогда ХорошийДокумент = 0; Если глЕстьРеквизитШапки("Склад",Док.Вид()) = 1 Тогда Если (Док.Склад = ВыбСклад) Тогда ХорошийДокумент = 1; КонецЕсли; КонецЕсли; Если глЕстьРеквизитШапки("СкладПолучатель",Док.Вид()) = 1 Тогда Если (Док.СкладПолучатель = ВыбСклад) Тогда ХорошийДокумент = 1; КонецЕсли; КонецЕсли; Если ХорошийДокумент = 0 Тогда Продолжить; КонецЕсли; КонецЕсли;

//Проверка вида документа Если Найти(ВидыДок,Док.Вид()+",")=0 Тогда Продолжить; КонецЕсли;

ПечСумма = глСуммаДокументаВЖурнале(Док.ТекущийДокумент(), "число");

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

РегПартии1 = СоздатьОбъект("Регистр.ПартииНаличие"); РегПартии1.ВыбратьДвиженияДокумента(Док.ТекущийДокумент());

Пока РегПартии1.ПолучитьДвижение() = 1 Цикл ТабДвиж1.НоваяСтрока(); ТабДвиж1.Номенклатура = РегПартии1.Номенклатура; ТабДвиж1.Количество = РегПартии1.Количество; ТабДвиж1.Сумма = РегПартии1.СуммаБезНДС; КонецЦикла;

// выгрузим табличную часть документа в таблицу значений ТабДок1 = СоздатьОбъект("ТаблицаЗначений"); Док.ВыгрузитьТабличнуюЧасть(ТабДок1, "Номенклатура, Количество, Единица, Коэффициент");

// сформируем таблицу значений для печати

ТабПеч1 = СоздатьОбъект("ТаблицаЗначений"); ТабПеч1.НоваяКолонка("Номенклатура"); ТабПеч1.НоваяКолонка("Количество"); ТабПеч1.НоваяКолонка("Сумма");

ТабДок1.ВыбратьСтроки(); Пока ТабДок1.ПолучитьСтроку() = 1 Цикл

Поз = 0; Пока (ТабДвиж1.НайтиЗначение(ТабДок1.Номенклатура, Поз, "Номенклатура") = 1) и (ТабДок1.Количество > 0) Цикл ТабДвиж1.ПолучитьСтрокуПоНомеру(Поз);

// получим текущее количество в документе в базовой единице ТекКолво1 = ТабДок1.Количество * ТабДок1.Коэффициент; // в таблицу печати добавляем количество - минимум из регистра и документа ИспКолво1 = Мин(ТабДвиж1.Количество, ТекКолво1); ИспСумма1 = ИспКолво1 * ТабДвиж1.Сумма / ТабДвиж1.Количество;

// заполняем таблицу ТабПеч1.НоваяСтрока(); ТабПеч1.Номенклатура = ТабДок1.Номенклатура; ТабПеч1.Количество = ?(ТабДок1.Коэффициент = 0, ИспКолво1, ИспКолво1 / ТабДок1.Коэффициент); ТабПеч1.Сумма = ИспСумма1;

Если ТабДвиж1.Количество <= ИспКолво1 Тогда // количество полностью использовано. Удалим строку из таблицы, чтобы // на следующем шаге итереции могла бы найтись строка с этим же товаром, но // из другой партии (конечно, если такое движение было) ТабДвиж1.УдалитьСтроку(Поз); Иначе // количество в движении больше чем в строке докуиента (может быть из-за // того, что табличной части документа встречаются строки с одинаковыми товарами) ТабДвиж1.Количество = ТабДвиж1.Количество - ИспКолво1; КонецЕсли;

ТабДок1.Количество = ТабДок1.Количество - ТабПеч1.Количество;

Поз = 0; ПечИтого=ПечИтого+ТабПеч1.Сумма; КонецЦикла; КонецЦикла; ПечСумма = ПечИтого;

ИначеЕсли Док.Вид()="ПеремещениеТМЦ" Тогда ВсегоСумма=0; ТабДвиж = СоздатьОбъект("ТаблицаЗначений"); ТабДвиж.НоваяКолонка("Номенклатура"); ТабДвиж.НоваяКолонка("Количество"); ТабДвиж.НоваяКолонка("Сумма"); ТабДвиж.НоваяКолонка("СуммаПрод"); ТабДвиж.НоваяКолонка("РознЦена");

// сформируем таблицу с учетными цена из движений документа по регистру ПартииНаличие. РегПартии = СоздатьОбъект("Регистр.ПартииНаличие");

РегПартии.ВыбратьДвиженияДокумента(Док); Пока РегПартии.ПолучитьДвижение() = 1 Цикл Если РегПартии.Расход = 1 Тогда ТабДвиж.НоваяСтрока(); ТабДвиж.Номенклатура = РегПартии.Номенклатура; ТабДвиж.Количество = РегПартии.Количество; ТабДвиж.Сумма = РегПартии.СуммаБезНДС; ТабДвиж.СуммаПрод = РегПартии.ПродСтоимость; ТабДвиж.РознЦена = РегПартии.ЦенаПрод; КонецЕсли; КонецЦикла;

// выводим строки документа Док.ВыбратьСтроки();

Пока Док.ПолучитьСтроку() = 1 Цикл

НомСтр = ""; КолвоДок = Док.Количество; Поз = 0;

Пока (КолвоДок > 0) // есть что погашать и (ТабДвиж.НайтиЗначение(Док.Номенклатура, Поз, "Номенклатура") <> 0) // есть чем погашать Цикл

ИдКолонкиСуммы = ?(Док.Склад.РозничныйСклад = 1, "СуммаПрод", "Сумма");

КолвоРег = ТабДвиж.ПолучитьЗначение(Поз, "Количество"); СуммаРег = ТабДвиж.ПолучитьЗначение(Поз, ИдКолонкиСуммы);

// преобразуем количество из регистра (в базовой единице) // в единицу из строки документа Если Док.Коэффициент <> 0 Тогда КолвоРег = КолвоРег / Док.Коэффициент; КонецЕсли;

КолвоПеч = Мин(КолвоДок, КолвоРег); СуммаПеч = СуммаРег * КолвоПеч / КолвоРег; Если Док.Склад.РозничныйСклад = 1 Тогда // Перемещение следует отражать по розничным ценам ЦенаПеч = ТабДвиж.ПолучитьЗначение(Поз, "РознЦена"); Иначе // пытаемся уменьшить потерю точности, // поэтому сначала считаем сумму, а только потом цену ЦенаПеч = ?(КолвоПеч = 0, СуммаПеч, СуммаПеч / КолвоПеч); КонецЕсли;

ОстРег = КолвоРег - КолвоПеч; Если ОстРег <= 0 Тогда // количество из движений регистра полностью погасилось количеством из накладной // удалим строку таблицы значений ТабДвиж.УдалитьСтроку(Поз); Иначе // количество движений регистра оказалось больше, чем количество документа ТабДвиж.УстановитьЗначение(Поз, "Количество", ОстРег * Док.Коэффициент); ТабДвиж.УстановитьЗначение(Поз, ИдКолонкиСуммы , СуммаРег - СуммаПеч); КонецЕсли;

// уменьшаем непогашенное количество из строки документа КолвоДок = КолвоДок - КолвоПеч;

// вычисляем итоги ВсегоКоличество = ВсегоКоличество + КолвоПеч; ВсегоСумма = ВсегоСумма + СуммаПеч; ИтогоКоличество = ИтогоКоличество + КолвоПеч; ИтогоСумма = ИтогоСумма + СуммаПеч;

Поз = 0; КонецЦикла;

КонецЦикла; ПечСумма = ВсегоСумма; КонецЕсли; //ал

Если ПустоеЗначение(ПечВалюта) = 1 Тогда ПечВалюта = глРубли; КонецЕсли;

Поз = 0; Если СуммыПоВалютам.НайтиЗначение(ПечВалюта, Поз, "Валюта") = 1 Тогда СуммыПоВалютам.ПолучитьСтрокуПоНомеру(Поз); СуммыПоВалютам.Сумма = СуммыПоВалютам.Сумма + Число(СтрЗаменить(ПечСумма,"'","")); Иначе СуммыПоВалютам.НоваяСтрока(); СуммыПоВалютам.Сумма = Число(СтрЗаменить(ПечСумма,"'","")); СуммыПоВалютам.Валюта = ПечВалюта; КонецЕсли;

ПечИнформация = СокрЛП(глИнформацияПоДокументуВЖурнале(Док.ТекущийДокумент())); //********** Если Док.Комментарий = " " Тогда ПечКомментарий = " "; Иначе ПечКомментарий = Док.Комментарий; КонецЕсли;

//28-02-2013 //Для К=1 по Метаданные.Документ() Цикл //Идентификатор= Метаданные.Документ(К).Идентификатор;

Нашли=0; //Для РеквШапки=1 По Метаданные.Документ("Имя вашего документа").РеквизитШапки() Цикл // Если Строка(Метаданные.Документ("Имя вашего документа").РеквизитШапки(РеквШапки).Идентификатор)="Основание" Тогда Для РеквШапки=1 По Метаданные.Документ("Имя вашего документа").РеквизитШапки() Цикл Если Строка(Метаданные.Документ("Имя вашего документа").РеквизитШапки(РеквШапки).Идентификатор)="Основание" Тогда

// ВидыДок Нашли=1; Прервать; КонецЕсли; КонецЦикла; Если Нашли=1 Тогда ПечДокОснование = Док.Основание; ; Иначе ПечДокОснование=""; КонецЕсли; КонецЦикла; //28-02-2013 //Для К=1 по Метаданные.Документ() Цикл // Идентификатор= Метаданные.Документ(К).Идентификатор; // Реквизит = Метаданные.Документ(Идентификатор).РеквизитШапки("Основание").Выбран(); //Конеццикла; // //Если Реквизит = 1 Тогда // ПечДокОснование = Док.Основание; //Иначе // ПечДокОснование = " "; //КонецЕсли; //// *** //Если Док.Основание = " " Тогда // ПечДокОснование = " "; // Иначе // ПечДокОснование = Док.Основание; //КонецЕсли; //********** ПечСтатус = "Не проведен"; Если (Док.ПометкаУдаления()>0) Тогда ПечСтатус = "Помечен на уд."; ИначеЕсли (Док.Проведен()>0) Тогда ПечСтатус = "Проведен"; КонецЕсли;

Если глЕстьРеквизитШапки("ДатаДокВходящий", Док.Вид()) = 1 тогда ПечДата = Док.ДатаДокВходящий; Иначе ПечДата = Док.ДатаДок; КонецЕсли;

Пока Найти(ПечСумма," ") > 0 Цикл ПечСумма = СтрЗаменить(ПечСумма," ",""); КонецЦикла;

ПечИтогСумма = ПечИтогСумма + Число(ПечСумма); глОживить(1); КонецЦикла;

КолвоСтрок = СуммыПоВалютам.КоличествоСтрок(); Если КолвоСтрок >= 1 Тогда СуммыПоВалютам.ПолучитьСтрокуПоНомеру(1); Сумма = СуммыПоВалютам.Сумма; Валюта = СуммыПоВалютам.Валюта;

Для Сч = 2 По КолвоСтрок Цикл СуммыПоВалютам.ПолучитьСтрокуПоНомеру(Сч); Сумма = СуммыПоВалютам.Сумма; Валюта = СуммыПоВалютам.Валюта;

Таб.ВывестиСекцию("Итого"); глОживить(1); КонецЦикла; КонецЕсли;

Таб.Опции(0, 0, 7, 0, "РеестрДокументов", "РеестрДокументов"); Таб.ТолькоПросмотр(1); Таб.ОбластьПечати(2); Если глПолучитьПолномочие("РазрешитьРедактированиеТаблиц") = 0 Тогда Таб.Защита(1); КонецЕсли; Таб.Показать("Реестр документов","");

Если (Обновить = 2)ИЛИ(ЗакрытьДиалог=1) Тогда СтрокаДействийФормы = "#Закрыть"; КонецЕсли;

Это полное содержание процедуры..

Где тут идет получение документа ("Имя вашего документа"), так и не нашел..

📎📎📎📎📎📎📎📎📎📎