0
- 15.03.2017 - 12:05
|
Ситуация: создал процедуру в расширении формы документа, вызываемую после команды формы. Но поскольку в команде вызывается длительная операция, мой код срабатывает раньше, чем отработает полностью штатная команда. Как добиться срабатывания своего алгоритма после полного завершения команды? Вот код вызова: &НаСервере Процедура Расш1_ЗаполнитьПослеНаСервере() МассивСтрок = Новый Массив; МассивСотр = Новый Массив; ТЗ_Док = Новый ТаблицаЗначений; ТЗ_Сотр = Новый ТаблицаЗначений; ТЗ_Док = Объект.НачисленияПерерасчет.Выгрузить(); ТЗ_Сотр = Объект.НачисленияПерерасчет.Выгрузить(,"Сотрудник" ); МассивСотр = ТЗ_Сотр.ВыгрузитьКолонку("Сотрудник"); Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | КадроваяИсторияСотрудниковСрезПоследних.Сотрудник |ИЗ | РегистрСведений.КадроваяИсторияСотрудников.СрезПос ледних( | &Период, | Сотрудник В (&СЗ_Сотр) | И ВидСобытия = &Уволен) КАК КадроваяИсторияСотрудниковСрезПоследних"; Запрос.УстановитьПараметр("Период", Объект.Дата); Запрос.УстановитьПараметр("СЗ_Сотр", МассивСотр); Запрос.УстановитьПараметр("Уволен", Перечисления.ВидыКадровыхСобытий.Увольнение); РезультатЗапроса = Запрос.Выполнить(); УволенныеСотрудники = РезультатЗапроса.Выгрузить(); Для каждого СтрокаТЗ Из ТЗ_Док Цикл Если УволенныеСотрудники.Найти(СтрокаТЗ.Сотрудник)=Неоп ределено Тогда //Сотрудник не уволен МассивСтрок.Добавить(СтрокаТЗ); КонецЕсли; КонецЦикла; НоваяТЗ_Док = Новый ТаблицаЗначений; НоваяТЗ_Док = Объект.НачисленияПерерасчет.Выгрузить(МассивСтрок) ; Объект.НачисленияПерерасчет.Загрузить(НоваяТЗ_Док) ; КонецПроцедуры &НаКлиенте Процедура Расш1_ЗаполнитьПосле(Команда) Расш1_ЗаполнитьПослеНаСервере(); КонецПроцедуры | |
1
- 15.03.2017 - 17:26
|
А не надо вызывать свою хрень несколько раз. Оставь одно расширение: к тому событию, что уже есть. Которое на сервере. И лучше запросы в модуль формы не запсочивать: сделай отдельный общий модуль для этого. | |
2
- 15.03.2017 - 17:45
| (1) Так общий модуль только с изменением конфы можно вставить. Я ж с расширением замутил, чтобы не трогать типовую. А что я несколько раз вызываю? Я в расширении добавил постобработку команды Заполнить(Команда) и начинается она на клиенте с вызовом серверной процедуры. Тут все отрабатывает нормально, только вперед паровоза. | |
3
- 15.03.2017 - 18:00
| (2) Используй &Вместо и вставь в конец вызов своей процедуры. | |
4
- 16.03.2017 - 06:13
| а с добавленным общим модулем конфа разве не останется типовой ? | |
5
- 16.03.2017 - 08:51
|
(3) Пробовал. Те же яйца, вид сбоку. (4) Обновление будет уже не full-автомат. Да и не хочется идти таким путем. Наверняка это можно решить в модуле расширения. | |
6
- 16.03.2017 - 10:12
|
2-US1C > Общий модуль никак не мешает обновлениям. Оне его не замечают. Обновлениям мешают токмо изменения метаданных, содержащихся в типовой конфе. Собственный общий модуль просто обходится в таблице сравнения. Вот рабочий пример: &НаСервере Процедура Расш1_ПослеЗаписиНаСервереПосле(ТекущийОбъект, ПараметрыЗаписи) ОЗГ_ОбщийМодуль.КорректировкаВесаПродукцииПроизвод ственногоОтчета(ТекущийОбъект); КонецПроцедуры &НаКлиенте Процедура Расш1_ПродукцияКоличествоПриИзмененииПосле(Элемент ) ТекущиеДанные = Элементы.Продукция.ТекущиеДанные; ТекущиеДанные.Вес = ТекущиеДанные.Количество*ОЗГ_ОбщийМодуль.Определен иеВесовогоКоэффициента(ТекущиеДанные.Номенклатура) ; КонецПроцедуры &НаКлиенте Процедура Расш1_ПродукцияНоменклатураПриИзмененииПеред(Элеме нт) ТекущиеДанные = Элементы.Продукция.ТекущиеДанные; ТекущиеДанные.Вес = ТекущиеДанные.Количество*ОЗГ_ОбщийМодуль.Определен иеВесовогоКоэффициента(ТекущиеДанные.Номенклатура) ; КонецПроцедуры | |
7
- 16.03.2017 - 10:22
| (3) каким образом "мой код срабатывает раньше"? Это какая то особенная 1С? | |
8
- 16.03.2017 - 10:39
|
(6) Это понятно, что в таблице сравнения внесенный модуль будет отсутствовать в обновлении и не будет помечен, но сам факт вывода сравнения конфигураций не даст отработать /UpdateCfg на автомате. (7) Да нет, обычная 1С. Просто команда запускает длительную операцию в фоне и дальше передает эстафету моей процедуре. Но данных, которые должна моя процедура обработать, еще нет - длительная операция не успевает отработать. Отсюда и вопрос, как наверняка дождаться завершения длительной процедуры и выполнить мой код? | |
9
- 16.03.2017 - 11:07
| 8-US1C > Используй 1С Обновлятор. Он еще автоматом БД сохраняет перед обновлением. И пользователей выкидывает. | |
10
- 16.03.2017 - 11:25
| Где то ж есть "Оповестить" - вставляй туда. Нет сделай сам свое "Оповестить". | |
11
- 21.03.2017 - 00:35
| (0)Как свой код может сработать раньше? | |
12
- 21.03.2017 - 15:59
| (11) см.8 | |
13
- 22.03.2017 - 00:23
| (12)А транзакции нельзя использовать? | |
14
- 22.03.2017 - 09:20
| (13) Смысл транзакции в моем случае? | |
| Интернет-форум Краснодарского края и Краснодара |