Имя: Пароль:
1C
1С v8
Установка даты запрета изменения счета
0 Топ 1 программист ми
 
14.10.13
02:27
Кто сталкивался?

БП 2.

Нужно дать возможность буху ставить дату запрета движения по счету. Как лучше реализовать
1 Топ 1 программист ми
 
14.10.13
02:31
Как вариант подписка на событие - РегистрБухгалтерииНаборЗаписей.Хозрасчетный\
событие ПередЗаписью или ПриЗаписи
2 Топ 1 программист ми
 
14.10.13
02:46
если мы сделали подписку РегистрБухгалтерииНаборЗаписей.Хозрасчетный.ПередЗаписью и когда проводят документ, мы видим по каким счетам дкоумент хочет сделать движения.

Но к сожалению не видно этого при отмене проведения документа( там вообще пустые движения, может придется делать отдельный запрос именно при отмене проведения. Отбирать из регистра движения по документу и сразу отбор ставить по нужным счетам
3 Cyberhawk
 
14.10.13
02:58
Так в типовой РБ с корреспонденцией - у тебя будет в проводках по нужному тебе к запрету счету участвовать любой другой произвольный. Таким образом пользуйся типовым механизмом даты запрета изменений
4 Топ 1 программист ми
 
14.10.13
03:11
(3) не понял ответа вообще. а причем тут РБ? ))
5 Cyberhawk
 
14.10.13
03:16
(4) а как ты понял аббревиатуру "РБ"?
6 Топ 1 программист ми
 
14.10.13
03:17
(5) распред. база?
7 Топ 1 программист ми
 
14.10.13
03:17
(5) а ты про РегистрБух
8 Топ 1 программист ми
 
14.10.13
03:18
(3) тогда не совсем пойму в чем трабла?
Я через отладчик вижу в подписке при проведении документа он делает движения по проводкам, там смотрю какие счета и если надо делаю отказ. ЧТо не так?
9 Cyberhawk
 
14.10.13
03:26
(8) да так-то все так (еще на документ корректировки записей регистров проверь только свой механизм и на документ "ОперацияБух"), только какую цель преследует заказчик? Типа, гарантировать неизменность ОСВ по счету на задаваемую дату?
10 Топ 1 программист ми
 
14.10.13
03:39
(9) да такую цель, ну я думаю отсеять лишние документы не трабла =)
11 Топ 1 программист ми
 
14.10.13
04:12
Ну вот выложу решение мож кому пригодится.

На скорую руку за часик + проверки в отладчике(вариант не самый конечный, ещё уточню про Не нужные доки и т.д.)

Функция ДатаЗапретаСчета_СписокСчетов()

    Запрос = Новый Запрос;
    Запрос.Текст =
        "ВЫБРАТЬ
        |    ИмяРегистра.Счет,
        |    ИмяРегистра.ДатаЗапрета
        |ИЗ
        |    РегистрСведений.ИмяРегистра КАК ИмяРегистра";

    Возврат Запрос.Выполнить().Выгрузить();

КонецФункции

