Групповое изменение реквизитов + запрос

1. user872273 13.06.18 11:05 Сейчас в теме
Подскажите пожалуйста!
1с8.3 CRM 2.0

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

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

Получается комбинация запроса из отчета и группового изменения реквизитов ( стандартная обработка, далее "ГИР") Отчет написан и работает.

Но вот перевести его в обработку не получается. ( опыта нет и знаний)

Отчет делал сам, поэтому выглядит он неоптимизированно, но нужные функции выполняет.

Залез в ГИР , ничего не понял. Итак собственно сам код и вопрос:

Это код отчета. Он находит компании, с которыми давно не было событий и выводит их.
ВЫБРАТЬ РАЗЛИЧНЫЕ
	CRM_Событие.Ссылка,
	МАКСИМУМ(CRM_Событие.Дата) КАК Дата,
	CRM_Событие.Ответственный,
	CRM_Событие.Партнер,
	CRM_Событие.СостояниеСобытия,
	CRM_Событие.ДатаСоздания,
	Партнеры.ОсновнойМенеджер,
	CRM_Событие.ПометкаУдаления
ПОМЕСТИТЬ времтб
ИЗ
	Документ.CRM_Событие КАК CRM_Событие
		ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Партнеры КАК Партнеры
		ПО CRM_Событие.Партнер = Партнеры.Ссылка
			И CRM_Событие.ОрганизаторGApi = Партнеры.Ссылка
ГДЕ
	CRM_Событие.Дата <= &НачалоПериода
	И CRM_Событие.СостояниеСобытия = &СостояниеСобытия

СГРУППИРОВАТЬ ПО
	CRM_Событие.Ответственный,
	CRM_Событие.Партнер,
	CRM_Событие.Ссылка,
	CRM_Событие.СостояниеСобытия,
	CRM_Событие.ДатаСоздания,
	Партнеры.ОсновнойМенеджер
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
	времтб.Дата,
	времтб.Ответственный,
	времтб.Партнер
ИЗ
	времтб КАК времтб
Показать


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


Вот что в обработке:

&НаКлиенте
Процедура ОтвязатьЗабытых (Команда)
	СделатьНаСервере;
КонецПроцедуры

&НаСервере
Процедура СделатьНаСервере ()
    Запрос = Новый Запрос;
    Запрос.Текст = 
    //    "ВСТАВКА ИЗ ОТЧЕТА" 

    Запрос.УстановитьПараметр("НачалоПериода", 13.06.2018 0:00:00);  // тут явно ошибка, не понимаю как задать параметры.
    Запрос.УстановитьПараметр("Дата", Дата); // тоже скорее всего ошибка. 
    Запрос.УстановитьПараметр("СостояниеСобытия", Справочник.CRM_СостоянияСобытий.Завершено);
 
    Результат = Запрос.Выполнить();
 
    ВыборкаДетальныеЗаписи = Партнеры.Выбрать();
///////////////
 Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
       
		Объект = выборка.ПолучитьОбъект();
		Объект.ОсновнойМенеджер =  Справочники.Пользователи.НайтиПоНаименованию(ОбщаяБаза); // так я назвал пользователя и хочу повесить на него клиентов
		Объект.Записать();
	КонецЦикла;
	  Сообщить("Готово");
	


КонецПроцедуры
Показать


Естественно не работает)
подскажите как лучше изменить реквизит ОсновнойМенеджер у избранных запросом/отчетом клиентов...


Добавлять в ГИР вручную или методом подбора долго, быть может есть возможность в код стандартной обработки жестко прописать ссылки на клиентов ?
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. realptr 13.06.18 11:24 Сейчас в теме
Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
        Объект = ВыборкаДетальныеЗаписи.ПолучитьОбъект();
        Объект.ОсновнойМенеджер =  Справочники.Пользователи.НайтиПоНаименованию(ОбщаяБаза);
        Объект.Записать();
    КонецЦикла;
