Попытка эмуляции кода 7-ки в 8-ке

31.05.13

Разработка - Инструментарий разработчика

Многие наверняка знают такой инструмент как v7cnv.exe, предназначенный для конвертации баз версии 7.7 в 8-ку. И кто им пользовался помнит что код модулей не переносится и его приходится переписывать.  Решил попробовать создать эмуляцию кода 7-ки и вот что из этого вышло.

Файлы

ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.

Наименование Скачано Купить файл
Конфигурация с тестовым примером
.dt 1,10Mb
11 2 500 руб. Купить

Подписка PRO — скачивайте любые файлы со скидкой до 85% из Базы знаний

Оформите подписку на компанию для решения рабочих задач

Оформить подписку и скачать решение со скидкой

Вы можете заказать платную доработку или адаптацию этой разработки под вашу конфигурацию на «Бирже заказов».

  • 0% комиссии — оплата напрямую исполнителю;
  • Исполнители любого масштаба — от отдельных специалистов до команд под проект;
  • Прямой обмен контактами между заказчиком и исполнителем;
  • Безопасная сделка — при необходимости;
  • Рейтинги, кейсы и прозрачная система откликов.

Предупреждаю! Писалось для эксперимента, поэтому содержит очень ограниченный функционал предназначенный для проверки самой возможности. Не является законченным решением.

1. Некоторые стандартные функции как СоздатьОбъект достаточно просто реализовать в глобальном модуле.
В данном случае реализовал только для создания справочников. На самом деле вызывается "статический" метод у обработки который создает объект внешней компоненты, которая по сути "прокси" для вызова методов и атрибутов из объекта обработки которая является ссылкой внутри объекта компоненты. Вот такая немного запутанная формулировка, но дальше будет понятней.

Функция СоздатьОбъект(ИмяОбъекта) экспорт
     Рез = "";
     ДлинаСправочник = СтрДлина("Справочник");
     Если НРег(Лев(ИмяОбъекта,ДлинаСправочник))="справочник" Тогда
         Рез = Обработки.Справочник.СоздатьПоИмени(Сред(ИмяОбъекта,СтрДлина("Справочник")+2));
     КонецЕсли;
     Возврат Рез;
КонецФункции
 

2. Сразу покажу как работает пример для тестирования. Пример простой и выглядит полностью как в 7-ке. Естественно в реальности будет много нюансов.

 

Процедура ТестСправочникаНажатие(Элемент) 
    Товары = СоздатьОбъект("Справочник.Номенклатура"); 
    Товары.ВыбратьЭлементы(); 
    Пока Товары.ПолучитьЭлемент() = 1 Цикл
         Сообщить(Товары.Наименование); 
         Сообщить(Товары.Реквизит1); 
    КонецЦикла; 
КонецПроцедуры 
3. Работает это так. Когда я обращаюсь к Товары.ПолучитьЭлемент(), то из компоненты происходит вызов функций
Обработки.Справочники.КолвоПараметровМетода(ИмяМетода)
Обработки.Справочники.ВызватьФункцию(ИмяМетода)
  ...  ИначеЕсли ИмяФункции = "ПолучитьЭлемент" Тогда ...

Или когда запрашиваю атрибут

Товары.Реквизит1 , то вызываются

Обработки.Справочники.ПолучитьСвойство(ИмяСвойства)
Обработки.Справочники.УстановитьСвойство(ИмяСвойства,Значение)

Таким образом почти вся логика слоя совместимости ложится на код 8-ки и это позволяет разработать внешнюю компоненту не содержащую специфичного кода для каждой конфигурации...


Вступайте в нашу телеграмм-группу Инфостарт

См. также

Инструментарий разработчика Роли и права Запросы СКД Программист Руководитель проекта 1С:Предприятие 8 Платные (руб)

Инструменты для разработчиков 1С 8.3: Infostart Toolkit. Автоматизация и ускорение разработки на управляемых формах. Легкость работы с 1С.

16500 руб.

02.09.2020    267129    1488    421    

1177

Инструментарий разработчика Чистка данных Свертка базы Инструменты администратора БД Системный администратор Программист Руководитель проекта 1С:Предприятие 8 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х 1С:Управление нашей фирмой 3.0 Россия Платные (руб)

