Имя: Пароль:
1C
 
Ключ структуры
,
0 Droning
 
18.06.18
15:59
доброго времени суток, подскажите, пожалуйста, правильно ли я переношу счетчик в качестве ключа в = структуру?



Функция СформироватьСтруктуруЗначений()

        
    Возврат Новый Структура("ОбъектСинх, СтатусСостояния");         

КонецФункции

    
//&НаКлиенте
Процедура ДобавитьИнформациюВЛог(Инф, Статус, Тип)
    
    Если НЕ ЗначениеЗаполнено(СчетчикГлобальный) тогда
        СчетчикГлобальный = 1;    
    КонецЕсли;
    
    СтруктураЗн = СформироватьСтруктуруЗначений();
    СтруктураЗн.ОбъектСинх = Инф;
    СтруктураЗн.СтатусСостояния = Статус;
    Если Тип = "Контрагент" Тогда
        МассивДанных.Вставить("СчетчикГлобальный" + СчетчикГлобальный, СтруктураЗн);
    ИначеЕсли Тип = "Счет" Тогда
        МассивДанныхСчета.Вставить("СчетчикГлобальный" + СчетчикГлобальный, СтруктураЗн);    
    ИначеЕсли Тип = "Рализация" Тогда
        МассивДанныхРеализации.Вставить("СчетчикГлобальный" + СчетчикГлобальный, СтруктураЗн);
    ИначеЕсли Тип = "ПлатежВходящий" Тогда
        //Объект.МассивДанныхРеализации.Вставить("СчетчикГлобальный" + СчетчикГлобальный, СтруктураЗн);
    ИначеЕсли Тип = "ПлатежИсходящий" Тогда
        
    КонецЕсли;
    
    СчетчикГлобальный = СчетчикГлобальный + 1;
    
КонецПроцедуры
1 hhhh
 
18.06.18
16:06
(0) до 999 должно работать
2 Droning
 
18.06.18
16:11
почему-то эта структура не заполняется...
3 Droning
 
18.06.18
16:11
СчетчикИзмененных = 0;
    СчетчикДобавленных = 0;
    Если МассивДанных.Количество()>0 Тогда
        
        Для Каждого Элемент из МассивДанных Цикл
            
            ТекстовыйФайл.ДобавитьСтроку("" + СокрЛП(ТекущаяДата()) + " " + Элемент.СтатусСостояния + " контрагент: " + Элемент.ОбъектСинх);
            
            Если Элемент.СтатусСостояния = "Изменен" Тогда
                СчетчикИзмененных = СчетчикИзмененных + 1;
            ИначеЕсли Элемент.СтатусСостояние = "" Тогда
                СчетчикДобавленных = СчетчикДобавленных + 1;
            КонецЕсли;
            
        КонецЦикла;
        ТекстовыйФайл.ДобавитьСтроку("Всего создано контрагентов" + СчетчикДобавленных + "");

        ТекстовыйФайл.ДобавитьСтроку("Всего измененно контрагентов" + СчетчикИзмененных + "");
        ТекстовыйФайл.ДобавитьСтроку("Всего создано и изменено: " +  МассивДанных.Количество() + " контрагентов");
        
    КонецЕсли;
4 Droning
 
18.06.18
16:12
этот код отладчик проскакиевает.. может тут что-то не так? Или данные не заполняются в структуру МассивДанных  по другой причине?
5 tesseract
 
18.06.18
16:17
(2) Во первых она у тебя на сервере формируется каждый раз - у тебя на процедуре нет "&НаКлиенте".

Отладчик поэтому ее и проскакивает. Переменные скорее всего недоступны на сервере, если ты их как реквизиты формы не объявил.
6 Droning
 
18.06.18
16:20
(5) в реквимзитах формы есть переменная МассивДанных... и счетчики.
7 Chikko
 
18.06.18
16:23
(6) Значит не выполняется ни одно из условий. Скинь пример вызова процедуры.
8 tesseract
 
