Русаков Григорий | Директор | Аналитика. Проекты и решения

«Как создавать, продвигать приложение и конкурировать с фирмой 1С на протяжении 11 лет»

Рассказ о том, как с 2007 года мне (как директору и основному разработчику) удается продвигать на рынок отраслевое решение на базе «1С:Предприятие 8», как конкурировать с самой фирмой «1С», принимать не стандартные решения и продолжать продавать продукт. Речь пойдет о системе электронного документооборота СЭД «Корпоративный документооборот», имеющей тысячи пользователей. Основные тезисы выступления: 1. Риск выхода на пустой рынок в 2007 году – раз нет решений, то возможно они не востребованы рынком? Оказалось, что востребованы. Что приносит больше денег - слабое решение на пустом рынке или отличное решение, но на рынке с большой конкуренцией? 2. Как конкурировать с фирмой «1С» на её поле? Стараемся всегда идти на шаг впереди: переход на 8.2 раньше, переход на «Такси» раньше, графический редактор значительно раньше, push-уведомления для iOS раньше и т.д. Всё это были информационные поводы для новостей. Слабое место – отсутствие методических материалов и различных книг для клиентов, но у нас меньше объем кода (в отличие от типовых продуктов фирмы 1С), проще модифицировать под себя it-специалистам клиента; 3. Продажи падают – как удержать? Стоит ли переименовать продукт для отстройки от конкурента или оставить старое наименование? Добавить ли новые подсистемы – KPI и технической поддержки? Минимизация затрат на техническую поддержку клиентов с сохранением качества. Бесплатные пожизненные обновления. Апгрейды на другие продукты. Лучшие условия для партнеров; 4. Клиенты заявляют - «А мы хотим тут новую кнопку (иначе не купим)!» Как соблюсти баланс между усложнением решения и удовлетворением конкретного клиента? Плюсы развития продукта под реальные нужды предприятий, а не под гипотетические задачи; 5. Повышать или понижать цену? Что увеличит продажи продукта? 6. Куда развиваться после 11 лет? Создание на основе продукта отдельных подсистем для программ фирмы «1С». Сертификация встраиваемых модулей в программы «1С:УТ», «1С:УНФ», «1С:Документооборот» и другие; 7. А может сделать OpenSource? Плюсы и минусы продукта в OpenSource. Дополнительная информация: Сколько вышло больших обновлений (на 8.1 для 8.2 и 8.3 такси). Расскажем были ли возражения против платного перехода на новые редакции. Одно из интересных решений – графический редактор бизнес-процессов, позволяющий создавать произвольные процессы в пользовательском режиме (не в «Конфигураторе») создан в 2010 году, фирма «1С» создала аналогичный в 2017. Изначально продукт поставляется с полностью открытым кодом, без дополнительных ключей защиты. Есть ли плюсы в такой поставке или больше минусов – приходите и всё узнаете!

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

Печать - Универсальные печатные формы

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

Задание. Реализовать печать макета «Заказ клиента» из обычной и управляемой формы одноименного документа.

Выполнение задания.

1. Пусть дан документ «ЗаказКлиента», в котором есть реквизиты документа и табличная часть.

А так же две формы: управляемая и обычная, с размещенными на них реквизитами.  Создан простейший макет. 

2. Создадим подчиненный объект документа – команду «Печать». С ее помощью реализуем возможность печати макета из управляемой формы.

В свойстве команды «Тип параметра команды» укажем «ДокументСсылка.ЗаказКлиента».

В модуле команды создадим процедуру ОбработкаКоманды:


&НаКлиенте
Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды)
          Команды.ПечатьЗаказа(ПараметрКоманды); //вызов клиентского общего модуля Команды
КонецПроцедуры

В 

 3. Создадим общий модуль Команды. Определим его свойства как показано на рисунке

Определим в модуле экспортную процедуру ПечатьЗаказа:

Процедура ПечатьЗаказа(ПараметрКоманды) Экспорт
   ТабДок = Новый ТабличныйДокумент;

   НаСервере.Печать(ТабДок, ПараметрКоманды); //вызов серверного общего модуля Команды

   ТабДок.ОтображатьСетку = Ложь;
   ТабДок.Защита = Ложь;
   ТабДок.ТолькоПросмотр = Ложь;
   ТабДок.ОтображатьЗаголовки = Ложь;
   ТабДок.Показать();
КонецПроцедуры

