Заказы на доработку 1С (сервис удаленной работы)

Хранилище

База знаний
Неназначенных незавершенных заказов: 2
Бесплатные отчеты, обработки, конфигурации, внешние компоненты для 1С Статьи, описание работы, методики по работе с 1С

Здравствуйте, гость ( Вход | Зарегистрироваться )



> Меняем время документа РН , Проблема со снятием проведения документа РН          
Kutuzov Подменю пользователя
сообщение 15.12.11, 12:04
Сообщение #1

Оратор
Иконка группы
Группа: Местный
Сообщений: 328
Из: Одесса
Спасибо сказали: 144 раз
Рейтинг: 0

Здравствуйте...
Бух 7.7 доработанная 289

Дополняю обработку "Обработка документов" на возможность проведения документа на конец дня для этого пишу
    
Если Обработка = "ПоменятьВремя" Тогда
        //........ Здесь заполняю таблицу значений ссылками на документы РН
        
        Ном=0;
        
        ТабДок.ВыбратьСтроки();
        Пока ТабДок.ПолучитьСтроку()=1 Цикл  
            ТекДок=ТабДок.Док;
            Время=3600*23+60*59+59;
            
            ДокИзм=СоздатьОбъект("Документ");
            
            Провести=0;    
            ДокИзм.НайтиДокумент(ТекДок);
            Если ДокИзм.Проведен()=1 Тогда
                ДокИзм.СделатьНеПроведенным();                               // Вот тут возникает проблема которая влечет за собой ошибку дальше
                УстановитьВремяДокументаЧислом(ДокИзм,Время);    //процедура которая разбивает время на часы минуты секунды и устанавливает время текущему документу ДокИзм.УстановитьВремя(Ч,М,С);
                Если ДокИзм.Провести()=0 Тогда
                    Продолжить;
                КонецЕсли;
                
            Иначе
                УстановитьВремяДокументаЧислом(ДокИзм,Время);
                ДокИзм.Записать();
                Продолжить;
            КонецЕсли;
        КонецЦикла;        
        //ЗафиксироватьТранзакцию();  
    КонецЕсли;

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


Signature
Вы станете богаче, лишь став умнее...
Чем дальше в лес, тем толще партизаны.
Нельзя недооценивать, не предсказуемость тупизны...

nysysimara Подменю пользователя
сообщение 15.12.11, 14:05
Сообщение #2

Оратор
Иконка группы
Группа: Местный
Сообщений: 312
Из: Бердянск
Спасибо сказали: 110 раз
Рейтинг: 0

нужна строка
ДокИзм.Записать();

перед
Если ДокИзм.Провести()=0 Тогда


и
ДокИзм=СоздатьОбъект("Документ");

я бы вынесла до начала цикла


Signature
1С Предприятие 7.7: Бух. учет для Украины (активно дописанная) + самописка (учет производства и ЗП)
1С Предприятие 8.3: Бух.предприятия 3.0 + самописка
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Кроме высшего образования, нужно иметь хотя бы среднее соображение

Спасибо сказали: Kutuzov,

Kutuzov Подменю пользователя
сообщение 15.12.11, 16:14
Сообщение #3

Оратор
Иконка группы
Группа: Местный
Сообщений: 328
Из: Одесса
Спасибо сказали: 144 раз
Рейтинг: 0

Цитата(nysysimara @ 15.12.11, 14:05) *
нужна строка
ДокИзм.Записать();

перед
Если ДокИзм.Провести()=0 Тогда


и
ДокИзм=СоздатьОбъект("Документ");

я бы вынесла до начала цикла


Не не сработало....


Signature
Вы станете богаче, лишь став умнее...
Чем дальше в лес, тем толще партизаны.
Нельзя недооценивать, не предсказуемость тупизны...

Zaval Подменю пользователя
сообщение 15.12.11, 16:31
Сообщение #4

Крутой
Иконка группы
Группа: Местный
Сообщений: 1994
Из: Киева и окрестностей
Спасибо сказали: 406 раз
Рейтинг: 0

Если проблема с отменой проведения - можно попробовать ставить/снимать пометку удаления. Потом уж менять время и проводить.

Спасибо сказали: Kutuzov,

Домовик Подменю пользователя
сообщение 15.12.11, 16:52
Сообщение #5

Ветеран
Иконка группы
Группа: Местный
Сообщений: 975
Из: Киев
Спасибо сказали: 168 раз
Рейтинг: 0

