Вход | Регистрация


1С:Предприятие ::

Метки: 

v7: КД2: Выгрузка из 7.7

Я
   Mikhail Volkov
 
06.09.18 - 07:08
Давненько не работал с 7.7. Пишу правила выгрузки из 7.7, не могу понять что за ошибки:
ПКС_ПередВыгрузкой_ДоговорыКонтрагентов_ОплатаВВалюте_Реквизит8<<?>>(Источник, Приемник, ВходящиеДанные, ИсходящиеДанные, НомерПКС, НомерПКО, ОбъектКоллекции, Значение, ТипПриемника, ИмяПКО, ИмяПКОВидСубконто, Пусто, Выражение, НеЗамещать, УзелКоллекцииСвойств)
Функция не обнаружена (ПКС_ПередВыгрузкой_ДоговорыКонтрагентов_ОплатаВВалюте_Реквизит8)

Сначала думал, что функции в ПКС "Перед выгрузкой" надо писать на языке 7.7 (подзабыл уже), отключил их пока. Но встретилась такая:
Значение = ?(Источник.ОплатаДоговора = 2, Истина, Ложь);
Вроде соответствует языку 7.7? Или дело в другом. В чем?
 
 
   Cool_Profi
 
1 - 06.09.18 - 07:13
Нужно выгрузить модуль обработки (при выгрузке правил) и заменить им модуль в обработке, которую ты используешь
   Aleksey
 
2 - 06.09.18 - 07:13
Модуль не выгрузил. Для 7-ки нужно модуль выгрузки выгружать
   Chieftain
 
3 - 06.09.18 - 07:16
(0) #ЗагрузитьИзФайла не сработал.
Причина - или модуль не выгружен, или же не может его найти по "текущему" пути.

А твой код 77 не соответствует, булево давно ль в 77 появилось?
   Mikhail Volkov
 
4 - 06.09.18 - 07:53
(1) Что за модуль, откуда выгружать, из КД2? И куда загружать? Использую для выгрузки обработку "Универсальная выгрузка данных в формате XML" (V77Exp.ert) из дистрибутива КД2.
(3) Что, булево нет в 7.7, А как правильно, так:
 Значение = ?(Источник.ОплатаДоговора = 2, 1, 0);
А при загрузке поймет, что булево?
   Cool_Profi
 
5 - 06.09.18 - 08:00
(4) В обработке выгрузки правил из кд есть галка выгрузить модуль обрабботки.
Берёшь его и меняешь в твоей v77exp еёный модуль на выгруженный.
Это же азы работы связки кд-77
   Mikhail Volkov
 
6 - 06.09.18 - 08:14
(5) Не вижу такой галочки!? В КД открыты правила, кроме галочки "Открывать при входе" ничего. На какой вкладке ее искать?
   Mikhail Volkov
 
7 - 06.09.18 - 09:02
Нашел флажок "Выгружать модуль обработки выгрузки данных для платформы 7.7", выгрузился МодульВыгрузки.txt. Как его загрузить в "Универсальная выгрузка данных в формате XML" (V77Exp.ert)? В обработке только имена файлов правил и данных.
   Chieftain
 
8 - 06.09.18 - 09:05
(7) Либо заменяй в обработке модуль, либо напиши в начале:

#ЗагрузитьИзФайла <имя_текстового_файла_модуля>
   Mikhail Volkov
 
9 - 06.09.18 - 09:28
(8) V77Exp.ert открыть конфигуратором 7.7, и там заменить модель, или добавить (или заменить весь модуль?) #ЗагрузитьИзФайла <имя_текстового_файла_модуля>?
   Mikhail Volkov
 
10 - 06.09.18 - 10:08
Просто добавил #ЗагрузитьИзФайла <имя_текстового_файла_модуля>
Теперь при открытии обработки ошибки выдает... Например, не нравится ПКС_Контрагенты_ДокументУдостоверяющийЛичность_ПередВыгрузкойСвойства_10_11:

Если Источник.ВидКонтрагента = Перечисление.ВидыКонтрагентов.ЧастноеЛицо
    И Не (ПустаяСтрока(Источник.ДокументСерия) И ПустаяСтрока(Источник.ДокументНомер) И ПустаяСтрока(Источник.ДокументКемВыдан) И Не ЗначениеЗаполнено(Источник.ДокументДатаВыдачи)) Тогда
    Значение = ?(ЗначениеЗаполнено(Источник.ВидДокумента), СокрЛП(Источник.ВидДокумента), "Паспорт России") + ": " + СокрЛП(Источник.ДокументСерия) + " " + СокрЛП(Источник.ДокументНомер) + ?(ЗначениеЗаполнено(Источник.ДокументДатаВыдачи), " выдан: " + Источник.ДокументДатаВыдачи + " " + СокрЛП(Источник.ДокументКемВыдан), "");
Иначе
    Отказ = Истина;