4. Создадим общий модуль НаСервере. Определим его свойства как показано на рисунке

Определим в модуле экспортную процедуру Печать:

Процедура Печать(ТабДок, ПараметрКоманды) Экспорт
      
Документы.ЗаказКлиента.Печать(ТабДок, ПараметрКоманды); //вызов модуля менеджера документа
КонецПроцедуры

5. Создадим модуль менеджера документа. Именно в нем мы полностью пропишем алгоритм заполнения макета. 

Процедура Печать(ТабДок, Ссылка) Экспорт
   Макет = Документы.ЗаказКлиента.ПолучитьМакет("Печать");
   Запрос = Новый Запрос;
   Запрос.Текст = "…"; //сам текст запроса нам не принципиален
   Запрос.Параметры.Вставить("Ссылка", Ссылка); //в качестве параметра указываем Ссылку – параметр процедуры
   Выборка = Запрос.Выполнить().Выбрать();

   ОбластьЗаголовок = Макет.ПолучитьОбласть("Заголовок");
   Шапка = Макет.ПолучитьОбласть("Шапка");
   ОбластьСоставШапка = Макет.ПолучитьОбласть("СоставШапка");
   ОбластьСостав = Макет.ПолучитьОбласть("Состав");
   ТабДок.Очистить();

   ВставлятьРазделительСтраниц = Ложь;
   Пока
Выборка.Следующий() Цикл
      Если
ВставлятьРазделительСтраниц Тогда
         ТабДок.ВывестиГоризонтальныйРазделительСтраниц();
      КонецЕсли;


      ТабДок.Вывести(ОбластьЗаголовок);

      Шапка.Параметры.Заполнить(Выборка);
      ТабДок.Вывести(Шапка, Выборка.Уровень());

      ТабДок.Вывести(ОбластьСоставШапка);
      ВыборкаСостав = Выборка.Состав.Выбрать();
      Пока
ВыборкаСостав.Следующий() Цикл
         ОбластьСостав.Параметры.Заполнить(ВыборкаСостав);
         ТабДок.Вывести(ОбластьСостав, ВыборкаСостав.Уровень());
      КонецЦикла;


      ВставлятьРазделительСтраниц = Истина;
   КонецЦикла;
КонецПроцедуры

Пунктами 1-5 мы реализовали печать макета с помощью команды из управляемой формы.

Теперь реализуем печать из обычной формы.

6. Добавим на обычную форму кнопку «Печать» и создадим для нее сответсвующий обработчик

Процедура Печать(Кнопка)
    
Команды.ПечатьЗаказа(Ссылка); //вызов клиентского общего модуля Команды
КонецПроцедуры

Итак, реализованный подход организации печати одного макета документа из обычной и управляемой форм документа показан на следующем рисунке:

См. также

Комментарии
Сортировка: Древо
1. Makushimo 152 11.10.13 06:18 Сейчас в теме
просто и лаконично
в копилку
2. RailMen 14.10.13 00:58 Сейчас в теме
3. ilonnaa 23.12.13 09:28 Сейчас в теме
4. O-lesya 25.12.13 12:04 Сейчас в теме
Спасибо,очень помогло.Было бы здорово теперь посмотреть печать документа из внешней печ.формы(с возможностью выбора в ней дополнит.реквизитов)
5. mikhailovaew 127 24.01.14 11:35 Сейчас в теме
В управляемых формах ничего не понимаю. Вопрос: для печати документа обязательно тащить процедуры в общие модули, или все же можно ограничиться размещением процедур в модуле менеджера и объекта с инструкциями перепроцессора?
6. RailMen 24.01.14 13:02 Сейчас в теме
(5) Если необходимо реализовать функционал печати одного макета и из управляемой и из обычной формы, то делать лучше так, как написано в статье.

Если вы решаете другую задачу - то возможно эта схема вам не подойдет. Если у вас печать только из обычной формы или только из управляемой - то лучше все немного упростить. Друми словами - пляшем от ТЗ.
7. AlexandrIvanov 20.09.17 18:51 Сейчас в теме
Скажите, а только у меня при вызове серверного метода ошибка Попытка передачи с клиента на сервер мутабельного значения 1-го параметра метода?
8. RailMen 757 21.09.17 11:58 Сейчас в теме
(7) на момент написания статьи все работало. С тех пор платформа много раз менялась.
Оставьте свое сообщение