Куперс

Бухучет и анализ

01 к в 1С

Содержание

1С Управление торговлей 10.3 – комплексное решение, которое позволяет консолидировать, обрабатывать и управлять информацией обо всех бизнес-процессах торговой компании в одной информационной системе, начиная с закупки сырья или материалов, заканчивая отгрузкой и доставкой готовой продукции конечным покупателям (контрагентам).

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

Обзор 1С УТ 10.3

1 С Управление торговлей 10.3 представляет собой комплексную информационную учетную систему, позволяющую автоматизировать отражение всех, включая складские и расходные, операций, с возможностью планирования необходимых показателей, а также полным аналитическим сопровождением, подразумевающим широкий набор различных форм отчетности по всем ключевым показателям коммерческой деятельности.

Редакция поставляется в двух версиях – Базовая и ПРОФ. Версия ПРОФ имеет ряд преимуществ по отношению к первой: больше рабочих мест, возможность доработки типовой конфигурации под нужны конкретной фирмы, дополнительные режимы работы и др.

В системе реализована поддержка торгового оборудования – сканеров штрих-кодов, контрольно-кассовой техники, техники для установки систем эквайринга и др.

При этом существует ряд ограничений:

  • Непосредственно программа Управление торговлей 10.3 не позволяет вести бухгалтерский учет и автоматизировать формирование налоговой отчетности. Для этих целей требуется интеграция с соответствующим модулем 1С: Бухгалтерия.
  • 1С:Управление торговлей 10.3 предоставляет возможность управлять деятельностью фирмы от имени только одного предприятия/юридического лица. Но это ограничение действует только для базовой версии и отсутствует в версии ПРОФ.

Основные возможности

Как уже было отмечено выше, 1С Управление торговлей 10.3 является комплексным решением, а значит, решает одновременно несколько задач, связанных с автоматизацией учета деятельности торгового предприятия, осуществляющего операции купли-продажи и хранения.

К числу таких задач относятся основные бизнес-процессы торгового предприятия:

  • Управление процессами продаж и закупок;
  • Управление системой ценообразования (установка цен, скидок и наценок);
  • Управление складскими операциями и запасами;
  • Поддержка CRM (Client Relationship Management – управление отношениями с клиентами и контрагентами);
  • Управление денежными средствами и учет затрат;
  • Аналитическое сопровождение (система отчетности) и планирование;
  • Интеграция с дополнительными модулями, индивидуальный интерфейс и др.

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

Внедрим 1С:УТ с минимальными затратами. Сопровождение (ИТС) первые 3 месяца – БЕСПЛАТНО!

Управление процессами продаж и закупок

1С УТ 10.3 поддерживает следующие виды торговой деятельности: оптовая торговля, розничная торговля, торговля в кредит, торговля по заказам, комиссионная торговля, прием товаров на комиссию.

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

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

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

Рис.1 Ведомость по товарам на складах Бесплатная
консультация
экспертаНаталья Севорина Консультант-аналитик 1С Спасибо за Ваше обращение! Специалист 1С свяжется с вами в течение 15 минут.

Управление системой ценообразования

Для того чтобы управлять системой ценообразования, в рамках 1С УТ 10.3 предусмотрена отдельная подсистема, которая позволяет:

  • Формировать гибкую систему индивидуальных цен при помощи различных типов цен и системы скидок и наценок;
  • Формировать цены динамически или вводить фиксированные значения (в том числе с использованием одних цен для расчета других);
  • Печатать прайс-листы отпускных цен любого уровня детализации – от базового до индивидуального для конкретного клиента;
  • Применять систему скидок по дисконтным картам;
  • Реализовывать систему скидок от объема, причем скидка может быть рассчитана как в суммовом (денежном), так и в натуральном (товарном) выражении.

Рис.2 Пример прайс-листа

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

Управление складскими операциями и запасами

1С:Управление торговлей 10.3 позволяет вести учет запасов в следующих разрезах:

При ручном или автоматическом вводе документов в 1С УТ 10.3 о поступлении товаров и услуг, реализации товаров и услуг или других документов, изменяющих состояние складских запасов, автоматически производится их пересчет. При вводе заказа покупателей возможно автоматическое резервирование запасов на складе под данную сделку.

Учет поступления продукции на склад для производственных предприятий выполняется в двух режимах:

  • По дате производства – когда продукт вышел с производства;
  • По дате оприходования на склад – когда продукт был принят на склад.

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

Полезные курсы по 1С Стань профессионалом в программе 1С:Управление торговлей

Обучим профессиональному владению программы на курсе — «1С:Управление торговлей 8. Редакция 11.4.»

Поддержка CRM

СRM (Client Relationship Management) – это система сбора всей необходимой информации о контрагентах (личная информация, подробности о проведенных сделках, данные о предоставленных скидках и проч.) с целью ее дальнейшего использования для выстраивания продолжительных и успешных взаимоотношений с клиентами, поставщиками и другими субъектами.

В 1С Управление торговлей 10.3 реализованы следующие функции поддержки CRM, которые позволяют непосредственно в системе обращаться к оперативной информации о текущем состоянии дел с контрагентом:

  • Хранение и анализ персональных данных, включая оповещения о важных событиях (например, о днях рождения клиентов);
  • Хранение и анализ контактной информации и индивидуальных условий работы (удобный график отгрузки, ценовая политика и проч.);
  • Планирование и контроль предстоящих и еще не завершенных сделок;
  • Планирование и контроль графика работы сотрудников.

Управление денежными средствами и учет затрат

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

Учет затрат выполняется также при помощи ввода документов определенного типа и ведется в разрезе существующего перечня статей затрат и статей движения денежных средств, зафиксированных в соответствующем справочнике.

Рис.3 Справочник статей движения денежных средств

Аналитическое сопровождение и планирование

1С:Управление торговлей 10.3 содержит систему отчетности, позволяющую формировать аналитику, в том числе в наглядной графической форме, по основным показателям коммерческой деятельности (продажи, отгрузки, остатки и др.) с необходимыми пользователю отборами и группировками в следующих разрезах, а также их комбинациях:

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

Рис.4 Аналитическое сопровождение в наглядной формеРис.5 Аналитическое сопровождение

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

Настроим комфортный переход на 1С:Управление торговлей 11 с гарантией на услуги!

Прочие возможности

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

  • Интеграцию с другими прикладными решениями (1С:Бухгалтерия, 1С:Розница и проч.);
  • Работу в индивидуальном интерфейсе (в зависимости от функционала пользователя);
  • Учет в разрезе нескольких организаций (например, для холдинговых компаний).

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

Почему система программ «1С:Предприятие»

Система программ «1С:Предприятие» предназначена для решения широкого спектра задач автоматизации учета и управления, стоящих перед динамично развивающимися современными предприятиями.

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

Решение актуальных задач учета и управления Стандартные, специализированные и индивидуальные решения Непрерывное развитие системы Автоматизация отдельных задач и комплексная автоматизация Единая технологическая платформа Открытость системы Поддержка и сервис

