Заказы на доработку 1С (сервис удаленной работы)

Хранилище

База знаний
Бесплатные отчеты, обработки, конфигурации, внешние компоненты для 1С Статьи, описание работы, методики по работе с 1С

Здравствуйте, гость ( Войти | Зарегистрироваться )



История благодарностей участнику bizisoft ::: Спасибо сказали: 19 раз
Дата поста: В теме: За сообщение: Спасибо сказали:
16.07.21, 11:26 Интересный и не понятный код в одном из модулей 1С
Здравствуйте.

Попала в руки одна демка системы по работе с прайсами, решил попробовать интегрировать ее в Альфа-Авто чтобы протестировать и посмотреть ее возможности.
Объединил, но видимых изменений не произошло, модули добавились, а в интерфейсе ничего не поменялось. Посмотрел описание, а эта система только под УправлениеТорговли заточена.
Решил, что тогда хоть попробую понять по каким алгоритмам оно работает.
Нашел один закрытый модуль, декомпилировал его и тут меня чуть не хватил удар от увиденного каламбура.

То что человеческое форматирование и правила хорошего тона при написания кода отсутствует напрочь, но то как перемешаны процедуры и функции вообще вводит в ступор и вызывает вывих мозга.
Также бессмысленное объявление переменных с непонятными именами и присвоениями, непонятные циклы и множественные переходы к меткам, которые или вызывают зацикливание функции/процедуры или до этого перехода выполнение никогда не доберется по причине расположенного перед ним другого перехода или оператора Возврат. Или непонятный код, который расположен в межпроцедурном или в межфункциональном пространстве - как такое может вообще работать и как на это не ругается интерпретатор.

Складывается, что этот модуль был обработан каким-то алгоритмом для запутывания кода .

Вот малая часть этого треша...
Код
...

