Два механизма, которые ускорили работу бухгалтеров в 1С

Публикация № 367670

Разработка - Практика программирования

Речь пойдет о собственных идеях и их реализации. Доработки были проведены на конфигурации "1С: Бухгалтерия предприятия 8" в далеком 2010 году. Механизмы не привязаны к одной какой-либо типовой конфигурации - их можно реализовать в любой конфигурации. И даже не привязаны к платформе 1С - их можно реализовать на любой платформе. Возможно, эти идеи будут востребованы в самописных и отраслевых решениях 1С. Доработки достаточно просты, при этом ни в одной типовой конфигурации не реализованы.

   Из наблюдений за работой бухгалтеров: бухгалтера постоянно открывают список входящих платежек с отбором по контрагенту, чтобы увидеть, какие платежки по нему заведены в базе. Затем открывают список счетов на оплату с отбором по данному контрагенту. Затем открывают ОСВ по заданному счету опять-таки с отбором по контрагенту. Затем снова открывают счета на оплату, платежки и ОСВ по счету с отбором по другому контрагенту. И так много раз в течение рабочего дня…
   При этом в данном случае механизм структуры подчиненности документов и акты сверок практически не используются по ряду причин, и поэтому не могут ускорить работу бухгалтеров.  
    Чтобы открыть одну форму списка, установить отбор по контрагенту, затем открыть другую форму списка или отчет, снова установить отбор по контрагенту – понадобится с десяток кликов и 1-2-3 мин ожидания на отклик программы.
    Представляю вам две небольшие доработки программы, которые ускорили работу бухгалтеров:
1) переход в списки документов (отчеты) через контекстное меню (рис.1);
2) использование статистики частоты обращения в программе к контрагентам.

Входящие платежки

Рис. 1. Контекстное меню списка входящих платежек.

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

1. Переход в списки через контекстное меню


    Суть - в операционной системе Windows сильно развит механизм контекстного меню: при нажатии правой кнопки мыши выходит список команд, выполняемых с  объектом. Я реализовал подобный механизм в 1С – для каждого списка документов появляется контекстное меню со своим списком команд.
    На платформе 8 (обычные формы) имеется встроенный механизм контекстного меню, использующий командную панель как поставщика команд в соответствующее контекстное меню – вот этот механизм я взял за основу.
    В тех списках, где мне нужна была функциональность контекстного меню, я добавлял свою командную панель или использовал имеющуюся, относящуюся к форме – добавлял необходимые кнопки (рис.2, 3, 4).

Журнал счетов

 Рис. 2. Контекстное меню списка счетов на оплату.

ОСВ по счету

  Рис. 3. Контекстное меню оборотно-сальдовой ведомости по счету.

Счет на оплату

  Рис. 4. Контекстное меню счета на оплату.

    Чтобы разработка данного механизма и последующее добавление в новые формы не стала рутинной операцией, я создал одну командную панель, которую при необходимости копирую в новую форму вместе с процедурами. Лишние кнопки удаляю программно при открытии формы – те, которые относятся непосредственно к текущей форме (рис.5 и 6 и ниже – пример кода). Код разработки достаточно прост - представляю его вам исключительно с целью убедиться, что внедрить и запустить механизм контекстного меню достаточно просто (полдня работы).

Реестр контрагентов

 Рис. 5. Пример разработки контекстного меню для регистра сведений.

Командная панель

Рис. 6. Командная панель для реализации контекстного меню для регистра сведений.

 

 

//быстрый переход к другим документам {
Процедура КоманднаяПанельПереходКДокументамОткрытьОСВ(Кнопка)
    ТекСтрока = ЭлементыФормы.РегистрСведенийСписок.ТекущаяСтрока;    
    Если ТекСтрока = Неопределено Тогда       
       Возврат;    
    КонецЕсли;
    МодульПро.КоманднаяПанельПереходКДокументамОткрытьОСВ(ТекСтрока.Контрагент, ЭтаФорма);
КонецПроцедуры

Процедура КоманднаяПанельПереходКДокументамОткрытьКарточкуСчета(Кнопка)
    ТекСтрока = ЭлементыФормы.РегистрСведенийСписок.ТекущаяСтрока;
    Если ТекСтрока = Неопределено Тогда       
       Возврат;    
    КонецЕсли;
    МодульПро.КоманднаяПанельПереходКДокументамОткрытьКарточкуСчета(ТекСтрока.Контрагент, ЭтаФорма);
КонецПроцедуры

Процедура КоманднаяПанельПереходКДокументамОткрытьВходящиеПлатежки(Кнопка)
    ТекСтрока = ЭлементыФормы.РегистрСведенийСписок.ТекущаяСтрока;   
    Если ТекСтрока = Неопределено Тогда       
      Возврат;   
    КонецЕсли;
    МодульПро.КоманднаяПанельПереходКДокументамОткрытьВходящиеПлатежки(ТекСтрока.Контрагент, ЭтаФорма);
КонецПроцедуры

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

Процедура КоманднаяПанельПереходКДокументамОткрытьСправочникКонтрагенты(Кнопка)
    ТекСтрока = ЭлементыФормы.РегистрСведенийСписок.ТекущаяСтрока;   
    Если ТекСтрока = Неопределено Тогда        
      Возврат;    
    КонецЕсли;
    МодульПро.КоманднаяПанельПереходКДокументамОткрытьСправочникКонтрагенты(ТекСтрока.Контрагент, ЭтаФорма);
КонецПроцедуры

Процедура КоманднаяПанельПереходКДокументамОткрытьРеестрСвидетельств(Кнопка)
    ТекСтрока = ЭлементыФормы.РегистрСведенийСписок.ТекущаяСтрока;   
    Если ТекСтрока = Неопределено Тогда       
      Возврат;    
    КонецЕсли;
    МодульПро.КоманднаяПанельПереходКДокументамОткрытьРеестрСвидетельств(ТекСтрока.Контрагент, ЭтаФорма);