КонецЕсли;

Как правильно под 7.7 написать?
 
 Рекламное место пустует
   Cool_Profi
 
11 - 06.09.18 - 10:10
Ну нету в 77 функции ЗначениеЗаполнено()
Не успели тогда завести ещё

ПустоеЗначение(<?>);
Синтаксис:
ПустоеЗначение(<Значение>)
Назначение:
Функция определяет, является ли пустым переданное в параметре значение. Возвращает число: 1- если значение пустое и 0 - если нет. При этом применяется следующее правило:
- значение неопределенного типа - всегда пустое;
- значение типа ''строка'' проверяется как в методе ПустаяСтрока;
- значение типа ''число'' проверяется на равенство нулю;
- значение типа ''дата'' проверяется на пустое значение;
- значения следующих типов: ''справочник'', ''перечисление'', ''документ'', ''счет'', ''вид субконто'', ''план счетов'', ''календарь'' проверяются как в методах Выбран  для соответствующего типа объекта.;
- значение типа ''СписокЗначений'' считается пустым, если в нем нет значений;
- значение типа ''ТаблицаЗначений'' считается пустым, если нет ни одной строки таблицы.
Параметры:
<Значение> - выражение любого типа данных, значение которого проверяется.
   tgu82
 
12 - 06.09.18 - 10:30
Запишу ветку в к себе. Полезная информация.
   Mikhail Volkov
 
13 - 06.09.18 - 13:52
(11) Спс, получилось. Где бы найти правила переноса КИ: адреса, телефоны, e-mail. В 7.7 это строки, в 8.3 табличные части справочников.
   Mikhail Volkov
 
14 - 07.09.18 - 11:25
Нашел правила переноса КИ в Торговля+Склад, редакция 9.2 --> УправлениеТорговлей, перенес к себе. Но ошибку во время выгрузки дает:
Ошибка исполнения обработчика:  ПКС_ПередВыгрузкой_ВидыКонтактнойИнформации_МожноИзменятьСпособРедактирования_Реквизит5
  - Значение не представляет агрегатный объект (Получить)
ПКС_ВидыКонтактнойИнформации_МожноИзменятьСпособРедактирования_ПередВыгрузкойСвойства_5_24:

Если (Источник.Получить("Тип") = "Адрес") ИЛИ (Источник.Получить("Тип") = "Телефон") Тогда
    Значение = 1;
Иначе
    Значение = 0;
КонецЕсли;

Вроде все нормально. Единственно что смущает у ПКО ВидыКонтактнойИнформации источника нет!?
   Mikhail Volkov
 
15 - 09.09.18 - 16:50
Кроме адресов и телефонов другой КИ нет, потому оставил только Значение = 1; Ошибок при выгрузке не стало. КИ передается.
В телефоны кроме его номера пишут всякие комментарии. Поэтому, чтобы их отделить добавил в ВыгрузитьТелефоны:

    ПозицияКомментарий = 0;
    Для Счетчик = 1 По СтрДлина(Телефон) Цикл
        Символ  = Сред(Телефон, Счетчик,  1);
        Если Найти("0123456789-(); ", Символ) = 0 Тогда
            ПозицияКомментарий = Счетчик;
            Прервать;
        КонецЕсли;
    КонецЦикла;
    Комментарий = "";
    Если ПозицияКомментарий > 1 Тогда
        Комментарий = Сред(Телефон, ПозицияКомментарий);
        Телефон        = СокрЛП(Лев(Телефон, ПозицияКомментарий -1));
    КонецЕсли;
    
    КоллекцияОбъектов.НоваяСтрока();
    КоллекцияОбъектов.Вид = Вид;
    КоллекцияОбъектов.Тип = "Телефон";
    КоллекцияОбъектов.Представление = Телефон;
    КоллекцияОбъектов.ЗначенияПолей = "НомерТелефона=" + Телефон + Симв(10) + ?(ПозицияКомментарий > 1, "Комментарий=" + Комментарий + Симв(10), "");
    КоллекцияОбъектов.НомерТелефона = Телефон;

Передается:
   Mikhail Volkov
 
16 - 09.09.18 - 17:01
"НомерТелефона=8(34397)2-09-54
Комментарий=соседи; 8906-807-96-13"

Но при открытии телефона контрагента Комментарий пустой!? Может КоллекцияОбъектов.ЗначенияПолей нужно добавлять не "Комментарий=" + Комментарий + Симв(10), а что-то другое. Что?
   Silgis
 
17 - 09.09.18 - 19:09
Заметка
   Mikhail Volkov
 
