На авторство не претендую, но самому обработка понадобилась и долго искал как так сделать. Юзайте на здоровье....
Это условие вставляем в процедуру ОбработкаПроведения(Параметр). Параметр дописать обязательно!!!
Если _АдминПроведениеДокумента(Контекст,Параметр) =1 Тогда
Возврат;
КонецЕсли;
Следующую часть пишем в глобальной модуль...
//=================================================================
// Возвращает элемент из списка с разделителями по номеру
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// Вход : Стр - строка списка с разделителями
// Номер - порядковый номер элемента (начиная с 1)
// Разделитель - символ разделителя в списке
// Выход: Содержимое элемента (строка)
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Функция _ПолучитьЭлемент(Знач Стр,Номер,Разделитель="~") Экспорт
КолВо=СтрЧислоВхождений(Стр,Разделитель);
Если (НомерКолВо) Тогда
Возврат "";
КонецЕсли;
Позиция1=1;
Для Н=1 По КолВо Цикл
Позиция2=Найти(Стр,Разделитель);
_Стр=Сред(Стр,Позиция1,Позиция2-1);
Если Н=Номер Тогда
Возврат Сред(_Стр,?(Н=1,1,2),СтрДлина(_Стр));
Иначе
Стр=СокрЛ(СтрЗаменить(?(Н=1,"@"+Стр,Стр),
?(Н=1,"@"+_Стр+Разделитель,_Стр+Разделитель),"@"));
КонецЕсли;
КонецЦикла;
КонецФункции
//ROM=================================================================
// Административное проведение документа
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// Вход : Конт - контекст формы
// СпМассивов - СписокЗначений наполненный ссылками на др. массивы
// Выход: 1 - выполнено, 0 - не выполнено
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Функция _АдминПроведениеДокумента(Конт,СпМассивов) Экспорт
Если ТипЗначенияСтр(СпМассивов)<>"СписокЗначений" Тогда
Возврат 0;
КонецЕсли;
Если ПустоеЗначение(СпМассивов.Получить("АдминПроведениеДокумента"))=1 Тогда
Возврат 0;
КонецЕсли;
ШапкаДок=СпМассивов.Получить("DH");
ТабЧастьДок=СпМассивов.Получить("DT");
ТабРег=СпМассивов.Получить("RA");
//===================================
//ТабРег.ВыбратьСтроку();
//===================================
ТабБух=СпМассивов.Получить("1SOPER");
СуммаОперации=СпМассивов.Получить("СуммаОперации");
СодержаниеОперации=СпМассивов.Получить("СодержаниеОперации");
флОчищать=Число(СпМассивов.Получить("флОчищатьДвижения"));
// шапка
Для Индекс=1 По ШапкаДок.РазмерСписка() Цикл
ИДРекв="";
ЗначРекв=ШапкаДок.ПолучитьЗначение(Индекс,ИДРекв);
Конт.УстановитьАтрибут(ИДРекв,ЗначРекв);
КонецЦикла;
// таб.часть
Конт.ЗагрузитьТабличнуюЧасть(ТабЧастьДок);
// движения по регистрам (оперативный учет)
Если флОчищать=1 Тогда
Конт.ОчиститьДвижения();
КонецЕсли;
СпИстории=СоздатьОбъект("СписокЗначений");
ИДКолонки="";Заголовок="";
Для Индекс=1 По ТабРег.КоличествоСтрок() Цикл
ТабРег.ПолучитьСтрокуПоНомеру(Индекс);
Для Инд=1 По ТабРег.КоличествоКолонок() Цикл
ИДКолонки=Инд;
ИДКолонки=ТабРег.ПолучитьПараметрыКолонки(ИДКолонки,,,,Заголовок);
Значение=ТабРег.ПолучитьЗначение(Индекс,ИДКолонки);
ИДРег=_ПолучитьЭлемент(ИДКолонки,1,"_");
ИДРекв=_ПолучитьЭлемент(ИДКолонки,2,"_");
Если ИДРег="Движение" Тогда
Если ПустоеЗначение(Значение)=0 Тогда
ТекРег = Конт.Регистр.ПолучитьАтрибут(ИДРекв);
Если Значение=1 Тогда
// остаточный регистр, движение приход
ТекРег.ДвижениеПриходВыполнить();
ИначеЕсли Значение=2 Тогда
// остаточный регистр, движение расход
ТекРег.ДвижениеРасходВыполнить();
ИначеЕсли Значение=3 Тогда
// оборотный регистр, движение
ТекРег.ДвижениеВыполнить();
КонецЕсли;
КонецЕсли;
ИначеЕсли ИДРег="История" Тогда
СпИстории.Установить(ИДРекв,Значение);
Если ИДРекв="Дата" Тогда
флЕстьПустые=0;
Для Ин=1 По СпИстории.РазмерСписка() Цикл
Если ПустоеЗначение(СпИстории.ПолучитьЗначение(Ин))=1 Тогда
флЕстьПустые=1;
Прервать;
КонецЕсли;
КонецЦикла;
Если флЕстьПустые=0 Тогда
Попытка
Конт.УстановитьРеквизитСправочника(СпИстории.Получить("Элемент"),СпИстории.Получить("Реквизит"),СпИстории.Получить("Значение"),СпИстории.Получить("Дата"));
Исключение
// для док-ов оперативного учета, значение устанавливается только на дату документа
Конт.УстановитьРеквизитСправочника(СпИстории.Получить("Элемент"),СпИстории.Получить("Реквизит"),СпИстории.Получить("Значение"),Конт.ДатаДок);
КонецПопытки;
СпИстории.УдалитьВсе();
КонецЕсли;
КонецЕсли;
Иначе
Попытка
ТекРег = Конт.Регистр.ПолучитьАтрибут(ИДРег);
ТекРег.УстановитьАтрибут(ИДРекв,Значение);
Исключение
//Сообщить(" ");
КонецПопытки;
КонецЕсли;
КонецЦикла;
КонецЦикла;
// операция, проводки (бух. учет)
Для Индекс=1 По ТабБух.КоличествоСтрок() Цикл
ТабБух.ПолучитьСтрокуПоНомеру(Индекс);
Конт.Операция.НоваяПроводка();
Конт.Операция.Дебет.Счет = ТабБух.ДТ;
Конт.Операция.Кредит.Счет = ТабБух.КТ;
// субконто
Если ПустоеЗначение(ТабБух.Субконто1ДТ)=0 Тогда
Конт.Операция.Дебет.Субконто(1,ТабБух.Субконто1ДТ);
КонецЕсли;
Если ПустоеЗначение(ТабБух.Субконто2ДТ)=0 Тогда
Конт.Операция.Дебет.Субконто(2,ТабБух.Субконто2ДТ);
КонецЕсли;
Если ПустоеЗначение(ТабБух.Субконто3ДТ)=0 Тогда
Конт.Операция.Дебет.Субконто(3,ТабБух.Субконто3ДТ);
КонецЕсли;
Если ПустоеЗначение(ТабБух.Субконто1КТ)=0 Тогда
Конт.Операция.Кредит.Субконто(1,ТабБух.Субконто1КТ);
КонецЕсли;
Если ПустоеЗначение(ТабБух.Субконто2КТ)=0 Тогда
Конт.Операция.Кредит.Субконто(2,ТабБух.Субконто2КТ);
КонецЕсли;
Если ПустоеЗначение(ТабБух.Субконто3КТ)=0 Тогда
Конт.Операция.Кредит.Субконто(3,ТабБух.Субконто3КТ);
КонецЕсли;
Конт.Операция.Сумма = ТабБух.Сумма;
Если ПустоеЗначение(ТабБух.ДТ)=0 Тогда
Если ТабБух.ДТ.Количественный=1 Тогда
Конт.Операция.Количество = ТабБух.Количество;
КонецЕсли;
ИначеЕсли ПустоеЗначение(ТабБух.КТ)=0 Тогда
Если ТабБух.ДТ.Количественный=1 Тогда
Конт.Операция.Количество = ТабБух.Количество;
КонецЕсли;
Иначе // выбраны оба счета
Если (ТабБух.ДТ.Количественный=1) или (ТабБух.ДТ.Количественный=1) Тогда
Конт.Операция.Количество = ТабБух.Количество;
КонецЕсли;
КонецЕсли;
Конт.Операция.Валюта = ТабБух.Валюта;
Конт.Операция.ВалСумма = ТабБух.ВалСумма;
Для Инд=1 По Метаданные.РеквизитПроводки() Цикл
ИД=Метаданные.РеквизитПроводки(Инд).Идентификатор;
Конт.Операция.УстановитьАтрибут(ИД,ТабБух.ПолучитьЗначение(Индекс,ИД));
КонецЦикла;
КонецЦикла;
Попытка
Конт.Операция.СуммаОперации = СуммаОперации;
Конт.Операция.Содержание = СодержаниеОперации;
Конт.Операция.Записать();
Исключение
Возврат 0;
КонецПопытки;
Возврат 1;
КонецФункции