Задачи учета и управления могут существенно отличаться в зависимости от рода деятельности предприятия, отрасли, специфики продукции или оказываемых услуг, размера и структуры предприятия, требуемого уровня автоматизации. Трудно себе представить одну программу, предназначенную для массового использования и удовлетворяющую при этом потребностям большинства предприятий. При этом руководителю, с одной стороны, необходимо решение, соответствующее специфике именно его предприятия, но, с другой стороны, он понимает преимущества применения массового проверенного продукта. Сочетание этих потребностей и обеспечивает «1С:Предприятие» как система программ.

Решение актуальных задач учета и управления

С точки зрения руководителя, при выборе системы автоматизации очень важно определить, какие задачи ему необходимо решить средствами «1С:Предприятия». Функции «1С:Предприятия» можно разделить по целям автоматизации и, соответственно, группам ответственных пользователей.

Анализ и управление эффективностью работы предприятия.

Эти функции системы ориентированы на решение задач руководителя предприятия и на управленцев, отвечающих за рентабельность бизнеса и его развитие. Их назначение — обеспечить руководителей актуальной информацией, необходимой для оценки ситуации и принятия решений. К ним относятся такие механизмы, как бюджетирование (планирование финансовой деятельности и сопоставление планов с фактическими данными), анализ рентабельности производственной деятельности, анализ сбыта товаров и продукции, прогнозирование продаж и т.д.

Учет и управление оперативной деятельностью предприятия.

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

Регламентированный учет и отчетность.

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

Состав программ системы «1С:Предприятие» ориентирован на актуальные потребности отечественных предприятий.

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

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

Руководитель при принятии решения может выбирать необходимый уровень автоматизации. Наряду с созданием мощных комплексных решений, разработчики фирмы «1С» уделяют существенное внимание развитию решений для небольших фирм, для которых особенно важна простота применения программы. Вместе с тем, внедрение даже самых простых решений системы программ «1С:Предприятия» обеспечивает возможность плавного развития автоматизации — путем постепенного перехода на более мощные и комплексные прикладные решения или интеграции внедренного решения с другими программами системы.

Стандартные, специализированные и индивидуальные решения

В системе программ «1С:Предприятие» сочетается стандартизация решений и учет индивидуальных потребностей. Это одно из основных качеств программы, которое весьма существенно для руководителя или ответственного специалиста, принимающего решение о выборе системы.

Основные задачи автоматизации, решаемые тиражными прикладными решениями, поставляемыми фирмой «1С»:

  • Автоматизация складского учета, анализ состояния складов, контроль движения товарно-материальных ценностей.
  • Управление номенклатурой товаров, продукции и услуг, включая автоматизацию ценообразования, составление сложных калькуляций, разузлование изделий.
  • Управление торговой деятельностью и автоматизация торгового документооборота.
  • Анализ эффективности торговой деятельности и прогнозирование продаж.
  • Автоматизация расчетов с контрагентами, анализ состояния и динамики взаиморасчетов.
  • Управление комиссионной торговлей от лица комитента и комиссионера.
  • Расчет себестоимости продукции и анализ экономической эффективности производственной деятельности.
  • Управление производством, включая незавершенное производство, многопередельное производство, обработку давальческого сырья.
  • Учет заказов от покупателей, внутреннее планирование выпуска продукции, контроль исполнения заказов.
  • Планирование и контроль выполнения заказов на закупку продукции.
  • Расчет зарплаты и кадровый учет включает практически полный способов набор начислений, удержаний, выплат и компенсаций с учетом национальной и местной специфики.
  • Учет основных средств и расчет амортизации.
  • Планирование, управление и анализ финансовых результатов деятельности предприятия (бюджетирование, планирование финансовых показателей, сравнение плановых и фактических показателей).
  • Бухгалтерский и налоговый учет в полном соответствии с национальным законодательством.
  • Формирование налоговой, бухгалтерской и другой регламентированной отчетности в различные органы.
  • Бухгалтерский учет и контроль смет расходов бюджетных организаций в полном соответствии с законодательством и ведомственными инструкциями.
  • Сбор сводной отчетности бюджетных организаций.

Как обеспечивается это сочетание?

Фирмой «1С» выпускается набор стандартных (типовых) решений, ориентированных на наиболее массовые типы предприятий. При их развитии учитывается опыт использования программы в десятках и сотнях тысяч предприятий и организаций. Это позволяет специалистам фирмы «1С» тщательно проработать функциональность системы. Существенная часть пользователей применяет стандартные решения, без каких либо изменений и доработок.

Разработкой и распространением специализированных (отраслевых) решений на платформе «1С:Предприятия» занимается в настоящее время более сотни фирм. Каждая из них создает специализированное тиражное решение, используя общие методологические решения, разрабатываемые фирмой «1С», и концентрируясь именно на специфических потребностях той или иной отрасли. Примерами таких отраслевых решений являются программы для автоматизации розничной торговли, фармацевтики, торговли запчастями, ремонта автомобилей, сельскохозяйственных предприятий, воинских частей и т.д. Спектр успешно применяемых отраслевых решений постоянно расширяется.

Кроме того, возможности «1С:Предприятия» позволяют создавать и индивидуальные решения, учитывающие потребности конкретной организации. Этим занимаются сертифицированные специалисты франчайзинговых фирм. Такие решения, как правило, являются развитием или модернизацией типового решения фирмы «1С» или тиражного специализированного решения, но могут быть разработаны и полностью «с нуля», если того требует ситуация.

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

Непрерывное развитие системы

Состав программ «1С:Предприятия» и набор их функции динамично развиваются вместе с изменением типовых потребностей отечественных предприятий и организаций. Устройство «1С:Предприятия» и принцип построения системы программ позволяют фирме «1С» и ее партнерам оперативно реагировать на изменения потребностей пользователей.

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

Усиление конкуренции потребовало уделять все больше внимания анализу бизнеса — и в программах «1С:Предприятия» появилась функциональность, ориентированная на контроль эффективности производственной и торговой деятельности, планирования, бюджетирования и анализа финансовой деятельности.

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

Автоматизация отдельных задач и комплексная автоматизация

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

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

Единая технологическая платформа

В основе системы программ «1С:Предприятие» лежит единая технологическая платформа. Она является фундаментом для построения всех прикладных решений. Наличие единой технологической платформы не просто облегчает создание отдельных прикладных решений и обеспечивает их невысокую стоимость. Главное преимущество такого подхода — стандартизация разработки, обеспечение масштабируемости и обеспечение быстрого внедрения современных технологий во всех прикладных решениях.

