LINUX.ORG.RU
ФорумTalks

1С: Предприятие 7.7 - это... [+ бонусные вопросы]


0

0

...Вынос Мозга Головной Жопы. Имеется встроенный урезанный великомогучий вижуалвасик, сдобренный некоторыми высокоуровневыми примочками непонятного назначения. Редактор кода и отладчик настолько убоги, что можно считать что их нет вовсе.

Тут народ всякий бывает, так что задам вопрос: обработку исключений нашёл, но как вывалить исключение в модуле проведения документа, чтобы это самое проведение отменить? Или хотя бы просто отменить, без всяких исключений.

И да, я не понял как работает редактор форм. Точнее не понял как работают формы им созданные. С какого фига таблицы растягиваются автоматически? А если мне это не надо?

Ещё вопрос: есть ли какая-нибудь кроссплатформенная библиотека, для чтения DBF-файлов? Или какое-нибудь описание формата в котором их держит 1С?

// Ненависть.

Deleted

И да, чтобы не было совсем оффтопиком: база расположена на Gentoo Linux + samba v3.0.32.

Deleted
()
Ответ на: комментарий от redgremlin

>> Некрофилия?

Согласен.

>> На восьмерку никак?

Никак. Есть куча старого кода, написанного не мной и который я не осилю перенести на восьмую версию. Я ведь правильно понимаю что просто так оно там не заработает?

А в восьмёрке есть нормальный отладчик и редактор?

Deleted
()

> как вывалить исключение в модуле проведения документа, чтобы это самое проведение отменить? Или хотя бы просто отменить, без всяких исключений.  

В процедуре ОбработкаПроведения() установите статус возврата = 0, тогда проводка не будет выполнена, а транзакция будет отменена.
Используйте: 
    СтатусВозврата(0);
После этого, чтобы сразу завершить процедуру, можно добавить:
    Возврат;

Byron
()

> И да, я не понял как работает редактор форм. Точнее не понял как работают формы им созданные. С какого фига таблицы растягиваются автоматически? А если мне это не надо?

Попробуйте следующее: щелкните правой кнопкой по "таблице", выберите "Свойства", в открывшемся окне "Свойства Многострочной Части" снимите галочку "Авто настройка ширины колонок".

Byron
()

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

AiFiLTr0 ★★★★★
()
Ответ на: комментарий от Byron

>> СтатусВозврата(0);

Спасибо, видимо то что нужно.

Deleted
()
Ответ на: комментарий от Byron

>> Попробуйте следующее: щелкните правой кнопкой по "таблице", выберите "Свойства", в открывшемся окне "Свойства Многострочной Части" снимите галочку "Авто настройка ширины колонок".

Галочка не установлена, но таблицу всё равно растягивает на всю форму. Только место для кнопок сверху и снизу остаётся. Мне в принципе это и нужно, но всёравно интересно где у него там astral.dll и как его можно при необходимости отключить =).

Deleted
()

>Ещё вопрос: есть ли какая-нибудь кроссплатформенная библиотека, для чтения DBF-файлов? Или какое-нибудь описание формата в котором их держит 1С?

dbf там самый обычный, было куча библиотек для работы с ним. Только зачем, хочется усугубить сабж внешними костылями?

madcore ★★★★★
()

Почитал каменты и понял, что не зря ушёл из одминов...

Gharik
()
Ответ на: комментарий от madcore

>> Только зачем, хочется усугубить сабж внешними костылями?

Ну... Типа того. Нужно на линукс-сервере, на котором лежит база данных, вынимать данные из 1С и класть в расшаренную диру с данными другой вендопрограммы, которая хранит данные в XML. Причём нужно это делать автоматически, т.е. встроенные средства 1С не подходят.

Deleted
()

> Редактор кода и отладчик настолько убоги, что можно считать что их нет вовсе. 

Это вы зря. В 1С всё сделано очень даже неплохо для высокоуровневой разработки. Видимо у вас под рукой просто нет документации. С каждой конфигурацией 1С идёт несколько томов документации, где всё подробно описано.

> Ещё вопрос: есть ли какая-нибудь кроссплатформенная библиотека, для чтения DBF-файлов? Или какое-нибудь описание формата в котором их держит 1С? 

То есть вы хотите напрямую получить доступ к файлам 1С, в которых она хранит данные? Зачем такое хакерство?

