helpf.pro
Регистрация

v8: Автоматически заполнение поле ввода

Ermak
24.11.2015 19:00Прочитано: 2891

Добрый вечер! Встала такая задача, есть обработка в который выбираем Услугу из Справочника.Номеклатура после этого идет действие с этой услугой. Услуг около 10 штук, нужно в каждый раз выбирать услугу, хотелось сделать автоматический, как запускать автоматически обработку это понятно и можно прописать при открытии какую нибудь одну услугу, которая будет подставляться при открытии, а как бы сделать чтобы услугу сами автоматически ставились? Например: открылась обработка с услугой "Техобслуживание", прошло действие, обработка закрылась. Сразу же открылась обработка с услугой "Ремонт", прошло действие, обработка закрылась и так далее. Услугу которые нужны можно прописать в когда. Подскажите как можно сделать так?

Yandex
Возможно, вас также заинтересует
Реклама на портале
E_Migachev
24.11.2015 20:40Ответ № 1

не совсем понятно, что именно  нужно, но как понимаю - можно написать алгоритм последовательности услуг. Не понятна цель!? может тут вообще лучше использовать бизнесц процесс с задачами

Ermak
25.11.2015 08:44Ответ № 2

Цель обработки выгрузка данных по услугам в автоматическом режиме. Как с помощью бизнес процессом и задачей?

IBReiter
25.11.2015 10:24Ответ № 3

В форме обработки:

СписокУслуг = Новый Массив;

СписокУслуг.Добавить(Услуга01);

СписокУслуг.Добавить(Услуга02);

------------------------------------------

СписокУслуг.Добавить(Услуга10);

Для каждого Услуга Из СписокУслуг Цикл

Ваши действия с этой услугой

КонецЦикла;

Ermak
25.11.2015 12:44Ответ № 4

а как мне в запрос поставить?

Вот у меня такой запрос

Код 1C v 8.х
 Функция ПолучитьОстатки()

Запрос = Новый Запрос;
ТекстЗапроса = "ВЫБРАТЬ
| ЛицевыеСчетаАбонентов.Ссылка КАК ЛицевойСчет,
| СУММА(IsNull(ИсточникДанных.СуммаОстаток,0)) КАК СуммаОстаток
| ИЗ
| Справочник.ЛицевыеСчетаАбонентов КАК ЛицевыеСчетаАбонентов
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.НачислениеКвартПлатыЛС.Остатки(&Дата,ПереченьУсловий) КАК ИсточникДанных
| ПО (ИсточникДанных.ЛицевойСчет = ЛицевыеСчетаАбонентов.Ссылка)
|УсловияПоЛС
|СГРУППИРОВАТЬ ПО
| ЛицевыеСчетаАбонентов.Ссылка
|АВТОУПОРЯДОЧИВАНИЕ";
//Параметры запроса
Запрос.УстановитьПараметр("Дата",КонецДня(Дата));// Дата
Запрос.УстановитьПараметр("Услуга",Услуга);
Запрос.УстановитьПараметр("Регион",Регион);
Условие1="";
ТекстОтбора="";
Условие2="";
Если ЗначениеЗаполнено(Регион) Тогда
Условие1="ЛицевойСчет.Регион=&Регион";
ТекстОтбора="Регион="+Регион;
Условие2=" ГДЕ ЛицевыеСчетаАбонентов.Регион=&Регион";
КонецЕсли;
Если ЗначениеЗаполнено(Услуга) Тогда
Если НЕ Условие1="" Тогда
Условие1=Условие1+" И ";
ТекстОтбора=ТекстОтбора+"; ";
Конецесли;
Условие1=Условие1+"услуги=&Услуга"; 
ТекстОтбора=ТекстОтбора+"Услуга="+Услуга;
КонецЕсли;
Если Переключатель1=2 Тогда
Если НЕ Условие1="" Тогда
Условие1=Условие1+" И ";
ТекстОтбора=ТекстОтбора+"; ";
Условие2=Условие2+" И ";
Иначе
Условие2=" ГДЕ ";
Конецесли;  
Условие1=Условие1+"ЛицевойСчет.ЭтоОрганизация";
Условие2=Условие2+"ЛицевыеСчетаАбонентов.ЭтоОрганизация";   
ТекстОтбора=ТекстОтбора+"По организациям";
ИначеЕсли Переключатель1=3 Тогда
Если НЕ Условие1="" Тогда
Условие1=Условие1+" И ";
ТекстОтбора=ТекстОтбора+"; ";
Условие2=Условие2+" И ";
Иначе
Условие2=" ГДЕ ";
Конецесли; 
Условие1=Условие1+"(НЕ ЛицевойСчет.ЭтоОрганизация)";
Условие2=Условие2+"(НЕ ЛицевыеСчетаАбонентов.ЭтоОрганизация)";  
ТекстОтбора=ТекстОтбора+"По населению";
КонецЕсли;
Если НЕ Условие1="" Тогда
ТекстОтбора=ТекстОтбора+"; ";
Условие2=Условие2+" И ";
Конецесли;
Условие2=Условие2+"ЛицевыеСчетаАбонентов.ЗакрытыйЛС=Ложь";
Если НЕ Условие1="" Тогда
ТекстОтбора=ТекстОтбора+"; ";
Условие2=Условие2+" И ";
Конецесли;
Условие2=Условие2+"ЛицевыеСчетаАбонентов.ПометкаУдаления=Ложь";

ТекстЗапроса=СтрЗаменить(ТекстЗапроса,"ПереченьУсловий",Условие1);
ТекстЗапроса=СтрЗаменить(ТекстЗапроса,"УсловияПоЛС",Условие2);
Запрос.Текст=ТекстЗапроса;

Возврат Запрос.Выполнить();
КонецФункции

Как мне добавить массив услуга, если имеет тип Справочник.Номенклатура

IBReiter
25.11.2015 13:18Ответ № 5

ПолучитьОстатки() где вызывается?

Ermak
25.11.2015 14:15Ответ № 6
Код 1C v 8.х
 Если СокрЛП(ИмяФайлаДанных)="" Тогда
Предупреждение("Не указан файл данных");
Возврат;
КонецЕсли;
Текст1 = Новый ТекстовыйДокумент;
Сумма = 0;
Кол=0;
Текст1.ДобавитьСтроку("#TYPE" + " " + "7");
Текст1.ДобавитьСтроку("#SERVICE" + " " + Услуга.КодУслугиСбер);
Текст1.ДобавитьСтроку("#NOTE");
Состояние("Идет процесс получения остатков по ЛС");
Результат=ПолучитьОстатки();
СпособВыборки = ОбходРезультатаЗапроса.Прямой; 
Выборка=Результат.Выбрать(СпособВыборки);
Пока Выборка.Следующий() Цикл
Кол=Кол+1;
ЛицСчет=Выборка.ЛицевойСчет;
ЛС=Прав(СтрЗаменить(СокрЛП(ЛицСчет.Код),Символы.НПП,""),6);
ФАМ1=СокрЛП(ЛицСчет.ОтветственныйКвартиросъемщик.Фамилия);
ФАМ = СтрЗаменить(ФАМ1, ";", "_");
ИМ=СокрЛП(ЛицСчет.ОтветственныйКвартиросъемщик.Имя);
ОТЧ=СокрЛП(ЛицСчет.ОтветственныйКвартиросъемщик.Отчество);
УЛ=СокрЛП(ЛицСчет.НаселенныйПункт)+","+СокрЛП(ЛицСчет.Улица);
ДОМ=СокрЛП(ЛицСчет.Дом);
Попытка
ПостфиксДома=Число(ЛицСчет.Корпус);
КОРП=ПостфиксДома;
Исключение
ПостфиксДома=СокрЛП(ЛицСчет.Корпус);
БУК=ПостфиксДома;
КонецПопытки;
КВ=СокрЛП(ЛицСчет.Квартира);
КОМ=ЛицСчет.НомерКомнаты;
САЛ=Выборка.СуммаОстаток;
САЛФ = Формат(САЛ, "ЧРД='.'; ЧН='0.00'; ЧДЦ=2; ЧГ=0");
Сумма = Сумма + САЛФ;
СУМ = Формат(Сумма, "ЧРД='.'; ЧН='0.00'; ЧДЦ=2; ЧГ=0");
IBReiter
25.11.2015 14:20Ответ № 7

Перед строкой Результат=ПолучитьОстатки(); сформируйте массив и начинайте цикл, все что с Результат=ПолучитьОстатки(); и скорее всего до КонецЕсли; - в тело цикла

Ermak
25.11.2015 15:25Ответ № 8

Зависает все

Вот что получилось

Код 1C v 8.х
 Функция ПолучитьОстатки() 	
Запрос = Новый Запрос;
ТекстЗапроса = "ВЫБРАТЬ
| ЛицевыеСчетаАбонентов.Ссылка КАК ЛицевойСчет,
| СУММА(IsNull(ИсточникДанных.СуммаОстаток,0)) КАК СуммаОстаток
| ИЗ
| Справочник.ЛицевыеСчетаАбонентов КАК ЛицевыеСчетаАбонентов
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.НачислениеКвартПлатыЛС.Остатки(&Дата,ПереченьУсловий) КАК ИсточникДанных
| ПО (ИсточникДанных.ЛицевойСчет = ЛицевыеСчетаАбонентов.Ссылка)
|УсловияПоЛС
|СГРУППИРОВАТЬ ПО
| ЛицевыеСчетаАбонентов.Ссылка
|АВТОУПОРЯДОЧИВАНИЕ";


Запрос.УстановитьПараметр("Дата",КонецДня(Дата));// Дата
Запрос.УстановитьПараметр("Услуга",Услуга);
Запрос.УстановитьПараметр("Регион",Регион);

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


Процедура КнопкаВыполнитьНажатие(Кнопка)

Если СокрЛП(ИмяФайлаДанных)="" Тогда
Предупреждение("Не указан файл данных");
Возврат;
КонецЕсли;
Текст1 = Новый ТекстовыйДокумент;
Сумма = 0;
Кол=0;
Текст1.ДобавитьСтроку("#TYPE" + " " + "7");
Текст1.ДобавитьСтроку("#SERVICE" + " " + Услуга.КодУслугиСбер);
Текст1.ДобавитьСтроку("#NOTE");
Состояние("Идет процесс получения остатков по ЛС");

СписокРегион = Новый Массив;
    СписокРегион.Добавить("Петровски ");
    СписокРегион.Добавить("Ивановский");
   Для каждого Регион Из СписокРегион Цикл

Результат=ПолучитьОстатки();
СпособВыборки = ОбходРезультатаЗапроса.Прямой; 
Выборка=Результат.Выбрать(СпособВыборки);
Пока Выборка.Следующий() Цикл
Кол=Кол+1;
ЛицСчет=Выборка.ЛицевойСчет;
ЛС=Прав(СтрЗаменить(СокрЛП(ЛицСчет.Код),Символы.НПП,""),6);
ФАМ1=СокрЛП(ЛицСчет.ОтветственныйКвартиросъемщик.Фамилия);
ФАМ = СтрЗаменить(ФАМ1, ";", "_");
ИМ=СокрЛП(ЛицСчет.ОтветственныйКвартиросъемщик.Имя);
ОТЧ=СокрЛП(ЛицСчет.ОтветственныйКвартиросъемщик.Отчество);
УЛ=СокрЛП(ЛицСчет.НаселенныйПункт)+","+СокрЛП(ЛицСчет.Улица);
ДОМ=СокрЛП(ЛицСчет.Дом);
Попытка
ПостфиксДома=Число(ЛицСчет.Корпус);
КОРП=ПостфиксДома;
Исключение
ПостфиксДома=СокрЛП(ЛицСчет.Корпус);
БУК=ПостфиксДома;
КонецПопытки;
КВ=СокрЛП(ЛицСчет.Квартира);
КОМ=ЛицСчет.НомерКомнаты;
САЛ=Выборка.СуммаОстаток;
САЛФ = Формат(САЛ, "ЧРД='.'; ЧН='0.00'; ЧДЦ=2; ЧГ=0");
Сумма = Сумма + САЛФ;
СУМ = Формат(Сумма, "ЧРД='.'; ЧН='0.00'; ЧДЦ=2; ЧГ=0");

Если НЕ ЗначениеЗаполнено(ИМ) и НЕ ЗначениеЗаполнено(ОТЧ) Тогда
ФИО1 = ФАМ;
ИначеЕсли НЕ ЗначениеЗаполнено(ОТЧ) Тогда
ФИО1 = ФАМ + " " + ИМ;
Иначе
ФИО1 = ФАМ + " " + ИМ + " " + ОТЧ;
КонецЕсли;
Если НЕ ЗначениеЗаполнено(ФАМ) и НЕ ЗначениеЗаполнено(ИМ) и НЕ ЗначениеЗаполнено(ОТЧ) Тогда
ФИО1 = ЛС;
Иначе
КонецЕсли;
КодРайона=Регион.КодСбер;
Текст1.ДобавитьСтроку(ФИО1 + ";" + УЛ1 + ЛС + "," + КодРайона + ";" + ЛС + "/" + КодРайона 
+ ";" + САЛФ + ";" + ";" + ";" + ";" + "100501" + ":" + ЛС + ":" + УЛ + "," + ДОМ + БУК + ПР2 + "," + КВ + ПР + ":" + ":" + "1" + ":" + "ГАЗ" + ":" + ":" + ":" + ":" + ":" + ":" + ":" + ":" + ":" + ":" + ":" + ":" + ":" + ":" + ":" + ":" + ":" + ":" + ":" + ":");
КонецЦикла;
Состояние("Идет запись остатков в файл: " + Кол);
КонецЦикла;
Текст1.ВставитьСтроку(1, "#FILESUM" + " " + СУМ);
Текст1.Записать(ИмяФайлаДанных, "windows-1251");
Предупреждение("Выгрузка остатков в файл данных завершена - "+Кол+Символы.ПС+"Проверьте текст на читаемость!");
Текст1.Показать(ИмяФайлаДанных, "windows-1251");
КонецПроцедуры
IBReiter
26.11.2015 08:32Ответ № 9

Т.е. на каждом в отдельности регионе не зависало,  а на двух так повисло?

Посмотрите замером производительности, на каком моменте зависает, сразу все понятно станет

Ermak
26.11.2015 11:31Ответ № 10

Мне нужно чтобы 

Код 1C v 8.х
  СписокРегион.Добавить("Петровски");     
СписокРегион.Добавить("Ивановский");

Имели тип Справочник.Регион потому что в дальнейшем вытаскиваю оттуда данные

Код 1C v 8.х
 КодРайона=Регион.КодСбер;   
IBReiter
27.11.2015 10:15Ответ № 11

Регион туда и добавляйте значит, а не строку

Ermak
27.11.2015 10:58Ответ № 12

Покажите как сделать

Bell
27.11.2015 12:17Ответ № 13

Может сделать попроще. С

Сделать одную обработку на Все твои услуги. 

Получить все данные необходимые для расчетов по всем услугам. 

Затем расчитать. 

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

Ermak
27.11.2015 12:25Ответ № 14

Массив не стал использовать, стал вытаскивать из справочника, т.к мне нужно по всем значениям пройти

Код 1C v 8.х
 	Текст1 = Новый ТекстовыйДокумент;
Сумма = 0;
Кол=0;
Текст1.ДобавитьСтроку("#TYPE" + " " + "7");
Текст1.ДобавитьСтроку("#SERVICE" + " " + Услуга.КодУслугиСбер);
Текст1.ДобавитьСтроку("#NOTE");
Состояние("Идет процесс получения остатков по ЛС");

Спр=Справочники.Регионы.Выбрать();
Пока Спр.ПолучитьОбъект()<> 0 Цикл
Регион=Спр.Наименование;

Результат=ПолучитьОстатки();
СпособВыборки = ОбходРезультатаЗапроса.Прямой; 
Выборка=Результат.Выбрать(СпособВыборки);
Пока Выборка.Следующий() Цикл
Кол=Кол+1;

Выдает ошибку

{Форма.Форма.Форма(119)}: Ошибка при вызове метода контекста (ПолучитьОбъект)

Пока Спр.ПолучитьОбъект()<> 0 Цикл

по причине:

Элемент не выбран!

IBReiter
27.11.2015 13:32Ответ № 15

У вас Спр - это выборка, если сделать Выборка.Следующий(), тогда в выборке будет то что нужно.

Можно так:

Код 1C v 8.3
 

СписокРегион = Новый Массив;
СписокРегион.Добавить(Справочники.Регионы.НайтиПоНаименованию("Петровски ") );
СписокРегион.Добавить(Справочники.Регионы.НайтиПоНаименованию("Ивановский") );


Ermak
30.11.2015 12:38Ответ № 16

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

Код 1C v 8.х
 Процедура КнопкаВыполнитьНажатие(Кнопка)

Если СокрЛП(ИмяФайлаДанных)="" Тогда
Предупреждение("Не указан файл данных");
Возврат;
КонецЕсли;
Текст1 = Новый ТекстовыйДокумент;
Сумма = 0;
Кол=0;
Текст1.ДобавитьСтроку("#TYPE" + " " + "7");
Текст1.ДобавитьСтроку("#SERVICE" + " " + Услуга.КодУслугиСбер);
Текст1.ДобавитьСтроку("#NOTE");
Состояние("Идет процесс получения остатков по ЛС");

СписокРегион = Новый Массив;
СписокРегион.Добавить(Справочники.Регионы.НайтиПоНаименованию("Олонецкий район"));
СписокРегион.Добавить(Справочники.Регионы.НайтиПоНаименованию("Пряжинский район"));
Для каждого Регион Из СписокРегион Цикл

Результат=ПолучитьОстатки();
СпособВыборки = ОбходРезультатаЗапроса.Прямой; 
Выборка=Результат.Выбрать(СпособВыборки);
Пока Выборка.Следующий() Цикл
Кол=Кол+1;
ЛицСчет=Выборка.ЛицевойСчет;
ЛС=Прав(СтрЗаменить(СокрЛП(ЛицСчет.Код),Символы.НПП,""),6);
ФАМ1=СокрЛП(ЛицСчет.ОтветственныйКвартиросъемщик.Фамилия);
ФАМ = СтрЗаменить(ФАМ1, ";", "_");
ИМ=СокрЛП(ЛицСчет.ОтветственныйКвартиросъемщик.Имя);
ОТЧ=СокрЛП(ЛицСчет.ОтветственныйКвартиросъемщик.Отчество);
УЛ=СокрЛП(ЛицСчет.НаселенныйПункт)+","+СокрЛП(ЛицСчет.Улица);
ДОМ=СокрЛП(ЛицСчет.Дом);
Попытка
ПостфиксДома=Число(ЛицСчет.Корпус);
КОРП=ПостфиксДома;
Исключение
ПостфиксДома=СокрЛП(ЛицСчет.Корпус);
БУК=ПостфиксДома;
КонецПопытки;
КВ=СокрЛП(ЛицСчет.Квартира);
КОМ=ЛицСчет.НомерКомнаты;
САЛ=Выборка.СуммаОстаток;
САЛФ = Формат(САЛ, "ЧРД='.'; ЧН='0.00'; ЧДЦ=2; ЧГ=0");
Сумма = Сумма + САЛФ;
СУМ = Формат(Сумма, "ЧРД='.'; ЧН='0.00'; ЧДЦ=2; ЧГ=0");

Если НЕ ЗначениеЗаполнено(ИМ) и НЕ ЗначениеЗаполнено(ОТЧ) Тогда
ФИО1 = ФАМ;
ИначеЕсли НЕ ЗначениеЗаполнено(ОТЧ) Тогда
ФИО1 = ФАМ + " " + ИМ;
Иначе
ФИО1 = ФАМ + " " + ИМ + " " + ОТЧ;
КонецЕсли;
Если НЕ ЗначениеЗаполнено(ФАМ) и НЕ ЗначениеЗаполнено(ИМ) и НЕ ЗначениеЗаполнено(ОТЧ) Тогда
ФИО1 = ЛС;
Иначе
КонецЕсли;
КодРайона=Регион.КодСбер;
Текст1.ДобавитьСтроку(ФИО1 + ";" + УЛ1 + ЛС + "," + КодРайона + ";" + ЛС + "/" + КодРайона 
+ ";" + САЛФ + ";" + ";" + ";" + ";" + "100501" + ":" + ЛС + ":" + УЛ + "," + ДОМ + БУК + ПР2 + "," + КВ + ПР + ":" + ":" + "1" + ":" + "ГАЗ" + ":" + ":" + ":" + ":" + ":" + ":" + ":" + ":" + ":" + ":" + ":" + ":" + ":" + ":" + ":" + ":" + ":" + ":" + ":" + ":");
КонецЦикла;
Состояние("Идет запись остатков в файл: " + Кол);
КонецЦикла;
Текст1.ВставитьСтроку(1, "#FILESUM" + " " + СУМ);
Текст1.Записать(ИмяФайлаДанных, "windows-1251");
Предупреждение("Выгрузка остатков в файл данных завершена - "+Кол+Символы.ПС+"Проверьте текст на читаемость!");
Текст1.Показать(ИмяФайлаДанных, "windows-1251");
КонецПроцедуры
IBReiter
30.11.2015 12:49Ответ № 17

Внести в тело цикла создание и запись файла, ну и имена разные у файлов задать при записи

Ermak
01.12.2015 16:53Ответ № 18

Спасибо большое! Все получилось

Ermak
01.12.2015 16:53Ответ № 19
Вопрос закрыт!
Подсказка: Вы можете приложить к ответу файл или изображение щелкнув по значку или в редакторе.
Вы не можете отправить комментарий анонимно, пожалуйста войдите или зарегистрируйтесь.