2016-05-31 | Как в программе Инфо-Предприятие переделать бланк "под себя"

logo frinsoft


Skype: frin-soft

E-mail: frinsoft@frinsoft.ru

c 09-00 до 17-00, ПН-ПТ


+7(83533)2-34-80

+7-967-470-38-46

+7-927-846-30-60

2016-05-31 | Как в программе Инфо-Предприятие переделать бланк "под себя"

Как в программе Инфо-Предприятие сделать копию бланка с внесением требуемых нам изменений (на примере бланка счета в модуле Торговый склад)

В программе Инфо-Предприятие есть широкие возможности для внесения различных изменений в формы бланков "под себя", причем без последствий для дальнейших стандартных обновлений программы.

Рассмотрим технику внесения изменений на примере бланка счета для модуля "Торговый склад". Требование пользователя - ввести колонку "Цена без скидки" в бланк счета для случая, когда пользователь хочет показать покупателю в форме счета (для сравнения) обе цены - цену со скидкой и цену без скидки.

На самом деле, почти в каждом бланке разработчиками программы Инфо-Предприятие заложена многовариантность вывода данных в форме бланка. Для этого надо кликнуть правой клавишей мышки в любом месте бланка и в контекстном меню бланка найти строку "Настроить параметры". Настройку параметров бланка можно вызвать ещё двумя способами (см. рис.1 и рис.2)         
 

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

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

Для начала откроем программу под пользователем Администратор (в стандартной поставке пароль Администратора по умолчанию "infop" - надеюсь, в вашей базе вы его заменили?). Найдем журнал счетов (Операции - Счета (склад)), добавим запись нового счета или воспользуемся уже имеющейся записью. Буду предполагать, что с работой оператора в программе вы знакомы :-)

С помощью контекстного меню (либо нажав "горячую клавишу" F3) вызовем бланк счета на экран. С помощью "горячих клавиш" Ctrl-F2 или по контекстному меню бланка вызовем режим разработки. Перед нами откроется бланк в режиме редактирования, с визуальной (форма) и расчетной частями (см. рис.3 и рис.4). Подробно описание редактирования бланков вы можете посмотреть и изучить в электронной справке к программе (нажав F1, когда на экране у вас редактор бланков).

Далее лучше сразу сделать копию бланка, чтобы "экспериментировать" уже с ней.

Для этого выбираем пункт меню "Файлы" - "Экспорт в...", в выведенном на экран окне выбираем папку для сохранения, меняем наименование бланка. В данном случае просто заменим предлагаемое программой название имеющегося бланка TS_SCHET на FS_SCHET (см. рис.5). Бланк сохранится в одноименный файл с расширением FRM.

Ещё надо посмотреть, в каком разделе находится наш стандартный бланк. Для этого в контекстном меню визуальной (форма) или расчетной части редактора бланка находим команду "Параметры бланка" и в появившемся окне параметров ищем строку "Название раздела". В данном случае наш бланк находится в разделе "ТМЦ". (см. рис.6) О "разделах" бланков - чуть ниже.

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

Находим нужную нам вкладку ТМЦ, видим там наш стандартный бланк счета TS_SCHET. (см. рис.7)

Затем выбираем пункт меню "Файлы" - "Импорт из...", находим наш сохраненный на предыдущем этапе файл копии бланка счета FS_SCHET.FRM и добавляем его к списку бланков. Обычно добавленные бланки появляются в самом низу списка того раздела, в котором находился оригинал бланка. Находим добавленный бланк, выделяем его мышкой и жмем F4 на клавиатуре (если просто кликнуть мышкой, то этот бланк откроется в редакторе бланков). Откроется окно заголовка бланка (настройки основных параметров бланка), как на рис.8.

Здесь мы можем изменить для удобства восприятия и поиска название бланка и название раздела, можем изменить имя файла бланка. Жмем Ок. Программа создаст новый раздел в соответствии с нашим наименованием и перенесет в него наш бланк. (см. рис.9)

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

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

Графы "Вызывать вместо бланка" коснусь чуть позже.

Теперь можно щелкать мышкой по нашему новому бланку (или нажать на клавиатуре Enter) и приступать к внесению изменений в бланк. Я не зря писал, что журнал счетов лучше оставить открытым, и заодно в нем должна быть выделена одна запись (один из счетов). При редактировании бланка мы будем периодически, для самопроверки, вызывать его расчет и заполнение данными на основании выделенной в журнале счетов записи.

Надеюсь, что справку о редакторе бланков вы изучили и понимаете, что в визуальной части есть разные элементы (графы ввода-вывода, рамки, секции и т.п.) и мне не надо объяснять эти азы. (см. рис.10)

В нашем конкретном бланке счета есть несколько, скажем так, "блоков" вывода табличных частей с товарами (услугами) на экран в зависимости от выбранных параметров в настройках бланка.

