Белозеров Дмитрий | Системный архитектор | LMSoft

«Кодогенерация и метагенерация в 1С»

Примерно год назад жизнь заставила меня задуматься над таким вопросом - а не разработать ли язык (точнее псевдоязык), с помощью которого можно было бы программно работать с метаданными 1С, писать скрипты, которые выполняют те же действия, которые выполняет разработчик в конфигураторе... В этом докладе хочу рассказать о том как мы разрабатывали такой инструмент, с какими сложностями и нюансами столкнулись, и что получилось в итоге. Мы рассмотрим реальные кейсы использования автоматической генерации метаданных 1С, в которых использование такого подхода дает серьёзные преимущества и сильно облегчает жизнь разработчика (иногда настолько облегчает что можно обойтись вообще без него :), увидим как инструмент генерации можно вписать в общий контур continuous integration. А ещё обсудим перспективы использования подобных практик (генерация конфигурации на основе формализованных функциональных моделей, реализация библиотечного подхода к разработке прикладных решений).

Алкодекларация в 7.7: сверка нашего файла алкодекларации с файлами данных поставщиков

Обмен - Обмен с другими системами

Если алкодекларация делается не на основании файлов поставщиков, а по данным из собственной базы, всегда остается вероятность несовпадения данных в базе и данных поставщиков. Для сверки этих самых данных и предназначена данная обработка. Работает в любой конфигурации 7.7, требует наличия v7plus.dll.

Клиенты получили письмо из ФСРАР с извещением о несовпадении сведений, поданных в декларации, со сведениями, поступившими от поставщиков. Необходимо было срочно определить, в каких именно документах имеются расхождения. Учитывая объем поступлений, вручную сверять данные было нереально. В результате была написана эта обработка, значительно облегчившая труд бухгалтеров - вместо нескольких дней на сверку ушло менее трех часов.

Что умеет делать:

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

Автоматически распознает 11 и 12 формы деклараций. Для удобства работы бухгалтера объем из далов переводит в литры.

 Как с этим работать:

Выбираем контрагента, поля ИНН и КПП заполнятся автоматически (фишка работает только в Бухгалтерии, для других конфигураций ИНН и КПП придется вводить вручную). Выбираем каталог с файлами от поставщиков. В каталоге может быть несколько файлов, но все только от одного поставщика (сделано на случай, когда поставщики дают данные в отдельных файлах для каждой торговой точки). Файлы поставщиков не проверяются на соответствие ИНН, КПП и периода, так что необходимо следить, чтобы в каталог не затесались лишние файлы. Выбираем наш файл декларации, заранее сформированный, и жмем кнопку "Сверить". Заполняются таблицы закупок и возвратов. Смотрим, какие строки не совпадают. В таблице данных от поставщиков делаем двойной щелчок на строке с несовпадающими данными и получаем таблицу поступлений за этот день. Можно распечатывать и сверять.

Если все сходится, выбираем следующего поставщика (или вводим ИНН и КПП вручную) и повторяем процесс. 

Недостатки:

Требуется наличие компоненты v7plus.dll (впрочем, если вы формируете файл декларации напрямую из базы, она у вас почти наверняка уже установлена).

Не сверяет данные в разрезе ИНН и КПП производителей.

Возвраты сверяются только в разрезе кодов алкогольной продукции.

После исправлений алкодекларацию приходится переформировывать.

 

Скачать файлы

Наименование Файл Версия Размер
Сверка данных поставщиков
.ert 59,00Kb
10.07.13
13
.ert 59,00Kb 13 Скачать

См. также

Комментарии
Сортировка: Древо
1. hogik 426 10.07.13 18:29 Сейчас в теме
(0)

"для других конфигураций ИНН и КПП придется вводить вручную"(с)

И подправить ERT. Да? ;-)
2. MaxDavid 122 10.07.13 19:04 Сейчас в теме
(1) hogik,
И подправить ERT. Да? ;-)

Ну, если ломает каждый раз вводить вручную, тогда да, придется править ert.
Если же не ломает - все сработает и так ))
3. hogik 426 10.07.13 20:12 Сейчас в теме
(2)
"все сработает и так"(с)
Нет. :-)

СЗ = глРазложить<<?>>(ВыбКонтрагенты.ИНН, "/");
{C:\...\СверкаДанныхПоставщиков.ert(12)}: Функция не обнаружена (глРазложить)
СЗ = глРазложить<<?>>(ВыбКонтрагенты.ИНН, "\");//страхуемся на случай обратного слеша
{C:\...\СверкаДанныхПоставщиков.ert(14)}: Функция не обнаружена (глРазложить)
4. MaxDavid 122 10.07.13 21:18 Сейчас в теме
(3) hogik,
Нет. :-)

Все верно, если конфигурация другая, ИНН и КПП поставщика приходится вручную вбивать в соответствующие поля на форме. Поле выбора контрагента я сделал только потому, что изначально писал для сильно переделанной Бухгалтерии, чтобы девочке не пришлось каждый раз копипастить ИНН и КПП из справочника Контрагенты. Об этой особенности я и указал в описании. Но на работоспособность обработки это не влияет - если руками заполнить соответствующие поля, все отработает и так.
Хотя да, лучше было бы воткнуть "Попытка... Исключение". Не пришло в голову, каюсь )
Хммм... Или вариант еще лучше - при открытии сразу проверять, Бухгалтерия ли это, и если нет - делать поле выбора контрагента невидимым или недоступным.
5. hogik 426 10.07.13 22:05 Сейчас в теме
(4)
"все отработает и так"(с)
Второй раз - НЕТ ! :-)
Она, вообще, не запустится.
А воткнуть "Попытка... Исключение" имеет смысл при явном обращении к реквизитам выбранного элемента справочника без использования функции глРазложить().
Но, это всё мелочи. ;-) Кому надо - разберётся и подправит под свою конфигурацию.
P.S.
Это первая разработка, которую я скачал с данного ресурса с целью использовать её в своей реальной работе, а не для ознакомления-критики. И это с 2006 года... :-(
6. MaxDavid 122 10.07.13 22:44 Сейчас в теме
(5) hogik,
Второй раз - НЕТ ! :-)
Владимир, ей-богу, извините, только теперь я понял, в чем проблема. До этого пробовал в самописных конфах, но в них, оказывается, везде было "глРазложить". Хреновый из меня тестировщик ((
Сейчас выложу обновленный вариант - придется воткнуть функцию "Разложить" в тело обработки. Спасибо вам. А вот за это
Это первая разработка, которую я скачал с данного ресурса с целью использовать её в своей реальной работе
отдельное спасибо. Честно.
Оставьте свое сообщение