Платформа «1С:Предприятия» для всех прикладных решений независимо от отраслевой специфики и фирмы разработчика обеспечивает:

  • возможность использования системы от локального компьютера до десятков пользователей в локальной сети;
  • использование файлового варианта или варианта «клиент-сервер» (MS SQL Server);
  • возможность развертывания работы на нескольких территориально удаленных точках с периодическим обменом информацией;
  • возможность использования современных технологий (WEB, XML, интеграция с другими программными системами и различным торговым оборудованием).

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

  • С экономической точки зрения это позволяет обеспечить достаточно низкую стоимость отраслевых и индивидуальных решений, так как затраты на их создание существенно ниже, чем затраты на разработку программы «с нуля».
  • Это обеспечивает высокую скорость создания и внедрения решений, так как максимально используется отработанная функциональность и методология, содержащиеся в типовых решениях.
  • Очень важным преимуществом такого подхода является унификация обучения пользователей. Например, обучившись на курсах по «1С:Предприятию» или имея опыт работы с какой либо из программ, пользователь достаточно быстро осваивает возможности специализированных или индивидуальных решений.
  • Стандартизация платформы также существенно упрощает и администрирование системы, так как функции администрирования практически не зависят от конкретного прикладного решения. Большинство системных администраторов и специалистов по автоматизации уже имеют опыт администрирования и даже модификации прикладных решений «1С:Предприятия». Опыт показывает, что освоение этих функций происходит очень быстро — в течение нескольких дней.

Открытость системы

Очень важным преимуществом «1С:Предприятия» является открытость системы.

Для руководителя, принимающего решение о выборе средства автоматизации, достаточно важно быть уверенным, что система не будет для предприятия «черным ящиком», и существует реальная возможность понять работу системы и, при необходимости, изменить. Эта работа может быть выполнена как франчайзинговыми организациями, специализирующимися на поддержке «1С:Предприятия», так и специалистами ИТ-служб самого предприятия.

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

Поддержка и сервис

При выборе системы очень важно оценить перспективы эксплуатации и развития системы. Стандартизация платформы и прикладных решений во всех программах «1С:Предприятия» обеспечивает возможность индустриальной поддержки системы.

Фирма «1С» обеспечивает регулярную поддержку стандартных прикладных решений и самой платформы. Платформа «1С:Предприятия» обеспечивает возможность совмещения обновлений прикладного решения, производимого фирмой «1С» или разработчиком специализированного решения, с индивидуальными изменениями, внесенными при внедрении системы.

На данный момент в России, странах СНГ и Балтии работают десятки тысяч специалистов, профессионально занимающихся внедрением и адаптацией прикладных решений «1С:Предприятия». Фирма «1С» проводит регулярное обучение и сертификацию специалистов.

Многие из специалистов, занимающихся внедрением «1С:Предприятия», решают не только задачи, связанные с поддержкой или развитием прикладных решений, но и оказывают консалтинговые услуги — помогая принимать правильные решения при постановке учета и управления на предприятии.

В каждом регионе существует большое количество франчайзинговых фирм, оказывающих весь спектр услуг по комплексной автоматизации на базе программ системы «1С:Предприятие» — начиная от консультаций по выбору наиболее подходящих программ системы и заканчивая обучением и индивидуальной настройкой системы.

Специалисты франчайзинговых фирм обеспечивают поддержку всего спектра стандартных решений, и, при необходимости, могут выполнить установку специализированных решений или произвести индивидуальную доработку. Весьма важной представляется и возможность передачи проекта от одного внедренца другому. Устройство системы «1С:Предприятие» позволяет достаточно быстро вводить в курс дела новых специалистов и передавать поддержку прикладного решения тому, кто сможет обеспечить наилучшее обслуживание. Таким образом, наличие реальной индустрии внедрения и поддержки решений системы «1С:Предприятие» является для заказчика гарантией независимости от единственной фирмы или специалиста, «живучести» внедренного проекта и его беспроблемного сопровождения и развития.

Начиная с версии 8.3 в платформе 1С ‘не-можно’ использовать модальные вызовы: Вопрос, ВвестиЗначение, ВвестиЧисло, ОткрытьФормуМодально и проч. . Кажется, это связано с разработкой на iPad-ах. Но вот ещё какая незадача — и в веб-клиенте Google Chrome начиная с какой-то версии (?36, ?37 — не вспомню никак) эти модальные вызовы также прекратили свою работу.

Трудностей по переделке этих вызовов на не-модальные (или ‘псевдомодальные’) ‘выше крыши’. Всё просто, если вызовы в процедуре последовательно — разделил её на 2 или более и порядок. А если вызов в процедуре в цикле?

Например, возьмём код:

#Область ОбработчикиСобытийФормы #КонецОбласти #Область ОбработчикиСобытийЭлементовШапкиФормы #КонецОбласти #Область ОбработчикиСобытийЭлементовТаблицыФормы #КонецОбласти #Область ОбработчикиКомандФормы // По кн.Запуска // Параметры: // Команда — КомандаФормы &НаКлиенте Процедура комЗапускВыбора(Команда) ЗапускВыбора(); КонецПроцедуры #КонецОбласти #Область СлужебныеПроцедурыИФункции // Возвращает случайное число // Параметры: // низ — Число // верх — Число &НаКлиенте Функция ПолучитьСлучайноеЧисло(низ, верх) Генератор = Новый ГенераторСлучайныхЧисел; Возврат Генератор.СлучайноеЧисло(низ, верх); КонецФункции // Запускает выбор // Параметры: нет &НаКлиенте Процедура ЗапускВыбора() ВведеннаяСтрока = «»; Если Не ВвестиСтроку(ВведеннаяСтрока, НСтр(«ru=’Введите строку'»)) Тогда Возврат; КонецЕсли; Если Не Вопрос( НСтр(«ru=’Продолжить?'»), РежимДиалогаВопрос.ДаНет, 10, КодВозвратаДиалога.Да, НСтр(«ru=’Вопрос о продолжении'»), КодВозвратаДиалога.Нет ) = КодВозвратаДиалога.Да Тогда Возврат; КонецЕсли; РезультатЗапросаПользователя = ОткрытьФормуМодально( «ВнешняяОбработка.ПробаПсевдомодальныхВызовов.Форма.ЗапроснаяФорма»); Если РезультатЗапросаПользователя = Неопределено Тогда Возврат; КонецЕсли; ТекстПредупреждения = НСтр(«ru=’%ВведеннаяСтрока%%ПодставляемыеЗначения%'»); ПодставляемыеЗначения = «»; ЧислоСтрок = ПолучитьСлучайноеЧисло(2, 4); ТекстЗаголовка = НСтр(«ru=’Укажите %Что% для строки %Сч% (из %ЧислоСтрок%)'»); ТекстЗаголовка = СтрЗаменить(ТекстЗаголовка, «%ЧислоСтрок%», Строка(ЧислоСтрок)); Для Сч = 1 По ЧислоСтрок Цикл ПодставляемыеЗначенияСтроки = «%СимволыПС%»; ТекстЗаголовкаСтроки = ТекстЗаголовка; ТекстЗаголовкаСтроки = СтрЗаменить(ТекстЗаголовкаСтроки, «%Сч%», Строка(Сч)); Если РезультатЗапросаПользователя.ВвестиЧисло Тогда ТекстЗаголовкаВвода = ТекстЗаголовкаСтроки; ТекстЗаголовкаВвода = СтрЗаменить(ТекстЗаголовкаВвода, «%Что%», «число»); ВведенноеЧисло = 0; Если ВвестиЧисло(ВведенноеЧисло, ТекстЗаголовкаВвода, 6, 0) Тогда ПодставляемыеЗначенияСтроки = ПодставляемыеЗначенияСтроки + Строка(ВведенноеЧисло) + «, «; КонецЕсли; КонецЕсли; Если РезультатЗапросаПользователя.ВвестиДату Тогда ТекстЗаголовкаВвода = ТекстЗаголовкаСтроки; ТекстЗаголовкаВвода = СтрЗаменить(ТекстЗаголовкаВвода, «%Что%», «дату»); ВведеннаяДата = Дата(1,1,1); Если ВвестиДату(ВведеннаяДата, ТекстЗаголовкаВвода) Тогда ПодставляемыеЗначенияСтроки = ПодставляемыеЗначенияСтроки + Строка(ВведеннаяДата) + «, «; КонецЕсли; КонецЕсли; Если РезультатЗапросаПользователя.ВвестиБулево Тогда ТекстЗаголовкаВвода = ТекстЗаголовкаСтроки; ТекстЗаголовкаВвода = СтрЗаменить(ТекстЗаголовкаВвода, «%Что%», «булево»); ВведенноеБулево = Ложь; Если ВвестиЗначение( ВведенноеБулево, ТекстЗаголовкаВвода, Новый ОписаниеТипов(«Булево»)) Тогда ПодставляемыеЗначенияСтроки = ПодставляемыеЗначенияСтроки + Строка(ВведенноеБулево); КонецЕсли; КонецЕсли; ПодставляемыеЗначения = ПодставляемыеЗначения + ПодставляемыеЗначенияСтроки; КонецЦикла; ТекстПредупреждения = СтрЗаменить(ТекстПредупреждения, «%ВведеннаяСтрока%», ВведеннаяСтрока); ТекстПредупреждения = СтрЗаменить(ТекстПредупреждения, «%ПодставляемыеЗначения%», ПодставляемыеЗначения); ТекстПредупреждения = СтрЗаменить(ТекстПредупреждения, «%СимволыПС%», Символы.ПС); Предупреждение(ТекстПредупреждения); КонецПроцедуры #КонецОбласти

Как, наверное, из кода ясно, обработка запрашивает строку, затем разрешение продолжения, открывает модально форму, в которой нужно указать, следует ли далее вводить число, дату и булево значения. Затем рандомно задаётся целое число, в каждом цикле до заданного числа запрашивается (если выбрано, что нужно вводить) число, дата и булево. И, наконец-то, формируется показ предупреждения.

Да, пример притянут за уши. Да, в работе будут другие примеры. Более сложные.

Делаем рефакторинг средствами 1С

Если мы сделаем рефакторинг средствами 1С: ставим курсор на любом модальном вызове, щёлкаем правую кнопку мыши, выбираем Рефакторинг — Модальные вызовы — Преобразовать модальные вызовы модулей.

И наступает пичалька:

А когда мы поймём, где не получилось хорошо — в блоке цикла — становится совсем грустно.

И ещё рефакторинг разбил нашу процедуру на 4 разные процедуры.

Рука-лицо…

А есть ли другая возможность? Если ли возможность эмулировать функции, как у нас было при модальных вызовах? Нет?

Конечно же есть!!!

Рефакторинг через структуру данных

Идея заключается в том, что все данные последовательно писать, а затем проверять имеющееся значение. Если его нет — вызывать ввод этого значения и завершать процедуру. После ввода проверять есть это значение или нет. Если есть, то идти к следующей проверке.

Алгоритм нашего примера будет таков:

1.Проверяем, есть ли структура для записи данных. Её нет — создаём.

2.Проверяем, есть ли в этой структуре введённая строка. Нет — уходим на вызов ввода (передав туда структуру), а эту процедуру завершаем. После ввода строки вновь вызываем нашу процедуру.

3.Проверяем, что введённая строка в структуре наших данных есть. И если значение строковое, идём далее. (Ну а если Неопределено — пользователь отказался от ввода строки — завершаем).

4.Проверяем, что нет в структуре ответа на вопрос. Вызываем ПоказатьВопрос, передав туда нашу структуру. А нашу процедуру завершаем.

5.По ответу проверяем, что пользователь нажал кнопку Да. Иначе уходим.

6.Открываем форму (передав туда структуру и завершив текущую процедуру).

7.После закрытия формы вновь вызываем процедуру.

8.Если нет в структуре числа строк цикла перебора — генерируем рандом и получаем число строк.

9.И вот теперь самое интересное — приходим на цикл: в нашу структуру пишем массив. Который будет содержать структур ‘табличных’ данных.

10.Добавляем структуру — строку массива.

11.Если нужно вводить число (это мы выбрали в открытой форме п.6) и это число в данную структуру не введено — посылаем структуру (завершив эту процедуру) во ввод числа.

12.Если нужно вводить дату — повторяем как в пункте 11.

13.Если нужно вводить булево, опять повторяем как в п.11.

Не забываем после каждого ввода завершить нашу процедуру! Таким образом вызов вноь идёт с начала процедуры проверяя уже введённые данные.

nn.Для каждого из повторяем пп.10-13.

Шаг 1. Создаём структуру:

&НаКлиенте Процедура ЗапускВыбора() СтруктураДанных = Новый Структура; //!!! ВведеннаяСтрока = «»; Если Не ВвестиСтроку(ВведеннаяСтрока, НСтр(«ru=’Введите строку'»)) Тогда Возврат; КонецЕсли; СтруктураДанных.Вставить(«ВведеннаяСтрока», ВведеннаяСтрока); //!!! Ответ = Вопрос( //!!! НСтр(«ru=’Продолжить?'»), РежимДиалогаВопрос.ДаНет, 10, КодВозвратаДиалога.Да, НСтр(«ru=’Вопрос о продолжении'»), КодВозвратаДиалога.Нет ); //!!! Если Не Ответ = КодВозвратаДиалога.Да Тогда //!!! Возврат; КонецЕсли; СтруктураДанных.Вставить(«Ответ», Ответ); //!!! РезультатЗапросаПользователя = ОткрытьФормуМодально( «ВнешняяОбработка.ПробаПсевдомодальныхВызовов.Форма.ЗапроснаяФорма»); Если РезультатЗапросаПользователя = Неопределено Тогда Возврат; КонецЕсли; СтруктураДанных.Вставить( //!!! «РезультатЗапросаПользователя», РезультатЗапросаПользователя); ЧислоСтрок = ПолучитьСлучайноеЧисло(2, 4); СтруктураДанных.Вставить(«ЧислоСтрок», ЧислоСтрок); //!!! ТекстПредупреждения = НСтр(«ru=’%ВведеннаяСтрока%%ПодставляемыеЗначения%'»); ПодставляемыеЗначения = «»; ТекстЗаголовка = НСтр(«ru=’Укажите %Что% для строки %Сч% (из %ЧислоСтрок%)'»); ТекстЗаголовка = СтрЗаменить(ТекстЗаголовка, «%ЧислоСтрок%», Строка(ЧислоСтрок)); МассивДанныхСтрок = Новый Массив; //!!! Для Сч = 1 По ЧислоСтрок Цикл СтруктураДанныхСтрок = Новый Структура; //!!! ПодставляемыеЗначенияСтроки = «%СимволыПС%»; ТекстЗаголовкаСтроки = ТекстЗаголовка; ТекстЗаголовкаСтроки = СтрЗаменить(ТекстЗаголовкаСтроки, «%Сч%», Строка(Сч)); Если РезультатЗапросаПользователя.ВвестиЧисло Тогда ТекстЗаголовкаВвода = ТекстЗаголовкаСтроки; ТекстЗаголовкаВвода = СтрЗаменить(ТекстЗаголовкаВвода, «%Что%», «число»); ВведенноеЧисло = 0; Если ВвестиЧисло(ВведенноеЧисло, ТекстЗаголовкаВвода, 6, 0) Тогда ПодставляемыеЗначенияСтроки = ПодставляемыеЗначенияСтроки + Строка(ВведенноеЧисло) + «, «; СтруктураДанныхСтрок.Вставить( //!!! «ВведенноеЧисло», ВведенноеЧисло); КонецЕсли; КонецЕсли; Если РезультатЗапросаПользователя.ВвестиДату Тогда ТекстЗаголовкаВвода = ТекстЗаголовкаСтроки; ТекстЗаголовкаВвода = СтрЗаменить(ТекстЗаголовкаВвода, «%Что%», «дату»); ВведеннаяДата = Дата(1,1,1); Если ВвестиДату(ВведеннаяДата, ТекстЗаголовкаВвода) Тогда ПодставляемыеЗначенияСтроки = ПодставляемыеЗначенияСтроки + Строка(ВведеннаяДата) + «, «; СтруктураДанныхСтрок.Вставить( //!!! «ВведеннаяДата», ВведеннаяДата); КонецЕсли; КонецЕсли; Если РезультатЗапросаПользователя.ВвестиБулево Тогда ТекстЗаголовкаВвода = ТекстЗаголовкаСтроки; ТекстЗаголовкаВвода = СтрЗаменить(ТекстЗаголовкаВвода, «%Что%», «булево»); ВведенноеБулево = Ложь; Если ВвестиЗначение( ВведенноеБулево, ТекстЗаголовкаВвода, Новый ОписаниеТипов(«Булево»)) Тогда ПодставляемыеЗначенияСтроки = ПодставляемыеЗначенияСтроки + Строка(ВведенноеБулево); СтруктураДанныхСтрок.Вставить( //!!! «ВведенноеБулево», ВведенноеБулево); КонецЕсли; КонецЕсли; ПодставляемыеЗначения = ПодставляемыеЗначения + ПодставляемыеЗначенияСтроки; МассивДанныхСтрок.Добавить(СтруктураДанныхСтрок); //!!! КонецЦикла; СтруктураДанных.Вставить( //!!! «МассивДанныхСтрок», МассивДанныхСтрок); ТекстПредупреждения = СтрЗаменить(ТекстПредупреждения, «%ВведеннаяСтрока%», ВведеннаяСтрока); ТекстПредупреждения = СтрЗаменить(ТекстПредупреждения, «%ПодставляемыеЗначения%», ПодставляемыеЗначения); ТекстПредупреждения = СтрЗаменить(ТекстПредупреждения, «%СимволыПС%», Символы.ПС); Предупреждение(ТекстПредупреждения); КонецПроцедуры

Шаг 2.Необходимость ввода чисел, дат и булево пишем в структуру. И выделяем показ предупреждения

