Имя: Пароль:
1C
1С v8
Ошибка инициализации модуля (Внешнее соединение: Клиент-серверный вариант)
0 Armin
 
25.06.18
14:54
Добрый день!

Есть код в одном модуле менеджера одного документа:

#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда
Процедура ЗаполнитьРасходныйДокумент(Источник, ДанныеЗаполнения, СтандартнаяОбработка) Экспорт
    
    ДанныеШапки = ДанныеШапкиДокумента( ДанныеЗаполнения.Ссылка );
    РезультатыВыбора = ДанныеЗаполнения.РезультатыВыбора;
    
    ЗаполняемыеРеквизиты = "Организация, Контрагент, Договор" + ?(
        РезультатыВыбора.ВидДокумента = "РасходныйКассовыйОрдер", "", ", НазначениеПлатежа"
        );
    
    Источник.ФП_ДокументОснование    = ДанныеЗаполнения.Ссылка;
    ЗаполнитьЗначенияСвойств(Источник, РезультатыВыбора,         "ИФО");  
    ЗаполнитьЗначенияСвойств(Источник, ДанныеШапки, ЗаполняемыеРеквизиты);  

    Если ЗначениеЗаполнено(Источник.Контрагент) И РезультатыВыбора.ВидДокумента <> "РасходныйКассовыйОрдер" Тогда
        Источник.СчетКонтрагента = Справочники.БанковскиеИКазначейскиеСчета.ПолучитьСчетПоУмолчанию(Источник.Контрагент, "Документ." + РезультатыВыбора.ВидДокумента);
        Если РезультатыВыбора.ВидДокумента = "ЗаявкаНаКассовыйРасходСокращенная" ИЛИ РезультатыВыбора.ВидДокумента = "ЗаявкаНаКассовыйРасход" Тогда
            Документы[ РезультатыВыбора.ВидДокумента ].ЗаполнитьРеквизитыПолучателя(Источник);
        Иначе
            СозданиеНаОсновании_ПолучательПриИзмененииНаСервере(Источник);
        КонецЕсли;
    КонецЕсли;
    
    СтруктураПоиска = Новый Структура;
    Для каждого ключЗначение ИЗ РезультатыВыбора Цикл
        
        Если КлючЗначение.Ключ = "ВидДокумента" ИЛИ КлючЗначение.Ключ = "РеквизитыЛицевогоСчета" тогда
            Продолжить;
        КонецЕсли;
        
        СтруктураПоиска.Вставить( КлючЗначение.Ключ, КлючЗначение.Значение );
        
    КонецЦикла;
    
    ИсточникРасшифрокиПлатежа = ПолучитьИзВременногоХранилища( ДанныеЗаполнения.НесопоставленныеОстаткиАдрес );
    ВыбранныеСтроки = ИсточникРасшифрокиПлатежа.НайтиСтроки( СтруктураПоиска );
    ТаблицаДляЗаполнения = ИсточникРасшифрокиПлатежа.Скопировать(ВыбранныеСтроки);
    ТаблицаДляЗаполнения.Свернуть("КФО,КПС,КЭК,КодЦели,Мероприятие,ДопКлассификация","Сумма");
    ТаблицаДляЗаполнения.Сортировать("КПС,КЭК");
            
    Источник.СуммаДокумента        = ТаблицаДляЗаполнения.Итог("Сумма");
        
    Если РезультатыВыбора.ВидДокумента <> "РасходныйКассовыйОрдер" Тогда
        Источник.ЛицевойСчет = РезультатыВыбора.РеквизитыЛицевогоСчета.Владелец;
        Если РезультатыВыбора.ВидДокумента <> "КассовоеВыбытие" Тогда
            Источник.РеквизитыЛицевогоСчета = РезультатыВыбора.РеквизитыЛицевогоСчета;
            СозданиеНаОсновании_ПриИзмененииЛицевогоСчетаНаСервере(Источник, РезультатыВыбора.ВидДокумента);
            Если РезультатыВыбора.ВидДокумента <> "ПлатежноеПоручение" Тогда
                Источник.ОрганКазначейства        = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Источник.РеквизитыЛицевогоСчета, "КассовыйОрган");
            КонецЕсли;
        КонецЕсли;
    КонецЕсли;
    
    Если РезультатыВыбора.ВидДокумента = "ЗаявкаНаКассовыйРасходСокращенная" Тогда
        
        Источник.КФО                    = РезультатыВыбора.КФО;
        Источник.КБКНазначениеПлатежа    = РезультатыВыбора.КПС;
        Источник.КОСГУНазначениеПлатежа    = РезультатыВыбора.КЭК;
        Источник.КодЦели                = РезультатыВыбора.КодЦели;
        Источник.КодМероприятия            = РезультатыВыбора.Мероприятие;
        Источник.ДопКлассификация        = РезультатыВыбора.ДопКлассификация;
        
        ДопустимыеИсточникиСредств = ПлатежноРасчетныеДокументыПовтИсп.ДопустимыеИсточникиСредств(Источник.ЛицевойСчет,Источник.КФО);
        Если ДопустимыеИсточникиСредств.Количество() > 0 Тогда
            Источник.ИсточникСредств = ДопустимыеИсточникиСредств[0];
        КонецЕсли;
    
    Иначе

        ЗаполнятьВалюту = ( РезультатыВыбора.ВидДокумента = "ЗаявкаНаКассовыйРасход" ИЛИ РезультатыВыбора.ВидДокумента = "КассовоеВыбытие" );
        Если ЗаполнятьВалюту Тогда
            ВалютаДокумента         = Константы.ВалютаРегламентированногоУчета.Получить();
            КурсКратность            = РаботаСКурсамиВалют.ПолучитьКурсВалюты(ВалютаДокумента, ДанныеШапки.Дата);
        
            Источник.ВалютаДокумента        = ВалютаДокумента;
            Источник.Курс                    = КурсКратность.Курс;
            Источник.Кратность                = КурсКратность.Кратность;
            Источник.СуммаДокументаВВалюте    = Источник.СуммаДокумента;
        КонецЕсли;
        
        Источник.РасшифровкаПлатежа.Очистить();
        
        Для Каждого СтрокаОснования Из ТаблицаДляЗаполнения Цикл
            СтрРасшифровка = Источник.РасшифровкаПлатежа.Добавить();
            СтрРасшифровка.КФО                        = СтрокаОснования.КФО;

            Если РезультатыВыбора.ВидДокумента = "РасходныйКассовыйОрдер" Тогда
                СтрРасшифровка.КПС    = СтрокаОснования.КПС;
                СтрРасшифровка.КЭК    = СтрокаОснования.КЭК;
            Иначе    
                СтрРасшифровка.КБКНазначениеПлатежа        = СтрокаОснования.КПС;
                СтрРасшифровка.КОСГУНазначениеПлатежа    = СтрокаОснования.КЭК;
                
                ДопустимыеИсточникиСредств = ПлатежноРасчетныеДокументыПовтИсп.ДопустимыеИсточникиСредств(Источник.ЛицевойСчет, СтрРасшифровка.КФО);
                Если ДопустимыеИсточникиСредств.Количество() > 0 Тогда
                    СтрРасшифровка.ИсточникСредств = ДопустимыеИсточникиСредств[0];
                КонецЕсли;
    
            КонецЕсли;
            СтрРасшифровка.КодЦели                    = СтрокаОснования.КодЦели;
            СтрРасшифровка.КодМероприятия            = СтрокаОснования.Мероприятие;
            СтрРасшифровка.ДопКлассификация            = СтрокаОснования.ДопКлассификация;
            Если ЗаполнятьВалюту Тогда
                СтрРасшифровка.СуммаВал                    = СтрокаОснования.Сумма;
            КонецЕсли;
            СтрРасшифровка.Сумма                    = СтрокаОснования.Сумма;
        КонецЦикла;
        
        
    КонецЕсли;
    