Если же нет, и вы просто хотите работать с dbf-файлами, используйте средства 1С - объект XBase. Это делается примерно так:
Файл = СоздатьОбъект("XBase");
Файл.ОткрытьФайл(<Имя файла>,,0);
Если Файл.Открыта() = 1 Тогда
    Файл.Первая();
    Пока Файл.ВКонце() = 0 Цикл
        Переменная = Файл.ПолучитьЗначениеПоля(<ИМЯ_ПОЛЯ>);
        ...
	Файл.Следующая();
    КонецЦикла;	
    Файл.ЗакрытьФайл();
КонецЕсли;

Byron
()

Если не надо растягивать таблицы - ставишь галочку, чтобы не разворачивалась вся форма.

Что в каком файлике лежит - можно посмотреть в 1Cv7.DD.
Был проект для универсального доступа к данным из других сред (например, Access, но он помер).
Работать с данными из стороннего приложение таки можно, но там ряд преднамеренных геморов (типа индексов в 32-разрядой системе счисления и т.п.).
Но православным способ является только обмен через XML или через веб (в последнем случае требуется специальная компонента).

metanol
()
Ответ на: комментарий от Deleted

>Ну... Типа того. Нужно на линукс-сервере, на котором лежит база данных, вынимать данные из 1С и класть в расшаренную диру с данными другой вендопрограммы, которая хранит данные в XML. Причём нужно это делать автоматически, т.е. встроенные средства 1С не подходят.

В чем конкретно сложность использовать для этого средства 1С?

madcore ★★★★★
()

Для чтения DBF была какаято прога и плугин к тоталу, вроде даже чтото было с исходниками, щас ужо не помню

lazyklimm ★★★★★
()
Ответ на: комментарий от Byron

>> Это вы зря. В 1С всё сделано очень даже неплохо для высокоуровневой разработки.

Согласен. Видимо идёт расчёт на то, что пользователь наделает в конфигурации нужных объектов (справочников/отчётов/регистров и т.п.) и "склеит" их небольшими простенькими функциями на встроенном бейсике. В этом случае отладчик действительно не нужен. А если нужно реализовать сложную логику с хитрыми вычислениями?

Deleted
()
Ответ на: комментарий от Deleted

> вынимать данные из 1С и класть в расшаренную диру с данными другой вендопрограммы, которая хранит данные в XML. Причём нужно это делать автоматически, т.е. встроенные средства 1С не подходят.

Смотришь мануал по параметрам коммандной строки и пишешь батник для засовывания в планировщик, который будет 1С-ну запускать, делать выгрузку в XML и завершать с требуемой периодичностью.

Твоя проблема не в том, что 1С плохой, а в том, что ты не читал документацию и не видел, как реальная работа с ней делается на практике.

metanol
()
Ответ на: комментарий от madcore

>> В чем конкретно сложность использовать для этого средства 1С?

Необходимостью запускать 1С и жать там кнопку, которая будет делать всё что нужно. Причём производить эти действия нужно, когда в другой программе никто не работает, т.е. ночью 8).

Deleted
()
Ответ на: комментарий от Deleted

> А если нужно реализовать сложную логику с хитрыми вычислениями?

То - сюрприз - отладчик там таки есть. Просто надо научиться им пользоваться.

metanol
()
Ответ на: комментарий от metanol

>> Твоя проблема не в том, что 1С плохой, а в том, что ты не читал документацию и не видел, как реальная работа с ней делается на практике.

Сомневаюсь что в документации описано как запускать 1С на линукс-сервере в полночь.

Deleted
()
Ответ на: комментарий от metanol

>> То - сюрприз - отладчик там таки есть. Просто надо научиться им пользоваться.

А я разве говорил что его нету? Я говорил что он неудобный.

Deleted
()
Ответ на: комментарий от Deleted

> Необходимостью запускать 1С и жать там кнопку, которая будет делать всё что нужно. Причём производить эти действия нужно, когда в другой программе никто не работает, т.е. ночью 8).

Ещё раз. Батник, который будет её запускать. И планировщик.
Так у всех и работает, ваши потребности не уникальны.

metanol
()
Ответ на: комментарий от metanol

>> Ещё раз. Батник, который будет её запускать. И планировщик. Так у всех и работает, ваши потребности не уникальны.

Да понимаю я всё это, не совсем идиот. Можете считать что у меня идея-фикс: обойтись без необходимости круглосуточно держать включенной машину с виндоусом и 1С.

Deleted
()
Ответ на: комментарий от Deleted

