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

Хранилище

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

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



> как определить что объект заблокирован          
nysysimara Подменю пользователя
сообщение 13.09.12, 6:59
Сообщение #1

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

Задача: нужно переставить несколько документов по времени
Проблема: документ может быть открыт для редактирования/просмотра другим пользователем, тогда метод Записать() дает ошибку "...Объект заблокирован:..."
Конечно, выход из этой ситуации - запускать обработку по переносу документов монопольно, но хотелось бы найти решение для разделенного режима работы


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

sava1 Подменю пользователя
сообщение 13.09.12, 7:13
Сообщение #2

Живет на форуме
Иконка группы
Группа: Местный
Сообщений: 2688
Из: Проскуров
Спасибо сказали: 681 раз
Рейтинг: 659.7

попытка
окрытьФорму(...

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

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

Блокировка(<?>);
Синтаксис:
Блокировка(<ВклВыкл>)
Назначение:
Установить/прочитать режим блокировки. Если при вызове метода параметр <ВклВыкл> не задан, то возвращается режим блокировки до выполнения метода. Число: 1 - заблокирован; 0 - свободен. Если при вызове метода параметр <ВклВыкл> задан, то возвращается результат выполнения метода блокировки. Число: 1 - успешно; 0 - не получилось.
Параметры:
<ВклВыкл> - необязательный параметр. Число: 1 - включить; 0 - выключить.


Signature
Никогда не бойся делать то, что не умеешь, помни - Ноев ковчег был построен любителем, профессионалы построили Титаник.
ЗиУП

nysysimara Подменю пользователя
сообщение 13.09.12, 8:24
Сообщение #4

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

Цитата(alex040269 @ 13.09.12, 8:16) *
Блокировка(<?>);

этот метод я отбросила изначально - он не срабатывает
хотя возможно я что-то не то делаю. вот кусок кода:
                Док.НайтиДокумент(ТдДок);
                Если Док.Блокировка()=1 Тогда // не работает
                    Сообщ = "Заблокирован";
                Иначе
                    Сообщ = "";
                    Если Док.Проведен()=1 Тогда  
                        Док.СделатьНеПроведенным();
                        Док.УстановитьВремя(Ч,М,С);
                        Док.Записать();
                        Если Док.Провести(0)=0 Тогда
                            Сообщ = "не провелся";
                        КонецЕсли;
                    Иначе
                        Док.УстановитьВремя(Ч,М,С);
                        Док.Записать();
                    КонецЕсли;
                    глЗаписьЖурналаРегистрации("изм время обр Сжать23часа",2,2,Док.ТекущийДокумент(),2);
                КонецЕсли;


Цитата(sava1 @ 13.09.12, 8:13) *
окрытьФорму(.

не соображу,а как потом программно закрыть форму документа?


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

alex040269 Подменю пользователя
сообщение 13.09.12, 8:43
Сообщение #5

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

Нужно
Если Док.Блокировка(1)=1 Тогда
....делаем сложное дело
    Док.Блокировка(0);
Иначе
     Сообщить ("Заблокирован")
КонецЕсли


где то так


Signature
Никогда не бойся делать то, что не умеешь, помни - Ноев ковчег был построен любителем, профессионалы построили Титаник.
ЗиУП

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

nysysimara Подменю пользователя
сообщение 13.09.12, 9:33
Сообщение #6

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

alex040269, спасибо все получилось
до меня наконецто дошло, что Блокировка проверяет заблокирован ли мною объект


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

alex040269 Подменю пользователя
сообщение 13.09.12, 11:05
Сообщение #7

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

nysysimara , в принципе не обязательно. Просто если делать Вашим способом, то никто не мешает заблокировать документ кому-то еще после того как вы проверили и до того момента, когда вы делаете запись в базу.

Хотя может вы и правы. Я не проверял.



Signature
Никогда не бойся делать то, что не умеешь, помни - Ноев ковчег был построен любителем, профессионалы построили Титаник.
ЗиУП

nysysimara Подменю пользователя
сообщение 13.09.12, 11:21
Сообщение #8

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

Цитата(alex040269 @ 13.09.12, 12:05) *
то никто не мешает заблокировать документ кому-то еще после того как вы проверили и до того момента, когда вы делаете запись в базу.
согласна

первый вариант кода я проверяла так:
документ реально открыт другим пользователем, я запускаю обработку и в условии
Если Док.Блокировка()=1 Тогда 
        ...
Иначе
алгоритм идет по ветке "Иначе", т.е Док.Блокировка()=0

Сообщение отредактировал nysysimara - 13.09.12, 11:26

sava1 Подменю пользователя
сообщение 13.09.12, 11:22
Сообщение #9

Живет на форуме
Иконка группы
Группа: Местный
Сообщений: 2688
Из: Проскуров
Спасибо сказали: 681 раз
Рейтинг: 659.7

Цитата(nysysimara @ 13.09.12, 9:24) *
не соображу,а как потом программно закрыть форму документа?

через контекст

nysysimara Подменю пользователя
сообщение 13.09.12, 11:49
Сообщение #10

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

sava1, мне такой вариант не подходит
для того чтобы только изменить время документа, открывать форму документа - на мой взгляд, лишнее

объясню, что я пытаюсь сделать:
У нас в базе ряд документов создаются в ночную смену, записываются текущим временем, т.е.последний может быть позже 23:00 (например 11.09.2012 23:56:00
другие документы,созданные на следующий день(12.09), но с датой вчера(11.09) записываются автоматически в конец дня
в результате имеем ситуацию: куча документов расположены в 23:59:59 и проблемы с проведением

Хочу сделать обработку, которая в начале текущего дня все доки вчерашние во временном отрезке с23:00:00 до 23:59:59
расположит более "компактно" с малым интервалом, тем самым освободит хотя бы последние полчаса



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

sava1 Подменю пользователя
сообщение 13.09.12, 13:09
Сообщение #11

Живет на форуме
Иконка группы
Группа: Местный
Сообщений: 2688
Из: Проскуров
Спасибо сказали: 681 раз
Рейтинг: 659.7

иначе не определить - открыт ли документ
или анализировать журнал регистрации на предмет открытия

nysysimara Подменю пользователя
сообщение 13.09.12, 13:28
Сообщение #12

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

Цитата(sava1 @ 13.09.12, 12:22) *
через контекст

это потом во всех документах прописывать при открытии "закрытие"?
нее...
вроде с методом Блокировка работает, завтра еще на реальной база потестирую

sava1 Подменю пользователя
сообщение 13.09.12, 14:54
Сообщение #13

Живет на форуме
Иконка группы
Группа: Местный
Сообщений: 2688
Из: Проскуров
Спасибо сказали: 681 раз
Рейтинг: 659.7

Цитата(nysysimara @ 13.09.12, 14:28) *
вроде с методом Блокировка работает

так должно - глюков не замечалось

vadim007 Подменю пользователя
сообщение 14.09.12, 8:38
Сообщение #14

Почти крутой
Иконка группы
Группа: Местный
Сообщений: 1298
Из: Донецк
Спасибо сказали: 208 раз
Рейтинг: 0

Цитата(nysysimara @ 13.09.12, 12:49) *
sava1, мне такой вариант не подходит
У нас в базе ряд документов создаются в ночную смену, записываются текущим временем, т.е.последний может быть позже 23:00 (например 11.09.2012 23:56:00

Документы создаются последовательно, или параллельно?

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

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

Цитата(vadim007 @ 14.09.12, 9:38) *
Документы создаются последовательно, или параллельно?

Я наверное неточно выразилась
Цитата
ряд документов создаются в ночную смену
означает:
в ночную смену работают несколько пользователей, ими создаются документы текущем временем
+- полчаса принципиального значения для этих документов не имеет, главное сохранить последовательность

пока писала этот пост, решила запускать обработку только монопольно,
объясню: если документ заблокирован, его невозможно переставить по времени, а значит нельзя двигать и следующие за ним,

Сообщение отредактировал nysysimara - 14.09.12, 9:08

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

Завсегдатай
Иконка группы
Группа: Местный
Сообщений: 224
Из: не ту страну назвали Гондурасом
Спасибо сказали: 83 раз
Рейтинг: 0

Навскидку.

1. Ввести реквизит (возможно общий) для флага необходимости пере-позиционирования документов.

2. В ПриЗаписи() документов.
2.1. Для новых документов - сверять ДатаДок на равенствоТекущаяДата(), а ТекущееВремя() на попадание в "интервалом перепозиционирования"(23:00:00-23:59:59): если совпадает+попадает - взводить флаг необходимости пере-позиционирования(см.п.1) в единицу.
2.2. Для ранее созданных документов - сверять ДатаДок на равенствоТекущаяДата(), а ТекущийДокумент().ПолучитьВремя() на попадание в "интервалом перепозиционирования"(23:00:00-23:59:59): если совпадает+попадает - взводить флаг необходимости пере-позиционирования(см.п.1) в единицу.

3. В ПриОткрытии() ранее созданных документов. Если ( необходимости пере-позиционирования(см.п.1) взведен в единицу ) И ( ДатаДок < ТекущаяДата() ): СтатусВозврата(0) с выдачей сообщения о тотм, что документ необходимо перепозиционировать в рамках регламента (можно с координатами для связи с работниками/службами, ответственными за выполнение этого пункта регламента).

4. В описываемой обработке - после "расстановки" документов по хронологии - сбрасывать(обнулять) в них флаг необходимости пере-позиционирования(см.п.1).

Результат - гарантированное отсутствие блокиоровок при выполнении упомянутой обработки документов ("расстановки" документов по хронологии).

прим.: форс-мажорные корректировки до "расстановки" документов по хронологии - также вопрос в принципе решаемій. если надо.

add: вместо реквизита можно использовать справочник (можно динамичесский).

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

nysysimara Подменю пользователя
сообщение 14.09.12, 11:30
Сообщение #17

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

Cthulhu спасибо за идею, было бы время для реализации

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


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

 

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