вторник, 30 декабря 2008 г.

Восстановление внешних обработок

Вот и опять, случилась эта ерунда, выключили свет.
Все бы ничего, только в этот момент я сохранял внешнюю обработку, в которой вел разработку. Большинство разработчиков, в том числе и я используют для разработки не конфигурации, а внешние обработки(там где это возможно):
  • их проще отлаживать;
  • быстрее можно увидеть результат;
  • проще потерять всю работу. :)
Результат этого выключения представляет из себя самый страшный случай, не создания бекапов - когда мы не только теряем внесенные изменения, но и обработку в целом.

Здесь я расскажу как все таки вернуть свою многострадальную обработку, с последними внесенными изменениями.

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

Для того что бы понять, почему нельзя запускать платформу, вкратце расскажу как устроена работа платформы.

Все данные конфигурации или любые другие конструкции, которые определяют логику работы конфигурации обработки, оказываться во временном каталоге пользователя TMP.
Данные(файлы) платформы в каталоге пользователя имеют следующую маску v8_*.tmp
Рассмотрим, что же происходит при запуске внешней обработки на выполнение.
Вся обработка копируется в каталог временных фалов(чтобы не тянуть распакованные данные черт знает откуда). После чего уже распаковывается результатом распаковки будет появление еще как минимум n+m+1 фалов (где:
  • m-количество форм;
  • n-количество макетов).
Почти аналогичные действия выполняет v8Unpack. После выполнения следующего батника.
V8Unpack -unpack %1 %1.und FOR %%1 IN (%1.und\*.data) DO ..\bin\V8Unpack.exe -undeflate %%1 %%1.und

Вот эти файлы и есть наша последняя надежда. При первом запуске платформы все фалы из временного каталог с выше описанной маской удаляются. Если вы все таки успели запустить платформу тогда вам нужно обзавестись программой которая восстанавливает удаленные данные с диска по определенной маске имени файла.

В общем считаем что эти фалы у Вас есть.
  1. Копируйте их в другую папку(отличную от TMP).
  2. Запустите платформу
  3. Сортируйте по возрастанию размера и начиная с самого большого фала:
  • переименовывайте фалы с загадочных имен v8_*.tmp в v8_*.epf
  • пробуйте открыть их с использованием 1С (в 90% случаев вы найдете свою обработку я обычно :) ориентируюсь по размеру предыдущего бекапа).
Если все таки вы попали в эти несчастные 10% вы должны примерно знать что написано в тех модулях которые вы пытаетесь восстановить.
Открываем опять же все эти файлы и ищем наши тексты.
Если вы их нашли и у Вас есть какая-нибудь старая копия своей обработки. Тогда:
  1. Распакуйте обработку (как было написано выше).
  2. Замените необходимые формы, модули;
  3. Запакуйте обработку использую следующий текст батника (FOR %%I IN (%1\*.und_n) DO ..\bin\V8Unpack.exe -deflate %%I %1\%%~nI
    ..\bin\V8Unpack.exe -pack %1.und %1_n.epf)


В общем в любом случае от этих проблем Вас смогут избавить UPS и Backup. А знания о том как и что работает, на разных уровнях абстракции, платформы 1С, помогут сохранить хорошее настроение в работе при любых неприятностях.

четверг, 11 декабря 2008 г.

Выпуск версии 1.09

Где то в октябре 8 года было объявлено о выходе новой версии Ei. C последнего обновления(05.08) прошло достаточно много времени. Через 2 дня должна быть выпущена новая версия. Но выпускать, не до конца готовый продукт не очень хочется. Поэтому выпуск откладывается как минимум на 30 дней.
Для того что бы не разочаровывать небольшой анонс будущего содержания

Как то хочется немного пофилософствовать, что такое были релизы Ei до версии 1.
Ну во-первых, это был инструмент которым пользовался я и мои коллеги, причем для меня это был и единственный инструмент, за 3 года не было написано не одной вспомогательной обработки, которых у каждого программиста приличный чЁмодан.
Это была кладовка моего опыта, соответствующим образом оформленная. В эту кладовку складывались только уникальные вещи, которыми мне когда либо приходилось пользоваться. Постепенно вырисовывался образ того инструмента на, котором можно реализовать ВСЕ:
  • на котором можно оперировать с огромными массивами данных так же словно вы работает с одним объектом;
  • на котором можно редактировать конфигурацию, словно текстовые файлы;
  • использовать самый низкий (закрытый) уровень абстракции 1С;