18.06.18
16:25
(6) МассивДанных какой тип значений ?
9 Droning
 
18.06.18
16:25
(8) произвольный
10 Droning
 
18.06.18
16:26
а что если массивДанных пихнуть в реквизиты самой обработки? и обращаться Объект.МассивДанных?
11 tesseract
 
18.06.18
16:27
(9) А когда из него структура-то создается? И зачем вообще на сервере этот код выполнять?
12 hhhh
 
18.06.18
16:27
(9) а Статус какого типа? Точно строка?
13 tesseract
 
18.06.18
16:28
(10) А зачем вообще тут структура, если можно массивом обойтись или таблицей значений?
14 tesseract
 
18.06.18
16:29
(12) Не "статус" уж тогда, а "Тип". Он тут сравнивается.
15 Droning
 
18.06.18
16:29
ТЗ не передается с клиента на сервер насколько я знаю.. а вот по поводу массива уже не помню . опытный дядька говорил, что тут лучше структурой.
16 Droning
 
18.06.18
16:30
(12) Статус точно строка
17 Droning
 
18.06.18
16:30
(11) структура создается при записи контрагента после синхронизации с утм5
18 Droning
 
18.06.18
16:31
(7) Если (СтрокаТЗ.Статус = "new_customer") ИЛИ ((СтрокаТЗ.Статус = "modified_customer") И (СтрокаТЗ.ic_id = "")) Тогда
            //<< Карачун М.И. 18.01.2011
            // Сначала поищем контрагента, потом будем создавать
            // НовКонтрагент = Контрагенты.СоздатьЭлемент();
            // попробуем найти по ИНН, если ИНН пустой то искать не будем
            // потому что у Физ лиц он может быть не заполнен
            НайденныйКонтрагент = Неопределено;
            
            Если СокрЛП(СтрокаТЗ.inn) <> "" Тогда
                НайденныйКонтрагент = Контрагенты.НайтиПоРеквизиту("ИНН",СокрЛП(СтрокаТЗ.inn));
            КонецЕсли;
            
            // если не нашли попробуем по наименованию
            Если НайденныйКонтрагент = Неопределено ИЛИ НайденныйКонтрагент.Пустая() Тогда
                НайденныйКонтрагент = Контрагенты.НайтиПоНаименованию(СокрЛП(СтрокаТЗ.name));    
            КонецЕсли;
            
            // если и теперь не нашли то создадим
            Если НЕ НайденныйКонтрагент.Пустая() Тогда
                // Отметим в строке ТЗ вновь полученный код контрагента.
                СтрокаТЗ.ic_id = НайденныйКонтрагент.Код;
                //Перезапишем Емеил
                
                Если СокрЛП(СтрокаТЗ.email) <> "" Тогда
                    кОбъект = НайденныйКонтрагент.ПолучитьОбъект();
                    Контакты = кОбъект.КонтактнаяИнформация;
                    НужнаяСтрока = Контакты.Найти(Справочники.ВидыКонтактнойИнформации.EmailКонтрагенты, "Вид");
                    Если НужнаяСтрока = Неопределено Тогда
                        НовКонтакт = Контакты.Добавить();
                    Иначе
                        НовКонтакт = НужнаяСтрока;
                    КонецЕсли;
                    НовКонтакт.Тип = Перечисления.ТипыКонтактнойИнформации.АдресЭлектроннойПочты;
                    НовКонтакт.Вид = Справочники.ВидыКонтактнойИнформации.EmailКонтрагенты;
                    НовКонтакт.Представление = СокрЛП(СтрокаТЗ.email);
                    //НовКонтрагент.Записать();
                    кОбъект.Записать();
                КонецЕсли;                
                
                ДобавитьИнформациюВЛог(НайденныйКонтрагент.Ссылка, "Изменен", "Контрагент");
                
                Сообщить("Контрагент " + НайденныйКонтрагент + " найден и синхронизирован");
19 Droning
 
