Имя: Пароль:
1C
 
Можно ли программно установить расчет в бухгалтерских итогах?
0 Звездочёт
 
07.03.07
15:16
Можно ли программно установить расчет в бухгалтерских итогах?
Это требуется делать раз в квартал.
Открытие оперативного периодна программно можно сделать.
А есть ли аналог для бух. итогов?
1 ЛастЧенсБот
 
09.03.07
10:48
может кто знает ответ? :)
2 ДэдБот
 
09.03.07
16:01
тема умерла :'(
3 Torquader
 
01.10.07
14:19
А вообще, открыть диалог управления бухгалтерскими итогами программно можно ?
Потому, что для рассчёта итогов приходится заходить монопольно и в специальное место меню, а хотелось бы, чтобы при монопольном запукске система сама "продлевала" итоги, если надо.
4 IUnknown
 
01.10.07
14:29
сдается мне что никак... ну только если эмулировать нажатие кнопок
5 Torquader
 
01.10.07
14:39
Тогда вообще на... вся эта 1С нужна, если некоторые действия в ней требуют остановки всей работы (итоги-то не пять секунд считаются).
У меня итак - запускается база при помощи специального стартера, который проверяет путь к базе, проверяет имя пользователя и прочее (чтобы не было ситуации половинного входа), а также отслеживает, чтобы было запущено отдельное окно, и если оно неактивно, когда нет других приложений, то делает его активным.
Теперь ещё надо и автоматизацию расчёта итогов делать. Может сразу писать программу, которая за пользователя все кнопки нажимать будет ?
Тогда зачем 1С ?
6 Фауст
 
01.10.07
15:23
Посмотри параметры запуска через командную строку. Может через нее можно.
7 Эрнст
 
01.10.07
15:53
служебный метод пересчета сальдовок запускается в интерактивном режиме.
8 Torquader
 
01.10.07
15:55
Идея с рождением окна за экраном и нажатием определённых кнопок уже пошла в реализацию, только вот чем думали создатели 1С ?
9 Torquader
 
08.10.07
20:10
Короче, с итогами немного разобрался:

1С и управление бухгалтерскими итогами.

Всем известно, что при работе с бухгалтерскими итогами есть один подводный
камень, а именно, необходимость пересчитывать эти несчастные итоги каждый
квартал. Казалось бы, ничего сложного, но для этого необходимо подключаться
к системе в монопольном режиме и долго ожидать, пока система выполнит расчёт.
Кроме того, в правах пользователя должно быть указано, что он может вызывать
данный диалог, иначе диалог открывается, но кнопки управления итогами будут
недоступны. Отследить необходимость изменения периода итогов не сложно, так
как для этого просто нужно сравнить текущую дату с датой, до которой они уже
расчитаны. Если текущая дата больше, то необходимо делать перерасчёт.
При запуске 1С мы всегда можем это проверить и указать на то, что итоги нужно
пересчитывать. То есть освободить базу для монопольного подключения таким
способом можно, но вызвать диалог управления итогами уже нельзя, так как он
вызывается только из меню. Но нас такая позиция не останавливает, мы будем
смотреть глубже. Поэтому мы открываем в редакторе ресурсов файл 1crcrus.dll
и в нём находим нужный нам диалог 1441:

1441 DIALOGEX 0, 0, 244, 84
STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "Управление бухгалтерскими итогами"
FONT 8, "MS Sans Serif", 0, 0
{
CONTROL "Расчет итогов установлен по:", -1L, "STATIC", SS_CENTER | SS_CENTERIMAGE | WS_CHILD | WS_VISIBLE | WS_GROUP, 7, 10, 106, 13
CONTROL "", 8219L, "STATIC", SS_CENTER | SS_CENTERIMAGE | WS_CHILD | WS_VISIBLE | WS_GROUP, 128, 10, 95, 13, WS_EX_CLIENTEDGE
CONTROL "&Установить расчет", 8193L, "BUTTON", BS_PUSHBUTTON | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 9, 33, 96, 14
CONTROL "", 8211L, "EDIT", ES_LEFT | ES_AUTOHSCROLL | ES_READONLY | WS_CHILD | WS_VISIBLE | WS_BORDER | WS_GROUP | WS_TABSTOP, 128, 33, 95, 13
CONTROL "Spin3", 8212L, "msctls_updown32", UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS | UDS_NOTHOUSANDS | WS_CHILD | WS_VISIBLE, 226, 33, 8, 15
CONTROL "Полный пересчет итогов", 8262L, "BUTTON", BS_PUSHBUTTON | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 10, 60, 95, 14
CONTROL "Выход", 1L, "BUTTON", BS_PUSHBUTTON | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 128, 60, 50, 14
CONTROL "Помощь", 57670L, "BUTTON", BS_PUSHBUTTON | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 184, 60, 50, 14
CONTROL " по:", -1L, "STATIC", SS_LEFT | SS_CENTERIMAGE | WS_CHILD | WS_VISIBLE | WS_GROUP, 111, 33, 14, 14
}