>Необходимостью запускать 1С и жать там кнопку, которая будет делать всё что нужно. Причём производить эти действия нужно, когда в другой программе никто не работает, т.е. ночью 8).

Надо все-таки изучить 1С, если предстоит с ней работать. Все описанное возможно и нужно делать средствами 1с.

madcore ★★★★★
()
Ответ на: комментарий от Deleted

> А если нужно реализовать сложную логику с хитрыми вычислениями?

От налогов уходишь? А бухгалтера эту логику осилят? Не проще ли нанять вместо когорты прогеров одного старого толкового буха?

Gharik
()
Ответ на: комментарий от madcore

> Все описанное возможно и нужно делать средствами 1с.

Я так понял, что у него что-то типа самбовой шары на машине с линуксом и он принципиально не держит там 1Са, но хочет, чтобы данные как-то формата 1С выгружались во что-то удобоваримое.

Выход только один - читать .dd файл, много думать и писать собственные запросы для чего-то работающего с dbf. Не знаю, что именно он там выгружает, но это скорее всего это очень дофига работы.

metanol
()
Ответ на: комментарий от metanol

>> Я так понял, что у него что-то типа самбовой шары на машине с линуксом и он принципиально не держит там 1Са, но хочет, чтобы данные как-то формата 1С выгружались во что-то удобоваримое.

Да да да, именно так.

Вроде меня уже начало отпускать и мозг начал понимать что я хочу странную и почти бессмысленную труЪ-хренотень.

Deleted
()
Ответ на: комментарий от metanol

Форматы .dd и .md там вроде как не особо-то открыты/документированы, но какие-то частичные описания попадались, добытые ковырянием. Да и даже если работа с файлами конфигурации не понадобится, а достаточно только бд - затея кажется сомнительной и даже вредной.
hint: 7.7 работает в вайне.

madcore ★★★★★
()
Ответ на: комментарий от Deleted

>> Вроде меня уже начало отпускать и мозг начал понимать что я хочу странную и почти бессмысленную труЪ-хренотень.

Это всё последствия моих вчерашних попыток написать на bash'е декодер mp3... Не продвинулся дальше парсинга заголовков.

Deleted
()
Ответ на: комментарий от Deleted

> Это всё последствия моих вчерашних попыток написать на bash'е декодер mp3... Не продвинулся дальше парсинга заголовков.

man cat, man lame, man mpg123 ?

Так и с 1С...

Gharik
()
Ответ на: комментарий от Deleted

> Это всё последствия моих вчерашних попыток написать на bash'е декодер mp3... Не продвинулся дальше парсинга заголовков.

пруф оф концепт?

AiFiLTr0 ★★★★★
()
Ответ на: комментарий от Gharik

>> man cat, man lame, man mpg123 ?

Это не спортивно. Хочу POSIX shell + sed + другие_стандартные_утилиты. Где-то месяц назад написал генерялку фракталов (множество мандельброта) в BMP, но в порыве гнева сделал на неё rm...

Deleted
()
Ответ на: комментарий от Gharik

> А ты код не пиши, лучше успокоительное попей.

Или просто попей, чего-нибудь, может полегчает.

Rubystar ★★
()

// Ненависть.
И это пройдет...

1С - это вам не полноценная иде, с набором компиляторов в придачу. Воспринимайте ее как некий инструмент (пусть и не универсальный, на все задачи), делающий то, для чего она задумывалась.
И увлекаться программированием на ней не стоит. Лучше потратить время на изучение предметной области, для автомтизации которой 1С и создавалась. Хочется быть крутым кодером - тогда лучше заняться чем-нибудь другим, но не 1С.
А док-цию лучше все-таки читать)

Deprecated
()
Ответ на: комментарий от Deleted

Не глумись над святынями, нехристь. Только через рот.

Gharik
()
Ответ на: комментарий от Byron

> Пока Файл.ВКонце() = 0 Цикл

Как же все-таки ужасно это выглядит на русском :)

init ★★★★★
()

> ...Вынос Мозга Головной Жопы

Shit happends, и с ним надо как-то работать

> Редактор кода и отладчик настолько убоги, что можно считать что их нет вовсе.


ты про семёрку? cм. OpenConf, 1C++, gconf+CVS/hg/git
да, отдельные припарки к гнилой основе. А что делать.
Отладчик больше 1 экземпляра на 1 машине не запускается. "Замер производительности" в нем aka псевдо-профилировщик практически бесполезен.
Многопоточность и расширяемая модель событий отсутствует как класс.
В восьмёрке чуток получше: встроенный VCS уровня sourcesafe, быдлокод похожий на .NET, а не VB6, модель событий и объектов поширше, выполнение части методов на сервере приложений. Но тоже в целом убогонько.