user872273; +1 Ответить
3. singlych 13.06.18 11:37 Сейчас в теме
Для начала разберись с переменными. А то у тебя то Результат, а то Партнеры, то ВыборкаДетальныеЗаписи, а то Выборка.
4. namazi74 4 13.06.18 11:47 Сейчас в теме
&НачалоПериода можно не делать параметром, а сразу в запросе поставить конкретное значение.

Запрос.УстановитьПараметр("НачалоПериода", 13.06.2018 0:00:00);

- взять дату время в кавычки

Запрос.УстановитьПараметр("Дата", Дата);

-
Запрос.УстановитьПараметр("Дата", ТекущаяДата());
user872273; +1 Ответить
5. user872273 13.06.18 11:58 Сейчас в теме
(4)
ТекущаяДата()

Спасибо поправил.
(3) Привел к единому формату)

сейчас отпишусь что вышло
6. user872273 14.06.18 09:27 Сейчас в теме
(4)

&НаКлиенте
Процедура ОтвязатьЗабытых(Команда)
	СделатьНаСервере();
КонецПроцедуры

&НаСервере
Процедура СделатьНаСервере()
    Запрос = Новый Запрос;
    Запрос.Текст = "ВЫБРАТЬ РАЗЛИЧНЫЕ
                   |	CRM_Событие.Ссылка,
                   |	МАКСИМУМ(CRM_Событие.Дата) КАК Дата,
                   |	CRM_Событие.Ответственный,
                   |	CRM_Событие.Партнер,
                   |	CRM_Событие.СостояниеСобытия,
                   |	CRM_Событие.ДатаСоздания,
                   |	Партнеры.ОсновнойМенеджер,
                   |	CRM_Событие.ПометкаУдаления
                   |ПОМЕСТИТЬ времтб
                   |ИЗ
                   |	Документ.CRM_Событие КАК CRM_Событие
                   |		ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Партнеры КАК Партнеры
                   |		ПО CRM_Событие.Партнер = Партнеры.Ссылка
                   |			И CRM_Событие.ОрганизаторGApi = Партнеры.Ссылка
                   |ГДЕ
                   |	CRM_Событие.Дата <= &НачалоПериода
                   |	И CRM_Событие.СостояниеСобытия = &СостояниеСобытия
                   |	И CRM_Событие.ПометкаУдаления = ЛОЖЬ
                   |
                   |СГРУППИРОВАТЬ ПО
                   |	CRM_Событие.Ответственный,
                   |	CRM_Событие.Партнер,
                   |	CRM_Событие.Ссылка,
                   |	CRM_Событие.СостояниеСобытия,
                   |	CRM_Событие.ДатаСоздания,
                   |	Партнеры.ОсновнойМенеджер,
                   |	CRM_Событие.ПометкаУдаления
                   |;
                   |
                   |////////////////////////////////////////////////////////////­////////////////////
                   |ВЫБРАТЬ
                   |	времтб.Дата,
                   |	времтб.Ответственный,
                   |	времтб.Партнер
                   |ИЗ
                   |	времтб КАК времтб";
 
    Запрос.УстановитьПараметр("Дата", '20180213000000');
    Запрос.УстановитьПараметр("НачалоПериода", ТекущаяДата());
    Запрос.УстановитьПараметр("СостояниеСобытия", Справочники.CRM_СостоянияСобытий.Завершено);
 
    Результат = Запрос.Выполнить();
 
    ВыборкаДетальныеЗаписи = Справочники.Партнеры.Выбрать();
	
	Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
		Объект = ВыборкаДетальныеЗаписи.ПолучитьОбъект();
		Объект.ОсновнойМенеджер =  Справочники.Пользователи.НайтиПоНаименованию("ОбщаяБаза");
		Объект.Записать();
	КонецЦикла;
	Сообщить("Готово");
	


КонецПроцедуры
Показать



