-Музыка

 -Подписка по e-mail

 

 -Поиск по дневнику

Поиск сообщений в fixin

 -Сообщества

 -Статистика

Статистика LiveInternet.ru: показано количество хитов и посетителей
Создан: 12.12.2002
Записей: 4343
Комментариев: 24598
Написано: 35607

Выбрана рубрика .


Другие рубрики в этом дневнике: Юмор(48), Софт(42), Слова(11), скутер(95), Сайт(24), Религия(3), Развлечения(57), Програмист(15), Помогите(15), Политика(68), Органайзер(6), Опыт(59), Обмен CD(6), Мысли(53), Москва(108), мобила(17), Креатив(3), КПК(28), компьютерные игры(61), книги(1), кино(75), Карикатуры(1), Идеи(77), Закон(92), Жизнь(348), дети(12), Девушки(302), Гитара(4), XXX(51), Outlook(41)

Ходили слухи, но...

Дневник

Среда, 14 Декабря 2005 г. 10:47 + в цитатник
Ходили слухи, что 25-й релиз 1С 7.7 открывает не все DBF файлы, а только те, к которым было обращение из платформы.
Слухи благополучно опровергнуты в лаборатории Гения 1С.
Ничего подобного - все файлы открываются!
А жаль.
Рубрики: 

Парсинг форм.

Дневник

Вторник, 13 Декабря 2005 г. 16:52 + в цитатник
Давеча пришлось пропарсить все формы документов, чтобы добавить туда всего лишь одну процедуру-обработчик события при начале выбора.
Ладно, я молчу, глобальных обработчиков событий нет, пришлось добавлять парсером обработчик события в каждый модуль.
Но вот у элемента управления нельзя определить, какой форме он принадлежит. Поэтому пришлось поизвращаться.

Рекомендую всем парсировщикам после парсинга запукать пункт меню "Конфигурация" - "Синтаксический контроль модулей". Все ваши ошибки вылезут, как на ладони.

Рубрики: 

Замена ссылки А на ссылку Б.

Дневник

Среда, 09 Ноября 2005 г. 14:59 + в цитатник
Жаль, что в 1С 80 нет функции на уровне платформы, чтобы заменить ссылку А на ссылку Б. Предлагаю такой алгоритм.

Пусть нужно заменить ссылку А на ссылку Б.
Перебираем все объекты, где могут быть эти ссылки - то есть справочники, документы, ПВХ, константы, регистры.
Для каждого объекта по его метаданным получаем список реквизитов, где могут быть ссылки на А.
Осуществляем поиск по первому из списка реквизитов, находим список объектов.
Для каждого из найденных объектов по списку реквизитов находим ссылки на А и заменяем их на Б.
Вносим изменения в базу.
Переходим к следующему по списку реквизиту.
Возможно выполнять весь код в транзакции или без нее.
При записи документов и справочников лучше использовать режим ОбменДанными.Загрузка=истина.
Для документов и справочников отбор делаем запросом по одному реквизиту, для регистров - можно непосредственно делать отбор набора записей по текущему реквизиту, тут же его поправлять и записывать.
Такой подход работает быстрее, чем 1С-ая типовая обработка по замене дублей, ибо специально заточен под замену одного объекта другим. Почему быстрее? Потому что метод НайтиПоСсылкам выдает просто объект, не указывая его реквизит, приходится перебирать все реквизиты этого объекта. Ну и кроме того, можно контролировать, какой конкретно вид объектов сейчас обрабатывается.
Будет время - напишу такую заточку.
Рубрики: 

Как завершить ОЛЕ-сессию 77

Дневник

Вторник, 08 Ноября 2005 г. 16:29 + в цитатник
С подачи одного перца smaharbA на кубани (код его), теперь у меня есть функция, которая позволяет убивать ОЛЕ-сессию 1С 77 так, чтобы она не болталась в памяти. Раньше я корячился со стандартным ЗавершитьРаботуСистемы, теперича все проще (но под NT не работает, только от Win2K и выше). Теперь можно нормально использовать ОЛЕ, без зависаний:

Функция ЗавершитьРаботуПришложения77(ОЛЕ)
ОЛЕ.ExecuteBatch("
| //(С)smaharbA Кубанский форум по 1С, Adopted for 1C8 by Fixin
| WshShell = CreateObject(""WScript.Shell"");
| Locator=CreateObject(""WbemScripting.SWbemLocator"");
| Service=Locator.ConnectServer();
| oExec=WshShell.Exec(""rundll32.exe kernel32,Sleep"");
| PIDs=Service.Get(""Win32_Process.Handle=""+oExec.ProcessID).ParentProcessID;
| oExec.Terminate();"
);
КонецФункции
Рубрики: 

IFRAME в 1С

Дневник

Четверг, 03 Ноября 2005 г. 15:50 + в цитатник
Все знают, как в HTML не хватает тега, который бы вставлял одну страницу в другую. Микрософт придумала IFrame, но он поддерживается только браузером Internet Explorer.

Так и фирма 1С не дала возможности в 80 вставки одной формы в другую или создания своих элементов управления. Но не вешайте нос! Можно копировать элементы управления.
Чтобы было проще обновлять типовые конфы, я размещаю дополнительные поля на отдельной закладке и хочу, например, чтобы на эту закладку попадали элементы из формы, которую я создам отдельно.
Я ковырял документ, создал ему одну дополнительную форму, прописал маленький код по копированию элементов управления с этой формы на текущую страницу панели и - вуаля - наслаждайтесь WYSIWYG!!!


Страница=Пан.Страницы.Добавить("п_Возврат", "Возврат");
Пан.ТекущаяСтраница=Пан.Страницы.п_Возврат;
//На странице размещаем элементы управления
ВспФорма=Документы[ЭтотОбъект.Метаданные().Имя].ПолучитьФорму("п_ПанельВозврата");
Для Каждого ИсхЭл Из ВспФорма.ЭлементыФормы Цикл
ИсхТип=ТипЗнч(ИсхЭл);
Эл=ЭлементыФормы.Добавить(ИсхТип,, истина, Пан);
ЗаполнитьЗначенияСвойств(Эл,ИсхЭл);
КонецЦикла;
форма IFRAME 1С.JPG (527x264, 32Kb)
Рубрики: 

Сдал профессионала 1С по бюджетированию

Дневник

Пятница, 28 Октября 2005 г. 14:25 + в цитатник
чудом. На халяву. Билет попался, который я не знал.
Догадался, исходя из общей эрудиции. Госоценка - 12 из 14, при минимуме 12.
Рубрики: 

Убиваю "Программа была завершена аварийно, восстанавливать индексы?"

Дневник

Вторник, 18 Октября 2005 г. 11:48 + в цитатник
Известный факт, что если в 1С не восстановлены индексы, при запуске в монопольном режиме она выдает сообщение "Программа была завершена аварийно, восстанавливать индексы?", а при запуске в разделенном режиме или по ОЛЕ выдает фигу - не запускается.
Так вот, чтобы не заморачиваться по этому поводу, прежде чем запускать ОЛЕ, я подчищаю файл 1SUSERS.DBF, где хранится количество подключенных пользователей - именно оттуда растут ноги этого сообщения.
Ясно, что если база работает, то удалить мне ничего не удастся - ну вот и чудненько, в работающую базу в разделенном режиме можно войти без проблем.

Примерный код на восьмерке:
ПутьФайлаАварийногоВыхода=База.Путь+"\"+"1SUSERS.DBF";
ФайлАварийногоВыхода=Новый XBase;
ФайлАварийногоВыхода.ОткрытьФайл(ПутьФайлаАварийногоВыхода, , ложь);
//Файл удастся открыть только если с ней никто не работает
Если ФайлАварийногоВыхода.Открыта() Тогда
ФайлАварийногоВыхода.ОчиститьФайл();
ФайлАварийногоВыхода.Сжать();
ФайлАварийногоВыхода.ЗакрытьФайл();
КонецЕсли;
Рубрики: 

Ночной робот 1С

Дневник

Четверг, 13 Октября 2005 г. 17:13 + в цитатник
Наконец-то дошли до запуска по ночам обработок в базе.
Раньше хотели делать это через COM-соединение, но недавно узнали, что в COM-соединении нельзя использовать внешние обработки.
Поэтому запускаем как и в 77 1С под специальным пользователем SCRIPT_ROBOT (кстати можно запустить много процессов под одним пользователем) и передаем ему с ключом /C параметр, в котором указываем, что он должен сделать:

"C:\Program Files\1cv8\bin\1cv8.exe" ENTERPRISE /F"D:\Public\Osipov\FIXIN-FILE-DEBUG\" /OUTc:\1.txt /NSCRIPT_ROBOT /C"ЗаписьЖурналаРегистрации(""Первый выход в космос"");"


Ну и в коде прописываем заглушку в ПриНачалеРаботыСистемы (для УПП нужно располагать код перед вызовом процедуры ОбработатьПараметрЗапуска, там тоже проперяется переданный параметр).

Если ИмяПользователя()="SCRIPT_ROBOT" Тогда
Выполнить(ПараметрЗапуска);
глЗапрашиватьПодтверждениеПриЗакрытии=Ложь;
ЗавершитьРаботуСистемы();
Возврат;
КонецЕсли;


Рубрики: 

На одном форуме 1С

Дневник

Вторник, 11 Октября 2005 г. 17:10 + в цитатник
На одном из форумов по 1С меня послали на три буквы, то бишь на буквы И Т С - читай ИТС, говорят.
Рубрики: 
Юмор

Сдал 1С80 Профессионал по ЗУП.

Дневник

Среда, 28 Сентября 2005 г. 14:03 + в цитатник
Готовился к экзамену полтора часа вечером накануне экзамена - прорешал и запомнил пять майских тестов с ИТС.
Мне попалось только 5 вопросов не с ИТС, но я напряг интуицию и сдал Профессионал.
Сдал на 12 балов. :)
Чудом вспомнил ответ на один вопрос с ИТС, колебался до последнего, иначе бы пролетел.
Рубрики: 

Список всех форм в 1С80

Дневник

Понедельник, 26 Сентября 2005 г. 11:25 + в цитатник
Хотя и нельзя получить список всех открытых форм, но если очень хочется....
Дело в том, что есть метод Оповестить, который по умолчанию рассылает сообщения всем открытым формам.
Если в каждую форму внесит обработчик некоего предопределенного оповещения - "ПолучитьСписокФорм", то можно получить список открытых форм. Так-то господа! :)
Конечно, не универсально, надо менять конфу, но способ есть.
И это проще, чем добавлять форму в список форм при открытии и при закрытии удалять форму из этого списка.
Рубрики: 

Разница в скорости регистров сведений и справочников

Дневник

Пятница, 23 Сентября 2005 г. 15:22 + в цитатник
Недавно заметил - в 80 можно подготовить набор записей регистра и записать одним махом, а справочники можно писать только по одиночке. Следовательно по регистру сведений массовая запись теоретически быстрее.
Но это только теоретически, потому что сейчас для вставки каждой записи РС используется отдельный SELECT. Но в будущем это поправимо.
Рубрики: 

Отладка кода.

Дневник

Четверг, 15 Сентября 2005 г. 13:29 + в цитатник
Отлаживал я как-то одну обработку по обмену данными - там было много кусков кода, выполняющихся через Выполнить. Вот беда случилась - загружали мы большой файл (многометровый) и так обидно, если грузится он час, а потом вылетает на какой-нибудь мелкой ошибке в коде, которая была не выявлена на этапе отладки.
Маялись мы маялись, а потом придумали - все вызовы Выполнить были вынесены в одну функцию, куда передавался код для выполнения и параметры это нам и сослужило хорошую службу.
Мы вставили Выполнить в Попытка-Исключение и если происходило исключение, предлагали программисту вживую изменить код. Если он соглашался, открывался диалог ввода кода, где он мог заменить старый код на новый. И перед выполнение кода мы проверяли, имеется ли он в списке замен. Если имеется, то мы перед выполнением подменяли старый код на новый. Так нам удалось быстро загрузить данные.
Было бы конечно хорошо, чтобы можно было создавать крэш-дамп и начинать работу обработки с того места, где она остановилась или хотя бы перезагружать код обработки, не останавливая ее, но увы - мечтать не вредно, потому голь на выдумки хитра. :)
Рубрики: 

Для отладки 1С 80 рекомендую функцию ДУ

Дневник