Инструмент представляет собой обработку для проведения свёртки или обрезки баз данных. Работает на ЛЮБЫХ конфигурациях (УТ, БП, ERP, УНФ, КА и т.д.). Поддерживаются серверные и файловые базы, управляемые и обычные формы, интерфейс 8.5. Может выполнять свертку одновременно в несколько потоков, а также без непосредственного участия пользователя. Решение в Реестре отечественного ПО.

24900 руб.

20.08.2024    74439    377    170    

322

Инструментарий разработчика Нейросети Платные (руб)

Первые попытки разработки на 1С с использованием больших языковых моделей (LLM) могут разочаровать. LLMки сильно галлюцинируют, потому что не знают устройства конфигураций 1С, не знают нюансов синтаксиса. Но если дать им подсказки с помощью MCP, то результат получается кардинально лучше. Далее в публикации: MCP для поиска по метаданным 1С, справке синтакс-помощника и проверки синтаксиса.

15250 руб.

25.08.2025    62809    130    36    

136

Пакетная печать Печатные формы Инструментарий разработчика Программист 1С:Предприятие 8 Платные (руб)

Расширение для создания и редактирования печатных форм в системе 1С:Предприятие 8.3. Благодаря конструктору можно значительно снизить затраты времени на разработку печатных форм, повысить качество и прозрачность разработки, а также навести порядок в многообразии корпоративных печатных форм. Обновление версии от 21.04.26

22570 руб.

06.10.2023    39937    112    54    

126

Инструментарий разработчика Разработка Администрирование веб-серверов Системный администратор Программист Бизнес-аналитик Руководитель проекта 1С 8.3 Платные (руб)

Analyzer 1C сводит выгрузку 1С — основную конфигурацию и все расширения — в единый граф знаний. Любой запрос по связям за доли секунды, с пометками «Доб.» / «Заимств.» / «Переопределено». Новое в 2.0 — обновление поставки: сравнение и объединение версий деревом «как в Конфигураторе» с выгрузкой плана решений; поиск конфликтов из-за перехватов расширений и висячих ссылок; загрузка из бинарных .cf/.cfe; циклические зависимости. Плюс анализ влияния, запросы BSL, роли и RLS, граф вызовов. Минута на развёртывание через Docker без необходимости подключения к Интернет. Любая 1С:Предприятие 8.3+.

14000 руб.

17.04.2026    8411    36    45    

51

Инструменты администратора БД Инструментарий разработчика Роли и права Программист 1С:Предприятие 8 1C:Бухгалтерия Россия Платные (руб)

Расширение позволяет без изменения кода конфигурации выполнять проверки при вводе данных, скрывать от пользователя недоступные ему данные, выполнять код в обработчиках. Не изменяет данные конфигурации, легко устанавливается практически на любую конфигурацию на управляемых формах.

17000 руб.

10.11.2023    26292    98    46    

104

Мастера заполнения Поиск данных Инструментарий разработчика Подбор и обработка объектов 1С 8.3 1С 8.5 Платные (руб)

Infostart MagicInput улучшает подбор в полях ввода 1С: ищет по любой части названия и по нескольким ключевым фрагментам, распознаёт ввод в другой раскладке и показывает иконки/статусы объектов прямо в списке. Поддерживает вставку навигационной ссылки/представления документа для автоподбора; для разработчиков доступны поиск по GUID и полному имени предопределённого. Работает в управляемых формах и подключается в большинстве конфигураций 1С 8.3/8.5.

6000 руб.

25.02.2026    4708    16    1    

20

Информационная безопасность Инструменты администратора БД Инструментарий разработчика Учет документов Системный администратор Программист Бизнес-аналитик Бухгалтер Пользователь Руководитель проекта 1С 8.3 1С 8.5 Розничная и сетевая торговля (FMCG) Платные (руб)

Контроль ввода данных в 1С: проверка заполнения реквизитов, обязательные поля, контроль перед записью и проведением, запрет проведения документа. Позволяет настраивать любые проверки данных в 1С 8.3/8.5 от обязательных полей до сложных условий – без открытия конфигуратора и написания кода. Готовое расширение, которое подключается и работает сразу.

6000 руб.

15.04.2026    2497    6    0    