//СтруктураДанных.Вставить( // «РезультатЗапросаПользователя», // РезультатЗапросаПользователя); СтруктураДанных.Вставить(«ВвестиЧисло», РезультатЗапросаПользователя.ВвестиЧисло); //!!! СтруктураДанных.Вставить(«ВвестиДату», РезультатЗапросаПользователя.ВвестиДату); //!!! СтруктураДанных.Вставить(«ВвестиБулево», РезультатЗапросаПользователя.ВвестиБулево); //!!! ЧислоСтрок = ПолучитьСлучайноеЧисло(2, 4); СтруктураДанных.Вставить(«ЧислоСтрок», ЧислоСтрок); ТекстЗаголовка = НСтр(«ru=’Укажите %Что% для строки %Сч% (из %ЧислоСтрок%)'»); ТекстЗаголовка = СтрЗаменить(ТекстЗаголовка, «%ЧислоСтрок%», Строка(ЧислоСтрок)); МассивДанныхСтрок = Новый Массив; Для Сч = 1 По ЧислоСтрок Цикл СтруктураДанныхСтрок = Новый Структура; ТекстЗаголовкаСтроки = ТекстЗаголовка; ТекстЗаголовкаСтроки = СтрЗаменить(ТекстЗаголовкаСтроки, «%Сч%», Строка(Сч)); Если СтруктураДанных.ВвестиЧисло Тогда //!!! ТекстЗаголовкаВвода = ТекстЗаголовкаСтроки; ТекстЗаголовкаВвода = СтрЗаменить(ТекстЗаголовкаВвода, «%Что%», «число»); ВведенноеЧисло = 0; Если ВвестиЧисло(ВведенноеЧисло, ТекстЗаголовкаВвода, 6, 0) Тогда СтруктураДанныхСтрок.Вставить(«ВведенноеЧисло», ВведенноеЧисло); КонецЕсли; КонецЕсли; Если СтруктураДанных.ВвестиДату Тогда //!!! ТекстЗаголовкаВвода = ТекстЗаголовкаСтроки; ТекстЗаголовкаВвода = СтрЗаменить(ТекстЗаголовкаВвода, «%Что%», «дату»); ВведеннаяДата = Дата(1,1,1); Если ВвестиДату(ВведеннаяДата, ТекстЗаголовкаВвода) Тогда СтруктураДанныхСтрок.Вставить(«ВведеннаяДата», ВведеннаяДата); КонецЕсли; КонецЕсли; Если СтруктураДанных.ВвестиБулево Тогда //!!! ТекстЗаголовкаВвода = ТекстЗаголовкаСтроки; ТекстЗаголовкаВвода = СтрЗаменить(ТекстЗаголовкаВвода, «%Что%», «булево»); ВведенноеБулево = Ложь; Если ВвестиЗначение( ВведенноеБулево, ТекстЗаголовкаВвода, Новый ОписаниеТипов(«Булево»)) Тогда СтруктураДанныхСтрок.Вставить(«ВведенноеБулево», ВведенноеБулево); КонецЕсли; КонецЕсли; МассивДанныхСтрок.Добавить(СтруктураДанныхСтрок); КонецЦикла; СтруктураДанных.Вставить(«МассивДанныхСтрок», МассивДанныхСтрок); ВывестиПредупреждение(СтруктураДанных); КонецПроцедуры //!!! // Выводит предупреждение по введённым данным // Параметры: // СтруктураДанных — Структура &НаКлиенте Процедура ВывестиПредупреждение(СтруктураДанных) ТекстПредупреждения = НСтр(«ru=’%ВведеннаяСтрока%%ПодставляемыеЗначения%'»); ТекстПредупреждения = СтрЗаменить( ТекстПредупреждения, «%ВведеннаяСтрока%», СтруктураДанных.ВведеннаяСтрока); ПодставляемыеЗначения = «»; МассивДанныхСтрок = СтруктураДанных.МассивДанныхСтрок; Для Каждого СтруктураДанныхСтрок Из МассивДанныхСтрок Цикл ПодставляемыеЗначенияСтроки = «»; Если СтруктураДанныхСтрок.Свойство(«ВведенноеЧисло») И Не СтруктураДанныхСтрок.ВведенноеЧисло = Неопределено Тогда ПодставляемыеЗначенияСтроки = ПодставляемыеЗначенияСтроки + Строка(СтруктураДанныхСтрок.ВведенноеЧисло) + «, «; КонецЕсли; Если СтруктураДанныхСтрок.Свойство(«ВведеннаяДата») И Не СтруктураДанныхСтрок.ВведеннаяДата = Неопределено Тогда ПодставляемыеЗначенияСтроки = ПодставляемыеЗначенияСтроки + Строка(СтруктураДанныхСтрок.ВведеннаяДата) + «, «; КонецЕсли; Если СтруктураДанныхСтрок.Свойство(«ВведенноеБулево») И Не СтруктураДанныхСтрок.ВведенноеБулево = Неопределено Тогда ПодставляемыеЗначенияСтроки = ПодставляемыеЗначенияСтроки + Строка(СтруктураДанныхСтрок.ВведенноеБулево) + «, «; КонецЕсли; Если СтрДлина(ПодставляемыеЗначенияСтроки) Тогда ПодставляемыеЗначенияСтроки = Лев(ПодставляемыеЗначенияСтроки, СтрДлина(ПодставляемыеЗначенияСтроки) — 2); КонецЕсли; ПодставляемыеЗначения = ПодставляемыеЗначения + «%СимволыПС%» + ПодставляемыеЗначенияСтроки; КонецЦикла; ТекстПредупреждения = СтрЗаменить( ТекстПредупреждения, «%ПодставляемыеЗначения%», ПодставляемыеЗначения); ТекстПредупреждения = СтрЗаменить( ТекстПредупреждения, «%СимволыПС%», Символы.ПС); ПоказатьПредупреждение(, ТекстПредупреждения); КонецПроцедуры

Предупреждение ничего не решает. Хотя это наш 1-ый псевдомодальный вызов. Поздравляю!!!

Шаг 3. Создаём вызовы пока для тех, кто не в цикле

// Завершает ввод строки // Параметры: // ВведеннаяСтрока — Строка, Неопределено // ДопПараметры — Структура &НаКлиенте Процедура ЗавершениеВводаСтроки(ВведеннаяСтрока, ДопПараметры) Экспорт ДопПараметры.СтруктураДанных.Вставить(ДопПараметры.КлючВставки, ВведеннаяСтрока); ЗапускВыбора(ДопПараметры.СтруктураДанных); КонецПроцедуры // Завершает ответ на вопрос // Параметры: // Ответ — КодВозвратаДиалога, Неопределено // ДопПараметры — Структура &НаКлиенте Процедура ЗавершениеВопроса(Ответ, ДопПараметры) Экспорт ДопПараметры.СтруктураДанных.Вставить(ДопПараметры.КлючВставки, Ответ); ЗапускВыбора(ДопПараметры.СтруктураДанных); КонецПроцедуры // Завершает открытиеформы // Параметры: // РезультатОткрытияФормы — Структура, Произвольное, Неопределено // ДопПараметры — Структура &НаКлиенте Процедура ЗавершениеОткрытияФормы(РезультатОткрытияФормы, ДопПараметры) Экспорт Если ТипЗнч(РезультатОткрытияФормы) = Тип(«Структура») Тогда ЗаполнитьЗначенияСвойств( ДопПараметры.СтруктураДанных, РезультатОткрытияФормы, ДопПараметры.КлючВставки); ИначеЕсли Не ТипЗнч(РезультатОткрытияФормы) = Тип(«Неопределено») Тогда ДопПараметры.СтруктураДанных.Вставить( ДопПараметры.КлючВставки, РезультатОткрытияФормы); КонецЕсли; ЗапускВыбора(ДопПараметры.СтруктураДанных); КонецПроцедуры #КонецОбласти //ПсевдоМодальныеПроцедуры // Запускает выбор // Параметры: нет &НаКлиенте Процедура ЗапускВыбора(СтруктураДанных = Неопределено) Если СтруктураДанных = Неопределено Тогда СтруктураДанных = Новый Структура; КонецЕсли; Если Не СтруктураДанных.Свойство(«ВведеннаяСтрока») Тогда ВведеннаяСтрока = «»; ПоказатьВводСтроки( Новый ОписаниеОповещения( «ЗавершениеВводаСтроки», ЭтотОбъект, Новый Структура( «СтруктураДанных, КлючВставки», СтруктураДанных, «ВведеннаяСтрока»)), ВведеннаяСтрока, НСтр(«ru=’Введите строку'») ); Возврат; ИначеЕсли СтруктураДанных.ВведеннаяСтрока = Неопределено Тогда Возврат; КонецЕсли; Если Не СтруктураДанных.Свойство(«ОтветНаВопросОПродолжении») Тогда ПоказатьВопрос( Новый ОписаниеОповещения( «ЗавершениеВопроса», ЭтотОбъект, Новый Структура( «СтруктураДанных, КлючВставки», СтруктураДанных, «ОтветНаВопросОПродолжении») ), НСтр(«ru=’Продолжить?'»), РежимДиалогаВопрос.ДаНет, 10, КодВозвратаДиалога.Да, НСтр(«ru=’Вопрос о продолжении'»), КодВозвратаДиалога.Нет ); Возврат; ИначеЕсли СтруктураДанных.ОтветНаВопросОПродолжении = Неопределено Или Не СтруктураДанных.ОтветНаВопросОПродолжении = КодВозвратаДиалога.Да Тогда Возврат; КонецЕсли; Если Не СтруктураДанных.Свойство(«ВвестиЧисло») И Не СтруктураДанных.Свойство(«ВвестиДату») И Не СтруктураДанных.Свойство(«ВвестиБулево») Тогда СтруктураДанных.Вставить(«ВвестиЧисло»); СтруктураДанных.Вставить(«ВвестиДату»); СтруктураДанных.Вставить(«ВвестиБулево»); ОткрытьФорму( «ВнешняяОбработка.ПробаПсевдомодальныхВызовов.Форма.ЗапроснаяФорма»,,,,,, Новый ОписаниеОповещения(«ЗавершениеОткрытияФормы», ЭтотОбъект, Новый Структура( «СтруктураДанных, КлючВставки», СтруктураДанных, «ВвестиЧисло, ВвестиДату, ВвестиБулево»)), РежимОткрытияОкнаФормы.БлокироватьОкноВладельца); Возврат; КонецЕсли; ЧислоСтрок = ПолучитьСлучайноеЧисло(2, 4); СтруктураДанных.Вставить(«ЧислоСтрок», ЧислоСтрок); ТекстЗаголовка = НСтр(«ru=’Укажите %Что% для строки %Сч% (из %ЧислоСтрок%)'»); ТекстЗаголовка = СтрЗаменить(ТекстЗаголовка, «%ЧислоСтрок%», Строка(ЧислоСтрок)); МассивДанныхСтрок = Новый Массив; Для Сч = 1 По ЧислоСтрок Цикл СтруктураДанныхСтрок = Новый Структура; ТекстЗаголовкаСтроки = ТекстЗаголовка; ТекстЗаголовкаСтроки = СтрЗаменить(ТекстЗаголовкаСтроки, «%Сч%», Строка(Сч)); Если СтруктураДанных.ВвестиЧисло Тогда ТекстЗаголовкаВвода = ТекстЗаголовкаСтроки; ТекстЗаголовкаВвода = СтрЗаменить(ТекстЗаголовкаВвода, «%Что%», «число»); ВведенноеЧисло = 0; Если ВвестиЧисло(ВведенноеЧисло, ТекстЗаголовкаВвода, 6, 0) Тогда СтруктураДанныхСтрок.Вставить(«ВведенноеЧисло», ВведенноеЧисло); КонецЕсли; КонецЕсли; Если СтруктураДанных.ВвестиДату Тогда ТекстЗаголовкаВвода = ТекстЗаголовкаСтроки; ТекстЗаголовкаВвода = СтрЗаменить(ТекстЗаголовкаВвода, «%Что%», «дату»); ВведеннаяДата = Дата(1,1,1); Если ВвестиДату(ВведеннаяДата, ТекстЗаголовкаВвода) Тогда СтруктураДанныхСтрок.Вставить(«ВведеннаяДата», ВведеннаяДата); КонецЕсли; КонецЕсли; Если СтруктураДанных.ВвестиБулево Тогда ТекстЗаголовкаВвода = ТекстЗаголовкаСтроки; ТекстЗаголовкаВвода = СтрЗаменить(ТекстЗаголовкаВвода, «%Что%», «булево»); ВведенноеБулево = Ложь; Если ВвестиЗначение( ВведенноеБулево, ТекстЗаголовкаВвода, Новый ОписаниеТипов(«Булево»)) Тогда СтруктураДанныхСтрок.Вставить(«ВведенноеБулево», ВведенноеБулево); КонецЕсли; КонецЕсли; МассивДанныхСтрок.Добавить(СтруктураДанныхСтрок); КонецЦикла; СтруктураДанных.Вставить(«МассивДанныхСтрок», МассивДанныхСтрок); ВывестиПредупреждение(СтруктураДанных); КонецПроцедуры