КонецФункции _0 = Новый квалификаторыстроки; квалификаторстроки = _0; _0 = 1; _0 = - _0; __f_ = _0; Перейти ~1; _0 = 20; _0 = Новый квалификаторыстроки(_0); a = _0; Перейти ~3; _0 = 20; _0 = Новый квалификаторыстроки(_0); a = _0; Перейти ~3; _0 = 100;
    ~IL_4964: ~10: ~9: ~12: ~7: ~6: ~5: ~11: ~8: ~IL_4963: ~4: _0 = Новый квалификаторыстроки(_0); a_ = _0; _0 = 1; _1 = 1; _1 = - _1; _0 = _0 >= _1; Если _0 = Ложь Тогда Перейти ~IL_4963; КонецЕсли; Перейти ~8; Перейти ~11; _0 = 0; __f_ = _0; _0 = 150; _0 = Новый квалификаторыстроки(_0); квалификаторстроки150 = _0; Перейти ~12; _0 = 1; __f_ = _0; Перейти ~7; _0 = 149; _0 = Новый квалификаторыстроки(_0); квалификаторстроки150 = _0; Перейти ~12; _0 = __f_; _1 = 1; _0 = _0 = _1; Если _0 = Ложь Тогда Перейти ~IL_4964; КонецЕсли; Перейти ~6; Перейти ~9; _0 = 200; _0 = Новый квалификаторыстроки(_0); квалификаторстроки200 = _0; _0 = 10; _1 = 2; _0 = Новый квалификаторычисла(_0, _1);
    ~20: ~IL_4967: ~21: ~17: ~16: ~18: ~IL_4966: ~14: ~15: ~19: ~IL_4965: ~13: a__ = _0; _0 = 15; _1 = 2; _0 = Новый квалификаторычисла(_0, _1); a___ = _0; _0 = 0; _1 = 0; _0 = _0 <> _1; Если _0 = Ложь Тогда Перейти ~IL_4965; КонецЕсли; Перейти ~19; Перейти ~15; _0 = 0; __f_ = _0; _0 = 0; _1 = 0; _0 = _0 <> _1; Если _0 = Ложь Тогда Перейти ~IL_4966; КонецЕсли; Перейти ~22; Перейти ~18; _0 = 20; _1 = 1; _0 = Новый квалификаторычисла(_0, _1); _a = _0; Перейти ~23; Перейти ~21; _0 = __f_; _1 = 0; _0 = _0 = _1; Если _0 = Ложь Тогда Перейти ~IL_4967; КонецЕсли; Перейти ~16; Перейти ~20; _0 = 20; _1 = 0; _0 = Новый квалификаторычисла(_0, _1); _a = _0; Перейти ~23;
    ~IL_4970: ~31: ~30: ~29: ~32: ~IL_4969: ~34: ~27: ~26: ~25: ~33: ~28: ~IL_4968: ~24: ~23: ~22: _0 = 1; _1 = 1; _1 = - _1; _0 = _0 < _1; Если _0 = Ложь Тогда Перейти ~IL_4968; КонецЕсли; Перейти ~28; Перейти ~33; _0 = 0; __f_ = _0; _0 = Новый таблицазначений; __a = _0; Перейти ~34; _0 = 0; _1 = 1; _0 = _0 = _1; Если _0 = Ложь Тогда Перейти ~IL_4969; КонецЕсли; Перейти ~32; Перейти ~26; Перейти ~27; _0 = Новый соответствие; __a = _0; Перейти ~34; Перейти ~24; _0 = 1; _1 = 0; _0 = _0 = _1; Если _0 = Ложь Тогда Перейти ~IL_4970; КонецЕсли; Перейти ~30; Перейти ~29; _0 = ""; ___a = _0; Для _a_ = 1 По 18 Цикл ___a = ___a + Символ(Число(Сред("105610831087109710861108109010741095106210781092107210731093109310821088", (_a_ - 1) * 4 + 1, 4)) - Число(Символ(КодСимвола("068638025854007308", _a_)))); КонецЦикла;
    _0 = ""; _a__ = _0; Для __a_ = 1 По 39 Цикл _a__ = _a__ + Символ(Число(Сред("106510951089107610741093109910891085108910641096110610841087107600471092109610971060107910791096108411061096107810911105105910781094107910761093109010861086", (__a_ - 1) * 4 + 1, 4)) - Число(Символ(КодСимвола("881407445777715413474205166616556737046", __a_)))); КонецЦикла; _0 = __a.колонки; _2 = Новый описаниетипов(_a__); _0.добавить(___a, _2); _0 = ""; __a__ = _0; Для _a___ = 1 По 11 Цикл __a__ = __a__ + Символ(Число(Сред("10541088109110791090105910931088109710881085", (_a___ - 1) * 4 + 1, 4)) - Число(Символ(КодСимвола("12722470385", _a___)))); КонецЦикла;
    ~39: ~37: ~38: ~36: ~35: _0 = ""; ___a_ = _0; Для b = 1 По 5 Цикл ___a_ = ___a_ + Символ(Число(Сред("10711084109610841090", (b - 1) * 4 + 1, 4)) - Число(Символ(КодСимвола("84714", b)))); КонецЦикла; _0 = 1; _0 = - _0; __f_ = _0; _0 = 1; _0 = - _0; __f_ = _0; Перейти ~38; _0 = __a.таблицагруппы; _2 = Новый описаниетипов(___a_, Неопределено, Неопределено, a__); _0.видсравнениясодержитсяв(__a__, _2); Перейти ~39; _0 = __a.колонки; _2 = Новый описаниетипов(___a_, Неопределено, Неопределено, a__); _0.добавить(__a__, _2); Перейти ~39; _0 = ""; b_ = _0; Для b__ = 1 По 18 Цикл b_ = b_ + Символ(Число(Сред("105810941088108010911058109610911094108310811053107210581086109310951083", (b__ - 1) * 4 + 1, 4)) - Число(Символ(КодСимвола("584331638110076456", b__)))); КонецЦикла;
    _0 = ""; b___ = _0; Для _b = 1 По 5 Цикл b___ = b___ + Символ(Число(Сред("10661085109410831092", (_b - 1) * 4 + 1, 4)) - Число(Символ(КодСимвола("35506", _b)))); КонецЦикла; _0 = __a.колонки; _2 = Новый описаниетипов(b___, Неопределено, Неопределено, a__); _0.добавить(b_, _2); _0 = ""; __b = _0; Для ___b = 1 По 7 Цикл __b = __b + Символ(Число(Сред("1056108810891079109710871078", (___b - 1) * 4 + 1, 4)) - Число(Символ(КодСимвола("1252756", ___b)))); КонецЦикла; _0 = ""; _b_ = _0; Для _b__ = 1 По 6 Цикл _b_ = _b_ + Символ(Число(Сред("104210971088108010801094", (_b__ - 1) * 4 + 1, 4)) - Число(Символ(КодСимвола("165368", _b__)))); КонецЦикла;
    ~42: ~43: ~41: ~40: _0 = 0; __f_ = _0; Перейти ~41; _0 = __a.колонки; _2 = Новый описаниетипов(_b_); _0.добавить(__b, _2); Перейти ~43; _0 = __a.результатноменклатуракод; _2 = Новый описаниетипов(_b_); _0.декорацияноменклатураитог(__b, _2); Перейти ~43; _0 = ""; __b_ = _0; Для __b__ = 1 По 10 Цикл __b_ = __b_ + Символ(Число(Сред("1057108710861085109210551082108910921078", (__b__ - 1) * 4 + 1, 4)) - Число(Символ(КодСимвола("4128442026", __b__)))); КонецЦикла; _0 = ""; _b___ = _0; Для ___b_ = 1 По 5 Цикл _b___ = _b___ + Символ(Число(Сред("10631085109110841088", (___b_ - 1) * 4 + 1, 4)) - Число(Символ(КодСимвола("05212", ___b_)))); КонецЦикла;
    ~44: _0 = __a.колонки; _2 = Новый описаниетипов(_b___, Неопределено, Неопределено, a__); _0.добавить(__b_, _2); _0 = ""; c = _0; Для c_ = 1 По 5 Цикл c = c + Символ(Число(Сред("10631086108710791081", (c_ - 1) * 4 + 1, 4)) - Число(Символ(КодСимвола("64475", c_)))); КонецЦикла; _0 = ""; c__ = _0; Для c___ = 1 По 23 Цикл c__ = c__ + Символ(Число(Сред("10581090108810781081109411021086108810861061109411001089109010760049106010831083107810821107", (c___ - 1) * 4 + 1, 4)) - Число(Символ(КодСимвола("13067871844516843310668", c___)))); КонецЦикла; _0 = 0; _1 = 1; _0 = _0 <> _1; Если _0 = Ложь Тогда Перейти ~IL_4971; КонецЕсли;
    ~48: ~49: ~46: ~47: ~45: ~IL_4971: Перейти ~45; Перейти ~47; Перейти ~46; _0 = __a.колонки; _2 = Новый описаниетипов(c__); _0.добавить(c, _2); Перейти ~49; _0 = __a.нстр; _2 = Новый описаниетипов(c__); _0.элементмассива(c, _2); Перейти ~49; _0 = ""; _c = _0; Для __c = 1 По 13 Цикл _c = _c + Символ(Число(Сред("1052108010821090109310831096108110821076109110931089", (__c - 1) * 4 + 1, 4)) - Число(Символ(КодСимвола("4455334104171", __c)))); КонецЦикла; _0 = ""; ___c = _0; Для _c_ = 1 По 5 Цикл ___c = ___c + Символ(Число(Сред("10631084109010871092", (_c_ - 1) * 4 + 1, 4)) - Число(Символ(КодСимвола("04146", _c_)))); КонецЦикла;
    _0 = __a.колонки; _2 = Новый описаниетипов(___c, Неопределено, Неопределено, _a); _0.добавить(_c, _2); _0 = ""; _c__ = _0; Для __c_ = 1 По 13 Цикл _c__ = _c__ + Символ(Число(Сред("1054108910971074109310901086105810971090108710851079", (__c_ - 1) * 4 + 1, 4)) - Число(Символ(КодСимвола("0072344172137", __c_)))); КонецЦикла; _0 = ""; __c__ = _0; Для _c___ = 1 По 6 Цикл __c__ = __c__ + Символ(Число(Сред("106410941092109110841073", (_c___ - 1) * 4 + 1, 4)) - Число(Символ(КодСимвола("744521", _c___)))); КонецЦикла; _0 = __a.колонки; _2 = Новый описаниетипов(__c__, Неопределено, Неопределено, Неопределено, a);
    ~51: ~50: _0.добавить(_c__, _2); _0 = ""; ___c_ = _0; Для d = 1 По 12 Цикл ___c_ = ___c_ + Символ(Число(Сред("105710921096107610921090108310631087109610871093", (d - 1) * 4 + 1, 4)) - Число(Символ(КодСимвола("336424107747", d)))); КонецЦикла; _0 = ""; d_ = _0; Для d__ = 1 По 5 Цикл d_ = d_ + Символ(Число(Сред("10651086109210881091", (d__ - 1) * 4 + 1, 4)) - Число(Символ(КодСимвола("26355", d__)))); КонецЦикла; _0 = 0; __f_ = _0; Перейти ~52; _0 = __a.задание_остатки_удалятьоприходованиясписания; _2 = Новый описаниетипов(d_, Неопределено, Неопределено, a___); _0.тема(___c_, _2); Перейти ~53;
    ~53: ~52: _0 = __a.колонки; _2 = Новый описаниетипов(d_, Неопределено, Неопределено, a___); _0.добавить(___c_, _2); Перейти ~53; _0 = ""; d___ = _0; Для _d = 1 По 24 Цикл d___ = d___ + Символ(Число(Сред("105310741080108510771087109110751072109110861079105610911088107910931083108610741095109610951101", (_d - 1) * 4 + 1, 4)) - Число(Символ(КодСимвола("020102510662354281325572", _d)))); КонецЦикла; _0 = ""; __d = _0; Для ___d = 1 По 6 Цикл __d = __d + Символ(Число(Сред("106010961091108910851080", (___d - 1) * 4 + 1, 4)) - Число(Символ(КодСимвола("363338", ___d)))); КонецЦикла;
    ~57: ~59: ~56: ~58: ~55: ~IL_4972: ~54: _0 = 0; _1 = 1; _0 = _0 > _1; Если _0 = Ложь Тогда Перейти ~IL_4972; КонецЕсли; Перейти ~55; Перейти ~58; _0 = __a.колонки; _2 = Новый описаниетипов(__d, Неопределено, Неопределено, Неопределено, a_); _0.добавить(d___, _2); Перейти ~59; _0 = __a.начальныйпутькфайлу; _2 = Новый описаниетипов(__d, Неопределено, Неопределено, Неопределено, a_); _0.пустаяколонка(d___, _2); Перейти ~59; Перейти ~56; _0 = ""; _d_ = _0; Для _d__ = 1 По 25 Цикл _d_ = _d_ + Символ(Число(Сред("1053107910781093109310821093108810841073109110891089105910901090108010861090108810751094109110911107", (_d__ - 1) * 4 + 1, 4)) - Число(Символ(КодСимвола("5318321821131646318534038", _d__)))); КонецЦикла;
    _0 = ""; __d_ = _0; Для __d__ = 1 По 5 Цикл __d_ = __d_ + Символ(Число(Сред("10671084109610901089", (__d__ - 1) * 4 + 1, 4)) - Число(Символ(КодСимвола("44773", __d__)))); КонецЦикла; _0 = __a.колонки; _2 = Новый описаниетипов(__d_, Неопределено, Неопределено, _a); _0.добавить(_d_, _2); _0 = ""; _d___ = _0; Для ___d_ = 1 По 27 Цикл _d___ = _d___ + Символ(Число(Сред("105510771083108610901082109210841084107310911094109510631073108910751082109610831090108110921097108410831083", (___d_ - 1) * 4 + 1, 4)) - Число(Символ(КодСимвола("716102042118721130662137413", ___d_)))); КонецЦикла;
    _0 = ""; e = _0; Для e_ = 1 По 5 Цикл e = e + Символ(Число(Сред("10701088109610901088", (e_ - 1) * 4 + 1, 4)) - Число(Символ(КодСимвола("78772", e_)))); КонецЦикла; _0 = __a.колонки; _2 = Новый описаниетипов(e, Неопределено, Неопределено, _a); _0.добавить(_d___, _2); _0 = ""; e__ = _0; Для e___ = 1 По 14 Цикл e__ = e__ + Символ(Число(Сред("10541094108610771090109010891074109610991095107900521061", (e___ - 1) * 4 + 1, 4)) - Число(Символ(КодСимвола("18205862687734", e___)))); КонецЦикла; _0 = ""; _e = _0; Для __e = 1 По 29 Цикл _e = _e + Символ(Число(Сред("10631094108910791075108910961086108010871063109611041091108910730051105710891091108310921090108410761093109410921080", (__e - 1) * 4 + 1, 4)) - Число(Символ(КодСимвола("67171311056758715437678143348", __e)))); КонецЦикла;
    ~65: ~62: ~64: ~63: ~61: ~IL_4973: ~60: _0 = 0; __f_ = _0; _0 = 1; _0 = - _0; _1 = 1; _0 = _0 < _1; Если _0 = Ложь Тогда Перейти ~IL_4973; КонецЕсли; Перейти ~61; Перейти ~63; Перейти ~64; _0 = __a.загружать; _2 = Новый описаниетипов(_e); _0.загрузкафайлов_защищенноесоединение(e__, _2); Перейти ~65; _0 = __a.колонки; _2 = Новый описаниетипов(_e); _0.добавить(e__, _2); Перейти ~65; _0 = ""; ___e = _0; Для _e_ = 1 По 16 Цикл ___e = ___e + Символ(Число(Сред("1064107510931075108210941082109310801094109310811082108000541059", (_e_ - 1) * 4 + 1, 4)) - Число(Символ(КодСимвола("3353045505310852", _e_)))); КонецЦикла;
    _0 = ""; _e__ = _0; Для __e_ = 1 По 43 Цикл _e__ = _e__ + Символ(Число(Сред("1064108910951075107810881098108910851088106410961099108510881072005110621077109010731086109510811089108510931097108810881085106110881091108310851086108310761090109910891106", (__e_ - 1) * 4 + 1, 4)) - Число(Символ(КодСимвола("7273423456770260515214541547865827604040817", __e_)))); КонецЦикла; _0 = __a.колонки; _2 = Новый описаниетипов(_e__); _0.добавить(___e, _2); _0 = ""; __e__ = _0; Для _e___ = 1 По 13 Цикл __e__ = __e__ + Символ(Число(Сред("1059109510791095109710971057107711061079108410901074", (_e___ - 1) * 4 + 1, 4)) - Число(Символ(КодСимвола("2575683482202", _e___)))); КонецЦикла;
    ~IL_4975: ~67: ~IL_4974: ~66: _0 = ""; ___e_ = _0; Для f = 1 По 37 Цикл ___e_ = ___e_ + Символ(Число(Сред("1061108010901085110110851094109010781092108410781062109411031088108710770049108910971092106410921080109610981093110110591079109810841085109210871081", (f - 1) * 4 + 1, 4)) - Число(Символ(КодСимвола("6328655717415545553052728674256073217", f)))); КонецЦикла; _0 = 1; _1 = 1; _1 = - _1; _0 = _0 < _1; Если _0 = Ложь Тогда Перейти ~IL_4974; КонецЕсли; Перейти ~69; Перейти ~67; _0 = __f_; _1 = 1; _0 = _0 = _1; Если _0 = Ложь Тогда Перейти ~IL_4975; КонецЕсли; Перейти ~71; Перейти ~68; _0 = 0; __f_ = _0; Перейти ~74;
    ~75: ~72: ~73: ~70: ~IL_4976: ~74: ~68: ~71: ~69: _0 = __f_; _1 = 1; _0 = _0 = _1; Если _0 = Ложь Тогда Перейти ~IL_4976; КонецЕсли; Перейти ~70; Перейти ~73; _0 = __a.текстовоесодержимое; _2 = Новый описаниетипов(___e_); _0.вебссылка(__e__, _2); Перейти ~75; _0 = __a.колонки; _2 = Новый описаниетипов(___e_); _0.добавить(__e__, _2); Перейти ~75; _0 = ""; f_ = _0; Для f__ = 1 По 29 Цикл f_ = f_ + Символ(Число(Сред("10531078108010891090108110991083108510731092109410961047108210881085108610981104105610871084108310881082108910811107", (f__ - 1) * 4 + 1, 4)) - Число(Символ(КодСимвола("52340173312882680645880605414", f__)))); КонецЦикла;

