4 / 4 / 4
Регистрация: 12.07.2011
Сообщений: 638
1

Продолжение записи документов в цикле при возникновении отказа проведения

19.06.2017, 09:40. Показов 1296. Ответов 2
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здравствуйте. Делаю собственную конфигурацию для учета работ по проектам. Иерархия учета такая(кратко для вопроса):Объект->ДокументПоОбъекту->НазначениеСотрудника. НазначениеСотрудника - документ, регистрирующий назначения работы выбранному сотруднику по выбранному документу объекта. Ранее учет работ велся в другой БД, где не был реализован запрет на повторный ввод одной и той же работы по документу. Здесь такое требование появилось и я его реализовал так в модуле объекта:
1C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
Процедура КонтрольЗаписиДубликата(Отказ) Экспорт
Запрос = Новый Запрос();
Запрос.Текст="ВЫБРАТЬ
             |  НазначенияСотрудникам.Ссылка
             |ИЗ
             |  Документ.НазначенияСотрудникам КАК НазначенияСотрудникам
             |ГДЕ
             |  НазначенияСотрудникам.Сотрудник = &Сотрудник
             |  И НазначенияСотрудникам.ПроектныйДокумент = &Документ
             |  И НазначенияСотрудникам.ВидРаботы = &ВидРаботы
             |  И НазначенияСотрудникам.Ссылка <> &Ссылка";
             Запрос.УстановитьПараметр("Сотрудник",Сотрудник);
             Запрос.УстановитьПараметр("Документ",ПроектныйДокумент);
             Запрос.УстановитьПараметр("ВидРаботы",ВидРаботы);
             Запрос.УстановитьПараметр("Ссылка",Ссылка);
            Выборка = Запрос.Выполнить().Выбрать();
            Если Выборка.Количество()>0  И (Не РольДоступна("ПланированиеИКонтрольПроектов") ИЛИ Не РольДоступна("Администратор"))Тогда
            ОбщегоНазначенияКлиентСервер.СообщитьПользователю("Для выбранного сотрудника уже запланировано "+ ВидРаботы + " по выбранному документу. Повторное планирование работы с выбранными параметрами запрещено!");    
            Отказ=Истина;    
            КонецЕсли; 
КонецПроцедуры
Далее потребовалось сделать обработку, позволяющую получить список всех назначений(работ) объекта для редактирования параметров работ и сохранения изменений. Назначения я выгрузил в ТЧ и затем прописал процедуру перепроведения Назначенийсотрудникам с учетом внесенных изменений. Изменения вносятся в ТЧ обработки непосредственно без открытия формы документа:
1C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
&НаСервере
Процедура СохранитьИзмененияНаСервере()
    // Вставить содержимое обработчика.
    Для Стр=0 По Объект.НеЗакрытыеРаботыПоОбъектам.Количество()-1 Цикл
    ДокументДляЗакрытия=Объект.НеЗакрытыеРаботыПоОбъектам[Стр].Ссылка.ПолучитьОбъект();   
    ДокументДляЗакрытия.Записать(РежимЗаписиДокумента.ОтменаПроведения); 
    ДоступныйОстатокЧасов=ОстатокЧасовДляПланирования(Объект.НеЗакрытыеРаботыПоОбъектам[Стр].Подразделение,Объект.Объект);
    //КолЧасовПланПрежний=ПолучитьПланПоЗалдаче(Объект.НеЗакрытыеРаботыПоОбъектам[Стр].Ссылка);
        //Если ТипЗнч(Объект.НеЗакрытыеРаботыПоОбъектам[Стр].КолЧасовПлан)="Число" И ТипЗнч(ДоступныйОстатокЧасов)="Число" Тогда
    Если  ДоступныйОстатокЧасов>=0 Тогда
    Если Объект.НеЗакрытыеРаботыПоОбъектам[Стр].КолЧасовПлан<=ДоступныйОстатокЧасов Тогда
    ДокументДляЗакрытия.КолЧасовПлан=Объект.НеЗакрытыеРаботыПоОбъектам[Стр].КолЧасовПлан;
    ДокументДляЗакрытия.ДатаОкончанияПлан=Объект.НеЗакрытыеРаботыПоОбъектам[Стр].ДатаОкончанияПлан;
    ДокументДляЗакрытия.Записать(РежимЗаписиДокумента.Проведение);
Иначе Сообщить("Для задачи в строке "+Объект.НеЗакрытыеРаботыПоОбъектам[Стр].НомерСтроки+ " доступно часов план не более "+ДоступныйОстатокЧасов);
    
КонецЕсли;
    КонецЕсли;
//Иначе Сообщить("Тип КолЧасовПлан в строке "+Объект.НеЗакрытыеРаботыПоОбъектам[Стр].НомерСтроки+" "+ТипЗнч(Объект.НеЗакрытыеРаботыПоОбъектам[Стр].КолЧасовПлан)+", Тип ДоступныйОстатокЧасов в строке "+Объект.НеЗакрытыеРаботыПоОбъектам[Стр].НомерСтроки+" "+ТипЗнч(ДоступныйОстатокЧасов));       
//КонецЕсли;   
КонецЦикла;   
;
КонецПроцедуры
Код работает как надо, если нет повторяющихся работ. Как только доходит до повторяющейся записи, срабатывает КонтрольЗаписиДубликата и цикл останавливается. Как сделать так, чтобы цикл отработал до конца, пропуская дубликаты(просто не записывая их)?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
19.06.2017, 09:40
Ответы с готовыми решениями:

Не выбран элемент при записи реквизита справочника из обработки проведения документа
Требуется из обработки проведения документа внести изменения в справочник, Процедура...

Продолжение работы цикла при возникновении исключения
У меня есть цикл который обрабатывает тексты. for (int i = 0; i &lt; n; i++) { ...

Ограничение на отмену проведения проверенных документов
Подскажите, пожалуйста, в таком вопросе: Необходимо ограничить отмену проведения документов,...

Есть отчет на скд по правильности проведения документов 1с БП 3.0,как в нем адекватно вывести сообщения
Формируется отчет по правильности проведения цепочки документов (ОтчетОРП, ПриходнойКО,...

2
584 / 371 / 63
Регистрация: 22.07.2009
Сообщений: 875
Записей в блоге: 4
19.06.2017, 17:00 2
1C
1
2
3
4
Попытка
     ДокументДляЗакрытия.Записать(РежимЗаписиДокумента.Проведение);
Исключение
КонецПопытки
0
4 / 4 / 4
Регистрация: 12.07.2011
Сообщений: 638
20.06.2017, 08:54  [ТС] 3
Спасибо за помощь. Заработался уже)) не подумал попытку написать))
0
20.06.2017, 08:54
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
20.06.2017, 08:54
Помогаю со студенческими работами здесь

Возможность отказа от редактирования, добавления или удаления записи в DataGride
Здравствуйте! &lt;SPAN class=postBodyText style=&quot;MARGIN: 0px Подскажите пожалуйста, как реализовать...

продолжение записи
Здравствуйте, подскажите как мне занести в БД часть данных из едит (колонка1 таблицы БД), а часть...

Продолжение записи в файл
Здравствуйте можно ли как то сохранить из memo в текстовый файл продолжая запись а не стирая что...

Остановить продолжение записи
Здравствуйте. Подскажите, как остановить продолжение записи в форме, если в этой форме в...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru