Дополняю обработку "Обработка документов" на возможность проведения документа на конец дня для этого пишу
Если Обработка = "ПоменятьВремя" Тогда //........ Здесь заполняю таблицу значений ссылками на документы РН
Ном=0;
ТабДок.ВыбратьСтроки(); Пока ТабДок.ПолучитьСтроку()=1 Цикл ТекДок=ТабДок.Док; Время=3600*23+60*59+59;
ДокИзм=СоздатьОбъект("Документ");
Провести=0; ДокИзм.НайтиДокумент(ТекДок); Если ДокИзм.Проведен()=1 Тогда ДокИзм.СделатьНеПроведенным(); // Вот тут возникает проблема которая влечет за собой ошибку дальше УстановитьВремяДокументаЧислом(ДокИзм,Время); //процедура которая разбивает время на часы минуты секунды и устанавливает время текущему документу ДокИзм.УстановитьВремя(Ч,М,С); Если ДокИзм.Провести()=0 Тогда Продолжить; КонецЕсли;
Иначе УстановитьВремяДокументаЧислом(ДокИзм,Время); ДокИзм.Записать(); Продолжить; КонецЕсли; КонецЦикла; //ЗафиксироватьТранзакцию(); КонецЕсли;
Какая задача, необходимо взять проведенный документ, сделать его не проведенным при условии, что он проведен, установить время и уже с новым временем провести. Если он не проводится тогда продолжить и перейти к следующему. Но вот тут возникает проблема. Проблема такова, документ ДокИзм который появляется после следующего прохода цикла при условии что предыдущий документ не провелся не может сделать документ не проведенным из за чего вылетает дальше ошибка
ДокИзм.СделатьНеПроведенным()=1 // первый проход ДокИзм.Провести()=0 //первый проход истина ДокИзм.СделатьНеПроведенным()=0 // Второй проход
Вы станете богаче, лишь став умнее... Чем дальше в лес, тем толще партизаны. Нельзя недооценивать, не предсказуемость тупизны...
1С Предприятие 7.7: Бух. учет для Украины (активно дописанная) + самописка (учет производства и ЗП) 1С Предприятие 8.3: Бух.предприятия 3.0 + самописка ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Кроме высшего образования, нужно иметь хотя бы среднее соображение
не, ну создатьобъект из цикла вынести - проблему, конечно, не решит. но красивше и лучше ,и быстрее и.... то же самое Время =
А может два цикла ? Первый - мы делаем все доки непроведенными. Второй - устанавливаете время. Но Дольше, конечно, будет выполняться ваша обработка.
и как=то не пойму: в одной ветке после установитьВремя записать есть, в другой - нет.
у меня подозрение, что тут дело в самом УстановитьВремяДОкумента. Как-то оно в базе документ переписывает, переставляет, что положение следующего документа уже другое.. . и с ним работать программа не может..... Человеческим языком не объясню. С выборкой он наверное не работает
Сообщение отредактировал Домовик - 15.12.11, 16:54
не, ну создатьобъект из цикла вынести - проблему, конечно, не решит. но красивше и лучше ,и быстрее и.... то же самое Время =
А может два цикла ? Первый - мы делаем все доки непроведенными. Второй - устанавливаете время. Но Дольше, конечно, будет выполняться ваша обработка.
и как=то не пойму: в одной ветке после установитьВремя записать есть, в другой - нет.
у меня подозрение, что тут дело в самом УстановитьВремяДОкумента. Как-то оно в базе документ переписывает, переставляет, что положение следующего документа уже другое.. . и с ним работать программа не может..... Человеческим языком не объясню. С выборкой он наверное не работает
Время сути не меняет я уже проставил, ну и присутствие или отсутствие процедуры установитьвремядокумента тоже....
ДокИзм.УстановитьВремя(23,59,59);
Это ничего не изменило. Делать все доки не проведенными не вариант так как те что были проведенными должны остаться проведенными, ну а не проведенные соответственно
Положение дока как по мне дело не имеет так как я из ТЗ ищу документ. и по этому не суть как стоят доки и как оно их переставляет
Вы станете богаче, лишь став умнее... Чем дальше в лес, тем толще партизаны. Нельзя недооценивать, не предсказуемость тупизны...
Не вникал в суть, но я б подсмотрел в стандартной обработке "обработкадокументов".
Ну как бы там и смотрю. Собственно там и делаю.
ИначеЕсли Обработка = "ОтменаПроведения" Тогда Если Док.Проведен() = 1 Тогда глКомментарий("Отмена проведения "+Док,2); Док.СделатьНеПроведенным(); глЗаписьЖурналаРегистрации(Комментарий, 2, 7, Док.ТекущийДокумент()); КонецЕсли;
Это все что там написано... У меня в РН есть условие при котором не проводится документ. Но если документу отменено проведение и потом записан тогда все нормально должно быть.
Вы станете богаче, лишь став умнее... Чем дальше в лес, тем толще партизаны. Нельзя недооценивать, не предсказуемость тупизны...
Транзакция - да, Мистер-х, можно попробовать. Тут она даже присутствовала, закоментирована. Попытка - хорошо, но чего-то же вылетает.
тут можна таке використати і подивитись що скаже
Цитата
ОписаниеОшибки() Синтаксис: ОписаниеОшибки() Назначение: Применять данную функцию имеет смысл только в конструкции <Попытка - Исключение - КонецПопытки>, так как в иных случаях она возвращает пустую строку. См. также:Попытка Исключение; ВызватьИсключение. Возвращает описание ошибки времени выполнения модуля, такое же, как то, которое выдается в окне сообщений. Параметры: нет
Группа: Пользователи*
Сообщений: 940
Спасибо сказали: 285 раз
Рейтинг: 0
Kutuzov, возможно, где-то в теле модуля присутствует процедура НачатьТранзакцию(), которая при возникновении ошибки проведения документа не дает дальше нормально работать. По идее, в Вашем случае даже у успешно проведенных до возникновения ошибки документов не должно было измениться время. Уберите все процедуры работы с транзакцией, и должно получиться.
Группа: Местный
Сообщений: 124
Из: Полтавская обл.
Спасибо сказали: 72 раз
Рейтинг: 0
Цитата(Домовик @ 15.12.11, 17:52)
А может два цикла ? Первый - мы делаем все доки непроведенными. Второй - устанавливаете время. Но Дольше, конечно, будет выполняться ваша обработка.
Первый цикл в обратном порядке снимает проведение документов, одновременно занося в ТабЗнач пометку о том, что он был проведен, а во втором прямой порядок, уст. время и проводятся доки
Ув. 5-Копеек оказалась права, с ее помощью все удалось. Действительно выше по коду было
НачатьТранзакцию()
комментируя эту строку ну и соответственно закрытие транзакции все пошло.
Цитата
Первый цикл в обратном порядке снимает проведение документов, одновременно занося в ТабЗнач пометку о том, что он был проведен, а во втором прямой порядок, уст. время и проводятся доки
Вчера идя домой мне пришла подобная идея но как выяснилось сегодня уже нет в этом необходимости
Вы станете богаче, лишь став умнее... Чем дальше в лес, тем толще партизаны. Нельзя недооценивать, не предсказуемость тупизны...
1С Предприятие 8.3, 1С Предприятие 8.2, 1С Предприятие 8.1, 1С Предприятие 8.0, 1С Предприятие 7.7, Литература 1С, Общие вопросы по администрированию 1С, Методическая поддержка 1С - всё в одном месте: на Украинском 1С форуме!