Имя: Пароль:
1C
 
Как обратиться из модуля объекта к процедуре которая форме документа.
,
0 Олеся999
 
30.06.17
11:03
Как обратиться из модуля объекта к процедуре, которая находится в форме документа?
1 Lexey_
 
30.06.17
11:04
(0) дописать Экспорт, получить форму, обратиться
2 Serg_1960
 
30.06.17
11:10
Попытки реализации такого взаимодействия - конфликт/противоречие с концепцией фирмы 1С.

Выход? Ну, например, перенести "общую" часть алгоритма процедуры в модуль менеджера объекта.
3 Irbis
 
30.06.17
11:12
(0) А нафейхоа?
4 Олеся999
 
30.06.17
11:13
(2) Смысл такой, нужно при групповом проведении выводить сообщения, это можно осуществить только в модуле объекта,
но в модуле объекта заполнение таблиц запросом не срабатывает, т.к не заходит в цикл. На форме документа все работает отлично. вот и хотела вызывать из  модуля объекта процедуру которая на форме документа
5 Lexey_
 
30.06.17
11:15
(4) надо исправить вот это: "но в модуле объекта заполнение таблиц запросом не срабатывает, т.к не заходит в цикл"
6 Олеся999
 
30.06.17
11:19
Создаю таблу :

КвалификаторыЧисла = Новый КвалификаторыЧисла(8, 2, ДопустимыйЗнак.Любой);    
         ТЗВирт = Новый ТаблицаЗначений;
         ТЗВирт.Колонки.Добавить("ОрганизацияОтправитель", Новый ОписаниеТипов("СправочникСсылка.Организации"));
         ТЗВирт.Колонки.Добавить("Период" , Новый ОписаниеТипов("Дата"));
         ТЗВирт.Колонки.Добавить("Количество", Новый ОписаниеТипов("Число",КвалификаторыЧисла));
        

ТУТ запрос ..................

//потом :

РезультатЗапроса = Запрос.Выполнить();
Результат = Запрос.Выполнить().Выгрузить();

// Далее это и в цикл не заходит

Для каждого Стр из Результат Цикл
  ЗаполнитьЗначенияСвойств(ТЗВирт.Добавить(),Стр);
  ТЗВирт.Свернуть("ОрганизацияОтправитель","Количество");
КонецЦикла;
7 Lexey_
 
30.06.17
11:20
(6) Результат пустой?
8 Олеся999
 
30.06.17
11:21
(7)  Выполняя это же на форме документа заполняется, все работает отлично. В модуле объекта не работает!
9 Lexey_
 
30.06.17
11:22
(8) Результат пустой?
10 mehfk
 
30.06.17
11:22
(0) Этот вопрос задавался на форуме 100500 раз.
11 Олеся999
 
30.06.17
11:29
12 SleepyHead
 
гуру
30.06.17
11:29
(4) В этой фразе прекрасно все.
13 Serg_1960
 
30.06.17
11:29
(6) Не нужно отдельно создавать таблицуи заполнять её в цикле. Достаточно сделать запрос так, чтобы он возвращал данные с нужными тебе наименованиями колонок. И далее просто:
ТЗВирт = Запрос.Выполнить().Выгрузить();
ТЗВирт.Свернуть("ОрганизацияОтправитель","Количество");

PS: в цикле таблицу не сворачивают. Это "разовая" операция и имеет смысл после заполнения таблицы (после цикла заполнения)
14 SleepyHead
 
гуру
30.06.17
11:33
(13) Это для солидности. Ну нехорошо, когда программа выдает результат мгновенно. Надо помигать лампочками, подумать.
15 Serg_1960
 
30.06.17
11:34
(8) Тема для телепатов (намекаю: текст запроса не озвучен) и потому погадаю: какой-то из параметров запроса имеет значение (и смысл) в форме и не заполнен в модуле.
16 Олеся999
 
30.06.17
11:35
(13) Согласна сворачивать можно и не в цикле, но мне все равно нужно, выгружать временную таблицу и перебирать её значения на определенные условия
17 SleepyHead
 
гуру
30.06.17
11:35
(15) Типично женская постановка задачи - вот результат 10, а должно быть 12, программа не работает!
18 Serg_1960
 
30.06.17
11:36
(11) "Результат.Количество()"
19 Lexey_
 
30.06.17
11:36
(11) на вопрос не ответила
20 Олеся999
 
30.06.17
11:39
ТЗВирт = Новый ТаблицаЗначений;
         ТЗВирт.Колонки.Добавить("ОрганизацияОтправитель", Новый ОписаниеТипов("СправочникСсылка.Организации"));
         ТЗВирт.Колонки.Добавить("Период" , Новый ОписаниеТипов("Дата"));
         ТЗВирт.Колонки.Добавить("Количество", Новый ОписаниеТипов("Число",КвалификаторыЧисла));
                
         //ТЗВирт = Таблица.Выгрузить();
         Для Каждого СтрОбъект из ЭтотОбъект.Затраты Цикл
             Запрос = Новый    Запрос;
             Запрос.Текст = "ВЫБРАТЬ
             |    УслугиПодразделениям.ОрганизацияОтправитель,
             |    УслугиПодразделениям.Период,
             |    УслугиПодразделениям.Количество
             |ИЗ
             |    РегистрНакопления.УслугиПодразделениям КАК v_УслугиСобственнымПодразделениям
             |ГДЕ
             |    УслугиПодразделениям.Период МЕЖДУ &НачалоПериода И &КонецПериода
             |    И УслугиПодразделениям.ОрганизацияОтправитель = &ОрганизацияОтправитель
             |    И УслугиПодразделениям.ОбъектОС = &ОбъектОС";
            
             Запрос.УстановитьПараметр("КонецПериода", КонецМесяца(Дата));
             Запрос.УстановитьПараметр("НачалоПериода", НачалоМесяца(Дата));
             Запрос.УстановитьПараметр("ОрганизацияОтправитель",Организация);
             РезультатЗапроса = Запрос.Выполнить();
             Результат = Запрос.Выполнить().Выгрузить();
            
             Для каждого Стр из Результат Цикл
                 ЗаполнитьЗначенияСвойств(ТЗВирт.Добавить(),Стр);
                 ТЗВирт.Свернуть("ОрганизацияОтправитель","Количество");
                
             КонецЦикла;
            
             Для Каждого СтрТЧ из ТЗВирт Цикл
                 Если СтрТЧ.Количество > 1 Тогда
                    
                     Сообщение  = Новый СообщениеПользователю;
                    Сообщение.Текст = "текст";
                     Сообщение.Сообщить();
                        
                 КонецЕсли;
             КонецЦикла;
             ТЗВирт.Очистить();
         КонецЦикла;
21 Serg_1960
 
30.06.17
11:40
(17) Ахтунг, сексизм :( Такая постановка задачи свойственна  неопытным программистам обоего пола.
22 SleepyHead
 
гуру
30.06.17
11:41
(21) Ахтунг, навешивание ярлыков. Ну или иди поработай воспитателем в детсад. Ведь у женщин и мужчин одинаковые способности ко всему, правда же?
23 Олеся999
 
30.06.17
11:43
(19) А как посмотреть то ?)
24 Denis_CFO
 
30.06.17
11:44
(20) А я не понял, для чего поле период выбирать, если оно нигде больше не участвует и в итоге ещё после свертки таблицы удаляется?
25 SleepyHead
 
гуру
30.06.17
11:45
(23) Смотрите не в табло. Нажмите Shift+F9, введите выражение Результат, и справа от ввода результата нажмите кнопочку просмотра ТЗ.
26 Олеся999
 
30.06.17
11:46
(25) Ну отбирает за месяц потом сворачивает, и получаем количество. Все логично
27 SleepyHead
 
гуру
30.06.17
11:47
(26) необязательно для этого период включать в поля выборки запроса, достаточно использовать в условии.
28 dezss
 
30.06.17
11:47
(26) период для этого в конструкции ВЫБРАТЬ писать не обязательно
29 dezss
 
30.06.17
11:48
(28) + да и свернуть можно было еще в запросе
30 Denis_CFO
 
30.06.17
11:48
(26) Уберите его из запроса (не из условия) и получите итого количество по организации за период.
31 Serg_1960
 
30.06.17
11:49
(20) Не вижу где присвоение параметра запроса "ОбъектОС"?
32 Олеся999
 
30.06.17
11:50
(31) Его не надо, убрать забыла
33 Serg_1960
 
30.06.17
11:52
Где проверка что объект не модифицирован и проведён?
34 SleepyHead
 
гуру
30.06.17
11:53
(33) Вот ты сейчас окончательно мозг девушки взломаешь. Слишком много базовых вещей за один раз.
35 Serg_1960
 
30.06.17
11:54
Упс :) Вопрос снимается :))
36 SleepyHead
 
гуру
30.06.17
11:54
(35) :)
37 Олеся999
 
30.06.17
11:55
(25) где? я что то не вижу http://img.ipev.ru/2017/06/30/TUTUfb8b6.png
38 dezss
 
30.06.17
11:55
Так этот код вообще не имеет никакого отношения к документу. Правильный ответ, похоже, в (31)
39 SleepyHead
 
гуру
30.06.17
11:56
(37) Поставьте курсор на результат в нижней части списка (глде слово результат и справа - таблица значений)

Нажмите F2 или появится кнопка для просмотра ТЗ справа, среди кнопок.
40 Новиков
 
30.06.17
11:56
Зачем нужен цикл по ЭтотОбъект.Затраты? Зачем там запрос внутри, если при обходе этой тч никакие параметры оттуда не берутся?
41 Serg_1960
 
30.06.17
11:56
(38) А если документ делает движения в этот регистр - надо ли читает его собственные движения?
42 SleepyHead
 
гуру
30.06.17
11:57
(37 Хотя странно, что у вас этой кнопки нет, сейчас выложу, как это выглядит у меня
43 dezss
 
30.06.17
11:57
(38) тьфу...пятница...уже в глазах двоится от этих касс %)
44 Serg_1960
 
30.06.17
11:59
(40) См. (14) Пятница же :)
45 Новиков
 
30.06.17
12:00
А понял. Красивый и логичный код. Написано видимо под утренний мейкап :)
46 SleepyHead
 
гуру
30.06.17
12:00
(37) Вот так должно выглядеть в окне выражений

http://img.ipev.ru/2017/06/30/BEZYMYNNYI.png
47 Олеся999
 
30.06.17
12:08
(46) у меня такой нет
48 Serg_1960
 
30.06.17
12:08
(46) Про платформу спросил бы, свою озвучил бы... "Ну мне, так, для себя, чисто поржать"(с)
49 SleepyHead
 
гуру
30.06.17
12:15
(48) Да уже понял, что у Олеси платформа довольно старая. У меня 8.3.10.2252, но кнопка просмотра ТЗ была уже в 8.3.6, если ничего не путаю, а то и раньше.
50 Олеся999
 
30.06.17
12:26
У кого-нибудь есть мысли почему в цикл не заходит ?)
51 SleepyHead
 
гуру
30.06.17
12:27
(50) Есть, результат запроса дает пустую ТЗ.
52 Новиков
 
30.06.17
12:32
(50) ты напиши зачем тебе этот цикл. Ты ничего из него не заполняешь, т.е. обходишь просто по строчно это тз и каждый раз дергаешь независимый от этого_всего запрос. Это бессмысленно, ты явно что-то не так делаешь. Ответь на этот вопрос и тебе подскажут. А сейчас - это красивый код и не более того :)
53 Serg_1960
 
30.06.17
12:33
(50) См. (18)
54 Олеся999
 
30.06.17
12:34
Для Каждого СтрТЧ из ТЗВирт Цикл
                 Если СтрТЧ.Количество > 1 Тогда
                    
                     Сообщение  = Новый СообщениеПользователю;
                    Сообщение.Текст = "текст";
                     Сообщение.Сообщить();
                        
                 КонецЕсли;
             КонецЦикла;

Если количество больше 1 нужно выводить сообщение
55 Serg_1960
 
30.06.17
12:41
Поделись секретом: как ты в запросе выбираешь значения из "УслугиПодразделениям", если запрос составлен на таблицу "v_УслугиСобственнымПодразделениям"? Или опять "Его не надо, убрать забыла"(цы)?
56 Новиков
 
30.06.17
12:41
А зачем в цикле запрос? Почему его без цикла нельзя сделать, оставить только тело и вывести строку. Зачем ты один и тот же запрос крутишь там и строчки выводишь?
57 Serg_1960
 
30.06.17
12:44
(56) До оптимизации не дошли, автор застряла на уровне болванки, шаблона, алгоритма лишённого смысла. Ок?
58 Новиков
 
30.06.17
13:00
Понял. И теперь надо понять почему оно в модуле формы работает, а в модуле объекта - нет?
59 Олеся999
 
30.06.17
13:18
(55) УслугиПодразделениям я это уже поправила (56) да я уже убрала этот цикл
60 Олеся999
 
30.06.17
13:19
(58) именно)
61 Олеся999
 
30.06.17
14:38
Запрос кст. выполняется проверила на консоле
62 dezss
 
30.06.17
14:40
(61) значит показывай переписанный код
63 Олеся999
 
30.06.17
14:49
(62)

Квалификаторы = Новый КвалификаторыЧисла(10, 2, ДопустимыйЗнак.Любой);
ТЗВирт = Новый ТаблицаЗначений;
ТЗВирт.Колонки.Добавить("ОрганизацияОтправитель", Новый ОписаниеТипов("СправочникСсылка.Организации"));
ТЗВирт.Колонки.Добавить("Период" , Новый ОписаниеТипов("Дата"));
ТЗВирт.Колонки.Добавить("Количество", Новый ОписаниеТипов("Число",Квалификаторы));

Запрос = Новый    Запрос;
Запрос.Текст = "ВЫБРАТЬ
|    УслугиПодразделениям.ОрганизацияОтправитель,
|    УслугиПодразделениям.Период,
|    УслугиПодразделениям.Количество
|ИЗ
|    РегистрНакопления.УслугиПодразделениям КАК УслугиПодразделениям
|ГДЕ
|    УслугиПодразделениям.Период МЕЖДУ &НачалоПериода И &КонецПериода
|    И УслугиПодразделениям.ОрганизацияОтправитель = &ОрганизацияОтправитель";

Запрос.УстановитьПараметр("КонецПериода", КонецМесяца(Дата));
Запрос.УстановитьПараметр("НачалоПериода", НачалоМесяца(Дата));
Запрос.УстановитьПараметр("ОрганизацияОтправитель",Организация);

РезультатЗапроса = Запрос.Выполнить();
Результат = Запрос.Выполнить().Выгрузить();

Для каждого Стр из Результат Цикл
    ЗаполнитьЗначенияСвойств(ТЗВирт.Добавить(),Стр);
КонецЦикла;

    ТЗВирт.Свернуть("ОрганизацияОтправитель","Количество");
    
Для Каждого СтрТЧ из ТЗВирт Цикл
    Если СтрТЧ.Количество > 1 Тогда
        Сообщение  = Новый СообщениеПользователю;
        Сообщение.Текст = "Просто текст";
        Сообщение.Сообщить();
    КонецЕсли;
КонецЦикла;
ТЗВирт.Очистить();
64 dezss
 
30.06.17
15:01
(63) да убери ты уже эту ересь

ТЗВирт = Новый ТаблицаЗначений;
ТЗВирт.Колонки.Добавить("ОрганизацияОтправитель", Новый ОписаниеТипов("СправочникСсылка.Организации"));
ТЗВирт.Колонки.Добавить("Период" , Новый ОписаниеТипов("Дата"));
ТЗВирт.Колонки.Добавить("Количество", Новый ОписаниеТипов("Число",Квалификаторы));

Для каждого Стр из Результат Цикл
    ЗаполнитьЗначенияСвойств(ТЗВирт.Добавить(),Стр);
КонецЦикла;


просто делай вместо
Результат = Запрос.Выполнить().Выгрузить();
вот это
ТЗВирт = Запрос.Выполнить().Выгрузить();

после ТЗВирт.Свернуть("ОрганизацияОтправитель","Количество");
напиши
Сообщить(ТЗВирт.Количество());
и покажи что получилось.
65 SleepyHead
 
гуру
30.06.17
17:31
(57) Ну, наконец ты понял, что женщина программистом быть не может?
AdBlock убивает бесплатный контент. 1Сергей