> Тут народ всякий бывает, так что задам вопрос: обработку исключений нашёл, но как вывалить исключение в модуле проведения документа, чтобы это самое проведение отменить?


не нужно тебе там исключение. Встроенная обработка исключений делается для длительных обработок, и в целом, тоже мёртвому припарка. Потому что встроенные исключения имеют смысл в рамках одного модуля. Нельзя например выкинуть исключение в модуле проведения и поймать его в "главном модуле", главный модуль втыкается в платформу, модуль проведения -- тоже в платформу, а не в главный модуль.

Ты вообще ЖКК (жёлто-красные книжки) не пробовал читать? Там, например, написано, что платформа вызывает модуль проведения внутри одной толстой транзакции (соответственно, чем больше логики, разных процессов, тем "толще" и дольше выполняется транзакция) , как одна транзакция. И после вызова модуля если установлен СтатусВозврата(0) (обычно процедурами вроде глНеПроводить() из ГМ), то эта транзакция откатывается.
Можешь сам прикинуть, как это сказывается на падении производительности системы из-за блокировок при добавлении новой толстой логики в модули проведения документов.

> С какого фига таблицы растягиваются автоматически? А если мне это не надо?


выделить таблицу, из меню по правой кнопки в свойствах галка "подбор по ширине".

> Ещё вопрос: есть ли какая-нибудь кроссплатформенная библиотека, для чтения DBF-файлов?


пользуйся общесистемным через ADO : ODBC драйвера из ФоксПро, Экселя и т.п. Они быстрее работают, чем встроенные припарки.

> Или какое-нибудь описание формата в котором их держит 1С?


"Описание структуры метаданных"? см. 1Cv7.dd -- это типа DDL , схема таблиц. В SQL версии там ещё и какие-то триггеры есть.

Тебе не нужно лезть туда руками, обычно. Пользуйся стандартными недоSQL запросами, или трансляцией через 1C++ в нормальный SQL.

anonymous
()
Ответ на: комментарий от Deleted

> Ну... Типа того. Нужно на линукс-сервере, на котором лежит база данных, вынимать данные из 1С и класть в расшаренную диру с данными другой вендопрограммы, которая хранит данные в XML. Причём нужно это делать автоматически, т.е. встроенные средства 1С не подходят.

это не тебя случайно varvah припахал? он что-то про вебмагазин недавно искал.

во-первых, можно выгружать XML из 1С через COM-компоненты. См. MSXML, есть что-то встроенное вроде V7.XML но оно медленее MSMXML. Автоматический вызов выгрузки можно засунуть в ГМ в ОбработкуОжиданияСобытия(), веселуха начинается, когда там уже что-то есть (например, для сканера ш-к), -- нужно организовывать кооперативную многозадачность в духе Windows 3.11

во-вторых, см. во-первых. Можно написать компоненту COM, которую вызывать из 1С. В-третьих, лезть в базу руками через SQL и выгружать её в XML. Нужно учесть блокировки 1С.

anonymous
()
Ответ на: комментарий от Byron

>Это вы зря. В 1С всё сделано очень даже неплохо для высокоуровневой разработки

х*во там сделано. Можно было сделать куда лучше и удобнее, см. те же "клоны": Ананас, 2C gpl, и т.п.

anonymous
()
Ответ на: комментарий от Byron

>Файл = СоздатьОбъект("XBase")
>Зачем такое хакерство?


дадада, это сильное колдунство.
Предлагаю простой тест: обработку, которая читает/пишет справочник в DBF.
Чтение/запись завёрнуты в хронометраж, хотя бы через
Время1=ПолучитьВремя(Ч1,М1,С1);
..
Время2=ПолучитьВремя(Ч2,М2,С2);
ЗанялоВремени=С2+60*(М2+60*Ч2)-( С1 +60*(М1+60*Ч1));

и дальше меряем время работы через XBase/ADODB/ODBC и т.п.

anonymous
()
Ответ на: комментарий от metanol

>через веб (в последнем случае требуется специальная компонента).
>metanol


метанируйте дальше. Заодно, вкурите разницу между синхронным и асинхронным вызовом методов от сайта к БД 1С.
Система счисления, ЕМНИП, 36-ричная: [01..9][A..Z]