КонецПроцедуры

Процедура КоманднаяПанельПереходКДокументамНазад(Кнопка)
    МодульПро.КоманднаяПанельПереходКДокументамНазад(ЭтаФорма);
КонецПроцедуры

Процедура КоманднаяПанельПереходКДокументамОткрытьСписокСчетов(Кнопка)
    ТекСтрока = ЭлементыФормы.РегистрСведенийСписок.ТекущаяСтрока;   
    Если ТекСтрока = Неопределено Тогда        
      Возврат;    
    КонецЕсли;
    МодульПро.КоманднаяПанельПереходКДокументамОткрытьСписокСчетов(ТекСтрока.Контрагент, ЭтаФорма);
КонецПроцедуры

Процедура ПриОткрытии()     
    МодульПро.УдалитьКнопкуИзКоманднойПанели(РегистрСведенийСписок, ЭтаФорма);
КонецПроцедуры
//быстрый переход к другим документам }

 


   Процедуры общего модуля "МодульПро" представлены ниже.

 

//быстрый переход к другим документам {
//можно программно удалять, а можно вручную, так как мы заранее знаем, что и где надо удалить
Процедура УдалитьКнопкуИзКоманднойПанели(Список, Форма) Экспорт
    Если ТипЗнч(Список) = Тип("ДокументСписок.СчетНаВзносы") Тогда
       Кнопка = Форма.ЭлементыФормы.КоманднаяПанельПереходКДокументам.Кнопки.Найти("ОткрытьСписокСчетов");              Форма.ЭлементыФормы.КоманднаяПанельПереходКДокументам.Кнопки.Удалить(Кнопка);
    ИначеЕсли ТипЗнч(Список) = Тип("ДокументСписок.ПлатежноеПоручениеВходящее") Тогда
       Кнопка=Форма.ЭлементыФормы.КоманднаяПанельПереходКДокументам.Кнопки.Найти("ОткрытьВходящиеПлатежки");       
       Форма.ЭлементыФормы.КоманднаяПанельПереходКДокументам.Кнопки.Удалить(Кнопка);
    ИначеЕсли ТипЗнч(Список) = Тип("ДокументСписок.ПлатежноеПоручениеИсходящее") Тогда
       Кнопка=Форма.ЭлементыФормы.КоманднаяПанельПереходКДокументам.Кнопки.Найти("ОткрытьИсходящиеПлатежки");       
       Форма.ЭлементыФормы.КоманднаяПанельПереходКДокументам.Кнопки.Удалить(Кнопка);
    ИначеЕсли ТипЗнч(Список) = Тип("ОтчетОбъект.КарточкаСчетаХозрасчетный") Тогда
       Кнопка = Форма.ЭлементыФормы.КоманднаяПанельПереходКДокументам.Кнопки.Найти("ОткрытьКарточкуСчета");              Форма.ЭлементыФормы.КоманднаяПанельПереходКДокументам.Кнопки.Удалить(Кнопка);
    ИначеЕсли ТипЗнч(Список) = Тип("ОтчетОбъект.ОборотноСальдоваяВедомостьПоСчетуХозрасчетный") Тогда
       Кнопка = Форма.ЭлементыФормы.КоманднаяПанельПереходКДокументам.Кнопки.Найти("ОткрытьОСВ");       
       Форма.ЭлементыФормы.КоманднаяПанельПереходКДокументам.Кнопки.Удалить(Кнопка);
    ИначеЕсли ТипЗнч(Список) = Тип("СправочникСписок.Контрагенты") Тогда
       Кнопка=Форма.ЭлементыФормы.КоманднаяПанельПереходКДокументам.Кнопки.Найти("ОткрытьСправочникКонтрагенты");                 Форма.ЭлементыФормы.КоманднаяПанельПереходКДокументам.Кнопки.Удалить(Кнопка);
    ИначеЕсли ТипЗнч(Список) = Тип("РегистрСведенийСписок.РеестрЧленовПартнерства") Тогда
       Кнопка=Форма.ЭлементыФормы.КоманднаяПанельПереходКДокументам.Кнопки.Найти("ОткрытьРеестрСвидетельств");               Форма.ЭлементыФормы.КоманднаяПанельПереходКДокументам.Кнопки.Удалить(Кнопка);
    КонецЕсли;
КонецПроцедуры

Процедура ОткрытьОтчет(НазваниеОтчета, Контрагент, ПредыдущаяФорма)
    Отчет = Отчеты[НазваниеОтчета].Создать();        
    Отчет.Счет = ПланыСчетов.Хозрасчетный.НайтиПоКоду("76.05.3");    
    Отчет.Организация   = Справочники.Организации.НайтиПоКоду("000000001");      
    Отчет.ДатаНач       = Неопределено;    
    Отчет.ДатаКон       = Неопределено;
    Отчет.ЗаполнитьНачальныеНастройки();
    ФормаОтчета = Отчет.ПолучитьФорму(,ПредыдущаяФорма);
    ФормаОтчета.НеЗаполнятьНастройкиПриОткрытии = Истина;
    Если ЗначениеЗаполнено(Контрагент) Тогда       
      ФормаОтчета.Контрагент = Контрагент;    
    Иначе        
       Возврат;    
    КонецЕсли;
    ЭлементОтбора = Отчет.ПостроительОтчета.Отбор.Найти("Субконто1");   
    Если ЭлементОтбора = Неопределено Тогда       
      ЭлементОтбора = Отчет.ПостроительОтчета.Отбор.Добавить("Субконто1");   
    КонецЕсли;
    ЭлементОтбора.Использование = Истина;    
    ЭлементОтбора.ВидСравнения  = ВидСравнения.Равно; 
    ЭлементОтбора.Значение      = Контрагент;
    Если НазваниеОтчета = "ОборотноСальдоваяВедомостьПоСчетуХозрасчетный" Тогда       
      Отчет.ПостроительОтчета.ИзмеренияСтроки.Добавить("Субконто1");      
      Отчет.ПостроительОтчета.ИзмеренияСтроки.Добавить("Субконто2");        
    КонецЕсли;
    Если ФормаОтчета.Открыта() Тогда       
      ФормаОтчета.Активизировать();    
    Иначе        
      ФормаОтчета.Открыть();   
    КонецЕсли;
    ФормаОтчета.ОбновитьОтчет();