Обратите внимание: здесь мы перевели ВвестиСтроку на ПоказатьВводСтроки, Вопрос на ПоказатьВопрос и ОткрытьФормуМодально на ОткрытьФорму и после каждого этого вызова завершаем нашу процедуру:

Возврат;

а после каждого завершения — запускаем нашу процедуру.

а если строку ‘возвращаем’ в Неопределено или Ответ в ‘Нет’, то выходим совсем.

Возврат; ИначеЕсли СтруктураДанных.ОтветНаВопросОПродолжении = Неопределено Или Не СтруктураДанных.ОтветНаВопросОПродолжении = КодВозвратаДиалога.Да Тогда Возврат; КонецЕсли;

Шаг 4. Теперь для тех кто в цикле

// Завершает ввод числа // Параметры: // ВведенноеЧисло — Число, Неопределено // ДопПараметры — Структура &НаКлиенте Процедура ЗавершениеВводаЧисла(ВведенноеЧисло, ДопПараметры) Экспорт Если Не ДопПараметры.Свойство(«ПодСтруктураДанных») Тогда ДопПараметры.СтруктураДанных.Вставить( ДопПараметры.КлючВставки, ВведенноеЧисло); Иначе ДопПараметры.ПодСтруктураДанных.Вставить( ДопПараметры.КлючВставки, ВведенноеЧисло); КонецЕсли; ЗапускВыбора(ДопПараметры.СтруктураДанных); КонецПроцедуры // Завершает ввод даты // Параметры: // ВведеннаяДата — Дата, Неопределено // ДопПараметры — Структура &НаКлиенте Процедура ЗавершениеВводаДаты(ВведеннаяДата, ДопПараметры) Экспорт Если Не ДопПараметры.Свойство(«ПодСтруктураДанных») Тогда ДопПараметры.СтруктураДанных.Вставить( ДопПараметры.КлючВставки, ВведеннаяДата); Иначе ДопПараметры.ПодСтруктураДанных.Вставить( ДопПараметры.КлючВставки, ВведеннаяДата); КонецЕсли; ЗапускВыбора(ДопПараметры.СтруктураДанных); КонецПроцедуры // Завершает ввод значения // Параметры: // ВведенноеЗначение — Произвольное, Неопределено // ДопПараметры — Структура &НаКлиенте Процедура ЗавершениеВводаЗначения(ВведенноеЗначение, ДопПараметры) Экспорт Если Не ДопПараметры.Свойство(«ПодСтруктураДанных») Тогда ДопПараметры.СтруктураДанных.Вставить( ДопПараметры.КлючВставки, ВведенноеЗначение); Иначе ДопПараметры.ПодСтруктураДанных.Вставить( ДопПараметры.КлючВставки, ВведенноеЗначение); КонецЕсли; ЗапускВыбора(ДопПараметры.СтруктураДанных); КонецПроцедуры … ТекстЗаголовка = НСтр(«ru=’Укажите %Что% для строки %Сч% (из %ЧислоСтрок%)'»); ТекстЗаголовка = СтрЗаменить(ТекстЗаголовка, «%ЧислоСтрок%», Строка(ЧислоСтрок)); Если Не СтруктураДанных.Свойство(«МассивДанныхСтрок») Тогда СтруктураДанных.Вставить(«МассивДанныхСтрок», Новый Массив); КонецЕсли; Для Сч = 1 По ЧислоСтрок Цикл Если СтруктураДанных.МассивДанныхСтрок.Количество() < Сч Тогда СтруктураДанных.МассивДанныхСтрок.Добавить(Новый Структура); КонецЕсли; СтруктураДанныхСтрок = СтруктураДанных.МассивДанныхСтрок; ТекстЗаголовкаСтроки = ТекстЗаголовка; ТекстЗаголовкаСтроки = СтрЗаменить(ТекстЗаголовкаСтроки, «%Сч%», Строка(Сч)); Если СтруктураДанных.ВвестиЧисло И Не СтруктураДанныхСтрок.Свойство(«ВведенноеЧисло») Тогда ТекстЗаголовкаВвода = ТекстЗаголовкаСтроки; ТекстЗаголовкаВвода = СтрЗаменить(ТекстЗаголовкаВвода, «%Что%», «число»); ВведенноеЧисло = 0; ПоказатьВводЧисла( Новый ОписаниеОповещения( «ЗавершениеВводаЧисла», ЭтотОбъект, Новый Структура( «СтруктураДанных, ПодСтруктураДанных, КлючВставки», СтруктураДанных, СтруктураДанныхСтрок, «ВведенноеЧисло») ), ВведенноеЧисло, ТекстЗаголовкаВвода); Возврат; ИначеЕсли СтруктураДанных.ВвестиЧисло И СтруктураДанныхСтрок.ВведенноеЧисло = Неопределено Тогда СтруктураДанныхСтрок.Вставить(«ВведенноеЧисло», 0); КонецЕсли; Если СтруктураДанных.ВвестиДату И Не СтруктураДанныхСтрок.Свойство(«ВведеннаяДата») Тогда ТекстЗаголовкаВвода = ТекстЗаголовкаСтроки; ТекстЗаголовкаВвода = СтрЗаменить(ТекстЗаголовкаВвода, «%Что%», «дату»); ВведеннаяДата = Дата(1,1,1); ПоказатьВводДаты( Новый ОписаниеОповещения( «ЗавершениеВводаДаты», ЭтотОбъект, Новый Структура( «СтруктураДанных, ПодСтруктураДанных, КлючВставки», СтруктураДанных, СтруктураДанныхСтрок, «ВведеннаяДата») ), ВведеннаяДата, ТекстЗаголовкаВвода); Возврат; ИначеЕсли СтруктураДанных.ВвестиДату И СтруктураДанныхСтрок.ВведеннаяДата = Неопределено Тогда СтруктураДанныхСтрок.Вставить(«ВведеннаяДата», Дата(1,1,1)); КонецЕсли; Если СтруктураДанных.ВвестиБулево И Не СтруктураДанныхСтрок.Свойство(«ВведенноеБулево») Тогда ТекстЗаголовкаВвода = ТекстЗаголовкаСтроки; ТекстЗаголовкаВвода = СтрЗаменить(ТекстЗаголовкаВвода, «%Что%», «булево»); ВведенноеБулево = Ложь; ПоказатьВводЗначения( Новый ОписаниеОповещения( «ЗавершениеВводаЗначения», ЭтотОбъект, Новый Структура( «СтруктураДанных, ПодСтруктураДанных, КлючВставки», СтруктураДанных, СтруктураДанныхСтрок, «ВведенноеБулево») ), ВведенноеБулево, ТекстЗаголовкаВвода); Возврат; ИначеЕсли СтруктураДанных.ВвестиБулево И СтруктураДанныхСтрок.ВведеннаяДата = Неопределено Тогда СтруктураДанныхСтрок.Вставить(«ВведенноеБулево», Ложь); КонецЕсли; КонецЦикла; ВывестиПредупреждение(СтруктураДанных); КонецПроцедуры