18 - 10.09.18 - 05:19
Расписал полный состав полей ЗначенияПолей для телефона:

    ПозицияКомментарий = 0;
    Для Счетчик = 1 По СтрДлина(Телефон) Цикл
        Символ  = Сред(Телефон, Счетчик,  1);
        Если Найти("0123456789-(); ", Символ) = 0 Тогда
            ПозицияКомментарий = Счетчик;
            Прервать;
        КонецЕсли;
    КонецЦикла;
    Комментарий = "";
    Представление = Телефон;
    Если ПозицияКомментарий > 1 Тогда
        Комментарий = Сред(Телефон, ПозицияКомментарий);
        Телефон        = СокрЛП(Лев(Телефон, ПозицияКомментарий -1));
        Если Найти("0123456789", Прав(Телефон, 1)) = 0 Тогда
            Телефон = СокрЛП(Лев(Телефон, СтрДлина(Телефон) - 1));
        КонецЕсли;
    КонецЕсли;
    Если СтрДлина(Комментарий) < 3 Тогда    // Мусор

        ПозицияКомментарий = 0;
    КонецЕсли;
    
    КоллекцияОбъектов.НоваяСтрока();
    КоллекцияОбъектов.Вид = Вид;
    КоллекцияОбъектов.Тип = "Телефон";
    КоллекцияОбъектов.Представление = Представление;
    КоллекцияОбъектов.ЗначенияПолей = ?(ПозицияКомментарий > 1, "Представление=" + Телефон + Симв(10) + "КодСтраны=" + Симв(10) + "КодГорода=" + Симв(10), "")
                                    + "НомерТелефона=" + Телефон + Симв(10)
                                    + ?(ПозицияКомментарий > 1, "Добавочный=" + Симв(10) + "Комментарий=" + Комментарий + Симв(10), "");
    КоллекцияОбъектов.НомерТелефона = Телефон;

Предается к примеру КоллекцияОбъектов.Представление:
8-953-820-73-43 дочь
КоллекцияОбъектов.ЗначенияПолей:
Представление=8-953-820-73-43
КодСтраны=
КодГорода=
НомерТелефона=8-953-820-73-43
Добавочный=
Комментарий=дочь

Но при открытии телефона контрагента Комментарий пустой!? Что ни так?
   hhhh
 
19 - 10.09.18 - 05:57
(18) Ну ЗначенияПолей - это же xml, какие-то там теги должны быть, а вы обычную строку лепите.
   Mikhail Volkov
 
20 - 10.09.18 - 06:54
(19) Нет, КоллекцияОбъектов.ЗначенияПолей, а из нее далее формируется xml.
Состав полей взял из другой конвертации (не из 7.7), алгоритм ПереносКИ:

СтрокиКИ = Запрос.Выполнить().Выгрузить();
Для Каждого СтрокаКИ Из СтрокиКИ Цикл
    
    ВидКИ = СтрокаКИ.Вид;
    ТипКИ = СтрокаКИ.Тип;
    
    ЗначенияПолей = Новый Структура;
    Если ВидКИ = Справочники.ВидыКонтактнойИнформации.ИнострАдресФизЛица Тогда
        
        ЗначенияПолей.Вставить("Представление",             СтрокаКИ.Представление);
        ЗначенияПолей.Вставить("Страна",                    СтрокаКИ.Поле1);
        ЗначенияПолей.Вставить("КодСтраны",                 "");
        ЗначенияПолей.Вставить("Индекс",                    "");
        ЗначенияПолей.Вставить("Регион",                    "");
        ЗначенияПолей.Вставить("КодРегиона",                "");
        ЗначенияПолей.Вставить("РегионСокращение",          "");
        ЗначенияПолей.Вставить("Район",                     "");
        ЗначенияПолей.Вставить("РайонСокращение",           "");
        ЗначенияПолей.Вставить("Город",                     "");
        ЗначенияПолей.Вставить("ГородСокращение",           "");
        ЗначенияПолей.Вставить("НаселенныйПункт",           "");
        ЗначенияПолей.Вставить("НаселенныйПунктСокращение", "");
        ЗначенияПолей.Вставить("Улица",                     "");
        ЗначенияПолей.Вставить("УлицаСокращение",           "");
        ЗначенияПолей.Вставить("ТипДома",                   "");
        ЗначенияПолей.Вставить("Дом",                       "");
        ЗначенияПолей.Вставить("ТипКорпуса",                "");
        ЗначенияПолей.Вставить("Корпус",                    "");
        ЗначенияПолей.Вставить("ТипКвартиры",               "");
        ЗначенияПолей.Вставить("Квартира",                  "");
        ЗначенияПолей.Вставить("Комментарий",               СтрокаКИ.Комментарий);
        
    ИначеЕсли ТипКИ = Перечисления.ТипыКонтактнойИнформации.Адрес Тогда
        
        ЗначенияПолей.Вставить("Представление",             СтрокаКИ.Представление);
        ЗначенияПолей.Вставить("Страна",                    "РОССИЯ");
        ЗначенияПолей.Вставить("КодСтраны",                 "643");
        ЗначенияПолей.Вставить("Индекс",                    СтрокаКИ.Поле1);
        ЗначенияПолей.Вставить("Регион",                    СтрокаКИ.Поле2);
        ЗначенияПолей.Вставить("КодРегиона",                "");
        ЗначенияПолей.Вставить("РегионСокращение",          "");
        ЗначенияПолей.Вставить("Район",                     СтрокаКИ.Поле3);
        ЗначенияПолей.Вставить("РайонСокращение",           "");
        ЗначенияПолей.Вставить("Город",                     СтрокаКИ.Поле4);
        ЗначенияПолей.Вставить("ГородСокращение",           "");
        ЗначенияПолей.Вставить("НаселенныйПункт",           СтрокаКИ.Поле5);
        ЗначенияПолей.Вставить("НаселенныйПунктСокращение", "");
        ЗначенияПолей.Вставить("Улица",                     СтрокаКИ.Поле6);
        ЗначенияПолей.Вставить("УлицаСокращение",           "");
        ЗначенияПолей.Вставить("ТипДома",                   ?(ЗначениеЗаполнено(СтрокаКИ.ТипДома),Метаданные.Перечисления.ТипыДомов.ЗначенияПеречисления.Получить(Перечисления.ТипыДомов.Индекс(СтрокаКИ.ТипДома)).Имя,"")); 
        ЗначенияПолей.Вставить("Дом",                       СтрокаКИ.Поле7);
        ЗначенияПолей.Вставить("ТипКорпуса",                ?(ЗначениеЗаполнено(СтрокаКИ.ТипКорпуса),Метаданные.Перечисления.ТипыКорпусов.ЗначенияПеречисления.Получить(Перечисления.ТипыКорпусов.Индекс(СтрокаКИ.ТипКорпуса)).Имя,""));
        ЗначенияПолей.Вставить("Корпус",                    СтрокаКИ.Поле8);
        ЗначенияПолей.Вставить("ТипКвартиры",               ?(ЗначениеЗаполнено(СтрокаКИ.ТипКвартиры),Метаданные.Перечисления.ТипыКвартир.ЗначенияПеречисления.Получить(Перечисления.ТипыКвартир.Индекс(СтрокаКИ.ТипКвартиры)).Имя,""));
        ЗначенияПолей.Вставить("Квартира",                  СтрокаКИ.Поле9);
        ЗначенияПолей.Вставить("Комментарий",               СтрокаКИ.Комментарий);
        
    ИначеЕсли ТипКИ = Перечисления.ТипыКонтактнойИнформации.Телефон Тогда
        
        ЗначенияПолей.Вставить("Представление",             СтрокаКИ.Представление);
        ЗначенияПолей.Вставить("КодСтраны",                 СтрокаКИ.Поле1);
        ЗначенияПолей.Вставить("КодГорода",                 СтрокаКИ.Поле2);
        ЗначенияПолей.Вставить("НомерТелефона",             СтрокаКИ.Поле3);
        ЗначенияПолей.Вставить("Добавочный",                СтрокаКИ.Поле4);
        ЗначенияПолей.Вставить("Комментарий",               СтрокаКИ.Комментарий);
        
    Иначе  
        
        ЗначенияПолей.Вставить("Представление",             СтрокаКИ.Представление);
        ЗначенияПолей.Вставить("Комментарий",               СтрокаКИ.Комментарий);
        
    КонецЕсли;
    
    Результат = "";
    Для Каждого КлючИЗначение Из ЗначенияПолей Цикл
        Если ПустаяСтрока(КлючИЗначение.Значение) Тогда
            Продолжить;
        КонецЕсли;
        Результат = Результат + ?(Результат = "", "", Символы.ПС)+ КлючИЗначение.Ключ + "=" + СтрЗаменить(КлючИЗначение.Значение, Символы.ПС, Символы.ПС + Символы.Таб);
    КонецЦикла;
    
    НоваяСтрокаКИ = КоллекцияОбъектов.Добавить();
    ЗаполнитьЗначенияСвойств(НоваяСтрокаКИ, СтрокаКИ);
    НоваяСтрокаКИ.ЗначенияПолей = Результат;
    
КонецЦикла;
   Mikhail Volkov
 
21 - 10.09.18 - 12:54
А Симв(10) и Символы.ПС + Символы.Таб одно и тоже?
   hhhh
 
22 - 10.09.18 - 13:21
(21) нет
   hhhh
 
23 - 10.09.18 - 13:22
(21) если одно и то же, зачем бы они тогда заменяли?
   Mikhail Volkov
 
24 - 10.09.18 - 16:27
(23) Из разных конвертаций: Симв(10) - из ТиС 7.7 в УТ, Символы.ПС + Символы.Таб - из УПП в ERP. Наверное Символы.ПС и Символы.Таб в 7.7 нет.
   Mikhail Volkov
 