Также в этом файле мы можем посмотреть в различных меню и увидеть там код
позиции меню 33761, который как раз и вызывает диалог управления итогами.
Для того, чтобы его вызвать, нам нужно открытому главному окну приложения
послать сообщение WM_COMMAND со значением w-параметра 33761, и сразу после
этого мы можем созерцать на эране нужный нам диалог.
Здесь только надо не переусердствовать, так как этот диалог вызывается даже
в случае исполнения обработки (что приостанавливает её исполнение и нарушает
алгоритм проведения документов, который в ней выполняется - проверено).
Далее, мы видим, что если система не находится в монопольном доступе, то
кнопки управления итогами у нас отключены, также они будут отключены, если
у пользователя нет прав на управление итогами. Нам-то на, самом деле, не важно
чего там нет у пользователя, так как мы знаем внутренние номера этих кнопок
и мы можем смело сделать их активными - для этого нужно получить указатель
окна функцией GetDlgItem(DialogHwnd,ControlID) и смело делать их активными.
Потом можно мышью их нажать.
Соответственно, делаем следущее:
Подключаемся к базе двумя пользователями Администратор и Пользователь.
Администратор имеем права на всё, а пользователь вообще не имеет прав.
Если на окне пользователя сделать вызов диалога управления бухгалтерскими
итогами, то он откроется (а почему бы и нет, он открывается и из меню).
Потом мы включим нужные кнопочки в диалоге и нажмём их.
Интересно то, что никаких ошибок не происходит, и пересчёт итогов выполняется.
Если же на другом пользователе запустить обработку, которая выполняет какие-то
изменения в базе, то мы просто увидим сообщение, что идёт захват таблицы,
а потом программа падает с сообщением, что захват не удался. Но никаких
сообщений о том, что мы не имеем права запускать пересчёт итогов в этом режиме
мы так и не получаем.
Вывод - вся защита 1С от лукавого, а также все ограничения на монопольное
исполнение каких-то частей.
К данному документу прилагается программа, которая позволяет выполнить
некоторый ряд действий с программами:
http://torquader.boom.ru/1C-CTRL.zip
По нажатию WIN+S программа посылает окну, на котором находится курсор,
сообщение WM_COMMAND с параметрами 33761,0
(Чтобы 1С его получила, нужно курсор держать на заголовке окна, так как всё
остальное это другое окно MDI, которое сообщение в очередь не транслирует).
По нажатию WIN+A програма анализирует указанное курсором мыши окно, и если
это окно диалога управления бухгалтерскими итогами, то программа просто
делает активным три обычно отключенных окна управления итогами.
По нажатию WIN+Q программа делает любое дочернее окно активным, если до этого
оно было неактивным.
По нажатию WIN+W программа делает любой элемент управления активным, если до
этого он не был активным (просто немного другой алгоритм активизации).
Прилагается исходик программы, чтобы было проще понять, как "играют" с окнами.
Правда, не со всеми окнами этот фокус проходит.
В общем, самое смешное - это то, что если вызвать блокировку, а потом на
диалоге пользователя нажать WIN+S - вылетает диалог управления итогами, в
котором можно пересчитать итоги - это полный П.
P.S. видимо, обработка итогов в монопольном режиме сделана для того, чтобы избежать блокировки попытки выполнения действий другими пользователями, когда система управляет итогами - программа выдаст ошибку захвата транзакции.
Также есть мнение, что всё, что 1С предлагает делать в монопольном виде необязательно делать в монопольном.
10 Torquader
 
08.10.07
20:10
Короче, с итогами немного разобрался:

1С и управление бухгалтерскими итогами.

Всем известно, что при работе с бухгалтерскими итогами есть один подводный
камень, а именно, необходимость пересчитывать эти несчастные итоги каждый
квартал. Казалось бы, ничего сложного, но для этого необходимо подключаться
к системе в монопольном режиме и долго ожидать, пока система выполнит расчёт.
Кроме того, в правах пользователя должно быть указано, что он может вызывать
данный диалог, иначе диалог открывается, но кнопки управления итогами будут
недоступны. Отследить необходимость изменения периода итогов не сложно, так
как для этого просто нужно сравнить текущую дату с датой, до которой они уже
расчитаны. Если текущая дата больше, то необходимо делать перерасчёт.
При запуске 1С мы всегда можем это проверить и указать на то, что итоги нужно
пересчитывать. То есть освободить базу для монопольного подключения таким
способом можно, но вызвать диалог управления итогами уже нельзя, так как он
вызывается только из меню. Но нас такая позиция не останавливает, мы будем
смотреть глубже. Поэтому мы открываем в редакторе ресурсов файл 1crcrus.dll
и в нём находим нужный нам диалог 1441:

1441 DIALOGEX 0, 0, 244, 84
STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "Управление бухгалтерскими итогами"
FONT 8, "MS Sans Serif", 0, 0
{
CONTROL "Расчет итогов установлен по:", -1L, "STATIC", SS_CENTER | SS_CENTERIMAGE | WS_CHILD | WS_VISIBLE | WS_GROUP, 7, 10, 106, 13
CONTROL "", 8219L, "STATIC", SS_CENTER | SS_CENTERIMAGE | WS_CHILD | WS_VISIBLE | WS_GROUP, 128, 10, 95, 13, WS_EX_CLIENTEDGE
CONTROL "&Установить расчет", 8193L, "BUTTON", BS_PUSHBUTTON | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 9, 33, 96, 14
CONTROL "", 8211L, "EDIT", ES_LEFT | ES_AUTOHSCROLL | ES_READONLY | WS_CHILD | WS_VISIBLE | WS_BORDER | WS_GROUP | WS_TABSTOP, 128, 33, 95, 13
CONTROL "Spin3", 8212L, "msctls_updown32", UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS | UDS_NOTHOUSANDS | WS_CHILD | WS_VISIBLE, 226, 33, 8, 15
CONTROL "Полный пересчет итогов", 8262L, "BUTTON", BS_PUSHBUTTON | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 10, 60, 95, 14
CONTROL "Выход", 1L, "BUTTON", BS_PUSHBUTTON | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 128, 60, 50, 14
CONTROL "Помощь", 57670L, "BUTTON", BS_PUSHBUTTON | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 184, 60, 50, 14
CONTROL " по:", -1L, "STATIC", SS_LEFT | SS_CENTERIMAGE | WS_CHILD | WS_VISIBLE | WS_GROUP, 111, 33, 14, 14
}

Также в этом файле мы можем посмотреть в различных меню и увидеть там код
позиции меню 33761, который как раз и вызывает диалог управления итогами.
Для того, чтобы его вызвать, нам нужно открытому главному окну приложения
послать сообщение WM_COMMAND со значением w-параметра 33761, и сразу после
этого мы можем созерцать на эране нужный нам диалог.
Здесь только надо не переусердствовать, так как этот диалог вызывается даже
в случае исполнения обработки (что приостанавливает её исполнение и нарушает
алгоритм проведения документов, который в ней выполняется - проверено).
Далее, мы видим, что если система не находится в монопольном доступе, то
кнопки управления итогами у нас отключены, также они будут отключены, если
у пользователя нет прав на управление итогами. Нам-то на, самом деле, не важно
чего там нет у пользователя, так как мы знаем внутренние номера этих кнопок
и мы можем смело сделать их активными - для этого нужно получить указатель
окна функцией GetDlgItem(DialogHwnd,ControlID) и смело делать их активными.
Потом можно мышью их нажать.
Соответственно, делаем следущее:
Подключаемся к базе двумя пользователями Администратор и Пользователь.
Администратор имеем права на всё, а пользователь вообще не имеет прав.
Если на окне пользователя сделать вызов диалога управления бухгалтерскими
итогами, то он откроется (а почему бы и нет, он открывается и из меню).
Потом мы включим нужные кнопочки в диалоге и нажмём их.
Интересно то, что никаких ошибок не происходит, и пересчёт итогов выполняется.
Если же на другом пользователе запустить обработку, которая выполняет какие-то
изменения в базе, то мы просто увидим сообщение, что идёт захват таблицы,
а потом программа падает с сообщением, что захват не удался. Но никаких
сообщений о том, что мы не имеем права запускать пересчёт итогов в этом режиме
мы так и не получаем.
Вывод - вся защита 1С от лукавого, а также все ограничения на монопольное
исполнение каких-то частей.
К данному документу прилагается программа, которая позволяет выполнить
некоторый ряд действий с программами:
http://torquader.boom.ru/1C-CTRL.zip
По нажатию WIN+S программа посылает окну, на котором находится курсор,
сообщение WM_COMMAND с параметрами 33761,0
(Чтобы 1С его получила, нужно курсор держать на заголовке окна, так как всё
остальное это другое окно MDI, которое сообщение в очередь не транслирует).
По нажатию WIN+A програма анализирует указанное курсором мыши окно, и если
это окно диалога управления бухгалтерскими итогами, то программа просто
делает активным три обычно отключенных окна управления итогами.
По нажатию WIN+Q программа делает любое дочернее окно активным, если до этого
оно было неактивным.
По нажатию WIN+W программа делает любой элемент управления активным, если до
этого он не был активным (просто немного другой алгоритм активизации).
Прилагается исходик программы, чтобы было проще понять, как "играют" с окнами.
Правда, не со всеми окнами этот фокус проходит.
В общем, самое смешное - это то, что если вызвать блокировку, а потом на
диалоге пользователя нажать WIN+S - вылетает диалог управления итогами, в
котором можно пересчитать итоги - это полный П.
P.S. видимо, обработка итогов в монопольном режиме сделана для того, чтобы избежать блокировки попытки выполнения действий другими пользователями, когда система управляет итогами - программа выдаст ошибку захвата транзакции.
Также есть мнение, что всё, что 1С предлагает делать в монопольном виде необязательно делать в монопольном.