не, ну создатьобъект из цикла вынести - проблему, конечно, не решит. но красивше и лучше ,и быстрее и....
то же самое Время =


А может два цикла ? Первый - мы делаем все доки непроведенными. Второй - устанавливаете время. Но Дольше, конечно, будет выполняться ваша обработка.

и как=то не пойму:
в одной ветке после установитьВремя записать есть, в другой - нет.

у меня подозрение, что тут дело в самом УстановитьВремяДОкумента.
Как-то оно в базе документ переписывает, переставляет, что положение следующего документа уже другое..
. и с ним работать программа не может..... Человеческим языком не объясню.
С выборкой он наверное не работает

Сообщение отредактировал Домовик - 15.12.11, 16:54

Kutuzov Подменю пользователя
сообщение 15.12.11, 17:03
Сообщение #6

Оратор
Иконка группы
Группа: Местный
Сообщений: 328
Из: Одесса
Спасибо сказали: 144 раз
Рейтинг: 0

Цитата(Домовик @ 15.12.11, 16:52) *
не, ну создатьобъект из цикла вынести - проблему, конечно, не решит. но красивше и лучше ,и быстрее и....
то же самое Время =


А может два цикла ? Первый - мы делаем все доки непроведенными. Второй - устанавливаете время. Но Дольше, конечно, будет выполняться ваша обработка.

и как=то не пойму:
в одной ветке после установитьВремя записать есть, в другой - нет.

у меня подозрение, что тут дело в самом УстановитьВремяДОкумента.
Как-то оно в базе документ переписывает, переставляет, что положение следующего документа уже другое..
. и с ним работать программа не может..... Человеческим языком не объясню.
С выборкой он наверное не работает


Время сути не меняет я уже проставил, ну и присутствие или отсутствие процедуры установитьвремядокумента тоже....
 ДокИзм.УстановитьВремя(23,59,59);

Это ничего не изменило.
Делать все доки не проведенными не вариант так как те что были проведенными должны остаться проведенными, ну а не проведенные соответственно

Положение дока как по мне дело не имеет так как я из ТЗ ищу документ. и по этому не суть как стоят доки и как оно их переставляет


Signature
Вы станете богаче, лишь став умнее...
Чем дальше в лес, тем толще партизаны.
Нельзя недооценивать, не предсказуемость тупизны...

Pepe Подменю пользователя
сообщение 15.12.11, 17:08
Сообщение #7

Почти крутой
Иконка группы
Группа: Местный
Сообщений: 1434
Из: Ужгород
Спасибо сказали: 761 раз
Рейтинг: 230

Не вникал в суть, но я б подсмотрел в стандартной обработке "обработкадокументов".

Спасибо сказали: Kutuzov,

Kutuzov Подменю пользователя
сообщение 15.12.11, 17:18
Сообщение #8

Оратор
Иконка группы
Группа: Местный
Сообщений: 328
Из: Одесса
Спасибо сказали: 144 раз
Рейтинг: 0

Цитата(Pepe @ 15.12.11, 17:08) *
Не вникал в суть, но я б подсмотрел в стандартной обработке "обработкадокументов".


Ну как бы там и смотрю. Собственно там и делаю.
                    ИначеЕсли Обработка = "ОтменаПроведения" Тогда
            Если Док.Проведен() = 1 Тогда
                глКомментарий("Отмена проведения "+Док,2);
                Док.СделатьНеПроведенным();
                глЗаписьЖурналаРегистрации(Комментарий, 2, 7, Док.ТекущийДокумент());
            КонецЕсли;


Это все что там написано...
У меня в РН есть условие при котором не проводится документ. Но если документу отменено проведение и потом записан тогда все нормально должно быть.


Signature
Вы станете богаче, лишь став умнее...
Чем дальше в лес, тем толще партизаны.
Нельзя недооценивать, не предсказуемость тупизны...

Домовик Подменю пользователя
сообщение 15.12.11, 18:02
Сообщение #9

Ветеран
Иконка группы
Группа: Местный
Сообщений: 975
Из: Киев
Спасибо сказали: 168 раз
Рейтинг: 0

вы устанавливаете всем докам один и тот же момент времени

mister-x Подменю пользователя
сообщение 15.12.11, 19:28
Сообщение #10

...
Иконка группы
Модератору Про1С (за заслуги в 2011 году)
Группа: Местный
Сообщений: 3477
Из: Тернопіль
Спасибо сказали: 1417 раз
Рейтинг: 0