18.06.18
16:33
кажется мне что тут какой-то геморрой с переносом инфы с клиента на сервер или что-то около того..
20 tesseract
 
18.06.18
16:37
(15) ЗначениеВРеквизитФормы() и все передается. У Дядьки опыт не в ту сторону. Структура больше места занимает.


(19) Осталось выяснить что.
21 hhhh
 
18.06.18
16:40
(20) это раньше было  ЗначениеВРеквизитФормы().

теперь работает всё и без него. И на клиенте и на сервере. Главное чтобы у тз были колонки определены.
22 Droning
 
18.06.18
16:49
(21) (20) так что собственно сделать? если действовать через это ЗначениеВРеквизитФормы(), то как конкретно?
23 tesseract
 
18.06.18
16:56
(21) С чего это "Было"? ТаблицаЗначений и ДанныеФормыКоллекция это разные типы данных.  У них есть общие методы - это да.

(22) Сделай тз как реквизит формы и добавь туда поля, кинь ее на форму и смотри свой лог. Потом просто пиши туда, а не в эти кучи массивов. В твоем случае РеквизитФормывЗначение и ЗначениеВРеквизитФормы могут и не понадобиться.
24 hhhh
 
18.06.18
16:58
(23) ну я уже ЗначениеВРеквизитФормы() года три не использую. Нет необходимости.
25 Droning
 
18.06.18
17:07
{ВнешняяОбработка.СинхронизацияДанныхСUTM5_БП30.Форма.ФормаУправляемая.Форма(3015)}: Значение не является значением объектного типа (Вставить)
        МассивДанных.Вставить("СчетчикГлобальный" + СчетчикГлобальный, СтруктураЗн);
26 Droning
 
18.06.18
17:07
как-то так
27 tesseract
 
18.06.18
17:10
(25) Добавь в "ПриСозданииНаСервере" МассивДанных = Новый Структура()
28 hhhh
 
18.06.18
17:11
(26) или сделай МассивДанных тип ТЗ с 3мя колонками
29 tesseract
 
18.06.18
17:19
(28) Данный вариант я уже описал вроде как. От счетчика и ИначеЕсли сразу избавляешься.
30 hhhh
 
18.06.18
17:21
(29) согласен
31 Droning
 
18.06.18
17:32
(27) не сработало
32 Droning
 
18.06.18
17:34
(28) немного не понимаю ход мысли. какими должны быть эти колонки? Инф, Статус, Тип?
33 hhhh
 
18.06.18
17:35
(32) да
34 dezss
 
18.06.18
17:35
Э...может ТС озвучит задачу?
35 Droning
 
18.06.18
17:37
(26)  вообще какова суть... мне надо сделать так, чтобы файл на клиенте с логом синхронизации  записался. причем синхронизируются счета, реализации и контрагенты.(3разных типа). они создаются или изменяются(2 состояния). тип и состояние должно отображаться в логе.
36 tesseract
 
18.06.18
22:38
(35)Зачем на клиенте? Если просто информацию выдать оператору - он на нее положит свой лак для волос. Если будут терки - скажет, что ничего не видела и тд.

Если для целей отладки - пиши в журнал регистрации. И для разрешения споров сразу результат ответы оператора на все твои модальные диалоги вроде "Я ведь тебя явно предупредил, пока ты обсуждала тортик от своей свахи? "
37 Tateossian
 
19.06.18
02:12
(0) Лучше через соответствие. Конвертация в строки тогда не нужна будет.
38 Сияющий в темноте
 
19.06.18
10:25
(37) правильно,соответствие,это та же структура,только с произвольным ключом.
Если хочется использовать структуру,то ключ проще формировать,добавляя символ к сжатому числу
"К"+Формат(Счетчик,"ЧГ=0;ЧН=0;")
39 Адинэснег
 
19.06.18
10:32
(0) какой то песец рождается
Чтобы обнаруживать ошибки, программист должен иметь ум, которому доставляет удовольствие находить изъяны там, где, казалось, царят красота и совершенство. Фредерик Брукс-младший