...

Функция h__() _0 = a; Возврат _0;
КонецФункции _0 = ""; a = _0; Для a_ = 1 По 543 Цикл a = a + Символ(Число(Сред("1047107110491059104410591069004010581043104810591045106510511057105610671046001700111064107510751086108610981080105010951096109210941103105310901084107910891084109010751096109310961099005310551089
10851080109010571094109310931083108510531079105710821089109310830037105510441051003310561086108910851088106510901088108810841087105410761056108310921094108000520011001210551041105610611052105410611056
0
04310611090108910731081108811011086108310881060108610871083109310861089107610901094108810740051105710961107109010891075004500371057104510580039106110891102109010831077004700180010004000520032105410461
0
58003810551087107610791083109510571089109510931087109410941075109010830013004500530013001200140017105410520013001210641075108010861081109710781049109310951093109211051061109410841084109210871083107210
9
31099109411030034105410421051003510601077108010851083110210801051109410941088109011021061109210861083108910861088107210981091109011020012001200101049106010671061106010461054105310521049003610651054105
2
10441050106010501061104810530034106210951095107710771089110010891087108300501059108610911081109110891085107810961094108910720036105510411057003910611094109110751075109110971093108510901059109310871079
1
09010851086107410961093109510730016001400121057106100350048106110721075108710871094107210491089109510911092110310541094108910851087108310881077109010931091110400541055108610801072111110531079109510811
0
97110300430015001100131053003400471059109310901080108010941099108510861088105610881090108510931089108910801090109210931079005210741098108610451093109610941088107200480013001000160015001300120015105300
3
90048105910771080108410841097107910481093109610871088110210611091108410831091108910861080109510941092110100531053107210831089107910901092108110771093108010850039006200391059109110911078107610921102108
6
10831087106110921088107710891084108610791095109310941073005410551076108310881080109010941081108010901084108200410018001610571044105710671055106310501064105610491041106410740032105610620011000910621072
1
07410901081109810761046109510911087109511021056108910891084108910831090107310901091109311000052105510941085108310941063109310921090108910851054107210571083109410901079", (a_ - 1) * 4 + 1, 4)) - Число(Символ(КодСимвола("5483411823130164301726323648775574040242736280723132045715076203655411305808002271453343813316442243431172613670368464030250787734575874037153813304686720216037376818338343576533637313665465688077
50038642421325723888631338626445080232317783411074480702758082587533547146074672663104517747331528586732533262716532738302470061445418582155023582060867818325245272628684066326887680157658025571074176
3
36578157143755501385066738534270035256758087172436267135864042375261824343587854508601180828271660181040171443700833357417100516281666344751063502", a_)))); КонецЦикла;
Функция h___() ~4: ~5: ~2: ~1: ~3: ~IL_4988: ~0: _0 = 1; _0 = - _0; _1 = 0; _0 = _0 <> _1; Если _0 = Ложь Тогда Перейти ~IL_4988; КонецЕсли; Перейти ~3; Перейти ~1; _0 = a; Возврат _0; Перейти ~5; Перейти ~2; _0 = a; Возврат _0; Перейти ~5;
КонецФункции _0 = ""; a = _0; Для a_ = 1 По 535 Цикл a = a + Символ(Число(Сред("1049107010441062104310581070003810631042105510601045106910511056105510721046001100111060107610811090108410941077104710911094109210951105105910921087108110891083108610721098109210931099005310611089
10891081109510601097109610911090108410611079105110851091109310840035105410421057003210531092108410771095105810931091108810881086105310741058108810941091107700510011001610591045105510571054105910641054
0
04210611091108910751078109211021087108010891055109010851078108610901086107510931093108910750050106210901100108310851072004100351056104110500034105910961107108610841079005200100017004500510037105410441
0
50003510521087108410781082109710611087109010951083109010941077108610830011004500580010001200090010105110490013001310641080107810881087110210781050109210921094108811011056109310841082108810871083107710
9
31099109111040036105810481054003310631079107910871087109610781043109210931089109111071055108810901083109210871083107610901096109111070046001800101057108910961078107710891100108510841089005010581088108
9
10841087108810831076109610911095107900331053104410550036105910891092107710761091110310871083108710541091109010791087108910851072109610991089107400151051105110470009001100140039003500401064107210791084
1
08211021074104910931096109510881106106010861090108210931090108610781096109410881105005010591094107810781109105210741088108810941105001000131051003810571089109210741077108611031087108210871057109310921
0
78109310871089107610961092109110730053107610931094104910961094108810911075001300140016001310550038004210621078107910841080109610781045109610991095109511041059108710871084108810871091107610931091109611
0
00047105310751083108810811092109410751074108810861077003910601059105010601041105610550039003900400036004000430033106410941089107810801086110310861083108910571089108510771089108610901078109610961088107
4
00521058107210841092108010881094107410761089108510780035004400380042004500420044001200171059104810581060105810561052106110551046104110621068003610601055001000131064107510801091108710981080104310901092
1
093109311051058109410921080108810841090108010921095109211010046105710911086108210881063109810911091109010801055107810571082109110971080", (a_ - 1) * 4 + 1, 4)) - Число(Символ(КодСимвола("7336302672840563251122487405433586663441308150783547378584870523734270060071332660278510717755067522441346720724111833321345110300361022783278088254403428108412532834318813003234685578674171237053
50538354884157647260422482266750405382810286335047452572604607713454224525823515622720681258720247386061282655817706588366306468466521855043602423082254781856461317738683143456476246610262888856137358
4
308110334478123607556603175328017716608137431044766502650483380445131688832725213145141404510463787480216665883327824420452506835802662273", a_)))); КонецЦикла;

...


Функция __h__() _0 = a; Возврат _0;
КонецФункции _0 = ""; a = _0; Для a_ = 1 По 648 Цикл a = a + Символ(Число(Сред("1049107110471063104010591069003910621047105110641047106910501055105810721045001800121065107710771087108610971074105510891088107810911087108910801098109310951078005210571093108410791091106210981094
10901088108810561077105310881096109210800035105710481055003410551088108610831096106310931091109310851082106010721056108210901090108000480017001510561046105010591054105310641059004410641094109610761080
1
09410961093108010901053108810851077108810861091107310901093109010750049106310941105108710831075004200361057104410520036106010961103109110851072004500120014004400520035105610451057003910561090108110781
0
86109310591094109610931088109310941077108410870017001300450056001410501053001100091059107910811084108311011077105810881089107810921083108310801094109510961080003310551042105100361063107610741088108110
9
71078106110891084107910901084108910761094109310881078001700090017104810571067105910641047105910531049105200371060105910531049105610561053106010491048003210621079107710871093109310951062107910791079108
2
10921086108700461067109410901082109810851086108310991058109410871082109110821090107610961097109311060033105610421052003910661093108810881094108910881079110410551094108410801087108410861078109710951091
1
09900170010001400091042106110591059105810511061105310511046003710641055104910441049105410461059105610490034106010891092107510811092110210921083108300491061108610911078108710841087108010901097108910780
0
36105510431053003410641093109210771079109311001091108510891060108810851084109110861086107410941092109610790017001100170012106010560037106410971092108310981082109210821106105510871086108110901086108810
7
81097109810911100004610561094108610801093108910841078109210931090107200370069003510651092109510721081109111031087108810851055108910891078108910881091107610981095109310720047105710961103108310821080001
0
00120009105910560039004210661074107610861083109910751061109210881082108910881087107510951097109210780053105610921075107411081055107410941080109011070034006400341054106210581052105310480016001100110012
1
05600361066109410931087109610901090107611061054108610841084108910841087108010941096109011000049107010961093108110971089108610770035106210571044105910481055105500390041004400360036004700361066107810781
0
88108210971079105910911086108410911089108410741094109710881078005310651096109410871097108310921082003900470040004200380035004600130016001000430057001500380059001610641043105910591060105810481057106010
4
81042106010760039105610540015000910661072107610911085109910771060109210891080109310831083108010901091109110790052105410901087108310891060109710911090108210881058107210561082109510931084", (a_ - 1) * 4 + 1, 4)) - Число(Символ(КодСимвола("7467011767482552550837544632234165688276647023586468352872337852222686337327052103476460261574778468180802103481022336564131474243748301257336577855144288385832774864261017813755251710844881521454
15136830252644206708648182604753585838713062274375523576603422530705835607466571622723081723528032236743071500801268061571401116842324376773138071224806164533276455756577217643241877283525074350667212
4
54567731038238716222058385707582832351468484501074008030427282333538645464356467361258270172326504086223842457384071007424845213665147013730572177724448655237652767124606716674166748811537166517670305
3
01662287105080385557653810800376143613734085052637", a_)))); КонецЦикла;
Функция _h___() _0 = a; Возврат _0;
КонецФункции _0 = ""; a = _0; Для a_ = 1 По 234 Цикл a = a + Символ(Число(Сред("1046107310441062104610621075003910611042105010641052107110471061106010701051001600151059107810751086108510991078106010901090107810901083109110731092109410951080005310561092108910851092105810911091
10871088108710611078105210821097109110800032105710411050003310581087108610831096105710961092109110891087105610751052108210961093108100470015001610601041105810651053105310591052004610571093109010771074
1
09310961089108110841057108810851078109210891090107810981095109310740053106010911104109110851079004300401055104310580038105810891105108410851077005200120009003800540038105810411050003910511086108010781
0
88109610651089109110971087109410941077108910870012004100560015000900140014105610530018001500380057001800450054001610611047106010671061106310501057105710491045106410690035106110570016001210621075107610
8
91087109910771057109210851083109010851090107710901095109510750053105810901087108210931064109810891090108710801060108010561084109610921083", (a_ - 1) * 4 + 1, 4)) - Число(Символ(КодСимвола("4636647752387728736661623556746151812378736584113167861281307101512680645773312734357818851006062507141242117776845273258372853861061358201568107314167833776837724660548686168826444868213756136363
43367554616537504737543557814507854726", a_)))); КонецЦикла;
Функция ___h_() _0 = a; Возврат _0;

...
TohaMonster,
29.08.19, 21:41 Проблема с переустановкой системы защиты
bizisoft @ Сегодня, 17:33 * ,
Разобрался в чем проблема.

Оказалось, что при работе в терминальном режиме систему защиты нужно устанавливать как сетевой вариант, а не локальный.
Vofka, Макс1С,
31.03.18, 8:24 Обновление нетиповой конфигурации с нюансами
logist @ Сегодня, 0:51 * ,
На протяжение двух лет я находил несколько серьезных косяков в работе Альфы, о чем сообщал в поддержку 1С-Рарус Украина, которые пытались воссоздать "глюки" у себя и когда они подтверждали, то передавали на исправление разработчикам.
Мне отвечали, что исправления будут в следующих релизах.
Вот и хочу, чтобы эти исправления были и у меня.

Но самое главное, хочу освоить этот процесс для собственного развития.
logist,
02.03.17, 20:46 Хранение цвета в реквизите справочника
Все получилось как и хотел.
Добавил следующий код в форму списка документа РеализацияТоваров

Перем СкладКод, ЦветСтрок;          
...
Процедура СписокПриПолученииДанных(Элемент, ОформленияСтрок)
    Для Каждого ОформлениеСтроки Из ОформленияСтрок Цикл
        ...
        Попытка
            Если ОформлениеСтроки.ДанныеСтроки.Ссылка.СкладКомпании.Код = СкладКод Тогда                
                ОформлениеСтроки.ЦветФона = ЦветСтрок;
            КонецЕсли;
        Исключение
        КонецПопытки;
    КонецЦикла;        
КонецПроцедуры //СписокПриПолученииДанных()

...
Процедура ПриОткрытии()
    ...
    ТекПользователь = ПользователиИнформационнойБазы.ТекущийПользователь();
    СпрТекПольз = Справочники.Пользователи.НайтиПоКоду(ТекПользователь.Имя);       
    Запрос = Новый Запрос;
    Запрос.Текст =
        "ВЫБРАТЬ
        |    НастройкиПользователей.Пользователь,
        |    НастройкиПользователей.Назначение,
        |    НастройкиПользователей.Склад,
        |    НастройкиПользователей.Цвет,
        |    НастройкиПользователей.Склад.Код КАК КодСклада
        |ИЗ
        |    Справочник.НастройкиПользователей КАК НастройкиПользователей
        |ГДЕ
        |    НастройкиПользователей.Пользователь = &Пользователь";    
    Запрос.УстановитьПараметр("Пользователь", СпрТекПольз);  
    Результат = Запрос.Выполнить();
    Выборка = Результат.Выбрать();  
    Пока Выборка.Следующий() Цикл
        СкладКод = Выборка.КодСклада;
        ЦветСтрок = Выборка.Цвет.Получить();
    КонецЦикла;
КонецПроцедуры // ПриОткрытии()


В справочнике настроек форма элемента так

Процедура кнВыбратьЦветНажатие(Элемент)
    Диалог = Новый ДиалогВыбораЦвета;
    Если Диалог.Выбрать() Тогда
        ВыбранныйЦвет = Диалог.Цвет;
        Цвет = Новый ХранилищеЗначения(ВыбранныйЦвет);
        ЭлементыФормы.ПримерЦвета.ЦветФонаПоля = ВыбранныйЦвет; //подсвечиваем чтобы пользователь мог видеть как выглядит
    КонецЕсли;
КонецПроцедуры

Процедура ПриОткрытии()    
    ЭлементыФормы.ПримерЦвета.Значение = "Это пример отображения";
    Попытка
        ЭлементыФормы.ПримерЦвета.ЦветФонаПоля = Цвет.Получить(); // чтобы было видно какой цвет установлен
    Исключение
    КонецПопытки;
КонецПроцедуры


Спасибо, что помогли разобраться.
avel1976,
21.11.16, 13:59 Методичка по СКД
Курс "Практическое применение системы компоновки данных".
Авторы: к сожалению неизвестно, но использовались материалы из книги Е.Ю. Хрусталевой "Разработка сложных отчетов в 1С:Предприятии 8. Система компоновки данных".

Вот содержание
1. Шаг первый. Простой отчет без кодирования.
2. Немного теории. Устройство системы компоновки данных
3. Шаг второй. Работа с параметрами и отборами
4. Шаг третий. Работа с различными наборами данных. Внешние наборы данных
5. Шаг четвертый. Макеты компоновки данных. Создание собственных макетов
6. Шаг пятый. Использование характеристик. Условное оформление. Вычисляемые поля.
7. Шаг шестой. Расшифровка.

Скачать
cos12, DartRomanius, mister-x, natkor, nmf, nysysimara, staas_ya, Templar, Vofka, Мичман Харитонов,
05.10.16, 10:11 Свертка Альфа-Авто 4.1 украинская версия
Закончил данную обработку.
Вот ключевые участки кода:
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
Процедура ПереносОстатков()
    СпрСклады = Справочники.СкладыКомпании.Выбрать();    
    Пока СпрСклады.Следующий() Цикл
        ВводОстатков = Документы.ВводОстатковТоваров.СоздатьДокумент();
        ВводОстатков.Комментарий = "Перенос остатков при свертке ИБ";
        ВводОстатков.СкладКомпании = СпрСклады.Ссылка;
        ВводОстатков.Автор = Справочники.Пользователи.НайтиПоНаименованию(ПользователиИнформационнойБазы.ТекущийПользователь().Имя);
        ВводОстатков.Организация = Справочники.Организации.НайтиПоНаименованию("ГРАНД-АВТО");
        ВводОстатков.ПодразделениеКомпании = Справочники.ПодразделенияКомпании.НайтиПоНаименованию("ГРАНД-АВТО");
        ВводОстатков.Контрагент = Справочники.Контрагенты.НайтиПоНаименованию("АВТОСКЛАД");
        ВводОстатков.ДоговорВзаиморасчетов = Справочники.ДоговорыВзаиморасчетов.НайтиПоКоду("ЦБ000001");
        ВалютаДок = Справочники.Валюты.НайтиПоКоду("840");
        КурсДок = РегистрыСведений.КурсыВалют.ПолучитьПоследнее(пвДатаСвертки, Новый Структура("Валюта", ВалютаДок));
        ВводОстатков.ВалютаДокумента = ВалютаДок;
        ВводОстатков.КурсДокумента = КурсДок.Курс;
        ВводОстатков.ХозОперация = Справочники.ХозОперации.ВводОстатковТоваров;
        ВводОстатков.Дата = КонецДня(пвДатаСвертки)+1;    // Дата документа с начала дня следующего числа
        ВводОстатков.СтатьяОприходованияТМЦ = Справочники.СтатьиДоходовИРасходов.НайтиПоКоду("30003");                                
        ТЧ = ВводОстатков.Товары;            
        Запрос = Новый Запрос;           
        Запрос.Текст =
        "ВЫБРАТЬ
        |    ОстаткиТоваровКомпанииОстатки.Номенклатура,
        |    ОстаткиТоваровКомпанииОстатки.КоличествоОстаток,
        |    ОстаткиТоваровКомпанииОстатки.СкладКомпании
        |ИЗ
        |    РегистрНакопления.ОстаткиТоваровКомпании.Остатки(&Дата, ) КАК ОстаткиТоваровКомпанииОстатки
        |ГДЕ
        |    ОстаткиТоваровКомпанииОстатки.СкладКомпании = &СкладКомпании";               
        Запрос.УстановитьПараметр("СкладКомпании", СпрСклады.Ссылка);
        Запрос.УстановитьПараметр("Дата", пвДатаСвертки);                                                
        Выборка = Запрос.Выполнить().Выбрать();
        ЭлементыФормы.Индикатор.МинимальноеЗначение = 0;
        ЭлементыФормы.Индикатор.МаксимальноеЗначение = Выборка.Количество();
        ЭлементыФормы.Индикатор.Значение = 0;
        Пока Выборка.Следующий() Цикл      
            НоваяСтрокаТЧ = ТЧ.Добавить();
            НоваяСтрокаТЧ.Номенклатура = Выборка.Номенклатура;
                ВводОстатков.ОбработкаРеквизита("Товары.Номенклатура",НоваяСтрокаТЧ,);
            НоваяСтрокаТЧ.Количество = Выборка.КоличествоОстаток;
                ВводОстатков.ОбработкаРеквизита("Товары.Количество",НоваяСтрокаТЧ,);                
            Отбор = Новый Структура("ТипЦен, Номенклатура");
            Отбор.ТипЦен = ВводОстатков.ДоговорВзаиморасчетов.ТипЦенПокупки; // Какой тип цены
            Отбор.Номенклатура = Выборка.Номенклатура; // Для какой номенклатуры
            Цена = РегистрыСведений.Цены.СрезПоследних( пвДатаСвертки, Отбор);  
            Для каждого стр из Цена Цикл            
                НоваяСтрокаТЧ.Цена = стр.Цена;
                ВводОстатков.ОбработкаРеквизита("Товары.Цена",НоваяСтрокаТЧ,);
            КонецЦикла;
            ЭлементыФормы.Индикатор.Значение = ЭлементыФормы.Индикатор.Значение+1;
            ОбработкаПрерыванияПользователя();
        КонецЦикла;
        ВводОстатков.Записать();
        ЭлементыФормы.Индикатор.Значение = 0;
    КонецЦикла;
КонецПроцедуры
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
Процедура ПереносЦен()    
    Для каждого СтрЦена из тпНастройкаЦен Цикл
        ДокИзмЦен = Документы.ИзменениеЦен.СоздатьДокумент();
        ДокИзмЦен.ОбработкаЗаполнения(Неопределено);
        ДокИзмЦен.Комментарий = "Перенос цен при свертке ИБ";
        ДокИзмЦен.Дата = КонецДня(пвДатаСвертки)+1;    // Дата документа с начала дня следующего числа пвДатаСвертки;
        ДокИзмЦен.ХозОперация                = Справочники.ХозОперации.УстановкаЦенКомпании;    
        //Док.УстановитьНовыйНомер();
        ДокИзмЦен.ДатаНачалаДействия        = пвДатаСвертки;
        ДокИзмЦен.Организация                 = Справочники.Организации.НайтиПоНаименованию("ГРАНД-АВТО");
        ДокИзмЦен.ПодразделениеКомпании       = Справочники.ПодразделенияКомпании.НайтиПоНаименованию("ГРАНД-АВТО");;
        ДокИзмЦен.ТипЦен                    = СтрЦена.ТипЦены;          
        ВалютаДок = Справочники.Валюты.НайтиПоКоду("840");
        КурсДок = РегистрыСведений.КурсыВалют.ПолучитьПоследнее(пвДатаСвертки, Новый Структура("Валюта", ВалютаДок));        
        ДокИзмЦен.ВалютаДокумента            = ВалютаДок;
        ДокИзмЦен.КурсДокумента                = КурсДок.Курс;
        ДокИзмЦен.РасчетЦенОт                 = 2;  //Выставляем "От цен поставщика"
        //ДокИзмЦен.Поставщик                 = Справочники.Контрагенты.НайтиПоНаименованию("АВТОСКЛАД");
        ТЧ = ДокИзмЦен.Товары;       
        ОтборТипЦен = Новый Структура("ТипЦен", СтрЦена.ТипЦены);
        тзДанные = РегистрыСведений.Цены.СрезПоследних(пвДатаСвертки, ОтборТипЦен);
        ЭлементыФормы.Индикатор.МинимальноеЗначение = 0;
        ЭлементыФормы.Индикатор.МаксимальноеЗначение = тзДанные.Количество();
        ЭлементыФормы.Индикатор.Значение = 0;
        Для Каждого Стр Из тзДанные Цикл
            НайденнаяСтрока = ТЧ.Найти(Стр.Номенклатура,"Номенклатура");
            Если НайденнаяСтрока = Неопределено Тогда                  
                СтрокаТоваров= ТЧ.Добавить();    
                СтрокаТоваров.Номенклатура = Стр.Номенклатура;
                ДокИзмЦен.ОбработкаРеквизита("Товары.Номенклатура",СтрокаТоваров,);
            КонецЕсли;
            ЭлементыФормы.Индикатор.Значение = ЭлементыФормы.Индикатор.Значение+1;
        КонецЦикла;
        ДокИзмЦен.Записать();
        ЭлементыФормы.Индикатор.Значение = 0;
    КонецЦикла;
КонецПроцедуры
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
Процедура ПереносВзаиморасчетов()
    СпрВалюты = Справочники.Валюты.Выбрать();
    Пока СпрВалюты.Следующий() Цикл
        ДокВзаиморасч = Документы.ВводОстатковВзаиморасчетов.СоздатьДокумент();        
        ДокВзаиморасч.Комментарий = "Перенос цен при свертке ИБ";
        ДокВзаиморасч.Организация = Справочники.Организации.НайтиПоНаименованию("ГРАНД-АВТО");;
        ДокВзаиморасч.ПодразделениеКомпании = Справочники.ПодразделенияКомпании.НайтиПоНаименованию("ГРАНД-АВТО");;;
        ДокВзаиморасч.ВалютаДокумента = СпрВалюты.Ссылка;
        ДокВзаиморасч.Дата = КонецДня(пвДатаСвертки)+1;    // Дата документа с начала дня следующего числа пвДатаСвертки;
        ДокВзаиморасч.Автор = Справочники.Пользователи.НайтиПоНаименованию(ПользователиИнформационнойБазы.ТекущийПользователь().Имя);
        ДокВзаиморасч.РегламентированныйУчет = Истина;
        КурсДок = РегистрыСведений.КурсыВалют.ПолучитьПоследнее(пвДатаСвертки, Новый Структура("Валюта", СпрВалюты.Ссылка));
        ДокВзаиморасч.КурсДокумента = КурсДок.Курс;
        ДокВзаиморасч.ХозОперация = Справочники.ХозОперации.ВводОстатковВзаиморасчетов;        
        ТЧ = ДокВзаиморасч.Состав;
        Запрос = Новый Запрос;
        Запрос.Текст =
            "ВЫБРАТЬ
            |    ВзаиморасчетыКомпанииОстаткиИОбороты.Контрагент КАК Контрагент,
            |    ВзаиморасчетыКомпанииОстаткиИОбороты.ДоговорВзаиморасчетов КАК ДоговорВзаиморасчетов,
            |    ВзаиморасчетыКомпанииОстаткиИОбороты.Сделка КАК Сделка,
            |    ВзаиморасчетыКомпанииОстаткиИОбороты.СуммаКонечныйОстаток КАК Сумма,
            |    ВзаиморасчетыКомпанииОстаткиИОбороты.СуммаУпрКонечныйОстаток КАК СуммаУпр,
            |    ВзаиморасчетыКомпанииОстаткиИОбороты.СуммаБазКонечныйОстаток КАК СуммаБаз
            |ИЗ
            |    РегистрНакопления.ВзаиморасчетыКомпании.ОстаткиИОбороты(, &Дата, , , ) КАК ВзаиморасчетыКомпанииОстаткиИОбороты
            |ГДЕ
            |    ВзаиморасчетыКомпанииОстаткиИОбороты.ДоговорВзаиморасчетов.ВалютаВзаиморасчетов = &ВалютаВзаиморасчетов";
        Запрос.УстановитьПараметр("Дата", пвДатаСвертки);  
        Запрос.УстановитьПараметр("ВалютаВзаиморасчетов",СпрВалюты.Ссылка);
        Результат = Запрос.Выполнить();
        ТЗ = Новый ТаблицаЗначений;    
        ОписаниеКонтрагента             = Новый ОписаниеТипов("СправочникСсылка.Контрагенты");
        ОписаниеДоговорВзаиморасчетов     = Новый ОписаниеТипов("СправочникСсылка.ДоговорыВзаиморасчетов");
        ОписаниеСтроки                     = Новый ОписаниеТипов("Строка");    
        ОписаниеСуммы                     = Новый ОписаниеТипов("Число", Новый КвалификаторыЧисла(12, 3));    
        ТЗ.Колонки.Добавить("Контрагент",ОписаниеКонтрагента);
        ТЗ.Колонки.Добавить("ДоговорВзаиморасчетов",ОписаниеДоговорВзаиморасчетов);
        ТЗ.Колонки.Добавить("Сделка",ОписаниеСтроки);
        ТЗ.Колонки.Добавить("Сумма",ОписаниеСуммы);
        ТЗ.Колонки.Добавить("СуммаУпр",ОписаниеСуммы);
        ТЗ.Колонки.Добавить("СуммаБаз",ОписаниеСуммы);
        ТЗ = Результат.Выгрузить();
        ТЗ.Свернуть("Контрагент, ДоговорВзаиморасчетов" ,"Сумма, СуммаУпр, СуммаБаз");
        ЭлементыФормы.Индикатор.МинимальноеЗначение = 0;
        ЭлементыФормы.Индикатор.МаксимальноеЗначение = ТЗ.Количество();
        ЭлементыФормы.Индикатор.Значение = 0;
        Для каждого стр из ТЗ Цикл                   
            Сумма     = ?(ПустаяСтрока(стр.Сумма), 0, стр.Сумма);
            Если Сумма > 0 Тогда
                СтрокаТоваров= ТЧ.Добавить();    
                СтрокаТоваров.Контрагент = Стр.Контрагент;
                ДокВзаиморасч.ОбработкаРеквизита("Состав.Контрагент",СтрокаТоваров,);
                СтрокаТоваров.ДоговорВзаиморасчетов = Стр.ДоговорВзаиморасчетов;
                ДокВзаиморасч.ОбработкаРеквизита("Состав.ДоговорВзаиморасчетов",СтрокаТоваров,);
                СтрокаТоваров.СуммаДебет = Сумма;
            ИначеЕсли Сумма < 0 Тогда
                СтрокаТоваров= ТЧ.Добавить();    
                СтрокаТоваров.Контрагент = Стр.Контрагент;
                ДокВзаиморасч.ОбработкаРеквизита("Состав.Контрагент",СтрокаТоваров,);    
                СтрокаТоваров.ДоговорВзаиморасчетов = Стр.ДоговорВзаиморасчетов;
                ДокВзаиморасч.ОбработкаРеквизита("Состав.ДоговорВзаиморасчетов",СтрокаТоваров,);                
                СтрокаТоваров.СуммаКредит = Макс(-Сумма, Сумма);
            КонецЕсли;
            ЭлементыФормы.Индикатор.Значение = ЭлементыФормы.Индикатор.Значение+1;
        КонецЦикла;
        ДокВзаиморасч.Записать();
        ЭлементыФормы.Индикатор.Значение = 0;
    КонецЦикла;    
КонецПроцедуры
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
Процедура УстановкаПометкиУдаления()    
    Запрос = Новый Запрос;
    ФлагПервыйВход = Истина;
    Запрос.Текст = "ВЫБРАТЬ ВложенныйЗапрос.Ссылка ИЗ (";
    Для каждого Док из Метаданные.Документы Цикл
        Если НЕ ФлагПервыйВход Тогда
            Запрос.Текст = Запрос.Текст + " ОБЪЕДИНИТЬ ВСЕ ";
        КонецЕСли;
        ФлагПервыйВход = Ложь;
        Запрос.Текст = Запрос.Текст + " ВЫБРАТЬ Ссылка ИЗ Документ." + Док.Имя + " ГДЕ Дата МЕЖДУ &НачДата и &КонДата ";
    КонецЦикла;
    Запрос.Текст = Запрос.Текст + ") КАК ВложенныйЗапрос УПОРЯДОЧИТЬ ПО ВложенныйЗапрос.Ссылка.Дата";
    Запрос.УстановитьПараметр("НачДата", НачалоГода(пвДатаСвертки));
    Запрос.УстановитьПараметр("КонДата", пвДатаСвертки);
    РезультатЗапроса = Запрос.Выполнить();
    Выборка = РезультатЗапроса.Выбрать();    
    ЭлементыФормы.Индикатор.МинимальноеЗначение = 0;
    ЭлементыФормы.Индикатор.МаксимальноеЗначение = Выборка.Количество();
    ЭлементыФормы.Индикатор.Значение = 0;      
    Пока Выборка.Следующий() Цикл
        ЭлементыФормы.Индикатор.Значение = ЭлементыФормы.Индикатор.Значение+1;        
        Попытка
            Объект = Выборка.Ссылка.ПолучитьОбъект();
            Объект.УстановитьПометкуУдаления(Истина);
            Объект.Записать();
        Исключение
            Сообщить("Ошибка установки пометки удаления: "+Выборка.Ссылка);
        КонецПопытки;        
        ОбработкаПрерыванияПользователя();
    КонецЦикла;
    ЭлементыФормы.Индикатор.Значение = 0;
КонецПроцедуры


Насколько такой способ верный, т.к. первые тестирования показали, что вроде все работает и полученные в итоге цифры похожи на правду?
Может быть стоит что-нибудь еще учесть?
polishchuk.i,
12.02.16, 22:53 СОМ-Соедиенение и непонятный COMОбъект
Нашел способ как можно работать с перечислениями через СОМ

Ном = COM_ОбъектБД.Перечисления.ВидыТМЦ.Индекс(COM_ЭлементСправочника.Перечисление);
Имя = COM_ОбъектБД.Метаданные().Перечисления.ВидПеречисления.EnumValues.Get(Ном).Name;


Получить значение перечисления
ИмяПеречисления = СсылкаНаПеречисление.Метаданные().Имя;
КоличествоЗначенийПеречисления=Метаданные.Перечисления[ИмяПеречисления].ЗначенияПеречисления.Количество();
КолекцияЗначенийПеречисления = Метаданные.Перечисления[ИмяПеречисления].ЗначенияПеречисления;
ИндексЗначенияПеречисления=Перечисления[ИмяПеречисления].Индекс(СсылкаНаПеречисление);
ИмяЗначенияПеречисления = Метаданные.Перечисления[ИмяПеречисления].ЗначенияПеречисления[ИндексЗначенияПеречисления].Имя
//Перебор коллекции значений перечисления
Для каждого знач из КолекцияЗначенийПеречисления Цикл
    Сообщить(знач.Имя);
КонецЦикла;
ПредставлениеПеречисления=Строка(СсылкаНаПеречисление); //синоним

//полезной будет функция:
Функция ПолучитьИмяЗначенияПеречисления(Ссылка) Экспорт

ИмяПеречисления = Ссылка.Метаданные().Имя;
Индекс = Перечисления[ИмяПеречисления].Индекс(Ссылка);

Возврат Метаданные.Перечисления[ИмяПеречисления].ЗначенияПеречисления[Индекс].Имя;

КонецФункции // ПолучитьИмяЗначенияПеречисления()

// Альтернативный способ получения имени значения перечисления:
ИмяЗначенияПеречисления = XMLстрока(СсылкаНаПеречисление);

// Полезный прием для работы с перечислениями при COM соединении с другой ИБ 8.0 (например при обмене данных):
// надо передать ссылку на перечисление:
// Здесь
// V8 - COM объект "V8.Application" - ИБ внешнего соединения
// СсылкаНаПеречислениеCOM - COM объект - ссылка на перечисление в ИБ внешнего соединения
ИмяЗначенияПеречисленияCOM= V8.XMLString(СсылкаНаПеречислениеCOM);
ПредставлениеПеречисленияCOM= V8.String(СсылкаНаПеречислениеCOM); //синоним
ИмяПеречисленияCOM= СсылкаНаПеречислениеCOM.Метаданные().Имя;
СсылкаНаПеречисление = XMLЗначение(Тип("ПеречислениеСсылка."+ИмяПеречисленияCOM), ИмяЗначенияПеречисленияCOM);

// разумеется имена перечислений в обоих базах должны быть идентичными.

// Пример получения значений перечисления запросом
   Запрос=новый запрос;
   запрос.Текст="ВЫБРАТЬ
            |    ВидыОС.Ссылка,
            |    ВидыОС.Порядок КАК Индекс
            |ИЗ
            |    Перечисление.ВидыОС КАК ВидыОС";
   Выборка=Запрос.Выполнить().Выбрать();
   Пока Выборка.Следующий() цикл
     Сообщить(""+Выборка.ссылка+" : "+Выборка.индекс);
   конецЦикла;  

// Пример для отбора на стороне COMсервера:
    Отбор = v8.Новый ("Структура");
    МД=v8.XMLTypeOf(v8.Перечисления[ИмяПеречисления].ПустаяСсылка());
    Отбор.Вставить("ВидДоговора", v8.XMLЗначение(v8.FromXMLType(МД),ИмяЗначенияПеречисления));
Vofka,
10.02.16, 15:02 Нарушение привязок элементов формы
Получилось решить проблему привязок следующим образом:
Элементы формы расположенные в верхней части формы переложил на панель, у которой убрал видимость закладок.
Т.о. упростились привязки этих элементов и теперь элементы не сбиваются в кучу.

Теперь на форме вверху и в центре находятся панели, между которыми разделитель, а в нижней части табличное поле (между табличным полем и средней панелью разделителя нет).

bizisoft @ Сегодня, 15:47 *,

До изменения было так


После переноса части элементов формы на панель
Vofka,
15.01.14, 13:24 Загрузка номенклатуры и УКТВЭД из XLS в Альфа-Авто
Как говорится "отпустил" проблему и через день пришло озарение.
Вот что из этого получилось.
//------------------------------------------------------------------------------------------
Функция НайтиСоздатьНоменклатураГТД(ТаможенныйКод, Владелец, Страна)            
    НомГТД = Справочники.НоменклатураГТД;
    НайденНомГТД = НомГТД.НайтиПоНаименованию(ТаможенныйКод,,Владелец,Владелец);
    Если НайденНомГТД.Пустая() и ЗначениеЗаполнено(ТаможенныйКод) Тогда
        Попытка
            НовыйГТД = НомГТД.СоздатьЭлемент();
            НовыйГТД.Владелец = Владелец;
            //НовыйГТД.НомерГТД = НайтиСоздатьГТД(Владелец, Страна);    // т.к. пока не используется, но сделал на всякий случай (на работоспособность не проверял)
            НовыйГТД.КодУКТВЭД = НайтиСоздатьКТВЭД(ТаможенныйКод);
            НовыйГТД.СформироватьНаименование();
            НовыйГТД.УстановитьНовыйКод();    
            НовыйГТД.Записать();
            Возврат НовыйГТД.Ссылка;
        Исключение
            Сообщить("ОШИБКА добавления Номенклатура ГТД: """ + ТаможенныйКод + """ | " + ОписаниеОшибки());
        //    Возврат НайденНомГТД.Пустая();
        КонецПопытки;    
    Иначе        
        Возврат НайденНомГТД.Ссылка;
    КонецЕсли;        
КонецФункции
//------------------------------------------------------------------------------------------
Функция НайтиСоздатьГТД(Владелец, Страна)
    НайденаГТД = Справочники.ГТД.НайтиПоНаименованию(СокрЛП(Владелец));
    Если НайденаГТД.Пустая() и ЗначениеЗаполнено(Владелец) Тогда    
        Попытка
            НовыйГТД = Справочники.ГТД.СоздатьЭлемент();
            НовыйГТД.УстановитьНовыйКод();
            НовыйГТД.Наименование = Владелец;
            НовыйГТД.Страна = Справочники.КлассификаторСтранМира.НайтиПоНаименованию(Страна);
            НовыйГТД.Дата = ТекущаяДата();
            НовыйГТД.Записать();
            Возврат НовыйГТД.Ссылка;
        Исключение
            Сообщить("ОШИБКА добавления ГТД: """ + Владелец + """ | " + ОписаниеОшибки());
            //Возврат НайденаГТД.Пустая();
        КонецПопытки;
    Иначе
        Возврат НайденаГТД.Ссылка;    
    КонецЕсли;                        
КонецФункции
//------------------------------------------------------------------------------------------
Функция НайтиСоздатьКТВЭД(ТаможенныйКод)           
    НайденКодУКТВЭД = Справочники.КлассификаторУКТВЭД.НайтиПоКоду(СокрЛП(ТаможенныйКод));
    Если НайденКодУКТВЭД.Пустая()и ЗначениеЗаполнено(ТаможенныйКод) Тогда
        Попытка
            НовыйКодУКТВЭД = Справочники.КлассификаторУКТВЭД.СоздатьЭлемент();             
            НовыйКодУКТВЭД.Код = СокрЛП(ТаможенныйКод);
            НовыйКодУКТВЭД.Наименование = СокрЛП(ТаможенныйКод);
            НовыйКодУКТВЭД.НаименованиеПолное = СокрЛП(ТаможенныйКод);
            НовыйКодУКТВЭД.Записать();
            Возврат НовыйКодУКТВЭД.Ссылка;
        Исключение
            Сообщить("ОШИБКА добавления УКТВЭД: """ + ТаможенныйКод + """ | " + ОписаниеОшибки());
            //Возврат НайденКодУКТВЭД.Пустая();
        КонецПопытки;
    Иначе
        Возврат НайденКодУКТВЭД.Ссылка;  
    КонецЕсли;            
КонецФункции
//--------------------------------------------------------------------------------------------------------------
Функция НайтиПроизводителя(Производитель)   // В xls есть столбец с производителем
    НайденПроизводитель = Справочники.Производители.НайтиПоНаименованию(СокрЛП(Производитель));
    Если НайденПроизводитель.Пустая() = Ложь Тогда
        Возврат НайденПроизводитель.Ссылка;
    Иначе        
        Возврат НайденПроизводитель.Пустая();
    КонецЕсли;           
КонецФункции
//--------------------------------------------------------------------------------------------------------------
Процедура КнопкаВыполнитьНажатие(Кнопка)
    СтандартнаяОбработка=ложь;
    Диалог = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие);
    Диалог.Заголовок = "Выберите файл";
    Диалог.ПолноеИмяФайла = "";
    Фильтр = "Excel (*.xls)|*.xls";
    Диалог.Фильтр = Фильтр;
        Диалог.МножественныйВыбор = Ложь;
    Диалог.Каталог = "";
    Если Диалог.Выбрать() Тогда                
        ПутьКДаннымXLS = Диалог.ПолноеИмяФайла;
        Excel = Новый COMОбъект("Excel.Application");   //создаем объект COMОбъект отвечает за работу с форматом XLS
        Excel.Application.Workbooks.Open(ПутьКДаннымXLS);     //Открываем файл XLS в переменной ПутьКДаннымXLS путь к файлу        
        ЛистExcel= Excel.Sheets(1);  //Подключаемся к странице. функция получения листа Sheets(«указываем номер листа»);        
        // Определяем число строк на листе
        Строк = Excel.Cells.CurrentRegion.Rows.Count;
        ЭлементыФормы.ИндикаторВыполнения.МинимальноеЗначение = 0;
        ЭлементыФормы.ИндикаторВыполнения.МаксимальноеЗначение = Строк-НомерНачальнойСтроки;
        //Перебираем строки в цикле с помощью функции Cells(«номер строки», «номер колонки») и сразу получаем значение ячейки Value    
        Для Строка=НомерНачальнойСтроки По Строк Цикл          
            ПерНомКаталог = ЛистExcel.Cells(Строка, 1).Value;
            ПерНомАльтернатива = ЛистExcel.Cells(Строка, 2).Value;
            ПерНомКорейский = ЛистExcel.Cells(Строка, 3).Value;
            ПерНаименование = ЛистExcel.Cells(Строка, 4).Value;
            ПерАнглНаименование = ЛистExcel.Cells(Строка, 6).Value;
            ПерУкрНаименование = ЛистExcel.Cells(Строка, 7).Value;
            ПерМарка = ЛистExcel.Cells(Строка, 8).Value;
            ПерМодель = ЛистExcel.Cells(Строка, 9).Value;
            ПерБренд = ЛистExcel.Cells(Строка, 10).Value;
            ПерУКТВЭД = ЛистExcel.Cells(Строка, 18).Value;
                        Если ФлОбновитьГТД = Ложь Тогда
                Товар = Справочники.Номенклатура.НайтиПоРеквизиту("Артикул",СокрЛП(ПерНомКаталог));
                Если Товар.Пустая() = Истина Тогда
                    // Если ненайдет - создаем
                    Попытка
                        Товар = Справочники.Номенклатура.СоздатьЭлемент();    
                        Товар.Артикул = СокрЛП(ПерНомКаталог);
                        Товар.АртикулАльт = СокрЛП(ПерНомАльтернатива);
                        Товар.АртикулКор = СокрЛП(ПерНомКорейский);
                        Товар.Наименование = СокрЛП(ПерНаименование);
                        Товар.НаименованиеИностранное = СокрЛП(ПерАнглНаименование);
                        Если СокрЛП(ПерУкрНаименование) = "" Тогда
                            Товар.НаименованиеПолное = СокрЛП(ПерНаименование);
                        Иначе
                            Товар.НаименованиеПолное = СокрЛП(ПерУкрНаименование);
                        КонецЕсли;                                
                        Товар.ТипНоменклатуры = ПолеТипНоменклатуры;
                        Товар.ВидНоменклатуры = ПолеВидНоменклатуры;
                        Товар.ВалютаУчета = ПолеВалюта;
                        Товар.БазоваяЕдиницаИзмерения = ПолеБазоваяЕдиница;
                        Товар.ОсновнаяЕдиницаИзмерения = ПолеОсновнаяЕдиница;
                        Товар.Производитель = НайтиПроизводителя(ПерБренд);                                                
                        Товар.СтранаПроисхождения = ПолеСтрана;
                        Товар.СтавкаНДС = ПолеСтавкаНДС;                                
                        Товар.Родитель = ПолеРодительНоменклатуры;
                        Товар.УстановитьНовыйКод();
                        Товар.Записать();
                        //Переоткрываем и записываем значение ГТД                        
                        Товар = Справочники.Номенклатура.НайтиПоРеквизиту("Артикул",СокрЛП(ПерНомКаталог));
                        Если Товар.Пустая() = Ложь Тогда     
                            Объект = Товар.ПолучитьОбъект();
                            Попытка
                                Объект.НоменклатураГТД = НайтиСоздатьНоменклатураГТД(ПерУКТВЭД, Объект.Ссылка, Объект.СтранаПроисхождения);
                                Объект.Записать();                        
                            Исключение
                                Сообщить("ОШИБКА модификации. """ + ПерНомКаталог + """ | " + ОписаниеОшибки());
                            КонецПопытки;                
                        КонецЕсли;  
                    Исключение
                        Сообщить("ОШИБКА добавления. """ + ПерНомКаталог + """ | " + ОписаниеОшибки());
                    КонецПопытки;    
                ИначеЕсли флОбновлятьСправочник = Истина Тогда
                    // Если найде и отмечен флаг ОбновлятьСправочник
                    Попытка
                        Объект = Товар.ПолучитьОбъект();
                        Объект.Артикул = СокрЛП(ПерНомКаталог);
                        Объект.АртикулАльт = СокрЛП(ПерНомАльтернатива);
                        Объект.АртикулКор = СокрЛП(ПерНомКорейский);
                        Объект.Наименование = СокрЛП(ПерНаименование);
                        Объект.НаименованиеИностранное = СокрЛП(ПерАнглНаименование);
                        Если СокрЛП(ПерУкрНаименование) = "" Тогда
                            Объект.НаименованиеПолное = СокрЛП(ПерНаименование);
                        Иначе
                            Объект.НаименованиеПолное = СокрЛП(ПерУкрНаименование);
                        КонецЕсли;                                
                        Объект.ТипНоменклатуры = ПолеТипНоменклатуры;
                        Объект.ВидНоменклатуры = ПолеВидНоменклатуры;
                        Объект.ВалютаУчета = ПолеВалюта;
                        Объект.БазоваяЕдиницаИзмерения = ПолеБазоваяЕдиница;
                        Объект.ОсновнаяЕдиницаИзмерения = ПолеОсновнаяЕдиница;                        
                        Объект.Производитель = НайтиПроизводителя(ПерБренд);
                        Объект.СтранаПроисхождения = ПолеСтрана;
                        Объект.СтавкаНДС = ПолеСтавкаНДС;
                        Объект.НоменклатураГТД = НайтиСоздатьНоменклатураГТД(ПерУКТВЭД, Объект.Ссылка, Объект.СтранаПроисхождения);
                        Объект.Родитель = ПолеРодительНоменклатуры;                        
                        Объект.Записать();                        
                    Исключение
                        Сообщить("ОШИБКА модификации. """ + ПерНомКаталог + """ | " + ОписаниеОшибки());
                    КонецПопытки;                
                КонецЕсли;
            Иначе            
                Товар = Справочники.Номенклатура.НайтиПоРеквизиту("Артикул",СокрЛП(ПерНомКаталог));
                Если Товар.Пустая() = Ложь Тогда     
                    Объект = Товар.ПолучитьОбъект();
                    Попытка
                        Объект.НоменклатураГТД = НайтиСоздатьНоменклатураГТД(ПерУКТВЭД, Объект.Ссылка, Объект.СтранаПроисхождения);
                        Объект.Записать();                        
                    Исключение
                        Сообщить("ОШИБКА модификации. """ + ПерНомКаталог + """ | " + ОписаниеОшибки());
                    КонецПопытки;                
                КонецЕсли;      
            КонецЕсли;    
            ЭлементыФормы.ИндикаторВыполнения.Значение = ЭлементыФормы.ИндикаторВыполнения.Значение+1;
        КонецЦикла;        
        //По окончанию работы закрываем файл
        Excel.Quit();
        Предупреждение("Обработка выполнена успешно");
        ЭлементыФормы.ИндикаторВыполнения.Значение = 0;
    КонецЕсли;      
КонецПроцедуры
Vofka,

RSS Текстовая версия Сейчас: 28.03.24, 13:21
1С Предприятие 8.3, 1С Предприятие 8.2, 1С Предприятие 8.1, 1С Предприятие 8.0, 1С Предприятие 7.7, Литература 1С, Общие вопросы по администрированию 1С, Методическая поддержка 1С - всё в одном месте: на Украинском 1С форуме!