Цитата
вы устанавливаете всем докам один и тот же момент времени
ні, це один і той же час, що не є тотожним одному і тому ж моменту часу

Kutuzov попробуйте через
попытка
...
исключение
...
конецпопытки
і
начатьТранзакцию
...
ЗафиксироватьТранзакцию

Спасибо сказали: Домовик,

Домовик Подменю пользователя
сообщение 15.12.11, 20:22
Сообщение #11

Ветеран
Иконка группы
Группа: Местный
Сообщений: 975
Из: Киев
Спасибо сказали: 168 раз
Рейтинг: 0

Транзакция - да, Мистер-х, можно попробовать. Тут она даже присутствовала, закоментирована.
Попытка - хорошо, но чего-то же вылетает.

Кутузов, а что с версией платформы? Еще можно формирование табл.зн. показать.

Сообщение отредактировал Домовик - 15.12.11, 20:31

Спасибо сказали: Kutuzov,

mister-x Подменю пользователя
сообщение 15.12.11, 20:38
Сообщение #12

...
Иконка группы
Модератору Про1С (за заслуги в 2011 году)
Группа: Местный
Сообщений: 3477
Из: Тернопіль
Спасибо сказали: 1417 раз
Рейтинг: 0

Цитата
Транзакция - да, Мистер-х, можно попробовать. Тут она даже присутствовала, закоментирована.
Попытка - хорошо, но чего-то же вылетает.
тут можна таке використати і подивитись що скаже
Цитата
ОписаниеОшибки()
Синтаксис:
ОписаниеОшибки()
Назначение:
Применять данную функцию имеет смысл только в конструкции <Попытка - Исключение - КонецПопытки>, так как в иных случаях она возвращает пустую строку.
См. также:Попытка Исключение; ВызватьИсключение.
Возвращает описание ошибки времени выполнения модуля, такое же, как то, которое выдается в окне сообщений.
Параметры: нет

Спасибо сказали: Kutuzov,

5_kopeek Подменю пользователя
сообщение 16.12.11, 0:08
Сообщение #13

Ветеран
*******
Женщине-одинэснику
Группа: Пользователи*
Сообщений: 940
Спасибо сказали: 285 раз
Рейтинг: 0

Kutuzov, возможно, где-то в теле модуля присутствует процедура НачатьТранзакцию(), которая при возникновении ошибки проведения документа не дает дальше нормально работать. По идее, в Вашем случае даже у успешно проведенных до возникновения ошибки документов не должно было измениться время. Уберите все процедуры работы с транзакцией, и должно получиться.

Спасибо сказали: Kutuzov, Домовик,

shurik_shurik Подменю пользователя
сообщение 16.12.11, 9:03
Сообщение #14

Завсегдатай
Иконка группы
Группа: Местный
Сообщений: 124
Из: Полтавская обл.
Спасибо сказали: 72 раз
Рейтинг: 0

Цитата(Домовик @ 15.12.11, 17:52) *
А может два цикла ? Первый - мы делаем все доки непроведенными. Второй - устанавливаете время. Но Дольше, конечно, будет выполняться ваша обработка.

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

Спасибо сказали: Kutuzov,

Kutuzov Подменю пользователя
сообщение 16.12.11, 10:05
Сообщение #15

Оратор
Иконка группы
Группа: Местный
Сообщений: 328
Из: Одесса
Спасибо сказали: 144 раз
Рейтинг: 0

Всё, всем Спасибо!

Ув. 5-Копеек оказалась права, с ее помощью все удалось. Действительно выше по коду было
НачатьТранзакцию()
комментируя эту строку ну и соответственно закрытие транзакции все пошло.

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


Вчера идя домой мне пришла подобная идея но как выяснилось сегодня уже нет в этом необходимости


Signature
Вы станете богаче, лишь став умнее...
Чем дальше в лес, тем толще партизаны.
Нельзя недооценивать, не предсказуемость тупизны...

Не нашли ответа на свой вопрос?
Зарегистрируйтесь и задайте новый вопрос.


Ответить Новая тема
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 

RSS Текстовая версия Сейчас: 22.05.24, 9:40
1С Предприятие 8.3, 1С Предприятие 8.2, 1С Предприятие 8.1, 1С Предприятие 8.0, 1С Предприятие 7.7, Литература 1С, Общие вопросы по администрированию 1С, Методическая поддержка 1С - всё в одном месте: на Украинском 1С форуме!