КонецПроцедуры

Процедура КоманднаяПанельПереходКДокументамОткрытьОСВ(Контрагент, ПредыдущаяФорма) Экспорт
    НазваниеОтчета = "ОборотноСальдоваяВедомостьПоСчетуХозрасчетный";   
    ОткрытьОтчет(НазваниеОтчета, Контрагент, ПредыдущаяФорма);
КонецПроцедуры

Процедура КоманднаяПанельПереходКДокументамОткрытьКарточкуСчета(Контрагент, ПредыдущаяФорма) Экспорт
    НазваниеОтчета = "КарточкаСчетаХозрасчетный";  
    ОткрытьОтчет(НазваниеОтчета, Контрагент, ПредыдущаяФорма);
КонецПроцедуры

Процедура ОткрытьПлатежки(НазваниеПлатежки, Контрагент, ПредыдущаяФорма)
    Если НазваниеПлатежки = "ПлатежноеПоручениеИсходящее" Тогда
    Запрос = Новый Запрос;       
    Запрос.Текст = "ВЫБРАТЬ        
    |   ПлатежноеПоручениеИсходящее.Ссылка        
    |ИЗ        
    |   Документ.ПлатежноеПоручениеИсходящее КАК ПлатежноеПоручениеИсходящее       
    |ГДЕ        
    |   (ПлатежноеПоручениеИсходящее.Контрагент = &Контрагент       
    |           ИЛИ ПлатежноеПоручениеИсходящее.КонтрагентДолжник = &Контрагент)";
    Запрос.УстановитьПараметр("Контрагент", Контрагент);
    Результат = Запрос.Выполнить();        
    Выборка = Результат.Выбрать();
    СЗ = Новый СписокЗначений;        
    Пока Выборка.Следующий() Цикл            
       СЗ.Добавить(Выборка.Ссылка);        
    КонецЦикла;
    ФормаСписка = Документы.ПлатежноеПоручениеИсходящее.ПолучитьФормуСписка(,ПредыдущаяФорма);        
    ОтборСписка     = ФормаСписка.ДокументСписок.Отбор;        
    ЭлементОтбора   = ОтборСписка.Ссылка;
    ЭлементОтбора.Использование     = Истина;        
    ЭлементОтбора.ВидСравнения      = ВидСравнения.ВСписке;    
    ЭлементОтбора.Значение          = СЗ;
    Если ФормаСписка.Открыта() Тогда           
      ФормаСписка.Активизировать();        
    Иначе            
      ФормаСписка.Открыть();        
    КонецЕсли;
    Иначе
       ФормаСписка     = Документы[НазваниеПлатежки].ПолучитьФормуСписка(,ПредыдущаяФорма);        
       ОтборСписка     = ФормаСписка.ДокументСписок.Отбор;        
       ЭлементОтбора   = ОтборСписка.Контрагент;
       ЭлементОтбора.Использование     = Истина;        
       ЭлементОтбора.ВидСравнения      = ВидСравнения.Равно;       
       ЭлементОтбора.Значение          = Контрагент;
       Если ФормаСписка.Открыта() Тогда          
           ФормаСписка.Активизировать();       
       Иначе           
           ФормаСписка.Открыть();    
       КонецЕсли;
    КонецЕсли;
КонецПроцедуры

Процедура КоманднаяПанельПереходКДокументамОткрытьВходящиеПлатежки(Контрагент, ПредыдущаяФорма) Экспорт
    НазваниеПлатежки = "ПлатежноеПоручениеВходящее";  
    ОткрытьПлатежки(НазваниеПлатежки, Контрагент, ПредыдущаяФорма);
КонецПроцедуры

ПроцедураКоманднаяПанельПереходКДокументамОткрытьИсходящиеПлатежки(Контрагент,ПредыдущаяФорма) Экспорт
    НазваниеПлатежки = "ПлатежноеПоручениеИсходящее";   
    ОткрытьПлатежки(НазваниеПлатежки, Контрагент, ПредыдущаяФорма);
КонецПроцедуры

ПроцедураКоманднаяПанельПереходКДокументамОткрытьСправочникКонтрагенты(Контрагент,ПредыдущаяФорма)  Экспорт
    ФормаЭлемента = Контрагент.ПолучитьФорму("ФормаЭлемента", ПредыдущаяФорма);
    Если ФормаЭлемента.Открыта() Тогда        
       ФормаЭлемента.Активизировать();   
    Иначе        
       ФормаЭлемента.Открыть();    
    КонецЕсли;
КонецПроцедуры