Пятница, 19 Августа 2005 г. 18:58 + в цитатник
Функция Ду(Код) Экспорт
Выполнить(Код);
Возврат истина;
КонецФункции

Функция выполняет любой код 1С 80 в табло.

А вот примеры ее использования (вызываются из табло отладчика и 1С-предприятия):

Ду("Сообщить(1)");
Ду("флПродолжать=истина");
Ду("ЭтаФорма.Закрыть()"); - прекращает отладку любой внешней обработки.

А также рекомендую функцию:

Функция ПрекратитьФорму(ЭтаФорма) Экспорт
ЭтаФорма.Закрыть();
Возврат истина;
КонецФункции
Рубрики: 

Автоматическая затычка 1С

Дневник

Пятница, 19 Августа 2005 г. 13:07 + в цитатник
Если надумаете делать обработку, которая будет обрабатывать модули конфигурации 1С и например вставлять в процедуру ОбработкаПроведения события ПередПроведение и ПослеПроведения, учтите, что параметры процедуры ОбработкаПроведения(Отказ, РежимПроведения) может быть названа разработчиком конфигурации совершенно от балды, например ОбработкаПроведения(А,Б).
Т.е. нужно еще анализировать названия переменных.
Рубрики: 

Грубый журнал.

Дневник

Среда, 17 Августа 2005 г. 15:21 + в цитатник
В УПП, если у пользователя нет никаких прав на просмотр журнала "Документы контрагентов", вылетает подобное сообщение об критической ошибке и программа завершается.
Ну ладно, ругается он справедливо, но зачем завершаться-то?
грубый журнал.gif (613x141, 3Kb)
Рубрики: 

Чем занимается Конфигуратор.

Дневник

Вторник, 16 Августа 2005 г. 17:49 + в цитатник
Работаю с конфигурацией УПП с хранилищем значений.
Конфигурация базы данных равна рабочей конфигурации.
Далее - вношу изменение в RLS права чтения одного документа, только одного, только в одно RLS.
В результате оно пять минут (!) что то реструктуризирует и выдает сообщение, что изменены все захваченные мною объекты.
К чему бы это?
Конфигуратор-врунишка.gif (443x270, 6Kb)
Рубрики: 

Без заголовка

Дневник

Среда, 10 Августа 2005 г. 17:48 + в цитатник
Понадобилось мне выгрузить клиентов из досовской программы клиент-банк Сбербанка в 1С. А там формат файлов - DDF и скорее всего это не файлы системы BTRIEVE, ибо в ней под это расширение используются файлы, описывающие словари таблиц.
Ковырялся я и так и сяк, а ларчик просто открывался.
В клиент-банке в самом начале (до вызова главного меню) нажимаем F8 "Выборка". Открывается список таблиц, из каких нужно выбирать.
Выбираем таблицу "USERS" - это таблица контрагентов.
В одном из полей пишем условие != 1111111111111, в остальных пишем условие - выводить строку.
Появляется список всех полей таблицы.
Окей, на вопрос "Напечатать", отвечаем - нет.
Далее нажимаем F10, на вопрос удалить файл отвечаем "Нет", она спрашивает, куда его сохранить, указываем куда.
Все, список контрагентов у нас в кармане.
Супер.
Рубрики: 

Не в ЗУП ногой!

Дневник

Понедельник, 08 Августа 2005 г. 13:12 + в цитатник
Вторая попытка сдать профессионала по ЗУП провалилась с еще более плачевными результатами, а ещё говорят - вода каменть точит.
Рубрики: 

Парсинг форм.

Дневник

Пятница, 05 Августа 2005 г. 18:39 + в цитатник
Если вы сопровождаете типовое решение, то хочется, чтобы добавления в формы делались программно, чтобы при очередном обновлении не вносить их ручками в каждую форму.
Нет проблем, форму можно заполнять динамически.
Но писать код ручками? Боже упаси - есть ПАРСИНГ.

Создаете простую обработку с одним только параметром - названием формы. Запускаете ее.
Она создает экземпляр формы, перебирает его коллекцию ЭлементыФормы и для каждого элемента создает код его добавления в форму на языке 1С. Вот и все дела.
Обновляйтесь на здоровье!
Рубрики: 


 Страницы: 5 4 [3] 2 1