Генератор кода состоит из собственно генератора и шаблона расчета. Генератор производит загрузку содержимого листов Excel, синтаксический разбор, вычисление последовательности формул и собственно генерацию кода и табличных макетов.
Вставив готовый код и созданные макеты в прилагаемые шаблоны, вы получите готовые справочники, документы, обработки и печатные формы, которые будут воспроизводить не только оригинальный дизайн, но и исходный функционал. Справочники и документы обладают возможность хранить изменения, сделанные пользователем в хранилище значения.
Простой пример: В конфигурации нужно создать документ: "Расчет цены изделия". Сам расчет давно существует в Excel и имеет примерно следующий вид:
| Номер: | ||
| Дата: | ||
| Расчетный курс: | 85 | |
| Проект: | ||
| Наименование: | ||
| Менеджер: | ||
| Исполнитель: | ||
| Покупное изделие | ||
| Цена изготовителя, евро. | - | 0 € |
| страховка, евро. | 0,19% | 0 € |
| кол-во машин, шт. | 4 | |
| автофрахт, евро. | 10000 | 2 500 € |
| таможенная пошлина, евро. | 0,00% | 0 € |
| НДС, евро. | 18,00% | 450 € |
| Услуги брокера на 1 машину , евро. | 1000 | 250 € |
| Банковские расходы, евро. | 1,00% | 0 € |
| ИТОГО стоимость импортного оборудования, евро. | - | 0 € |
| ИТОГО стоимость импортного оборудования, руб. | - | 0р. |
| Стоимость НР-17 (наше производство), руб. | ||
| НП-19, руб. | - | |
| Испытания, руб. | - | 0р. |
| ВСЕГО прямых расходов, руб. | - | 0р. |
| Наценка, руб. | 4% | 0р. |
| Продажная цена с НДС, руб. | - | 0р. |
| Продажная цена без НДС, руб. | - | 0р. |
| Дополнительные усл. (с НДС) | ||
| ИТОГО цена предложения с НДС | - | 0р. |
| ИТОГО цена предложения без НДС | - | 0р. |
Первым делом мы из конфигурации примера копируем в нашу конфигурацию шаблон документа и переименовываем его под наши нужды.
Запускаем Excel Studio. Загружаем табличный документ из Excel и помещаем его в макет табличного документа ЛИСТ1 нашего документа в конфигураторе. (Более детально порядок действий смотри в следующем примере). Создаем автоматически код 1С:
СписокЛистовЕкселя.Добавить("Расчет","1"); ТекущийЛистРасчета = 1; ЯчейкаТД("C12").Текст = ЗначТД("C11")*ЗначТД("B12"); // ЯчейкаТД("C14").Текст = ЗначТД("B14")/ЗначТД("B13"); // ЯчейкаТД("C15").Текст = (ЗначТД("C11")+ЗначТД("C12")+ЗначТД("C14")/3*2)*ЗначТД("B15"); // ЯчейкаТД("C16").Текст = (ЗначТД("C11")+ЗначТД("C12")+ЗначТД("C14")+ЗначТД("C15"))*ЗначТД("B16"); // ЯчейкаТД("C17").Текст = ЗначТД("B17")/ЗначТД("B13"); // ЯчейкаТД("C18").Текст = ЗначТД("C11")*0.01; // ЯчейкаТД("C19").Текст = ?(ЗначТД("C11")=0,0,SUM("C11:C18")); // ЯчейкаТД("C20").Текст = ЗначТД("C19")*ЗначТД("B3"); // ЯчейкаТД("C24").Текст = SUM("C20:C23"); // ЯчейкаТД("C25").Текст = ЗначТД("C24")*ЗначТД("B25"); // ЯчейкаТД("C26").Текст = SUM("C24:C25"); // ЯчейкаТД("C27").Текст = ЗначТД("C26")/1.18; // ЯчейкаТД("C34").Текст = ЗначТД("C26")+SUM("C29:C33"); // ЯчейкаТД("C35").Текст = ЗначТД("C34")/1.18; //
Вставляем получившийся код в кофигураторе в процедуру " РассчитатьНаСервере()" нашего документа.
В принципе уже будет работать, и пользователь, по нажатию кнопки "рассчитать" в документе получит тот функционал, к которому привык. Но как правило нужны небольшие доработки, для улучшения функционала, такие как добавление реквизитов "менеджер" и "сумма документа", программная связь их с ячейками табличного документа. В коде документа вы найдете закомментаренные примеры.
Разберем детально работу генератора и шаблона на конкретном примере. Для начала, прошу прощения за несколько абстрактный пример. К сожалению, реальные примеры, которые имеют практическую ценность, также имеют ограничения по возможности их публикации. Чаще всего это примеры, связанные с планированием производства. В расчете, с которого это все начиналось, мы могли, выбрав параметры готовой продукции, скорректировав параметры технологических линий и операций получить готовый расчет по себестоимости изделия, расходуемых материалах, составе и длительности технологических операций за несколько минут. Отсюда прямой путь для автоматического формирования спецификаций и маршрутно-технологических карт.
У нас есть пример расчета Полной Стоимости Кредита. Особого смысла переносить его в 1С я не вижу, но на нем мы можем посмотреть возможности генератора и технологию переноса.
Лист1:

Мы запускаем генератор и выбираем нужный файл Excel, выбираем нужный лист и загружаем его содержимое с помощью кнопки “Выполнить загрузку”. После чего меняем Номер листа на следующий по порядку и снова жмем кнопку “Выполнить загрузку”.

Нажимаем кнопку “Получить макет”. После небольшой паузы на экране откроется табличный документ, с цветовой раскраской, границами и объединениями ячеек, а также содержимым, соответствующий листу Excel.:

Выделяем все ячейки (Ctrl+A) и копируем в буфер обмена (Ctrl+ С) после чего, открываем шаблон в конфигураторе, находим там макет соответствующего листа, снова выделяем все ячейки (Ctrl+A) и вставляем из буфера обмена (Ctrl+ V) содержимое ячеек. Если нужного макета нет, то необходимо создать макет с именем “Лист”+номер листа. Содержимое макета – табличный документ.

Аналогично загрузим макеты для остальных листов.
Переходим на закладку генератора “Упорядоченные по порядку расчета” и нажимаем кнопку “Получить упорядоченные фомулы”:

Мы получаем формулы, упорядоченные по порядку расчета. Обратите внимание на трансформацию формул. Вы также можете выделить нужные строчки (или даже все) и нажать кнопку “Получить наименование слева”. Колонка Наименование заполнится содержанием ячейки слева от формулы. Как правило, там находится описание ячейки. Это описание будет добавлено в комментарии в код 1С, что позволит лучше в нем ориентироваться.
Кнопка контроль позволить обернуть код расчета строки 1С в "Попытку; ... Исключение; КонецПопытки". Это может быть необходимо при возможности ошибки в строке расчета, например, делении на 0;
Переходим на закладку Код 1С и нажимаем кнопку “Сформировать код”:
Получаем следующий код:
СписокЛистовЕкселя.Добавить("Лист1","1"); ТекущийЛистРасчета = 1; ЯчейкаТД("C9").Текст = ЗначТД("C5")/12; // месячная процентная ставка ЯчейкаТД("C13").Текст = (ЗначТД("C4")*ЗначТД("C9"))/(1-POWER((1+ЗначТД("C9")),(-ЗначТД("C11")))); // ежемесячный платеж ЯчейкаТД("C21").Текст = ЗначТД("C4"); // 1 месяц ЯчейкаТД("D21").Текст = ЗначТД("C21")*ЗначТД("C9"); // 250 000 ЯчейкаТД("E21").Текст = ?(ЗначТД("A21")>ЗначТД("C11"),0,ЗначТД("C13")-ЗначТД("D21")); // 2 500 ЯчейкаТД("C22").Текст = ?(ЗначТД("A22")>ЗначТД("C11"),0,ЗначТД("C21")-ЗначТД("E21")); // 2 месяц ЯчейкаТД("D22").Текст = ЗначТД("C22")*ЗначТД("C9"); // 244 196,4225467872 ЯчейкаТД
Проверено на следующих конфигурациях и релизах:
- 1С:ERP Управление предприятием 2, релизы 2.4.11.98, 2.4.11.65, 2.4.8.63
Вступайте в нашу телеграмм-группу Инфостарт