Вопрос по расширению конфигурации Ситуация: создал процедуру в расширении формы документа, вызываемую после команды формы. Но поскольку в команде вызывается длительная операция, мой код срабатывает раньше, чем отработает полностью штатная команда. Как добиться срабатывания своего алгоритма после полного завершения команды? Вот код вызова: &НаСервере Процедура Расш1_ЗаполнитьПослеНаСервере() МассивСтрок = Новый Массив; МассивСотр = Новый Массив; ТЗ_Док = Новый ТаблицаЗначений; ТЗ_Сотр = Новый ТаблицаЗначений; ТЗ_Док = Объект.НачисленияПерерасчет.Выгрузить(); ТЗ_Сотр = Объект.НачисленияПерерасчет.Выгрузить(,"Сотрудник"); МассивСотр = ТЗ_Сотр.ВыгрузитьКолонку("Сотрудник"); Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | КадроваяИсторияСотрудниковСрезПоследних.Сотрудник |ИЗ | РегистрСведений.КадроваяИсторияСотрудников.СрезПоследних( | &Период, | Сотрудник В (&СЗ_Сотр) | И ВидСобытия = &Уволен) КАК КадроваяИсторияСотрудниковСрезПоследних"; Запрос.УстановитьПараметр("Период", Объект.Дата); Запрос.УстановитьПараметр("СЗ_Сотр", МассивСотр); Запрос.УстановитьПараметр("Уволен", Перечисления.ВидыКадровыхСобытий.Увольнение); РезультатЗапроса = Запрос.Выполнить(); УволенныеСотрудники = РезультатЗапроса.Выгрузить(); Для каждого СтрокаТЗ Из ТЗ_Док Цикл Если УволенныеСотрудники.Найти(СтрокаТЗ.Сотрудник)=Неопределено Тогда //Сотрудник не уволен МассивСтрок.Добавить(СтрокаТЗ); КонецЕсли; КонецЦикла; НоваяТЗ_Док = Новый ТаблицаЗначений; НоваяТЗ_Док = Объект.НачисленияПерерасчет.Выгрузить(МассивСтрок); Объект.НачисленияПерерасчет.Загрузить(НоваяТЗ_Док); КонецПроцедуры &НаКлиенте Процедура Расш1_ЗаполнитьПосле(Команда) Расш1_ЗаполнитьПослеНаСервере(); КонецПроцедуры |
А не надо вызывать свою хрень несколько раз. Оставь одно расширение: к тому событию, что уже есть. Которое [em]на сервере[/em]. И лучше запросы в модуль формы не запсочивать: сделай отдельный общий модуль для этого. |
(1) Так общий модуль только с изменением конфы можно вставить. Я ж с расширением замутил, чтобы не трогать типовую. А что я несколько раз вызываю? Я в расширении добавил постобработку команды Заполнить(Команда) и начинается она на клиенте с вызовом серверной процедуры. Тут все отрабатывает нормально, только вперед паровоза. |
(2) Используй &Вместо и вставь в конец вызов своей процедуры. |
а с добавленным общим модулем конфа разве не останется типовой ? |
(3) Пробовал. Те же яйца, вид сбоку. (4) Обновление будет уже не full-автомат. Да и не хочется идти таким путем. Наверняка это можно решить в модуле расширения. |
2-US1C > Общий модуль никак не мешает обновлениям. Оне его не замечают. Обновлениям мешают токмо изменения метаданных, содержащихся в типовой конфе. Собственный общий модуль просто обходится в таблице сравнения. Вот рабочий пример: [em]&НаСервере Процедура Расш1_ПослеЗаписиНаСервереПосле(ТекущийОбъект, ПараметрыЗаписи) ОЗГ_ОбщийМодуль.КорректировкаВесаПродукцииПроизводственногоОтчета(ТекущийОбъект); КонецПроцедуры &НаКлиенте Процедура Расш1_ПродукцияКоличествоПриИзмененииПосле(Элемент) ТекущиеДанные = Элементы.Продукция.ТекущиеДанные; ТекущиеДанные.Вес = ТекущиеДанные.Количество*ОЗГ_ОбщийМодуль.ОпределениеВесовогоКоэффициента(ТекущиеДанные.Номенклатура); КонецПроцедуры &НаКлиенте Процедура Расш1_ПродукцияНоменклатураПриИзмененииПеред(Элемент) ТекущиеДанные = Элементы.Продукция.ТекущиеДанные; ТекущиеДанные.Вес = ТекущиеДанные.Количество*ОЗГ_ОбщийМодуль.ОпределениеВесовогоКоэффициента(ТекущиеДанные.Номенклатура); КонецПроцедуры[/em] |
(3) каким образом "мой код срабатывает раньше"? Это какая то особенная 1С? |
(6) Это понятно, что в таблице сравнения внесенный модуль будет отсутствовать в обновлении и не будет помечен, но сам факт вывода сравнения конфигураций не даст отработать /UpdateCfg на автомате. (7) Да нет, обычная 1С. Просто команда запускает длительную операцию в фоне и дальше передает эстафету моей процедуре. Но данных, которые должна моя процедура обработать, еще нет - длительная операция не успевает отработать. Отсюда и вопрос, как наверняка дождаться завершения длительной процедуры и выполнить мой код? |
8-US1C > Используй 1С Обновлятор. Он еще автоматом БД сохраняет перед обновлением. И пользователей выкидывает. |
[quote=US1C;43917573]длительную операцию в фоне[/quote] Где то ж есть "Оповестить" - вставляй туда. Нет сделай сам свое "Оповестить". |
(0)Как свой код может сработать раньше? |
(11) см.8 |
(12)А транзакции нельзя использовать? |
(13) Смысл транзакции в моем случае? |
Текущее время: 16:40. Часовой пояс GMT +3. |