В счете таких "блоков" - шесть, "объединенных" в три группы по два "блока", в зависимости от того или иного параметра, с отличающимся набором граф вывода. Все графы вывода (Наименование, Кол, Цена, Сумма) "лежат" внутри той или иной секции вывода (заштрихованные полоски на экране). С помощью секций и происходит управление выводом того или иного блока граф вывода на экран и затем на печать. Если вызвать по очереди эти секции на редактирование (кликнув мышкой или нажав при выделенной секции клавишу F4), можно проанализировать имена переменных, соответствующих секциям и увидеть явную логику, заложенную разработчиками в этих наименованиях. Например, секции, выводящие на экран шапки таблиц, имеют следующие имена переменных: ВдШапка1, БкВдШапка1, ВдШапка2, БкВдШапка2, ВдШапка3, БкВдШапка3. Согласитесь, что это удобно - давать переменным имена, по которым можно понять, какую именно информацию хранит эта переменная во время расчета. :-)

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

Две последние группы таблиц (как раз они отвечают за вывод информации по скидкам) отличаются тем, что в первой группе есть только сумма скидки, а во второй есть и сумма скидки и процент скидки. Нам надо добавить в визуальную часть бланка копии этих двух групп и внести в них нужные изменения.

Чтобы скопировать ту или иную таблицу в бланке для вставки в другое место, надо временно убрать секции. Лучше всего секцию просто «оттащить» мышкой ниже (или выше).

В данном случае все наши "группы" таблиц заканчиваются перед секцией, где видна графа "название_строки". Хватаю мышкой секцию выше (наименование переменной этой секции "ВдИтогоЖир3") и просто тащу её вверх, на другую секцию. Освобождается место, куда я могу поставить курсор и, нажимая Enter, добавить пустые строки ниже, чтобы организовать пространство "для маневров" (см. рис.11). Не забудьте вернуть на место секцию "ВдИтогоЖир3"!

Пустых строк можно добавить побольше, десятка три-четыре - никогда не поздно убрать лишнее. А теперь аккуратно, начиная с последней, третьей группы таблиц, по очереди перетаскиваем секции вниз, на свободное место, чтобы "освободить" сначала третью группу таблиц, а потом вторую. Обратите внимание, что между секциями есть ещё элементы, обозначенные пунктирной линией - это элемент "возможный разрыв страницы". Их перемещаем тоже, сохраняя точный порядок следования секций и разрывов - просто потом будет удобнее возвращать их на место. Результат, к которому должны придти - см. на рис.12.

Кстати, иногда удобно изменить масштаб редактора (увидите в контекстном меню по правой кнопке мыши). Как раз на рис.12 выбран самый маленький масштаб редактора, чтобы показать всю "картину" целиком.

Затем выделяем мышкой таблицы (опять же смотрите, как это сделано на рис.12). Подчеркну, что лучше захватить пустые строчки и выше и ниже таблиц - так надежнее. Копируем и вставляем в освобожденное заранее место (см. рис.13).

Возвращаем наши стандартные группы таблиц и их секции "на место", убираем лишние пустые строки (см. рис.14).

Новые секции добавлять не спешим, нам надо сначала изменить новые таблицы.

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

Опять же напомню: более подробную информацию по редактированию рамок и граф и вообще по работе с редактором смотрите в электронной справке к программе.

После "уборки", вставки новой колонки и новых граф "Цена без скидки" получим такой результат - см. рис.15.

Затем:

- по очереди копируем секции, которые находятся непосредственно выше наших новых таблиц, в строгом соответствии с их месторасположением в "оригинале".

- меняем имена переменных этих секций (кликнув по секции мышкой, нажав на выделенной секции Enter или F4). Обратите внимание на рис.16, каким секциям какие имена переменных присвоены.

Да, и не забывайте, что надо правильно вставить элементы "Возможный разрыв страницы", в полной аналогии со стандартными таблицами.

Итак, с визуальной частью (формой) бланка закончили, теперь займемся расчетной частью.

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

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

Нам надо найти место, где происходит расчет уже имеющихся переменных и добавить расчет своей переменной ЦенаБезСкидки.

В нижней части бланка (в строке статуса редактора) имеются вкладки "Форма" (это наша визуальная часть бланка) и "Расчетная часть". Переключимся на неё.

Сразу скажу, что многие бланки в программе Инфо-Предприятие  - универсальны, и могут заполняться как данными из модуля «Торговый склад» (для нас - журнал "Счета (склад)"), так и данными из журнала счетов бухгалтерского модуля. В программе реализованы универсальные функции "сбора" данных из этих журналов и обращение к ним из разных бланков в зависимости, в каком модуле (бухгалтерском или складском) мы вызываем бланк для вывода на экран и дальнейшей печати.

Нас сейчас интересует журнал счетов модуля «Торговый склад». В самом начале расчетной части бланка есть объявление объекта "опц ЭТО тс_операции" (то, что нам надо) и по строке "выбран = ИЗ_ЖУРНАЛА(опц, сч, тмц)" ниже программа определяет, из какого журнала вызван наш счет. Для торгового склада переменная "выбран" равна единице, т.е. ищем условие "выбран = 1". Это условие ("ЕСЛИ выбран = 1 ТО") находим в нашем счете в строке № 71. Можно задать поиск строкового выражения "выбран = 1" (команда "Найти" в контекстном меню, или значок с лупой в панели инструментов, или Ctrl + F на клавиатуре), либо сразу перейти на этот номер строки, кликнув мышкой по указателю текущей позиции курсора в строке статуса бланка и указав номер нужной строки (см. рис.17).