Процедура ДатаЗапретаСчета_ПередЗаписью(Источник, Отказ, РежимЗаписи) Экспорт
    
    // если идет проведение документа
    Если Источник.Количество() > 0 Тогда
        
        Запрос = Новый Запрос;
        Запрос.Текст =
        "ВЫБРАТЬ
        |    Движения.СчетКт,
        |    Движения.Период,
        |    Движения.СчетДт
        |ПОМЕСТИТЬ Движения
        |ИЗ
        |    &Движения КАК Движения
        |;
        |
        |////////////////////////////////////////////////////////////////////////////////
        |ВЫБРАТЬ
        |    Счета.Счет,
        |    Счета.ДатаЗапрета,
        |    1 КАК Запрет
        |ПОМЕСТИТЬ Счета
        |ИЗ
        |    &Счета КАК Счета
        |;
        |
        |////////////////////////////////////////////////////////////////////////////////
        |ВЫБРАТЬ
        |    Счета.Запрет,
        |    Счета.Счет,
        |    Счета.ДатаЗапрета
        |ИЗ
        |    Счета КАК Счета
        |        ВНУТРЕННЕЕ СОЕДИНЕНИЕ Движения КАК Движения
        |        ПО (Счета.Счет = Движения.СчетДт
        |                ИЛИ Счета.Счет = Движения.СчетКт)
        |            И Счета.ДатаЗапрета < Движения.Период";
        
        Запрос.УстановитьПараметр("Движения",     Источник.Выгрузить());
        Запрос.УстановитьПараметр("Счета",         ДатаЗапретаСчета_СписокСчетов());
        
        
        Результат = Запрос.Выполнить().Выбрать();
        Пока Результат.Следующий() Цикл
            Сообщить("Счет " + Результат.Счет + " запрещен для изменений (от " + Результат.ДатаЗапрета + ")");
            Отказ = Истина;
        КонецЦикла;
        
    // если идет отмена проведения
    Иначе
        
        Запрос = Новый Запрос;
        Запрос.Текст =
        "ВЫБРАТЬ
        |    Хозрасчетный.Период,
        |    Хозрасчетный.СчетДт,
        |    Хозрасчетный.СчетКт
        |ПОМЕСТИТЬ Движения
        |ИЗ
        |    РегистрБухгалтерии.Хозрасчетный КАК Хозрасчетный
        |ГДЕ
        |    Хозрасчетный.Регистратор = &Регистратор
        |;
        |
        |////////////////////////////////////////////////////////////////////////////////
        |ВЫБРАТЬ
        |    Счета.Счет,
        |    Счета.ДатаЗапрета,
        |    1 КАК Запрет
        |ПОМЕСТИТЬ Счета
        |ИЗ
        |    &Счета КАК Счета
        |;
        |
        |////////////////////////////////////////////////////////////////////////////////
        |ВЫБРАТЬ
        |    Счета.Запрет,
        |    Счета.Счет,
        |    Счета.ДатаЗапрета
        |ИЗ
        |    Счета КАК Счета
        |        ВНУТРЕННЕЕ СОЕДИНЕНИЕ Движения КАК Движения
        |        ПО (Счета.Счет = Движения.СчетДт
        |                ИЛИ Счета.Счет = Движения.СчетКт)
        |            И Счета.ДатаЗапрета < Движения.Период";

        
        Запрос.УстановитьПараметр("Регистратор",     Источник.Отбор.Регистратор.Значение);
        Запрос.УстановитьПараметр("Счета",             ДатаЗапретаСчета_СписокСчетов());
        Результат = Запрос.Выполнить().Выбрать();
        Пока Результат.Следующий() Цикл
            Сообщить("Счет " + Результат.Счет + " запрещен для изменений (от " + Результат.ДатаЗапрета + ")");
            Отказ = Истина;
        КонецЦикла;
        
    КонецЕсли;
    
КонецПроцедуры
12 Топ 1 программист ми
 
14.10.13
04:13
Это все подписка на событие РегистрБухгалтерииНаборЗаписей.Хозрасчетный.ПередЗаписью

Счета находятся в регистре сведений. Измерение Счет, Ресурс ДатаЗапрета
13 Cyberhawk
 
14.10.13
05:20
Да так-то хреновенькое решение.
Зачем тебе во втором случае выборка из физической таблицы РБ? Используй подходящую тебе виртуальную и перемести ГДЕ в ее параметры.
Еще у тебя Сообщить в подписке: при массовом перепроведении на сервере или групповом изменении документов что делать будешь?
14 Cyberhawk
 
14.10.13
05:20
Ну и еще пользователю что-то щас мешает залезть в твой РС и удалить оттуда запретные счета?
15 Топ 1 программист ми
 
14.10.13
05:28
(14) права на РС не? Доступен полным правам на изменение и остальным на чтение.

"Еще у тебя Сообщить в подписке" что будет? Взорвется система, будет информирование о том что нельзя менять документ. все нормально будет.

(13) прирост скорости в данном случаи изменения с физ на вирт не будет вообще.
16 Cyberhawk
 
14.10.13
05:35
(15) Odavid по тебе плачет ))))
Компьютеры — прекрасное средство для решения проблем, которых до их появления не было.