ПроцедураКоманднаяПанельПереходКДокументамОткрытьРеестрСвидетельств(Контрагент, ПредыдущаяФорма) Экспорт
    ФормаСписка     = РегистрыСведений.РеестрЧленовПартнерства.ПолучитьФормуСписка(,ПредыдущаяФорма);   
    ОтборСписка     = ФормаСписка.РегистрСведенийСписок.Отбор;    
    ЭлементОтбора   = ОтборСписка.Контрагент;
    ЭлементОтбора.Использование     = Истина;    
    ЭлементОтбора.ВидСравнения      = ВидСравнения.Равно;   
    ЭлементОтбора.Значение          = Контрагент;
    Если ФормаСписка.Открыта() Тогда       
        ФормаСписка.Активизировать();   
    Иначе        
        ФормаСписка.Открыть();   
    КонецЕсли;
КонецПроцедуры

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

Процедура КоманднаяПанельПереходКДокументамОткрытьСписокСчетов(Контрагент, ПредыдущаяФорма) Экспорт
    Форма = ЖурналыДокументов.ЖурналСчетов.ПолучитьФорму(,ПредыдущаяФорма);   
    ОтборСписка     = Форма.ЖурналДокументовСписок.Отбор;    
    ЭлементОтбора   = ОтборСписка.Контрагент;
    ЭлементОтбора.Использование     = Истина;   
    ЭлементОтбора.ВидСравнения      = ВидСравнения.Равно;  
    ЭлементОтбора.Значение          = Контрагент;
    Если Форма.Открыта() Тогда       
       Форма.Активизировать();    
    Иначе       
       Форма.Открыть(); 
    КонецЕсли;
КонецПроцедуры

Процедура КоманднаяПанельПереходКДокументамНазад(ЭтаФорма) Экспорт
    ПредыдущаяФорма = ЭтаФорма.ВладелецФормы;   
    Если ТипЗнч(ПредыдущаяФорма) = Тип("Форма") И ПредыдущаяФорма <> Неопределено Тогда        
       ПредыдущаяФорма.Открыть();       
       ЭтаФорма.Закрыть();    
    КонецЕсли;
КонецПроцедуры
//быстрый переход к другим документам }


 

     Из моих наблюдений: типовое контекстное меню в формах списков практически не используется. Контекстное меню, доработанное под задачи Заказчика – используется на 100%. Переход между формами при использовании контекстного меню происходит в два клика (правая, затем левая кнопки мыши) и за две секунды. Отличный результат!

 

2. Использование статистики обращения в базе к контрагентам

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

 Обращения к контрагентам

Рис. 7. Регистр сведений "Статистика обращений".

 

Процедура КонтрагентПриИзменении(Элемент)
     Если ЗначениеЗаполнено(Контрагент) Тогда
        ОтборПоКонтрагенту = ЖурналДокументовСписок.Отбор.Контрагент;        
        ОтборПоКонтрагенту.Установить(Контрагент);
        МодульПро.ЗафиксироватьОбращениеККонтрагенту(Контрагент);
    КонецЕсли;
КонецПроцедуры

Процедура КонтрагентОкончаниеВводаТекста(Элемент, Текст, Значение, СтандартнаяОбработка)    
    МодульПро.КонтрагентОкончаниеВводаТекста(Элемент, Текст, Значение, СтандартнаяОбработка);
КонецПроцедуры

 


Процедуры общего модуля представлены ниже.

 

//оптимизация работы - упорядочивание списка контрагентов в поле ввода быстрого поиска
Процедура ЗафиксироватьОбращениеККонтрагенту(Контрагент) Экспорт
    НЗ = РегистрыСведений.ОбращенияККонтрагенту.СоздатьНаборЗаписей(); 
    НЗ.Отбор.Контрагент.Установить(Контрагент); 
    НЗ.Отбор.Период.Установить(ТекущаяДата()); 
    НЗ.Прочитать();
    Запись = ?(НЗ.Количество()=1, НЗ[0], НЗ.Добавить()); 
    Запись.Период = ТекущаяДата(); 
    Запись.Контрагент = Контрагент; 
    Запись.КоличествоОбращений = Запись.КоличествоОбращений + 1;
    НЗ.Записать();
КонецПроцедуры

Процедура ОбнулитьСтатистикуОбращенийККонтрагентам() Экспорт
    Запрос = Новый Запрос; 
    Запрос.Текст = "ВЫБРАТЬ 
    | ОбращенияККонтрагенту.Период 
    |ИЗ 
    | РегистрСведений.ОбращенияККонтрагенту КАК ОбращенияККонтрагенту 
    |ГДЕ 
    | ОбращенияККонтрагенту.Период <> &Период";
    Запрос.УстановитьПараметр("Период", НачалоДня(ТекущаяДата()));
    Результат = Запрос.Выполнить(); 
    Выборка = Результат.Выбрать();
    Пока Выборка.Следующий() Цикл
       НЗ = РегистрыСведений.ОбращенияККонтрагенту.СоздатьНаборЗаписей(); 
       НЗ.Отбор.Период.Установить(Выборка.Период); 
       НЗ.Записать();
    КонецЦикла;
КонецПроцедуры

 


  Обнуление статистики происходит при завершении работы с программой пользователя с Ролью «ОбнулятьСтатистикуОбращений». Из трех бухгалтеров такую роль имеют любые два бухгалтера из соображений, что в отпуск они уходят по очереди и по одному.
    В формах, где происходит выбор контрагента, переопределено событие ОкончаниеВводаТекста: в выпадающем списке контрагенты упорядочиваются по количеству обращений – как правило, первым в списке появляется контрагент, который только что был выбран в другой форме. Так как в данном списке в названии контрагента отображается город и фамилия руководителя, то в выпадающем списке контрагент определяется однозначно (рис.8 и ниже код программы).

Подбор контрагентов

Рис. 8. Поле быстрого поиска контрагента (быстрый отбор по контрагенту).

 