КонецПроцедуры

//Заполняет реквизиты получателя
&НаСервере
Процедура СозданиеНаОсновании_ПолучательПриИзмененииНаСервере(Объект)
    
    РеквизитыПолучателя = Новый Структура("КонтрагентИНН, КонтрагентКПП, КонтрагентНаименование, КонтрагентБанковскийСчет, КонтрагентНаименованиеБанка, КонтрагентБИКБанка, КонтрагентКорСчетБанка",
    "ИНН", "КПП", "Корреспондент", "СчетНомер", "Банк", "БИК", "КоррСчет");
                                                                                                                                        
    ПлатежноРасчетныеДокументы.ПолучитьПлатежныеРеквизитыПоТребованиюБанка(Объект.СчетКонтрагента, Объект.СчетКонтрагента, РеквизитыПолучателя);
    
    СтруктураРеквизитов = Новый Структура("ТипЛицевогоСчета, Код");
    СтруктураРеквизитов = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(Объект.СчетКонтрагента, СтруктураРеквизитов);
    
    Если СтруктураРеквизитов.ТипЛицевогоСчета = Перечисления.ТипыЛицевыхСчетов.Казначейский Тогда
        РеквизитыПолучателя.Вставить("КонтрагентЛицевойСчет",СтруктураРеквизитов.Код);
    Иначе
        РеквизитыПолучателя.Вставить("КонтрагентЛицевойСчет","");
    КонецЕсли;    
    
    ЗаполнитьЗначенияСвойств(Объект, РеквизитыПолучателя);
    
КонецПроцедуры

#КонецЕсли

При стандартной проверке модуля (все галочки в настройках включены) ошибок не обнаружено.
При проверке конфигурации через Конфигурация - Проверка конфигурации с включенной галкой Внешнее соединение (клиент-сервер) выдается ошибка компиляции, якобы не найдена эта процедура (СозданиеНаОсновании_ПолучательПриИзмененииНаСервере)
Ведь весь модуль обернут в инструкцию предпроцессора "#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда"

Что может быть не так?
1 Armin
 
25.06.18
15:26
Разобрался - у процедуры "ЗаполнитьРасходныйДокумент" не стоит директива компиляции НаСервере, а в процедуры СозданиеНаОсновании_ПолучательПриИзмененииНаСервере стоит.
Но ведь в модуле менеджера по умолчанию все выполняется на сервере. Если убрать у последней эту директиву, то расширенная проверка не ругается на компиляцию, и все работает нормально. Внешнее соединение перестает валится с ошибкой.
Как такое может быть? Баг или фича?
Проблемы невозможно решaть нa том же уровне компетентности, нa котором они возникaют. Альберт Эйнштейн