21
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. Модератор раздела 31.05.13 12:24 Сейчас в теме
+ за нестандартный подход.
2. dovenok2 31.05.13 12:51 Сейчас в теме
возьму на заметку
3. AnryMc 851 31.05.13 13:07 Сейчас в теме
Ну Вы батенька и извращенец...
:-))
4. quick 587 31.05.13 13:12 Сейчас в теме
(3) AnryMc, это точно.. у меня еще нереализованной осталась мечта идиота - написать на чистом питоне компоненту для 1С. уже где то 30% готово..
5. Ta_Da 31.05.13 16:34 Сейчас в теме
Фиксин будет доволен.
А если серьезно - то реализация довольно интересная, осталось придумать для чего такой подход использовать.
6. Virikus 64 05.06.13 07:28 Сейчас в теме
(5) ну это же очевидно :) можно использовать обработки из 7.7.
Часто при переходе с 7.7 на 8.х в 7.7 есть море дополнительных обработок и отчетов, обычно данные переносят, а обработку уже потом заново пишут, а тут хотя бы на время можно использовать готовые из 7.7 с небольшими модификациями.
7. Ta_Da 05.06.13 08:25 Сейчас в теме
(6) Virikus, ага, щаз "небольшие модификации".
Обращение к периодическим реквизитам? Переписывать полностью под регистр сведений.
Запросы (любые) - переписывать полностью.
Структура справочников - маловероятно что сохранится 1:1.
Компоненты рассчет и бухгалтерия - капец, переписываем.
Что там остается? Печатные формы? И тут облом - даже если более менее сохранятся реквизиты шапки/тч у документа - формирование макета придется переделывать.

Мне лично это скорее напоминает создание встроенного "метаконфигуратор" для продвинутых пользователей/консультантов/внедренцев, с собственным синтаксисом (не обязательно совпадающим с 7.7).
8. Virikus 64 05.06.13 08:39 Сейчас в теме
(8) да ладно? Чего там много переписывать?

Периодические реквизиты? Добавляем к реквизиту функция Получить() и пишем под это дело обращение к регистру сведений.

Запросы? Также, меняем просто запрос и выдаем к примеру ТЗ.

Разные реквизиты? Вот кусок кода из примера
Или когда запрашиваю атрибут

Товары.Реквизит1 , то вызываются

Обработки.Справочники.ПолучитьСвойство(ИмяСвойства)
Обработки.Справочники.УстановитьСвойство(ИмяСвойства,Значение)


Обращение к бухгалтерским итогам? Также делаем функцию которая возвращает ТЗ

Нет ничего невозможного, нужно просто подумать как применить.
9. Ta_Da 05.06.13 10:27 Сейчас в теме
(8) Virikus, угу, на словах все это прекрасно, а на деле на каждый такой вызов периодики Вам придется писать отдельную обработку метода "Получить", у вас ведь наверное не один регистр сведений с одинаковым количеством и видами измерений/реквизитов для ВСЕЙ периодики?
Аналогично с бухитогами. Под каждый специфический (читай - сложнее чем "дайте мне остатки по товару А на складе Б по 41 счету") запрос к БИ в 7.7 придется писать свою реализацию запроса к регистру бухучета в 8.x, либо писать автопарсер, который сначала будет разбирать Ваше выражение на языке 7.7, а потом строить соответствующее ему выражение на 8.x.
В первом случае непонятно почему бы сразу не переписать все на 8, если уж все равно ключевые части переписываете вручную, во втором - времени потратите больше, чем непосредственнное переписывание.

Т.е. как концепция - интересно. Как способ добавления "синтаксического сахара" (что-то типа макросов в ASM и т.п.) - перспективно. На крайняк - как способ "метапрограммирования" каких-то процессов в конфигурации пользователем (т.е. дать ему порезанный и упрощенный синтаксис и возможность определять некие алгоритмы самому), но вряд ли кто-то будет в здравом уме пытаться таким образом создать полноценный интерпретатор 7.7.
10. Virikus 64 05.06.13 10:35 Сейчас в теме
(9) так я и не говорил что будет легко :) Тут нужно соотнести затраты просто, что будет быстрее и дешевле, переписать обработки и отчеты или дописать необходимые функции и процедуры по механизму в статье.