Процедура КонтрагентОкончаниеВводаТекста(Элемент, Текст, Значение, СтандартнаяОбработка) 
   МодульПро.КонтрагентОкончаниеВводаТекста(Элемент, Текст, Значение, СтандартнаяОбработка);
КонецПроцедуры

 

Процедура общего модуля представлена ниже.

 

Процедура КонтрагентОкончаниеВводаТекста(Элемент, Текст, Значение, СтандартнаяОбработка) Экспорт
    СтандартнаяОбработка = Ложь;
    Запрос = Новый Запрос;    
    Запрос.Текст = "ВЫБРАТЬ РАЗЛИЧНЫЕ    
    |   Контрагенты.Ссылка КАК Ссылка,    
    |   Контрагенты.Наименование,    
    |   Контрагенты.ИНН,    
    |   Контрагенты.ПометкаУдаления,   
    |   ЕСТЬNULL(СтатистикаОбращений.КоличествоОбращений, 0) КАК КолвоОбращений    
    |ИЗ    
    |   Справочник.Контрагенты КАК Контрагенты    
    |       ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ    
    |           ОбращенияККонтрагентуСрезПоследних.Контрагент КАК Контрагент,    
    |           ОбращенияККонтрагентуСрезПоследних.КоличествоОбращений КАК КоличествоОбращений    
    |       ИЗ    
    |           РегистрСведений.ОбращенияККонтрагенту.СрезПоследних КАК ОбращенияККонтрагентуСрезПоследних) КАК СтатистикаОбращений    
    |       ПО Контрагенты.Ссылка = СтатистикаОбращений.Контрагент    
    |ГДЕ   
    |   (Контрагенты.Наименование ПОДОБНО ""%"" + &Текст + ""%""   
    |           ИЛИ Контрагенты.ИНН ПОДОБНО ""%"" + &Текст + ""%"")   
    |   И Контрагенты.ЭтоГруппа = ЛОЖЬ    
    |   И Контрагенты.ПометкаУдаления = ЛОЖЬ   
    |   
    |УПОРЯДОЧИТЬ ПО    
    |   КолвоОбращений УБЫВ,   
    |   Ссылка   
    |АВТОУПОРЯДОЧИВАНИЕ";
    Запрос.УстановитьПараметр("Текст", Текст);
    Результат = Запрос.Выполнить();    
    Выборка = Результат.Выбрать();
    Если Выборка.Количество()=1 И Выборка.Следующий() Тогда        
       Значение = Выборка.Ссылка;        
       Возврат;    
    КонецЕсли;
    Значение = Новый СписокЗначений;
    Если Выборка.Количество() >= 50 Тогда //выгрузим первые 49 организаций согласно статистики обращений и сообщим об этом пользователю
        Значение.Добавить(Справочники.Контрагенты.ПустаяСсылка(), " ... НАЙДЕНО  БОЛЕЕ  50  ЭЛЕМЕНТОВ!  ЗАДАЙТЕ  ДРУГУЮ  СТРОКУ  ПОИСКА ...");
        Колво = 1;
        Пока Выборка.Следующий() И Колво < 50 Цикл
            Адрес = ПолучитьАдресИРуководителя(Выборка.Ссылка);
            Значение.Добавить(Выборка.Ссылка, "" + ВРЕГ(СокрЛП(Выборка.Наименование)) + ", ИНН " + Выборка.ИНН + "   "                                
            + Адрес, Выборка.ПометкаУдаления);
            Колво = Колво + 1;
        КонецЦикла;
    Иначе
        Пока Выборка.Следующий() Цикл
            Адрес = ПолучитьАдресИРуководителя(Выборка.Ссылка);
            Значение.Добавить(Выборка.Ссылка, "" + ВРЕГ(СокрЛП(Выборка.Наименование)) + ", ИНН " + Выборка.ИНН + "   "                                
            + Адрес, Выборка.ПометкаУдаления);
        КонецЦикла;
    КонецЕсли;
КонецПроцедуры

 

 

   После внедрения статистики обращения подбор контрагента в формах списков и отчетах ускорился с 20 секунд до 3 секунд. Отличный результат!

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

Всем всего доброго и успехов в работе!

Центр автоматизации, г. Казань


См. также:

Как эффективно использовать Инфостарт NEW!

Список реализаций + структура подчиненности + реестр документов SALE'1sm

Список заказов поставщикам + структура подчиненности SALE'1sm

Список заказов покупателей + структура подчиненности SALE'1sm

Договоры для 1с-ника ТОП-скачиваний

Сетка расписания (Планировщик) нестанДАрт

Два механизма, которые ускорили работу бухгалтеров в 1С нестанДАрт

Мини-CRM для УТ 10.3

Расчет банковских (рабочих) дней нестанДАрт

Шаблоны кода в режиме 1С:Предприятие SALE'1sm

Доработка конфигурации Конвертация Данных

Планирование платежей. Прогнозирование прибылей и убытков

Ввод показателей план-факта БП 3.0 Know-how

Инвентаризация личного опыта Для новичков 1С

Большие запросы: взгляд на проблему нестанДАрт

Технология создания коммерческих разработок Know-how

Андроид-решение для создания заказов в 1С Know-how + нестанДАрт

Отчет Остатки и цены

Печать ценников с одной и двумя ценами 55х40, 100х60, 140х200

Загрузка данных о розничных продажах из магазинов Intimissimi (Интимиссими) и Calzedonia (Кальцедония)

Доработки обмена "УТ 10.3 - интернет-магазина Shop-Script"

Специальные предложения

Вознаграждение за ответ
Показать полностью
Комментарии
Избранное Подписка Сортировка: Древо
1. Antel 2 13.06.15 19:12 Сейчас в теме
Увидел надписи в "капсе" на картинках и дальше смотреть не стал.