Не выполняется. что-то еще не так?
7. VUN 38 14.06.18 15:19 Сейчас в теме
(6)
    Результат = Запрос.Выполнить();
 
    ВыборкаДетальныеЗаписи = Результат.Выбрать();
    
    Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
        Объект = ВыборкаДетальныеЗаписи.Партнер.ПолучитьОбъект();
        Объект.ОсновнойМенеджер =  Справочники.Пользователи.НайтиПоНаименованию("ОбщаяБаза");
        Объект.Записать();
    КонецЦикла;
Показать
user872273; +1 Ответить
8. user872273 15.06.18 14:08 Сейчас в теме
(7)
Доработал код, вот так сейчас выглядит.
&НаКлиенте
Процедура ОтвязатьЗабытых(Команда)
	СделатьНаСервере();
КонецПроцедуры

&НаСервере
Процедура СделатьНаСервере()
    Запрос = Новый Запрос;
    Запрос.Текст = "ВЫБРАТЬ РАЗЛИЧНЫЕ
                   |	CRM_Событие.Ссылка,
                   |	МАКСИМУМ(CRM_Событие.Дата) КАК Дата,
                   |	CRM_Событие.Ответственный,
                   |	CRM_Событие.Партнер,
                   |	CRM_Событие.СостояниеСобытия,
                   |	CRM_Событие.ДатаСоздания,
                   |	Партнеры.ОсновнойМенеджер,
                   |	CRM_Событие.ПометкаУдаления
                   |ПОМЕСТИТЬ времтб
                   |ИЗ
                   |	Документ.CRM_Событие КАК CRM_Событие
                   |		ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Партнеры КАК Партнеры
                   |		ПО CRM_Событие.Партнер = Партнеры.Ссылка
                   |			И CRM_Событие.ОрганизаторGApi = Партнеры.Ссылка
                   |ГДЕ
                   |	CRM_Событие.Дата <= &НачалоПериода
                   |	И CRM_Событие.СостояниеСобытия = &СостояниеСобытия
                   |	И CRM_Событие.ПометкаУдаления = ЛОЖЬ
                   |
                   |СГРУППИРОВАТЬ ПО
                   |	CRM_Событие.Ответственный,
                   |	CRM_Событие.Партнер,
                   |	CRM_Событие.Ссылка,
                   |	CRM_Событие.СостояниеСобытия,
                   |	CRM_Событие.ДатаСоздания,
                   |	Партнеры.ОсновнойМенеджер,
                   |	CRM_Событие.ПометкаУдаления
                   |;
                   |
                   |////////////////////////////////////////////////////////////­////////////////////
                   |ВЫБРАТЬ
                   |	времтб.Дата,
                   |	времтб.Ответственный,
                   |	времтб.Партнер
                   |ИЗ
                   |	времтб КАК времтб";
 
    Запрос.УстановитьПараметр("Дата", '20180213000000');
    Запрос.УстановитьПараметр("НачалоПериода", ТекущаяДата());
    Запрос.УстановитьПараметр("СостояниеСобытия", Справочники.CRM_СостоянияСобытий.Завершено);
 
    Результат = Запрос.Выполнить();
 
    ВыборкаДетальныеЗаписи = Справочники.Партнеры.Выбрать();
	
	Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
		Объект = ВыборкаДетальныеЗаписи.Партнер.ПолучитьОбъект();
		Объект.ОсновнойМенеджер =  Справочники.Пользователи.НайтиПоНаименованию("ОбщаяБаза");
		Объект.Записать();
	КонецЦикла;
	Сообщить("Готово");
	


КонецПроцедуры
Показать
9. YNik 15.06.18 18:22 Сейчас в теме
(8) так вместо:
ВыборкаДетальныеЗаписи = Справочники.Партнеры.Выбрать();

надо поставить:
ВыборкаДетальныеЗаписи = Результат.Выбрать();


иначе запрос здесь совсем не нужен.
17. Jen1978 19 19.06.18 11:17 Сейчас в теме
в (9) написано как сделать
10. user872273 19.06.18 08:30 Сейчас в теме
(8)
все равно код не работает.

Помогите за гонорар) Не хватает ума самому сделать....
11. azanas 19.06.18 08:52 Сейчас в теме
(10) допили как написано в (9) и будет тебе счастье
12. user872273 19.06.18 10:11 Сейчас в теме
(11)
Не сработало, поэтому уже отчаялся. Может я что-то изначально не правильно делаю ?
Кто сможет помочь разобраться в онлайне ?
13. azanas 19.06.18 10:16 Сейчас в теме
(12) а на что ругается?и есть ли записи в результате запроса?
14. user872273 19.06.18 10:27 Сейчас в теме
(13)
Я не знаю как посмотреть. Это отображается где-то ?
15. azanas 19.06.18 10:53 Сейчас в теме
(14)Нужно поставить точку останова,и посмотреть результат запроса,
ну или если не умеешь то допиши после
Результат = Запрос.Выполнить();

Сообщить(Результат.Выгрузить().Количество());

если сообщение выдаст 0,значит у тебя запрос выдает пустой результат,соответственно ничего он менять не будет,судя по коду.
16. user872273 19.06.18 10:55 Сейчас в теме
(15)
Точка останова не сработала. Получается что беда где-то выше цикла
результат не выводится значит... Но в отчете все работает.
18. azanas 19.06.18 11:31 Сейчас в теме
(16) Он мог не попасть в цикл если результат пустой
19. user872273 19.06.18 11:37 Сейчас в теме
(18)
Ура новые подробности!


{ВнешняяОбработка.ЗабытыеКомпании.Форма.Форма.Форма(56)}: Ошибка при вызове метода контекста (ПолучитьОбъект)
Объект = ВыборкаДетальныеЗаписи.Партнер.ПолучитьОбъект();
по причине:
Элемент не выбран!
20. azanas 19.06.18 11:43 Сейчас в теме
(19)Значит у тебя есть документы где не заполнен "Партнер",либо заполняй их в документах,либо измени код на

Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
Если НЕ ЗначениеЗаполнено(ВыборкаДетальныеЗаписи.Партнер) Тогда
Продолжить;
КонецЕсли;

Объект = ВыборкаДетальныеЗаписи.Партнер.ПолучитьОбъект();
Объект.ОсновнойМенеджер = Справочники.Пользователи.НайтиПоНаименованию("ОбщаяБаза");
Объект.Записать();
КонецЦикла;
21. user872273 19.06.18 11:49 Сейчас в теме
(20)
там есть папки... Нужно прописать, чтобы отбор шел только по компаниям. а не по папкам, верно ?

ГДЕ НЕ ЭтоПапка


как то так вроде?
22. azanas 19.06.18 11:51 Сейчас в теме
(21)Сомневаюсь что в документах выбирается папка....
23. user872273 19.06.18 12:40 Сейчас в теме
(22)

{ВнешняяОбработка.ЗабытыеКомпании.Форма.Форма.Форма(60)}: Ошибка при установке значения атрибута контекста (Объект)
Объект = ВыборкаДетальныеЗаписи.Партнер.ПолучитьОбъект(); 
по причине:
Нельзя изменять поле, содержащее объект данных формы
24. azanas 19.06.18 12:54 Сейчас в теме
(23) переименуй с объекта на партнера например
Пока ВыборкаДетальныеЗаписи.Следующий() Цикл 
Если НЕ ЗначениеЗаполнено(ВыборкаДетальныеЗаписи.Партнер) Тогда 
Продолжить; 
КонецЕсли; 

Партнер = ВыборкаДетальныеЗаписи.Партнер.ПолучитьОбъект(); 
Партнер.ОсновнойМенеджер = Справочники.Пользователи.НайтиПоНаименованию("ОбщаяБаза"); 
Партнер.Записать(); 
КонецЦикла;
Показать
Оставьте свое сообщение

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