anonymous
()
Ответ на: комментарий от madcore

>> Причём нужно это делать автоматически, т.е. встроенные средства 1С не подходят.

>В чем конкретно сложность использовать для этого средства 1С?

хотя бы в том, что нужно при обновлении объекта 1С выгрузить соответствующий элемент во внешнюю базу. Каким образом, работая "внутри 1С" вы определите, что объект изменился? Если объект мог быть изменен обработкой, -- при этом в "журнале регистрации" ничего не отражается. "Движок" в общем случае не гарантирует, что 1) можно добавить новое событие на изменение объекта, например (модель событий 1С не расширяема в рамках конфигурации "внутри 1С") 2) это событие вызовется не только при интерактивном открытии формы юзером, но и из обработки из встроенного языка.

Хотя это элементарно делается через SQL триггеры. С любой схемой кеширования, хоть сразу, по триггеру на каждое изменение, хоть асинхронно синхронизируясь каждые 5-10 минут (для выгрузки на сайт, например).

Заодно, подумайте в обратную сторону: на сайте через веб-магазин зарезервировали для продажи покупателю единицу товара. Как это загрузить в 1С?

Нужны фоновые процессы, которых в 1С нет.

anonymous
()
Ответ на: комментарий от Deleted

> А если нужно реализовать сложную логику с хитрыми вычислениями?

Рассчёт на то, что встроенных объектов для аггрегации данных учета (регистров, бух. счетов, календарей в компоненте "Расчёт зряплаты") хватит на ВСЕ случаи жизни, для всех вариантов учёта. В итоге возникают непонятки, зачем считать на регистрах, когда можно сделать на бух.счетах в управленческом плане счетов, взятом от балды, как удобнее, а не в соответствии с ПБУ -- заодно получим 5 аналитик на халяву, и стандартные бух. отчёты, чего не получим с регистрами.

Ох, не зря в восьмёрке ввели "план счетов характеристик", "дерево характеристик", и т.п. Значит, не хватило встроенных средств аггрегации. Посмотрим, насколько их хватит в восьмёрке -- а между тем, самый Ъ вариант был бы дать в руки нормальную модель расширения этих итоговых базовых объектов, для разных случаев -- когда лучше подходят иерархические БД, когда многомерные, когда реляционные SQL таблицы.

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

anonymous
()
Ответ на: комментарий от metanol

> Смотришь мануал по параметрам коммандной строки и пишешь батник для засовывания в планировщик, который будет 1С-ну запускать, делать выгрузку в XML и завершать с требуемой периодичностью.

Делал и роботов с автоматической загрузкой/выгрузкой. Меньше всего геморроя, как ни странно, с УРБД для этой цели (ловить изменения объектов). Вообще метод "запускать 1С по планировщику" не работает, когда 1) заблокирована база пред. пользователем 2) могли полететь индексы, и переиндексация то ли запустится, то ли не запустится 3) пользователь активно работает в базе, чего-то там перепроводит, и т.п. Читает, или хуже, пишет в базу. Выгрузка должна по времени проходить минимально, чтобы не блокировать базу и не быть заблокированной самой не в меру активным пользователем; потом, выгрузка должна прочитать не грязные объекты, меняющиеся самим пользователем, а нормальные (это почти получится само, если выгрузка пишется на встроенном языке 1С, за исключением того, что если он в этот момент перепроводит цепочку документов, и цепочка не завершена, выгрузка поймает промежуточное состояние посреди цепочки).

anonymous
()
Ответ на: комментарий от Deleted

>Необходимостью запускать 1С и жать там кнопку, которая будет делать всё что нужно.

фигня вопрос. При запуске 1С определяешь, запущена интерактивно или роботом. Если роботом, то при запуске вызываешь обработку, которой в контекст передаешь команду для робота. Робот в обработке проверяет, запущена обработка интерактивно (с пустым контекстом формы) или автоматом (с параметрами в контексте формы), и сама нажимает на кнопку (вызывает Сформировать или как там).

Определить, запущена сама платформа интерактивно, или роботом проще всего через временный файл типа .lock -- скрипт, который запускает робота, будет делать touch .lock && start 1Cv7.exe /... && rm .lock, а в ГМ в ПриНачалеРаботыСистемы () будешь проверять есть lock файл или нет. Старый интерактивный запуск можно обернуть в rm .lock.

>Причём производить эти действия нужно, когда в другой программе никто не работает, т.е. ночью 8).


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

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.