Точно также проверяем, что число / дату / булево требуется вводить и они не введены. Посылаем программу на ввод данных и завершаем процедуру. Она получает ввод и вновь запускает нашу процедуру. Вновь проверяет все введённые данные и приходит к невведённым.

Вот и всё! Работает! Можно смело идти в свойства конфигурации и ставить ‘Режим использования модальности’ — ‘Не использовать’. Если это единственная обработка с модальными вызовами, конечно…

‘Русская весна. А что дальше?!’

Процедур всё равно много. И сидят они в одной единственной обработке. А как сделать, чтобы модальные в псевдомодальные м.б.переделать во всей конфигурации?

Но мы не были бы мы, русскими программистами, если бы не сделали отдельный модуль для псевдомодальных вызовов.

Пересяем все эти вызовы в общий клиентский модуль, например, ‘АсинхронныеВызовы’. А чтобы узнавать, куда потом ‘стучаться’, передавайте также в дополнительные параметры текущий модуль и имя процедуры:

в обработке:

Если Не СтруктураДанных.Свойство(«ВведеннаяСтрока») Тогда ВведеннаяСтрока = «»; ПоказатьВводСтроки( Новый ОписаниеОповещения( «ЗавершениеВводаСтроки», АсинхронныеВызовы, Новый Структура(«СтруктураДанных, КлючВставки, модуль, ИмяПроцедуры», СтруктураДанных, «ВведеннаяСтрока», ЭтотОбъект, «ЗапускВыбора»)), ВведеннаяСтрока, НСтр(«ru=’Введите строку'») );

в общем модуле для каждого вызова сделаем завершение. По переданному имени процедуры узнаём какую процедуру нужно вызвать. Другого способа я не нашёл (оператор выполнить не поддерживается на веб-клиенте):

Процедура ЗавершениеВводаСтроки(ВведеннаяСтрока, ДопПараметры) Экспорт Если Не ДопПараметры.Свойство(«ПодСтруктураДанных») Тогда ДопПараметры.СтруктураДанных.Вставить( ДопПараметры.КлючВставки, ВведеннаяСтрока); Иначе ДопПараметры.ПодСтруктураДанных.Вставить( ДопПараметры.КлючВставки, ВведеннаяСтрока); КонецЕсли; ЗавершениеАсинхронногоВызова( ДопПараметры.СтруктураДанных, ДопПараметры.модуль, ДопПараметры.ИмяПроцедуры); КонецПроцедуры // Завершает ввод данных и запускает вызываемую процедуру // Параметры: // СтруктураДанных — Структура // модуль — УправляемаяФорма, ОбщийМодуль, Команда // ИмяПроцедуры — Строка Процедура ЗавершениеАсинхронногоВызова(СтруктураДанных, модуль, ИмяПроцедуры) Если ИмяПроцедуры = «ЗапускВыбора» Тогда модуль.ЗапускВыбора(СтруктураДанных); КонецЕсли; КонецПроцедуры

По прилагаемой обработке:

её можно не закачивать. Весь код с избытком здесь.

Спасибо за внимание. Надеюсь, кому-нибудь моя идея поможет!

PS.А как же замена модальных вызовов в функциях. Хм, тут надо подумать…

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Наверх