Чуть ниже найденного условия находим самую важную строку для нас: "опц.ВыводКолонокИзТовОпераций(1, 1, вкл_скидку_в_цену)". Это - ссылка на функцию расчета выходных переменных нашего бланка счета. Если установить курсор на названии функции и нажать на клавиатуре Ctrl + F1, то программа откроет новое окно с соответствующим файлом библиотеки функций и спозиционирует курсор на заголовке искомой функции (см. рис.18)

Важное замечание!

Мы делаем копию бланка, чтобы при обновлении программы стандартными настройками в будущем не потерять наши доработки. То же самое касается и функций. Для нашего счета нам надо сделать копию нашей функции и дать ей свое название, например, ВыводКолонокИзТовОперацийФРИН. Аккуратно выделите и скопируйте текст функции (выделять до "КОНЕЦ_ФУНКЦИИ" включительно!), вставьте его в конце файла этой же библиотеки функций. Переименуйте.

Программа Инфо-Предприятие при обновлении не затирает добавленные нами функции, если, конечно, им даны уникальные названия. В данном случае мы просто добавили к названию функции буквы "ФРИН", зная, что вряд ли такое название функции будут использовать разработчики. (см. рис.19)

Мы знаем, что в нашем бланке есть графа вывода цены с переменной "Цена".

Примечание: Не забываем, что на самом деле это индексная переменная!

Опять задаем поиск слова "Цена", но уже в нашей функции ВыводКолонокИзТовОперацийФРИН, с опциями: С учетом регистра, направление - Вниз, От позиции курсора. Находим выражения типа "Цена!и = ". И вот здесь нам надо вставить расчет нашей переменной "ЦенаБезСкидки". Сделаем это так, как показано на рис.20. Вследствие того, что на расчеты влияют разные параметры (использование упаковок, валютный учет и т.п.), придется просмотреть все ветки имеющегося алгоритма и вставить расчет нашей переменной (и правильно составить этот расчет!) везде, где это необходимо.

Примечание: хорошим тоном будет оставлять комментарии к своим изменениям или просто помечать свои изменения. Потом будет проще разобраться, что и где мы добавляли/изменяли в стандартном коде. К примеру, у меня везде есть пометка //ФРИН.

Для того, чтобы наша переменная из функции "попала" в бланк, она должна быть объявлена как общая переменная (смотрите электронную справку к программе!). Сразу подскажу, что искать надо в этой же библиотеке строку "ПЕРЕМ ЧИСЛО: Цена[]". После поиска увидим целый список подобных переменных (см. рис.21).

Не важно, в каком месте библиотеки будет описание общих переменных. Скопируем эту строчку, найдем начало нашей функции и определим наши переменные перед её текстом. (см. рис.22)

А вот теперь возвращаемся в наш бланк счета. Нам надо определить параметр настройки, при котором будет выводиться на экран таблица с нашей ценой без скидок, и вывести соответствующие секции.

В начале расчетной части бланка задаются некоторые запрашиваемые у пользователя значения настроек бланка. Введем свой параметр настройки: выводить_цену_без_скидки (см. рис.23).

 Затем заменим вызов стандартной функции "ВыводКолонокИзТовОпераций" на свою "ВыводКолонокИзТовОперацийФРИН" (см. рис.24).

Далее внесем некоторые изменения в код вывода секций, исходя из набора настроек бланка (см. рис.25).

Ещё нюанс. В бланке после внесения всех изменений необходимо провести проверку синтаксиса бланка (форма - визуальная часть - особенно чувствительна к этой процедуре). Команда в контекстном меню формы или расчетной части так и называется: Проверить синтаксис (или Ctrl + F9 на клавиатуре). Проверку синтаксиса надо бы проводить обязательно после изменения/добавления какой-нибудь графы в форме или внесения изменений в функцию, вызов которой есть в бланке.

После проверки синтаксиса надо сохранить изменения (значок дискеты на панели инструментов).

Если ошибок нет - будем проверять наш расчет. Вспомним, что у нас открыт журнал счетов и выделена запись счета (можно перейти в окно журнала счетов и убедиться в этом). Затем, находясь в редакторе нашего бланка, жмем кнопку "Старт" на панели инструментов. Получаем рассчитанный бланк счета, проверяем, какие данные он нам вывел (см. рис.26).

Естественно, что надо правильно настроить параметры бланка, касающиеся скидок (выводить скидку для каждой позиции и выводить цену без скидки = ДА).

Осталось либо указать в заголовке бланка, что он вызывается вместо стандартного бланка TS_SCHET, либо добавить этот бланк в контекстное меню журнала счетов (Счета (склад)). О заголовке бланка уже рассказывал в начале статьи, а работа с главным и контекстным меню - отдельная тема разговора.

_________________________________________
Алексей Григорьев,
ООО "Фрин-Софт"

Tags: Программирование в Инфо-Предприятие