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



Ключ структуры

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



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

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

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

    
//&НаКлиенте

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

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

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

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

            // Сначала поищем контрагента, потом будем создавать

            // НовКонтрагент = Контрагенты.СоздатьЭлемент();

            // попробуем найти по ИНН, если ИНН пустой то искать не будем

            // потому что у Физ лиц он может быть не заполнен

            НайденныйКонтрагент = Неопределено;
            
            Если СокрЛП(СтрокаТЗ.inn) <> "" Тогда 
                НайденныйКонтрагент = Контрагенты.НайтиПоРеквизиту("ИНН",СокрЛП(СтрокаТЗ.inn));
            КонецЕсли;
            
            // если не нашли попробуем по наименованию

            Если НайденныйКонтрагент = Неопределено ИЛИ НайденныйКонтрагент.Пустая() Тогда
                НайденныйКонтрагент = Контрагенты.НайтиПоНаименованию(СокрЛП(СтрокаТЗ.name));    
            КонецЕсли;
            
            // если и теперь не нашли то создадим

            Если НЕ НайденныйКонтрагент.Пустая() Тогда
                // Отметим в строке ТЗ вновь полученный код контрагента.

                СтрокаТЗ.ic_id = НайденныйКонтрагент.Код;
                //Перезапишем Емеил

                
                Если СокрЛП(СтрокаТЗ.email) <> "" Тогда
                    кОбъект = НайденныйКонтрагент.ПолучитьОбъект();
                    Контакты = кОбъект.КонтактнаяИнформация;
                    НужнаяСтрока = Контакты.Найти(Справочники.ВидыКонтактнойИнформации.EmailКонтрагенты, "Вид");
                    Если НужнаяСтрока = Неопределено Тогда
                        НовКонтакт = Контакты.Добавить();
                    Иначе
                        НовКонтакт = НужнаяСтрока;
                    КонецЕсли;
                    НовКонтакт.Тип = Перечисления.ТипыКонтактнойИнформации.АдресЭлектроннойПочты;
                    НовКонтакт.Вид = Справочники.ВидыКонтактнойИнформации.EmailКонтрагенты;
                    НовКонтакт.Представление = СокрЛП(СтрокаТЗ.email);
                    //НовКонтрагент.Записать();

                    кОбъект.Записать();
                КонецЕсли;                
                
                ДобавитьИнформациюВЛог(НайденныйКонтрагент.Ссылка, "Изменен", "Контрагент");
                
                Сообщить("Контрагент " + НайденныйКонтрагент + " найден и синхронизирован");
   Droning
 
19 - 18.06.18 - 16:33
кажется мне что тут какой-то геморрой с переносом инфы с клиента на сервер или что-то около того..
   tesseract
 
20 - 18.06.18 - 16:37
(15) ЗначениеВРеквизитФормы() и все передается. У Дядьки опыт не в ту сторону. Структура больше места занимает.


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

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

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

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


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