П.С. бухгалтера такие тупые что прочитать без капса не смогут
корум; sergelemon; webester; +3 3 Ответить
2. vasyak319 137 13.06.15 20:30 Сейчас в теме
(1) Antel, чувство прекрасного у автора, конечно, своеобразное, но идеи мне понравились. Не понял только, WTF "обнуление статистики при завершении работы пользователя с ролью".
17. nick_krsk 16 25.06.15 13:08 Сейчас в теме
(2) vasyak319, чтобы РС не засорять, видимо.
4. MaxDavid 123 13.06.15 23:26 Сейчас в теме
(1) Antel,
Увидел надписи в "капсе" на картинках и дальше смотреть не стал.
Полагаю, капс понадобился для быстрого визуального отличия стандартных пунктов контекстного меню от добавленных.
5. webester 31 14.06.15 06:24 Сейчас в теме
(4)То что буквы разные, этого недостаточно? В последнем скрине, в строке поиска, он что от чего отличает? Какими то 90ми пахнуло сразу и пенсионка в ДОСовском окне. Хардкодить ссылки в коде, типа "Организации.НайтиПоКоду("000000001")" тоже еще та глупость, обсудили уже сотню другую раз. Код не отформатирован и свален в кучу, считаю проявлением банальной лени и наплевательством выкладывание его в таком виде.
Hamsik; корум; u_n_k_n_o_w_n; Зеленоград; sergelemon; +5 1 Ответить
6. webester 31 14.06.15 06:27 Сейчас в теме
(5)А так это старый добрый Rustig, претензии сняты. не сразу узнал маэстро по почерку.
15. LineykaSBK 1 17.06.15 12:01 Сейчас в теме
(6) webester,
странное у Вас представление о претензиях. Сначала предъявил, потом не предъявил :+)
19. hromovanton 4 24.09.15 09:35 Сейчас в теме
(6) webester, А если бы это был не "старый добрый Rustig", то поливали бы дальше? !
u_n_k_n_o_w_n; +1 Ответить
3. script 214 13.06.15 23:19 Сейчас в теме
Предложу идею.

Задача
1. Необходимо в конфигурации Бухгалтерия 8.2. иметь журнал всех документов купателей, а именно: счета, реализации, акты сверок, налоговые, платежки, прих. кассовые ордера, и т.д.
2. Необходимо иметь возможность переходить в данный журнал из формы любого документа или из формы списка любого документа.
3. При переходе в полный журнал необходимо устанавливать отбор по контрагенту, который берется из документа источника.

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

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

7. Rustig 1333 14.06.15 08:20 Сейчас в теме +0.7 $m
(3)
2. Необходимо иметь возможность переходить в данный журнал из формы любого документа или из формы списка любого документа.

1) используя только типовые механизмы платформы (в том числе, критерий отбора) у вас не получится перейти в "полный журнал" из формы отчетов, не получится реализовать кнопку "Назад", да и вообще речь идет не о переходе в журнал документов, а о реализации "правой кнопки" мыши "удобно и практично", как это реализовано в Windows.
2) критерий отбора - отличный механизм, только ведь я написал что на данный момент измененная конфа не обновляется, что изложенные идеи возможно будут интересны для самописных и отраслевых решений, а вы пытаетесь "придумать", как это реализовать на типовой БП с минимальными потерями автоматического обновления. Раньше в конфигурациях не было возможности создавать собственные механизмы "Ввода на основании", не изменяя конфигурацию - сейчас это возможно реализовывать через "Внешние отчеты и обработки". Никто не пытается "натянуть" механизм "Ввода на основании" на старые механизмы платформы 8.2. Возможно, в будущем в платформе 8.3 будет реализован механизм, когда через "Внешние отчеты и обработки" мы сможем создавать свои командные панели или свои меню в этих панелях...
8. vasyak319 137 15.06.15 09:39 Сейчас в теме
(3) script, во-первых, чтобы добавить в формы документов БП2.0 (ну нету в природе конфигурации "Бухгалтерия 8.2") кнопку сами формы менять не нужно. Во-вторых, критерий отбора ДокументыПоДоговоруКонтрагента там уже есть. Не совсем то, но использовать для этих целей можно. В-третьих, вы долго будете в документах БП2.0 искать меню "Перейти" - нету его там.
10. script 214 15.06.15 13:57 Сейчас в теме
(8) vasyak319,
А у меня есть, потому что я в основном работаю с Бухгалтерей 8.2 ред 1.2 для Украины. Там везеде, в журналах, такая кнопка присутствует.
9. chmv 15.06.15 09:55 Сейчас в теме
11. gubanoff 46 15.06.15 14:08 Сейчас в теме
Статистика - это прекрасно. На самом деле делается быстро, а помочь может реально. Плюс программа превращается из калькулятора в подобие искусственного интеллекта, мне кажется, за этим будущее.
Ознакомился с публикациями автора, автор склонен к нестандартным решениям :)
goodron; Rustig; serg1983; Serg O.; pt_olga; +5 Ответить
12. DrAku1a 1308 17.06.15 04:06 Сейчас в теме
НЕ, РЕАЛЬНО, ЗАЧЕМ СТОЛЬКО "КЭПСА" ВЕЗДЕ? У ВАС НАСТОЛЬКО СЛЕПЫЕ БУХГАКТЕРЫ???

P.S. А идеи правильные и отличные!
14. Rustig 1333 17.06.15 09:15 Сейчас в теме
(12) женщины-бухгалтера мелкий, то есть стандартный шрифт, плохо видят, все в очках. Они не работают за ноутбуками, у которых экран по факту расположен ближе, чем отдельно стоящий монитор на столе. Стол широкий, монитор на краю стола, я лично сам не вижу - приходится приближать лицо к экрану. :(
Я в конфигурации изменил стандартный стиль - увеличил шрифт до 10, вы этого видимо не заметили, что журналы документов тоже крупнее, чем обычно, и отчеты крупнее. Также в конфигурации имеется служебная обработка, которая любой текст переводит в верхний регистр, потому что это часто приходилось делать...
Вообще что для вас "капса", для этих женщин-бухгалтеров нормальный размер шрифта.
Designer1C; +1 Ответить
16. tramontana 71 19.06.15 12:04 Сейчас в теме
(14) странное у вас представление о бухгалтерах. Прям сплошь слепые бабки, которые не знают, что монитор можно двигать.
13. Mantis 136 17.06.15 07:31 Сейчас в теме
Спасибо, идеи интересные.
18. fomix 26 25.06.15 14:52 Сейчас в теме
Плюсую, потому, что рад видеть в авторе разработчика, который не только о красоте кода заботится! Это, к сожалению, становится редкостью в наших рядах...
Оставьте свое сообщение

См. также

Сдача регламентированной отчетности из программ 1С Промо

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

от 1500 руб.

[СКД] Программное создание схемы компоновки данных

Статья Программист Стажер Нет файла v8 v8::СКД 1cv8.cf Бесплатно (free) Практика программирования

Сделаем отчет на СКД полностью программно, без использования макета "схема компоновки данных".

15.01.2020    6975    John_d    20       

Неиндексированные измерения регистров сведений. В помощь 1С:Эксперту

Инструменты и обработки Программист Внешняя обработка (ert,epf) v8 v8::УФ 1cv8.cf Абонемент ($m) Прочие инструменты разработчика

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

1 стартмани

07.01.2020    3010    12    Rustig    30       

Программы для исполнения 54-ФЗ Промо

С 01.02.2017 контрольно-кассовая техника должна отправлять электронные версии чеков оператору фискальных данных - правила установлены в 54-ФЗ ст.2 п.2. Инфостарт предлагает подборку программ, связанных с применением 54-ФЗ, ККТ и электронных чеков.

Потоковое сканирование в 1С Промо

Расширение позволяет в автоматическом режиме распознать документ по штрихкоду и прикрепить скан копию к нужному документу.

4000 руб.

Готовые переносы данных из различных конфигураций 1C Промо

Рекомендуем готовые решения для переноса данных из различных конфигураций 1C. C техподдержкой от разработчиков и гарантией от Инфостарт.

Агрегатные функции СКД, о которых мало кто знает

Статья Программист Нет файла v8 v8::СКД 1cv8.cf Бесплатно (free) Практика программирования

Пользуетесь ли Вы всеми возможными агрегатными функциями, которые предоставляет система компоновки данных? Если Вы используете только: СУММА, КОЛИЧЕСТВО, МИНИМУМ, МАКСИМУМ, СРЕДНЕЕ, то эта статья для Вас.

05.09.2019    23558    ids79    45       

Программы для исполнения 488-ФЗ: Маркировка товаров Промо

1 января 2019 года вступил в силу ФЗ от 25.12.2018 № 488-ФЗ о единой информационной системе маркировки товаров с использованием контрольных (идентификационных) знаков, который позволяет проследить движение товара от производителя до конечного потребителя. Инфостарт предлагает подборку программ, связанных с применением 488-ФЗ и маркировкой товаров.

Функции СКД: ВычислитьВыражение, ВычислитьВыражениеСГруппировкойМассив

Статья Программист Нет файла v8 v8::СКД 1cv8.cf Бесплатно (free) Практика программирования

Подробное описание и использование внутренних функций системы компоновки данных: Вычислить, ВычислитьВыражение, ВычислитьВыражениеСГруппировкойМассив, ВычислитьВыражениеСГруппировкойТаблицаЗначений.

08.08.2019    32220    ids79    36       

1C:Предприятие для программистов: Расчетные задачи (зарплата). Онлайн-интенсив с 01 по 17 июня 2020 г. Промо

Данный онлайн-курс предусматривает изучение механизмов платформы “1С:Предприятие”, которые предназначены для автоматизации периодических расчетов, а именно - для расчета зарплаты. Курс предназначен для тех, кто уже имеет определенные навыки конфигурирования и программирования в системе “1С:Предприятие”, а также для опытных пользователей прикладного решения “1С:Зарплата и управление персоналом” и прочих прикладных решений, в которых реализован функционал расчета зарплаты.

4900 рублей

СКД - использование расширений языка запросов, секция ХАРАКТЕРИСТИКИ

Статья Программист Нет файла v8 v8::СКД Бесплатно (free) Инструментарий разработчика Практика программирования

Автоматическое и не автоматическое заполнение полей компоновки данных. Использование расширений языка запросов для СКД «{…}», секция ВЫБРАТЬ, секция ГДЕ, параметры виртуальных таблиц. Автоматизированное использование дополнительных данных в запросе: секция ХАРАКТЕРИСТИКИ.

17.07.2019    19221    ids79    27       

"Меньше копипаста!", или как Вася универсальную процедуру писал

Статья Программист Стажер Нет файла v8 v8::СКД 1cv8.cf Бесплатно (free) Практика программирования Разработка

Программист Вася разбирает подход создания универсальных методов на примере программного вывода СКД.

04.07.2019    11977    SeiOkami    49       

Управление ИТ-проектами. Модуль 2: продвинутый онлайн-курс по классическим методам управления проектами. Вебинары проходят с 12 марта по 11 июня 2020 года. Промо

Продвинутый онлайн-курс по классическому управлению ИТ-проектами позволит слушателям освоить инструменты из PMBoK® и 1С:Технологии корпоративного внедрения и научиться их применять для проектов любого масштаба. Курс включает в себя 12 вебинаров и 12 видеолекции, разбор кейсов и рекомендации экспертов по проектам слушателей. Ведущая курса - Мария Темчина.

от 13000 рублей

Создание отчетов с помощью СКД - основные понятия и элементы

Статья Программист Нет файла v8 v8::СКД Бесплатно (free) Практика программирования Математика и алгоритмы

Основные принципы работы СКД. Понятия схемы компоновки и макета компоновки. Описание основных элементов схемы компоновки: наборы данных, поля, вычисляемые поля, ресурсы, параметры.

25.06.2019    31303    ids79    17       

Многопоточное ускорение однопользовательских нагрузок в 1С + Microsoft SQL Server 2017

Статья Программист Нет файла v8 v8::Запросы Бесплатно (free) Практика программирования Разработка

Взаимодействие с Microsoft SQL Server нередко вызывает трудности у 1С-ников, а потому интересны любые моменты, связанные с его использованием. О своем опыте работы с новым SQL Server 2017 участникам конференции Infostart-2018 рассказал директор ООО «Аналитика софт» Дмитрий Дудин.

11.06.2019    16750    dmurk    144       

Подборка программ для взаимодействия с ЕГАИС Промо

ЕГАИС (Единая государственная автоматизированная информационная система) - автоматизированная система, предназначенная для государственного контроля за объёмом производства и оборота этилового спирта, алкогольной и спиртосодержащей продукции. Инфостарт рекомендует подборку проверенных решений для взаимодействия с системой.

Регистры накопления. Структура хранения в базе данных

Статья Программист Нет файла v8 1cv8.cf Бесплатно (free) Практика программирования Разработка

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

16.05.2019    26852    YPermitin    27       

Доработки УТ 10.3, улучшающие работу пользователей

Статья Программист Внешняя обработка (ert,epf) v8 v8::ОУ УТ10 УУ Оптовая торговля Абонемент ($m) Обработка документов Рабочее место

Как показать прибыль по заказу, как показать прикрепленные файлы к документам - когда документов по заказу много, как показать расчет процентов по менеджерам - и все в одном окне УТ 10.3.

4 стартмани

26.04.2019    5564    7    Rustig    12       

​​​​​​​CorelDRAW Graphics Suite 2019 Промо

CorelDRAW – пакет профессиональных инструментов для редактирования фотографий, разработки дизайна, создания макетов страниц и векторных иллюстраций

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

Статья Программист Нет файла v8 Бесплатно (free) Практика программирования Разработка

Что делать, если документы нужно выгружать не все подряд, а по какому-то фильтру: статусу, дате, набору условий... А что если он соответствовал этим условиям, а потом перестал? А если потом опять начал? Такие ситуации заставили попотеть не одного программиста.

25.04.2019    9203    m-rv    2       

Как прикрутить ГУИД к регистру сведений

Статья Программист Нет файла v8 Бесплатно (free) Практика программирования Перенос данных из 1C8 в 1C8 Разработка

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

16.04.2019    12315    m-rv    16       

Онлайн-курс "Подготовка к экзамену 1С:Эксперт и 1С:Профессионал по технологическим вопросам" с 7 по 24 апреля 2020 г. Промо

На курсе вы получите практические навыки решения задач производительности 1С, в том числе характерных для высоконагруженных информационных систем (более 1000 пользователей). Подготовка к экзамену – только одна из составляющих курса. 70% слушателей приходят за знаниями, которые позволят расти и зарабатывать, делать сложные задачи на крупных проектах.

16450 рублей

Новый раздел на Инфостарте - Electronic Software Distribution Промо

Инфостарт напоминает: на нашем сайте можно купить не только ПО, связанное с 1С. В нашем арсенале – ESD-лицензии на ПО от ведущих вендоров: Microsoft, Kaspersky, ESET, Dr.Web, Аскон и другие.

  • Низкие цены, без скрытых платежей и наценок
  • Оперативная отгрузка
  • Возможность оплаты с личного счета (кешбек, обмен стартмани на рубли и т.п.)
  • Покупки идут в накопления для получения скидочных карт лояльности Silver (5%) и Gold (10%)

О расширениях замолвите слово...

Статья Программист Стажер Нет файла v8 Бесплатно (free) Практика программирования Разработка

О чём стоит задуматься при принятии решения о создании расширения конфигурации…

07.04.2019    23119    ellavs    125       

SALE! 15%

Как свернуть базу УТ 10.3

Инструменты и обработки Программист Внешняя обработка (ert,epf) v8 v8::ОУ УТ10 Россия УУ Платные (руб) Свертка базы

Как свернуть УТ 10.3. Цель свертки - свернуть остатки по товарам и по взаиморасчетам с контрагентами.

1600 руб.

04.04.2019    9737    56    4       

Голосование за доклады на INFOSTART MEETUP Kazan - до 25 февраля. Промо

Выбирайте и голосуйте за самые интересные доклады! Лучшие из лучших попадут в окончательную программу казанского митапа. Оставить свой голос можно до 25 февраля 2020 года.

Git-репозитории для 1С-кода (опыт использования при небольших проектах)

Статья Программист Стажер Нет файла v8 Windows Бесплатно (free) Практика программирования Разработка

Инструкции по взаимодействию с Git-репозиторием, которые писались для тех наших программистов, которые вообще никогда не работали с Git (руководства в духе "Как получить код из git-репозитория?", "Как отправить код в git-репозиторий")...

28.03.2019    18353    ellavs    83       

Сравнение запросов

Инструменты и обработки Программист Внешняя обработка (ert,epf) v8 v8::Запросы 1cv8.cf Абонемент ($m) Инструментарий разработчика

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

2 стартмани

16.03.2019    6920    12    Rustig    31