25 - 12.09.18 - 06:34
КодСтраны и КодГорода вписал, из номера убрал все кроме цифр:

    ПозицияКомментарий = 0;
    Для Счетчик = 1 По СтрДлина(Телефон) Цикл
        Символ  = Сред(Телефон, Счетчик,  1);
        Если Найти("0123456789-(); ", Символ) = 0 Тогда
            ПозицияКомментарий = Счетчик;
            Прервать;
        КонецЕсли;
    КонецЦикла;
    Комментарий = "";
    Представление = Телефон;
    Если ПозицияКомментарий > 1 Тогда
        Комментарий = Сред(Телефон, ПозицияКомментарий);
        Телефон        = СокрЛП(Лев(Телефон, ПозицияКомментарий -1));
        Если Найти("0123456789", Прав(Телефон, 1)) = 0 Тогда
            Телефон = СокрЛП(Лев(Телефон, СтрДлина(Телефон) - 1));
        КонецЕсли;
    КонецЕсли;
    Если СтрДлина(Комментарий) < 3 Тогда    // Мусор

        ПозицияКомментарий = 0;
    КонецЕсли;
    КодСтраны = "";
    КодГорода = "";    
    Если (ПозицияКомментарий > 1) И (Лев(Телефон, 1) = "8") Тогда
        КодСтраны = "8";
        Телефон = СокрЛП(Прав(Телефон, СтрДлина(Телефон) - 1));    
        Если Найти("0123456789(", Лев(Телефон, 1)) = 0 Тогда
            Телефон = СокрЛП(Прав(Телефон, СтрДлина(Телефон) - 1));
        КонецЕсли;
        Если (Найти(Телефон, "(") = 0) И (Найти(Телефон, ")") = 0) Тогда
            ПозТире = Найти(Телефон, "-");
            Если ПозТире > 2 Тогда
                КодГорода = СокрЛП(Лев(Телефон, ПозТире - 1));
                Телефон = СокрЛП(Сред(Телефон, ПозТире + 1));
            КонецЕсли;
        ИначеЕсли (Найти(Телефон, ")") - Найти(Телефон, "(") > 2) И (Найти(Телефон, ")") < СтрДлина(Телефон)) Тогда
            КодГорода = СокрЛП(Сред(Телефон, Найти(Телефон, "(") + 1, Найти(Телефон, ")") - Найти(Телефон, "(") - 1));
            Телефон = СокрЛП(Сред(Телефон, Найти(Телефон, ")") + 1));
            Если Найти("0123456789", Лев(Телефон, 1)) = 0 Тогда
                Телефон = СокрЛП(Прав(Телефон, СтрДлина(Телефон) - 1));
            КонецЕсли;
        КонецЕсли;
        Если ПустаяСтрока(КодГорода) = 0 Тогда
             Цифры = "";
            Для Счетчик = 1 По СтрДлина(Телефон) Цикл
                Символ  = Сред(Телефон, Счетчик,  1);
                Если Найти("0123456789", Символ) > 0 Тогда
                    Цифры = Цифры + Символ;
                КонецЕсли;
            КонецЦикла;
            Телефон = Цифры;
        КонецЕсли;
    КонецЕсли;
    
    КоллекцияОбъектов.НоваяСтрока();
    КоллекцияОбъектов.Вид = Вид;
    КоллекцияОбъектов.Тип = "Телефон";
    КоллекцияОбъектов.Представление = Представление;
    КоллекцияОбъектов.ЗначенияПолей = ?(ПозицияКомментарий > 1, "Представление=" + Телефон + Симв(10) + "КодСтраны=" + КодСтраны + Симв(10) + "КодГорода=" + КодГорода + Симв(10), "")
                                    + "НомерТелефона=" + Телефон + Симв(10)
                                    + ?(ПозицияКомментарий > 1, "Добавочный=" + Симв(10) + "Комментарий=" + Комментарий + Симв(10), "");
    КоллекцияОбъектов.НомерТелефона = Телефон;

Предается к примеру КоллекцияОбъектов.Представление:
8-953-820-73-43 дочь
КоллекцияОбъектов.ЗначенияПолей:
Представление=8-953-820-73-43
КодСтраны=8
КодГорода=953
НомерТелефона=8207343
Добавочный=
Комментарий=дочь

Но при открытии телефона контрагента Комментарий пустой!?
И заметил КодГорода в форме совсем другой, вроде из последних, что я вводил (правил) другому контрагенту.
   Mikhail Volkov
 
26 - 12.09.18 - 11:36
Переношу данные из 7.7 в 8.3 конфигурация МФО. Начал с контрагентов и физ. лиц. В демо-базе при открытии контрагента, если его вид физическое лицо, то открывается форма физ. лица. А в моей такого не происходит!? Видно что-то не перенес. Что?
В справочнике Физические лица есть ссылка на Контрагенты. А в Контрагентах - нет. В самой форме списка Контрагенты не видно, есть только:

&НаКлиенте
Процедура СписокПередНачаломИзменения(Элемент, Отказ)
    
    Если НЕ Элемент.ТекущиеДанные.ЭтоГруппа Тогда
        КлючеваяОперация = "ОткрытиеФормыКонтрагенты";
        ОценкаПроизводительностиКлиент.НачатьЗамерВремени(Истина, КлючеваяОперация);
    КонецЕсли;
    
КонецПроцедуры

Как определить что не хватает?
   Mikhail Volkov
 
27 - 12.09.18 - 12:46
Куда поставить точку останова, чтобы отладчиком в демо-базе посмотреть, по какому признаку принимается решение что открывать форму контрагента или физ. лица?
   Вафель
 
28 - 12.09.18 - 12:47
(27) поставь в конечной форме точку останова и посмотри стек вызовов
   Mikhail Volkov
 
29 - 12.09.18 - 14:13
(28) Ну поставил точку останова в форме Контрагенты в процедуре ПриОткрытии(). Стек вызовов выдал лишь одну строчку: Справочник.Контрагенты.Форма.ФормаЭлемента.Форма.ПриОткрытии(). А предыдущие где? Никогда не пользовался стеком вызовов, не умею...
   Mikhail Volkov
 
30 - 13.09.18 - 11:44
Еще поставил точку останова в форме списка Контрагенты в процедуре СписокПередНачаломИзменения(). Когда начал открывать контрагента стек вызовов выдал строчку: Справочник.Контрагенты.Форма.ФормаСписка.Форма.СписокПередНачаломИзменения(). Прошагал процедуру, остановилась на 2-й точке. Стек вызовов заменил строку на Справочник.Контрагенты.Форма.ФормаЭлемента.Форма.ПриОткрытии(). Почему заменил, не вывел процедуры, которые выполнял между ними?
   hhhh
 
31 - 13.09.18 - 11:54
(30) вроде нет таких форм. Это какая конфа у вас?
   Mikhail Volkov
 
32 - 13.09.18 - 12:16
(31) 1С 8.3 Управление микрофинансовой организацией и кредитным потребительским кооперативом ПРОФ, редакция 3.0
   hhhh
 
33 - 13.09.18 - 12:57
(32) не знаю тогда. вообще-то в типовых нигде нет, чтобы форма физлица вызывалась. Обычно  это та же форма Контрагенты, а на ней закладочка ФизЛицо, и у нее видимость включается Истина или Ложь.
 
 
   Mikhail Volkov
 
34 - 13.09.18 - 14:33
Нет, где-то проводится анализ какую форму открывать: Контрагенты или ФизическиеЛица. Где найти это место, как? Стек вызовов мне поможет в этом? (никогда не пользовался)
   Mikhail Volkov
 
35 - 14.09.18 - 07:13
Обычно отладка начинается по точке останова, или "Остановка по ошибке". А вроде есть еще такой режим: когда в программе начинается какое-то действие, запускается какой-то процесс. Например, фоновое задание запускается, или пользователь что-то начал делать... Как включить этот режим?
   victuan1
 
36 - 14.09.18 - 07:24
Для 1С 7.7 луч.ше использовать не КД2.0, а это http://catalog.mista.ru/public/14395/
Удобнее в разы
   Mikhail Volkov
 
37 - 14.09.18 - 10:31
(36) С 7.7 вроде все... Вот с отладкой в 8.3 УФ не получается, не могу отловить то место, где анализируется какую форму открывать: контрагента или физ. лица?
   hhhh
 
38 - 14.09.18 - 10:51
(37) по идее процедура ОбработкаПолученияФормы

смотри в модуле менеджера справочника
   Mikhail Volkov
 
39 - 14.09.18 - 12:49
А режим описанный в (35) существует? Не приснилось же мне...
   hhhh
 
40 - 14.09.18 - 23:29
(39) в смысле? Ну то, что фоновые запускаются - это 100%. Даже можете не сомневаться.
   GreyK
 
41 - 15.09.18 - 03:48
(0) За это "Значение = ?(Источник.ОплатаДоговора = 2, Истина, Ложь);
" надо сразу в больничку отправлять.
   GreyK
 
42 - 15.09.18 - 03:51
+ (41) Ну нет в 7.7 понятия "булево".
   Mikhail Volkov
 
43 - 15.09.18 - 06:36
(40) Запускается процесс отладки по точке останова? А без нее может запуститься? Например ждем выполнения назначенного задания... задание запустилось, и начался процесс отладки, видно откуда оно запустилось!?
Запуск фонового задания - это к примеру... Мне нужен этот режим, чтобы выяснить где анализируется что открывать контрагента или физ. лица? Начинаю открывать контрагента, и сразу начались отладка...
(42) С 7.7 вроде все...
   victuan1
 
44 - 17.09.18 - 05:43
(43) Что означает загадочная фраза "С 7.7 вроде все...", которая повторяется уже второй раз?
   Mikhail Volkov
 