А то я один раз столкнулся при переводе предприятия с 7.7 на 8.1, там в семерке было порядка 170 внешних отчетов и обработок различных и заказчик упрямо хотел аналоги их в восьмерке. Пришлось переписывать долго и тяжело.
11. Ta_Da 05.06.13 10:58 Сейчас в теме
(10) Virikus, не холивара ради, но... Оставив в стороне целесообразность перехода на 8.x в случае "у нас была 7.7 сильно перепиленная с сотнями отчетов и обработок, которых нет в 8" (и собственно вопрос необходимости переноса этих отчетов вообще), возникает вопрос: а заказчик готов платить за то что вы дважды выполнили перенос отчетов (первый раз - путем написания кода на питоне и приведения в порядок кода обработок чтобы они все-таки запустились и второй - начистую переписывание на нормальный язык 8.1) или вы ему так и оставите сей костыль (синтаксис-франкенштейн и использование ВК на питоне)?
12. Virikus 64 05.06.13 11:16 Сейчас в теме
(11) Ta_Da, обратите внимание, статья не моя :)я лишь рассуждал только и то в плане, что это может быть временным костылем. У меня в момент переноса у заказчика даже в мыслях не было, что можно оставить обработки в таком состоянии, я даже не догадывался о таком, потому все переписали согласно стандартам 8.1.

Хотя желание запускать обработки в 8.х, созданные в 7.7 иногда появляется, особенно если эти обработки со сложным алгоритмами каких-нить расчетов.
13. janber 06.06.13 10:51 Сейчас в теме
Интересный подход к проблеме. Плюс.
Но не понял, чем это лучше традиционного - создание текстового процессора,
конвертирующего исходный тест модуля с одного языка на другой тоже в виде текста?
Тут, при необходимости, код можно довести до кондиции ручками.
По трудоемкости, на первый взгляд, эти методы сопоставимы.

И, кто переписывал обработки из 7.7 в 8.х, может подскажите,
сколько примерно-примерно времени нужно специалисту для перевода обработки
скажем, в 1000 строк кода на 8.х?
14. Virikus 64 06.06.13 11:26 Сейчас в теме
(13)
Но не понял, чем это лучше традиционного - создание текстового процессора,
конвертирующего исходный тест модуля с одного языка на другой тоже в виде текста?

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

И, кто переписывал обработки из 7.7 в 8.х, может подскажите,
сколько примерно-примерно времени нужно специалисту для перевода обработки
скажем, в 1000 строк кода на 8.х?

Время переписывание одной обработки от 2-3 часов до 8 занимало, смотря насколько извращенный код будет.
Не забывайте, кроме кода, могут быть еще сложные формы, с разными слоями.
15. quick 587 06.06.13 11:38 Сейчас в теме
Замысел был в том, что бы взять рабочую конфу на 7-ке, переконвертировать и начать на ней работать так как есть, постепенно переписывая на 8-ый код. Если кто нибудь напишет транслятор 7->8 будет здорово!
Не всегда можно полгода переписывать самописанную конфу на 8-ку а потом в один счастливый момент все переконвертировать.
16. Ta_Da 06.06.13 12:19 Сейчас в теме
(15) ну вот не верю я что получится делать полноценный и универсальный конвертер кода конфигурации.
Хотя попытки были, да : http://infostart.ru/public/105113/
17. nurislam 08.06.13 11:36 Сейчас в теме
Идея конечно замечательная.Очень трудно с 7 переходить на 8 ку.Знаю по себе.Конечно +
19. Rad90210 13 12.06.13 23:12 Сейчас в теме
(17) И не капли и не трудно. Скорее программисту - на восьмерке ЛЕГЧЕ. Несколько табличных частей в документе на 7.7 - ото жесть. Ну а о пользователях - 1С особо никогда не беспокоилась :) (До сих пор не могу понять нафига было перерисовывать иконки в пользовательских интерфейсах - как пример)
20. CratosX 116 25.08.13 23:25 Сейчас в теме
(19) Rad90210, для повышения юзабилити
21. Rad90210 13 27.08.13 21:39 Сейчас в теме
(20)Спорный тезис, учитывая то, что ввод нового объекта - что в 7.7 что в 8 - одно и то же ... Или включение/отключение иерархии, или редактирование элемента/документа ...
22. CratosX 116 28.08.13 09:17 Сейчас в теме
(21) Rad90210, я про вторую часть вашей реплики

(До сих пор не могу понять нафига было перерисовывать иконки в пользовательских интерфейсах - как пример)
18. Rad90210 13 12.06.13 23:10 Сейчас в теме
ИХМО бред.У меня после переписывания обработок 7.7 - количество кода - уменьшалась,эффективность написания - увеличивалась, да и клиент за одно и то же - платить готов несколько раз. Зачем что-то транслировать?
Для отправки сообщения требуется регистрация/авторизация