Добрый день. При закрытии документа появляется вопрос: " Сохранить документ? (Документ будет перепроведен) ".
Можно как-то запретить сохранение документа, кроме нажатия на кнопку ОК?
Спасибо.
Платформа 7.70.027.
//=============================================
Процедура ПриЗакрытииДокумента()
Форма.Закрыть(0); // где 0 без вопросов
КонецПроцедуры
Процедура ПриЗаписи()
Если НажалиОк=0 Тогда
СтатусВозврата(0);
Возврат;
КонецЕсли;
КонецПроцедуры
Процедура ПриЗаписи()
СтатусВзврата(0);
Возврат;
КонецПроцедуры.
Если НажалиОк = 0 Тогда
СтатусВозврата(0);
Возврат
КонецЕсли;
Если Итоговый = 1 Тогда
ИзмИтоговый();
КонецЕсли;
Форма.Обновить(1);
Автор = Пользователь;
АвтоВремяНачалоДня();
глПроверкаДатыДок(Контекст,"Запись");
Если Итоговый = 1 Тогда
ИзмИтоговый();
КонецЕсли;
Процедура ИзмИтоговый()
Если Итоговый = 1 Тогда
НачалоПериода = НачМесяца(ДатаДок);
КонецПериода = КонМесяца(ДатаДок);
ДатаДок = КонецПериода;
КонецЕсли;
КонецПроцедуры
Процедура ПроверитьВспомогательныеДокументы(ДокументыНачисления,ТабличнаяЧасть,спНачислено,ДокНач)
НСДокументаНачисления = 0;
Пока ДокументыНачисления.НайтиЗначение(ТабличнаяЧасть.Сотрудник,НСДокументаНачисления,"Сотр") = 1 Цикл
ДокументыНачисления.ПолучитьСтрокуПоНомеру(НСДокументаНачисления);
Если ДокНач.НайтиДокумент(ДокументыНачисления.Док) = 1 Тогда
ТабЧасть = 0;
ДокНач.ВыгрузитьТабличнуюЧасть(ТабЧасть,);
//ТабЧасть.ВыбратьСтроку();
РазмерСписка = спНачислено.РазмерСписка();
Для ш = 1 По РазмерСписка Цикл
Реквизит = спНачислено.ПолучитьЗначение(ш);
Значение = ТабличнаяЧасть.ПолучитьЗначение(ТабличнаяЧасть.НомерСтроки,Реквизит);
Если Значение <> 0 Тогда
СтрокаНУ = 0;
Если СоответсвиеНУ.НайтиЗначение(Реквизит,СтрокаНУ,"Реквизит") = 0 Тогда
Сообщить("Не найден вид расчета для " + Реквизит);
Продолжить;
КонецЕсли;
СоответсвиеНУ.ПолучитьСтрокуПоНомеру(СтрокаНУ);
//ТабЧасть.ВыбратьСтроку();
спВидыРасчетов.ВыбратьЭлементыПоРеквизиту("ВидРасчетов",СоответсвиеНУ.ВидРасчета,0,0);
Пока спВидыРасчетов.ПолучитьЭлемент() = 1 Цикл
СтрокаНУ = 0;
Пока ТабЧасть.НайтиЗначение(спВидыРасчетов.ТекущийЭлемент(),СтрокаНУ,"НачислениеУдержание") = 1 Цикл
ТабЧасть.ПолучитьСтрокуПоНомеру(СтрокаНУ);
Значение = Значение - ТабЧасть.Результат;
ТабЧасть.УдалитьСтроку(СтрокаНУ);
СтрокаНУ = 0;
КонецЦикла;
КонецЦикла;
ТабличнаяЧасть.УстановитьЗначение(ТабличнаяЧасть.НомерСтроки,Реквизит,Значение)
КонецЕсли;
КонецЦикла;
Иначе
Сообщить(ДокументыНачисления.Док + " не найден");
КонецЕсли;
ДокументыНачисления.УдалитьСтроку(НСДокументаНачисления);
НСДокументаНачисления = 0;
КонецЦикла;
КонецПроцедуры
Процедура ПриЗаписи()
Если НажалиОк = 0 Тогда
СтатусВозврата(0);
Возврат
КонецЕсли;
Если Итоговый = 1 Тогда
ИзмИтоговый();
КонецЕсли;
Форма.Обновить(1);
Автор = Пользователь;
АвтоВремяНачалоДня();
глПроверкаДатыДок(Контекст,"Запись");
// проверить изменения
запрНачислСотр = "//{{ЗАПРОС(запрНачислСотрПриЗаписи)
|Период с НачалоПериода по КонецПериода;
|Фир = Документ.авбЗарплатаСотрудникаНачисления.Фирма;
|Док = Документ.авбЗарплатаСотрудникаНачисления.ТекущийДокумент;
|Сотр = Документ.авбЗарплатаСотрудникаНачисления.Сотрудник;
|Группировка Сотр без групп;
|Группировка Док без групп;
|Условие(Сотр в сзСписокСотрудников);
|Условие(Фир = Фирма);
|"//}}ЗАПРОС
;
запрУдержСотр = "//{{ЗАПРОС(запрУдержСотрПриЗаписи)
|Период С НачДатаРасчета по КонДатаРасчета;
|ОбрабатыватьДокументы Проведенные;
|Фир = Документ.авбЗарплатаСотрудникаУдержания.Фирма;
|Док = Документ.авбЗарплатаСотрудникаУдержания.ТекущийДокумент;
|Сотр = Документ.авбЗарплатаСотрудникаУдержания.Сотрудник;
|Группировка Сотр без групп;
|Группировка Док без групп;
|Условие(Сотр в сзСписокСотрудников);
|Условие(Фир = Фирма);
|"//}}ЗАПРОС
;
ДокРасчетЗП = Метаданные.Документ("авбРасчетЗарплаты");
КвоРеквизитов = ДокРасчетЗП.РеквизитТабличнойЧасти();
спНачислено = СоздатьОбъект("СписокЗначений");
спУдержано = СоздатьОбъект("СписокЗначений");
Удержания = 0;
Для ш = 6 По КвоРеквизитов Цикл
Реквизит = ДокРасчетЗП.РеквизитТабличнойЧасти(ш);
Если Реквизит.Тип <> "Число" Тогда
Продолжить
КонецЕсли;
Если Реквизит.Идентификатор = "Начислено" Тогда
Удержания = 1;
Продолжить
ИначеЕсли Реквизит.Идентификатор = "Удержано" Тогда
Прервать
КонецЕсли;
Если Удержания = 0 Тогда
спНачислено.ДобавитьЗначение(Реквизит.Идентификатор)
Иначе
спУдержано.ДобавитьЗначение(Реквизит.Идентификатор)
КонецЕсли;
КонецЦикла;
Запрос = СоздатьОбъект("Запрос");
сзСписокСотрудников = СоздатьОбъект("СписокЗначений");
ВыгрузитьТабличнуюЧасть(сзСписокСотрудников,"Сотрудник");
Если Запрос.Выполнить(запрНачислСотр) = 0 Тогда
Сообщить("Не выполнен запрос по начислениям сотрудников ");
Возврат;
//Продолжить;
КонецЕсли;
ДокументыНачисления = 0;
Запрос.Выгрузить(ДокументыНачисления,,0);
Если Запрос.Выполнить(запрУдержСотр) = 0 Тогда
Сообщить("Не выполнен запрос по начислениям сотрудников ");
Возврат;
//Продолжить;
КонецЕсли;
ДокументыУдержания = 0;
Запрос.Выгрузить(ДокументыУдержания,,0);
ДокНач = СоздатьОбъект("Документ.авбЗарплатаСотрудникаНачисления");
ДокУд = СоздатьОбъект("Документ.авбЗарплатаСотрудникаУдержания");
СоздатьСоответсвие();
спВидыРасчетов = СоздатьОбъект("Справочник.авбНачисленияУдержания");
ТабличнаяЧасть = 0;
ВыгрузитьТабличнуюЧасть(ТабличнаяЧасть);
ТабличнаяЧасть.ВыбратьСтроки();
Пока ТабличнаяЧасть.ПолучитьСтроку() = 1 Цикл
Если (ТабличнаяЧасть.Начислено <> 0) Тогда
ПроверитьВспомогательныеДокументы(ДокументыНачисления,ТабличнаяЧасть,спНачислено,ДокНач)
КонецЕсли;
Если (ТабличнаяЧасть.Удержано <> 0) Тогда
ПроверитьВспомогательныеДокументы(ДокументыУдержания,ТабличнаяЧасть,спУдержано,ДокУд)
КонецЕсли;
КонецЦикла;
РазмСписка = спУдержано.РазмерСписка();
Для ш = 1 по РазмСписка Цикл
спНачислено.ДобавитьЗначение(спУдержано.ПолучитьЗначение(ш))
КонецЦикла;
РазмСписка = спНачислено.РазмерСписка();
ТабличнаяЧасть.ВыбратьСтроки();
Пока ТабличнаяЧасть.ПолучитьСтроку() = 1 Цикл
Для ш = 1 По РазмСписка Цикл
ИмяРевизита = спНачислено.ПолучитьЗначение(ш);
Значение = ТабличнаяЧасть.ПолучитьЗначение(ТабличнаяЧасть.НомерСтроки,ИмяРевизита);
Если Значение <> 0 Тогда
Сообщить("Сотрудник " + ТабличнаяЧасть.Сотрудник + " расхождение сумм в колонке " + ИмяРевизита + " = " + Значение,"!!!");
КонецЕсли;
КонецЦикла;
КонецЦикла;
КонецПроцедуры