45 - 17.09.18 - 08:37
(44) Пока все что можно выгрузить выгрузил. Сейчас в 8.3 разбираюсь, с отладкой... (43)
   Mikhail Volkov
 
46 - 20.09.18 - 11:04
Выяснить где анализируется что открывать контрагента или физ. лица так и не нашел. Но проблему свою решил, нашел в справочнике Контрагенты ссылку на физ. лицо, написал обработку по заполнению этой ссылки, теперь работает как надо.
Теперь снова возникла проблема уже с УПП/КА1: документ ПоступлениеТоваровУслуг, тогда в нем одни услуги, то склад не ставится. После открытия такого документа Модифицированность формы становится Истина, хотя документ не изменялся! Одну причину нашел, в РаботаСДиалогами.УстановитьТипСкладаОрдера(ЭтотОбъект, ЭлементыФормы); ПриОткрытии(), устранил. А вторую причину никак не найду: Модифицированность формы становится Истина при переходе на вкладку "Услуги". Процедура ОсновнаяПанельПриСменеСтраницы(Элемент, ТекущаяСтраница) отсутствует.
Опять понадобился режим отладки без точки останова...
   Salimbek
 
47 - 20.09.18 - 11:14
(46) Делаешь так: открываешь свой документ, в это время в Конфигураторе включаешь "Замер времени", в своем документе в 1С открываешь нужную вкладку и в Конфигураторе останавливаешь замер. Потом смотришь - в какие модули код заходил, выбираешь то, что понравится и ставишь там точку отладки.
   Mikhail Volkov
 
48 - 21.09.18 - 08:10
(47) "Замер времени" вываливает большой список процедур, и не хронометрическом порядке. Но все же удалось найти нужную УслугиПриАктивизацииСтроки(), где устанавливается модифицированность формы. В ней вызывается РаботаСДиалогами.ПриВыбореСчетаВТабличномПоле(), но что в ней может устанавливать модифицированность формы понять не могу!?

// Процедура установки типа и доступности субконто в зависимости от  выбранного счета

//
// Параметры:

//      Счет - выбранный счет
//      Форма - форма(или табличное поле) на которой расположены счет и субконто

//      Префикс - префекс наименования субконто. к префиксу добавляется номер субконто на счете
//                для подписи с наименованием субконто предпологается имя

//                вида "Надпись" + Префикс + НомерСубконто
//                в случае если форма - это таб.поле, то надписи не устанавливаются

//
Процедура ПриВыбореСчетаВТабличномПоле(Счет, Субконто1, КолонкаСубконто1, Субконто2, КолонкаСубконто2, Субконто3, КолонкаСубконто3, КолонкаСчет = НЕОПРЕДЕЛЕНО, ТолькоПросмотр = ЛОЖЬ) Экспорт
    
    ЭлементыСубконто = Новый Структура("Субконто1,КолонкаСубконто1,Субконто2,КолонкаСубконто2,Субконто3,КолонкаСубконто3", Субконто1, КолонкаСубконто1, Субконто2, КолонкаСубконто2, Субконто3, КолонкаСубконто3);
    
    ЧислоАктивныхСубконто = Счет.ВидыСубконто.Количество();
    
    Для Сч = 1 По ЧислоАктивныхСубконто Цикл
        ТипСубк = Счет.ВидыСубконто[Сч - 1].ВидСубконто.ТипЗначения;
        
        ЭлементыСубконто["КолонкаСубконто" + Сч].ТолькоПросмотр = ТолькоПросмотр;
        
        Если ТипЗнч(ЭлементыСубконто["КолонкаСубконто" + Сч]) = Тип("ПолеВвода") Тогда
            ЭлементыСубконто["КолонкаСубконто" + Сч].ВыбиратьТип = (ТипСубк.Типы().Количество() > 1);
            ЭлементыСубконто["КолонкаСубконто" + Сч].КнопкаОчистки = (ТипСубк.Типы().Количество() > 1);    
        Иначе
            ЭлементыСубконто["КолонкаСубконто" + Сч].ЭлементУправления.ВыбиратьТип = (ТипСубк.Типы().Количество() > 1);
        КонецЕсли; 
            
        // Чтобы не устанавливался флаг модифицированности при открытии формы

        Если ТипСубк.ПривестиЗначение(ЭлементыСубконто["Субконто" + Сч]) <> ЭлементыСубконто["Субконто" + Сч] Тогда
            ЭлементыСубконто["Субконто" + Сч] = ТипСубк.ПривестиЗначение(ЭлементыСубконто["Субконто" + Сч]);
        КонецЕсли;
        
    КонецЦикла;
    
    Для Сч = (ЧислоАктивныхСубконто + 1) По 3 Цикл
            
        Если Не ЭлементыСубконто["Субконто" + Сч] = Неопределено Тогда
            ЭлементыСубконто["Субконто" + Сч] = Неопределено;
        КонецЕсли;
        
        ЭлементыСубконто["КолонкаСубконто" + Сч].ТолькоПросмотр = Истина;
        
    КонецЦикла;
    
    Если КолонкаСчет <> Неопределено Тогда
        КолонкаСчет.ТолькоПросмотр = ТолькоПросмотр;
    КонецЕсли;

    Если Не Субконто1 = ЭлементыСубконто.Субконто1 Тогда
        Субконто1 = ЭлементыСубконто.Субконто1;
    КонецЕсли;
    Если Не Субконто2 = ЭлементыСубконто.Субконто2 Тогда
        Субконто2 = ЭлементыСубконто.Субконто2;
    КонецЕсли;
    Если Не Субконто3 = ЭлементыСубконто.Субконто3 Тогда
        Субконто3 = ЭлементыСубконто.Субконто3;
    КонецЕсли;
    