Не утруждая себя постоянно писать громоздкие конструкции кода, хотя без кода здесь в любом случае не обойтись.


Почему так много времени ушло на выпуск этого релиза?
Ei была фактически переписана полностью.
Функционал был урезан и оставлено все самое необходимо. Вот список тех объектов (разделов), которые мы потеряли:
  • Пакетное создание представлений;
  • Заполнение расширенных свойств MSSQL 2005;
  • Трассировка запросов с использование трассировки MSSQL;
Эти разделы как самостоятельные либо не оправдали себя(со временем появились более совершенные алгоритмы или средства), либо их реализация стала возможна использованием настроек Конструктора.

Повысили производительность, теперь упреки о том что "Ei экскаватор, а другие маленькие лопатки" в прошлом.
Теперь более конкретно из хитов.
  1. Создана ВК на основе v8unpack и GameWithFire. Работа формы "объекты конфигуратора" полностью переписана под нее.
  2. Работа возможна на всех СУБД поддерживаемых 1С. Главное правильно прописать строку подключения.
  3. Трассировка запросов в формате 1С. Результатом будет набор запросов с параметрами и ссылками на встроенный язык инициировавший выполнение запроса.
  4. Объекты базы данных теперь получают полную информацию о реквизитах метаданных. Выводится информация о вспомогательных таблицах.
  5. Разбор текста запроса с точностью до поля, уникальное разбитие сложного запроса на составные.
  6. Реализована возможность получения формы из двоичных данных - то есть на основе двоичных данных любой конфигурации можно получить объект данных Форма, и открыть его (увидеть).
  7. Формирование на основе групповой обработки текста модуля, по средствам выполнения которого можно получить аналогичные действия.
  8. Уникальная функция преобразования любого значения(набора значений) в выражение на встроенном языке (явно проявляется в параметрах конструктора)
  9. Упростили конструкции на встроенном языке, теперь результат можно вернуть в переменную результат - во всех конструкциях где используется встроенный язык.
  10. Возможность использовать подключение по ADO к любому источнику, а не только к текущей базе данных (пример подключения к DBF).
И огромное множество других вещей. Рассказывать о которых буду либы в выходящих инструкция, роликах либо объявлю при выпуске релиза.

Так же более менее приведен код в порядок, к каждой процедуре добалено опсание по ГОСТУ(1С) :) , конечно не на всех объектах но:
  • Объекты базы данных;
  • Объекты конфигурации;
  • Трассировка;
могут приятно удивить.

Поскольку все переписано, открываю код предыдущих релизов (последнего).

Обмен данными КД.

До недавнего времени при обмене данными, между 7.7 и 8 использовал промежуточные файлы. Выгружал из источника или приемника нужные данные ОС и остатки по взаиморасчетам и загружал их в базу приемника (документом ввод остатков). Использовал для этого конечно же загрузку данных Ei

Однако время и объем задач внесли корректировки.
Вводная имеем 14 БУ 4.5 их нужно объединить в одну БД УПП 1.2.19.

Естественно, в данной ситуация свой взор я направил на КД и типовые обмены .
На диске ИТС есть все доступные правила, используя которые, можно перенести остатки практически из любой типовой Конфигурации.
  1. "Бухгалтерский учет", редакция 4.5 - файл Acc77.zip
  2. "Комплексная конфигурация", редакция 4.5 - файл Atc45.zip
  3. "Производство+Услуги+Бухгалтерия", редакция 2.8 - файл Mnfc28.zip
  4. "Торговля + Склад", редакция 9.2 - файл Tr92.zip
  5. "Управление торговлей", редакция 10.2 - файл UT10_2.zip
  6. "Управление производственным предприятием", редакция 1.2 - файл CnvUPP12.zip
  7. "Бухгалтерия предприятия", редакция 1.6 - файл BP1_6.zip
Взять эти правила можно здесь.
Одно но, все они для версии УПП 1.2.6 и платформы 8.0 .(очень оперативно :))

Нам предстоит нелегкий путь что бы преобразовать их для версии 1.2.19 (уже конечно 8.1).

Для того что бы избежать лишнюю трату времени, и для желающих самостоятельно выполнить преобразование пишу по пунктам.
  1. Загружаем правило в КД.
  2. Загружаем метаданные наших конфигураций. (в результате загрузки некоторые МД используемые в правилах будут помечены на удаление )
  3. Помеченные на удаление ПКО и ПКС
  4. В обработчиках исправляем следующие конструкции:
  • ЗначениеНеЗаполнено();
  • ПолучитьСведенияОСчете(),ПреобразоватьСчетаБУвСчетНУ() для них добавляем префикс общего модуля БухгалтерскийУчет.;
  • глТекущийПользователь;
  • Некоторые предопределенные значение поменяли Коды вместо 0009 например теперь 0000009 (Виды контактной информации).
  • Дополнительно к справочнику ФизЛица теперь у нас есть сотрудники организации.
  • Обработчик конвертации "После загрузки объекта" приводим к следующему виду //Не используем свойство автоматически сгенирировать номер или код
    //Так как используется параметр не выгружать коды справочников и номера документов
    Если Объект<>Неопределено Тогда
    Попытка
    Ссылка=Объект.Ссылка;
    Если (Справочники.ТипВсеСсылки().СодержитТип(ТипЗнч(Ссылка))
    ИЛИ ПланыВидовХарактеристик.ТипВсеСсылки().СодержитТип(ТипЗнч(Ссылка)))Тогда
    Если Не ЗначениеЗаполнено(Объект.Код) Тогда
    Объект.УстановитьНовыйКод();
    КонецЕсли;

    ИначеЕсли Справочники.ТипВсеСсылки().СодержитТип(ТипЗнч(Ссылка)) Тогда
    Если ТипЗнч(Ссылка)<> Тип("ДокументСсылка.ДокументРасчетовСКонтрагентом")
    и ТипЗнч(Ссылка)<> Тип("ДокументСсылка.ОтражениеПоступленияТоваровИУслугНДС")
    и ТипЗнч(Ссылка)<> Тип("ДокументСсылка.ОтражениеРеализацииТоваровИУслугНДС") Тогда

    Объект.Ответственный = ПараметрыСеанса.ТекущийПользователь;
    КонецЕсли;

    Если Не ЗначениеЗаполнено(Объект.Номер) Тогда
    Объект.УстановитьНовыйНомер();
    КонецЕсли;
    КонецЕсли;
    Исключение
    КонецПопытки;
    КонецЕсли;
После этого можно выгружать правила предварительно проверив ИХ. Перед проверкой учтите что многие ТЧ документов поменяли имена. Имена некоторых реквизитов изменены. Поэтому перед непосредственным удалением ПКС .. пройдите по свойствам. Легче изменить назначение чем их создавать заново, когда обнаружется, что что -то кудато не грузится.


Обращаем внимание на ПКО по учетной политике ( УчетнаяПолитикаОбщаяДля РегламентированногоУчета. и .т.д.) Данные ПКО используется в обработчике конфигурации "Перед выгрузкой данных" благополучно комментируем их, после удаления. //ВыгрузитьПоПравилу(,,,, "УчетнаяПолитикаОбщаяДляРегламентированногоУчета"); и тд.
Что бы не заморачивать с 5 значения, комментируем всю учетную политику по БУ и НУ внесем ее руками.

Это далеко не все сюрпризы которые Вас ожидают :). Помочь разобраться с другими ситуациями Вам безусловно поможет обработка отладки обработчиков :) (прикольно звучит) Режим отладки через Внешние обработки в совокупности с книгой по КД превратят для вас любую проблему в интересную задачку.

Если вы все таки дочитали до конца и вам не очень хочется возится с этими правилами самому, то вариант правил обмена оптимизированный на загрузку нескольких организация (помещение совместно используемых справочников в группы(склады, номенклатура)) для версий БУ 4.5.502-> УПП 1.2.19 можно преобрести всего за 1400 р. (в 3 раза меньше ставки 1 часа специалиста 1Cv8)