КонецПроцедуры// ПриВыбореСчета()
   Mikhail Volkov
 
49 - 21.09.18 - 13:00
За комментировал:
        // Чтобы не устанавливался флаг модифицированности при открытии формы

        Если ТипСубк.ПривестиЗначение(ЭлементыСубконто["Субконто" + Сч]) <> ЭлементыСубконто["Субконто" + Сч] Тогда
        //    ЭлементыСубконто["Субконто" + Сч] = ТипСубк.ПривестиЗначение(ЭлементыСубконто["Субконто" + Сч]);

        КонецЕсли;
флаг модифицированности теперь не устанавливается. Но правильно ли это?
 
 Рекламное место пустует
   Mikhail Volkov
 
50 - 22.09.18 - 05:34
(49) Не, неправильно, поправил в правилах обмена ПКО_ПоступлениеОбщихРасходов_ПослеЗагрузкиОбъекта, и никаких изменений в конфигурацию вносить не пришлось:

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

    ЭлементыСубконто = Новый Структура("Субконто1,Субконто2,Субконто3", СтрокаТЧ.Субконто1, СтрокаТЧ.Субконто2, СтрокаТЧ.Субконто3);
    Для Сч = 1 По ЧислоАктивныхСубконто Цикл
        ТипСубк = СтрокаТЧ.СчетЗатрат.ВидыСубконто[Сч - 1].ВидСубконто.ТипЗначения;
        ЭлементыСубконто["Субконто" + Сч] = ТипСубк.ПривестиЗначение(ЭлементыСубконто["Субконто" + Сч]);
    КонецЦикла;
    
    Для Сч = (ЧислоАктивныхСубконто + 1) По 3 Цикл
        Если Не ЭлементыСубконто["Субконто" + Сч] = Неопределено Тогда
            ЭлементыСубконто["Субконто" + Сч] = Неопределено;
        КонецЕсли;
    КонецЦикла;
    
    СтрокаТЧ.Субконто1 = ЭлементыСубконто.Субконто1;
    СтрокаТЧ.Субконто2 = ЭлементыСубконто.Субконто2;
    СтрокаТЧ.Субконто3 = ЭлементыСубконто.Субконто3;
    
    ЧислоАктивныхСубконто = СтрокаТЧ.СчетЗатратНУ.ВидыСубконто.Количество();
    ЭлементыСубконто = Новый Структура("Субконто1,Субконто2,Субконто3", СтрокаТЧ.СубконтоНУ1, СтрокаТЧ.СубконтоНУ2, СтрокаТЧ.СубконтоНУ3);
    Для Сч = 1 По ЧислоАктивныхСубконто Цикл
        ТипСубк = СтрокаТЧ.СчетЗатратНУ.ВидыСубконто[Сч - 1].ВидСубконто.ТипЗначения;
        ЭлементыСубконто["Субконто" + Сч] = ТипСубк.ПривестиЗначение(ЭлементыСубконто["Субконто" + Сч]);
    КонецЦикла;
    
    Для Сч = (ЧислоАктивныхСубконто + 1) По 3 Цикл
        Если Не ЭлементыСубконто["Субконто" + Сч] = Неопределено Тогда
            ЭлементыСубконто["Субконто" + Сч] = Неопределено;
        КонецЕсли;
    КонецЦикла;
    
    СтрокаТЧ.СубконтоНУ1 = ЭлементыСубконто.Субконто1;
    СтрокаТЧ.СубконтоНУ2 = ЭлементыСубконто.Субконто2;
    СтрокаТЧ.СубконтоНУ3 = ЭлементыСубконто.Субконто3;    //-МВ

КонецЦикла;
   Mikhail Volkov
 
51 - 22.09.18 - 08:00
А режим отладки без точки останова (спрашивал в (43), (46)) включается просто: Отладка/Остановить Книга знаний: Хитрости отладки



Список тем форума
Рекламное место пустует Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Рекламное место пустует