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

Хранилище

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

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



10 страниц V   1 2 3 > » 

>  Интересный и не понятный код в одном из модулей 1С
bizisoft
Отправлено: 17.07.21, 10:38


Завсегдатай
****

Группа: Пользователи
Сообщений: 242
Регистрация: 11.12.12
Из: Донецк
Пользователь №: 22868


Vofka @ Вчера, 12:35 * ,

А как тогда интерпретатор пропускает момент, когда в теле функции/процедуры располагается другая функция процедура или после слова КонецФункции идут операторы присваивания, циклы, условия?

  Форум: Тематическое общение · Просмотр сообщения: #173866 · Ответов: 7 · Просмотров: 2193
 

>  Интересный и не понятный код в одном из модулей 1С
bizisoft
Отправлено: 16.07.21, 11:26


Завсегдатай
****

Группа: Пользователи
Сообщений: 242
Регистрация: 11.12.12
Из: Донецк
Пользователь №: 22868


Здравствуйте.

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

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

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

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

КонецФункции _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;

...
  Форум: Тематическое общение · Просмотр сообщения: #173858 · Ответов: 7 · Просмотров: 2193
 

>  Альфа-Авто и принтеры этикеток через терминальные сессии
bizisoft
Отправлено: 12.07.21, 12:49


Завсегдатай
****

Группа: Пользователи
Сообщений: 242
Регистрация: 11.12.12
Из: Донецк
Пользователь №: 22868


Получилось более-менее сделать печать этикеток через Windows-принтер и Макеты.
Конечно есть свои нюансы, но пока терпимо.
  Форум: Работа с торговым оборудованием · Просмотр сообщения: #173824 · Ответов: 9 · Просмотров: 2041
 

>  Объединение 3-х запросов
bizisoft
Отправлено: 16.06.21, 8:54


Завсегдатай
****

Группа: Пользователи
Сообщений: 242
Регистрация: 11.12.12
Из: Донецк
Пользователь №: 22868


logist @ Вчера, 20:05 * ,
Не совсем понял, как это в запросе осуществить.
Попробовал так, но так не работает:
ВЫБРАТЬ
        ВЫБОР
        КОГДА
        Номенклатура.АртикулБезТире ЕСТЬ NULL
        ТОГДА  &Артикул
        ИНАЧЕ  Номенклатура.АртикулБезТире
        КОНЕЦ  КАК ГруппыАналогов
ПОМЕСТИТЬ ВТ
    ИЗ
        РегистрСведений.ГруппыАналогов КАК ГруппыАналогов
            ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыАналогов КАК ГруппыАналогов1
            ПО ГруппыАналогов.ИдентификаторГруппы = ГруппыАналогов1.ИдентификаторГруппы
            ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Номенклатура КАК Номенклатура
            ПО ГруппыАналогов.Артикул = Номенклатура.Артикул
    ГДЕ
        ГруппыАналогов1.Артикул = &Артикул
        И ГруппыАналогов.Производитель = &Производитель


Или я не правильно понял?
  Форум: Программирование в 1С Предприятие 8.3 · Просмотр сообщения: #173695 · Ответов: 9 · Просмотров: 2539
 

>  Объединение 3-х запросов
bizisoft
Отправлено: 15.06.21, 15:41


Завсегдатай
****

Группа: Пользователи
Сообщений: 242
Регистрация: 11.12.12
Из: Донецк
Пользователь №: 22868


logist @ Вчера, 21:47 * ,
Не получается, т.к. если у товара нет Аналогов, то соотвественно нет никакой записи в регистре сведений ГруппыАналогов, и поэтому ВременнаяТаблица вернет пустой ответ и итоговый результат будет пуст.
  Форум: Программирование в 1С Предприятие 8.3 · Просмотр сообщения: #173692 · Ответов: 9 · Просмотров: 2539
 

>  Объединение 3-х запросов
bizisoft
Отправлено: 14.06.21, 14:09


Завсегдатай
****

Группа: Пользователи
Сообщений: 242
Регистрация: 11.12.12
Из: Донецк
Пользователь №: 22868


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


Но был один нюанс, запрос пропускает позиции если у товара нет Аналогов, т.е. в регистре сведений ГруппыАналогов нет записи с этим товаром.
Пришлось все равно вынести первый вложенный запрос в отдельный и выгружать результат в список значений, а если результат запроса пустой, то в список значений добавлял исходный Артикул.

Запрос = Новый Запрос;
    Запрос.Текст =
    "ВЫБРАТЬ
    |    Номенклатура.АртикулБезТире КАК АртикулБезТире
    |ИЗ
    |    РегистрСведений.ГруппыАналогов КАК ГруппыАналогов
    |        ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыАналогов КАК ГруппыАналогов1
    |        ПО ГруппыАналогов.ИдентификаторГруппы = ГруппыАналогов1.ИдентификаторГруппы
    |        ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Номенклатура КАК Номенклатура
    |        ПО ГруппыАналогов.Артикул = Номенклатура.Артикул
    |ГДЕ
    |    ГруппыАналогов1.Артикул = &Артикул
    |    И ГруппыАналогов.Производитель = &Производитель";

    Запрос.УстановитьПараметр("Артикул", Товар.Артикул);
    Запрос.УстановитьПараметр("Производитель", Товар.Производитель);
    Результат = Запрос.Выполнить();
    ТЗАналоги = Результат.Выгрузить();
    спАналоги = Новый СписокЗначений;
    спАналоги.Очистить();
    Если ТЗАналоги.Количество() > 0 Тогда
        //Сообщить("Выгружаем аналоги в СЗ");
        спАналоги = ТЗАналоги.ВыгрузитьКолонку("АртикулБезТире");
    Иначе
        //Сообщить("текущий Артикул в СЗ");
        спАналоги.Добавить(Товар.АртикулБезТире);
    КонецЕсли;
    
    
    
    ТЗ = Новый ТаблицаЗначений;
    ТЗ.Очистить();
    Запрос = Новый Запрос;
    Запрос.Текст =
    "ВЫБРАТЬ
    |    рсПрайсЛисты.ПрайсЛист КАК ПрайсЛист,
    |    рсПрайсЛисты.Артикул КАК Артикул,
    |    рсПрайсЛисты.Производитель КАК Производитель,
    |    рсПрайсЛисты.Цена КАК Цена,
    |    рсПрайсЛисты.Количество КАК Количество,
    |    рсПрайсЛисты.Контрагент КАК Контрагент
    |ИЗ
    |    РегистрСведений.ПрайсЛистыКонтрагентов КАК рсПрайсЛисты
    |ГДЕ
    |    рсПрайсЛисты.Артикул В(&Аналоги)
    |    И рсПрайсЛисты.ПрайсЛист.Ссылка В
    |            (ВЫБРАТЬ
    |                ПрайсЛистыКонтрагентов.Ссылка КАК Ссылка
    |            ИЗ
    |                Справочник.ПрайсЛистыКонтрагентов КАК ПрайсЛистыКонтрагентов
    |            ГДЕ
    |                ПрайсЛистыКонтрагентов.флКонкурент = ИСТИНА
    |                И ПрайсЛистыКонтрагентов.Валюта = &Валюта)
    |    И рсПрайсЛисты.Производитель = &Производитель
    |
    |УПОРЯДОЧИТЬ ПО
    |    Цена";
  Форум: Программирование в 1С Предприятие 8.3 · Просмотр сообщения: #173670 · Ответов: 9 · Просмотров: 2539
 

>  Объединение 3-х запросов
bizisoft
Отправлено: 09.06.21, 14:08


Завсегдатай
****

Группа: Пользователи
Сообщений: 242
Регистрация: 11.12.12
Из: Донецк
Пользователь №: 22868


Благодарю, LOGIST, MUT, за наколки, буду разбираться дальше.
  Форум: Программирование в 1С Предприятие 8.3 · Просмотр сообщения: #173607 · Ответов: 9 · Просмотров: 2539
 

>  Объединение 3-х запросов
bizisoft
Отправлено: 09.06.21, 9:14


Завсегдатай
****

Группа: Пользователи
Сообщений: 242
Регистрация: 11.12.12
Из: Донецк
Пользователь №: 22868


Здравствуйте.
1С 8.3.14.2095 Альфа-Авто 4.1.23.01

Подскажите пожалуйста возможно-ли объединить 3 запроса в один?

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

Результат выгружаю в СписокЗначений

Запрос №2 - Получаю из справочника ПрайсЛистыКонтрагентов список у которых стоит галочка
"ВЫБРАТЬ
        |    ПрайсЛистыКонтрагентов.Ссылка КАК Ссылка
        |ИЗ
        |    Справочник.ПрайсЛистыКонтрагентов КАК ПрайсЛистыКонтрагентов
        |ГДЕ
        |    ПрайсЛистыКонтрагентов.флКонкурент = ИСТИНА";


Результат выгружаю в СписокЗначений


Запрос №3 - Получаю товары из прайслистов контрагентов, согласно двух ранее полученных списков значений.
ВЫБРАТЬ
        |    ПрайсЛистыКонтрагентов.ПрайсЛист КАК ПрайсЛист,
        |    ПрайсЛистыКонтрагентов.Артикул КАК Артикул,
        |    ПрайсЛистыКонтрагентов.Производитель КАК Производитель,
        |    ПрайсЛистыКонтрагентов.Цена КАК Цена,
        |    ПрайсЛистыКонтрагентов.Количество КАК Количество,
        |    ПрайсЛистыКонтрагентов.Контрагент КАК Контрагент,
        |    ПрайсЛистыКонтрагентов1.Валюта КАК Валюта
        |ИЗ
        |    РегистрСведений.ПрайсЛистыКонтрагентов КАК ПрайсЛистыКонтрагентов
        |        ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ПрайсЛистыКонтрагентов КАК ПрайсЛистыКонтрагентов1
        |        ПО ПрайсЛистыКонтрагентов.ПрайсЛист = ПрайсЛистыКонтрагентов1.Ссылка
        |ГДЕ
        |    ПрайсЛистыКонтрагентов.Артикул В(&Артикул)
        |    И ПрайсЛистыКонтрагентов1.Ссылка В(&СпЗнКонкурентныеПрайсы)
        |    И ПрайсЛистыКонтрагентов.Производитель = &Производитель
        |
        |УПОРЯДОЧИТЬ ПО
        |    Цена";

Из результата запроса определяется позиция прайса с минимальной { ТЗ[0].Цена } и максимальной { ТЗ[ТЗ.Количество()-1].Цена } ценой и вычисляется средняя.

Я так и не смог найти, как можно в одном запросе это организовать, чтобы результаты подзапросов (Аналоги) и (Прайсы) передавались в основной запрос как списки значений.
Пробовал Вложенные запросы и временные таблицы, но связать эти три запроса так и не смог.

Можно было и оставить 3 отдельных запроса, но при переборе списка товаров в цикле, для каждого товара необходимо выполнять эти три запроса, а это наверное будет увеличивать общее время обработки списка товаров, а в дальнейшем думал попробовать вообще одним запросом обработать список товаров и вышеописанную кухню (если такое позволяют запросы).
  Форум: Программирование в 1С Предприятие 8.3 · Просмотр сообщения: #173598 · Ответов: 9 · Просмотров: 2539
 

>  Альфа-Авто и принтеры этикеток через терминальные сессии
bizisoft
Отправлено: 17.05.21, 11:54


Завсегдатай
****

Группа: Пользователи
Сообщений: 242
Регистрация: 11.12.12
Из: Донецк
Пользователь №: 22868


logist @ Вчера, 21:03 * ,
И что нет никаких решений?
Может есть какие-нибудь сторонние ухищрения, которые устраняют эту проблему?
  Форум: Работа с торговым оборудованием · Просмотр сообщения: #173164 · Ответов: 9 · Просмотров: 2041
 

>  Альфа-Авто и принтеры этикеток через терминальные сессии
bizisoft
Отправлено: 15.05.21, 13:31


Завсегдатай
****

Группа: Пользователи
Сообщений: 242
Регистрация: 11.12.12
Из: Донецк
Пользователь №: 22868


Здравствуйте.

Не получается нормально настроить печать этикеток (ценников) на предназначенные для этого принтеры (Zebra, iDPrint, POSTEK) при работе в терминальном режиме.

1С 8.3.14.2095 Альфа-Авто 4.1.23.01 Клиент-серверный режим. Сервер с базой относительно клиентских машин находится в другом городе.

Перепробовал разные способы настроек, но ни одна не дает должного результата.
Также пробовал поднимать VPN туннель, указывал статический IP, выдаваемый VPN сервером клиенту, устанавливал принтер как сетевой на сервере и добавлял его в оборудование Альфы.
Также пробовал пробрасывать USB порт подключаемый к принтеру напрямую на сервер посредством программы USB Redirector TS и устанавливал принтер как подключенный к серверу через USB.

Ничего не помогает, принтер то печатает этикетки из 1С, то нет, то вообще отправляет их рандомно на любой другой принтер (не принтер этикеток) при чем не обязательно на пользователя, который печатает, а на другого терминального пользователя. Может распечатать на принтер А4 или вообще предлагает сохранить печать в файл через принтер Microsoft XPS. При этом в настройках все корректно указано.

Спрашивал у поддержки РАРУС - ответ "Мы не гарантируем работу печати этикеток через терминальные сессии".

Иногда вылетают какие-то ошибки связанные с "плюшками" LP_WiPrinter*.plu.

Не пойму это у Рарус такой кривой механизм печати этикеток.
Я смотрю супермаркеты работают как-то, весы, чековые кассы - все печатает.

Помогите пожалуйста, дайте совет как можно это наладить, чтобы можно было нормально печатать этикетки.
  Форум: Работа с торговым оборудованием · Просмотр сообщения: #173130 · Ответов: 9 · Просмотров: 2041
 

>  Переназначение Журнала регистрации ?
bizisoft
Отправлено: 23.03.21, 9:50


Завсегдатай
****

Группа: Пользователи
Сообщений: 242
Регистрация: 11.12.12
Из: Донецк
Пользователь №: 22868


Получилось сделать посредством символьной ссылки.
Остановил службу Агента, Скопировал каталог srvinfo на другой диск, исходный каталог переименовал __srvinfo, при помощи Far Commander Alt+F6 создал символьную ссылку на каталог, запустил Агента.

P.S. также нужно не забыть каталогу присвоить соответствующие разрешения в разделе безопасность - у меня это было добавить для этого каталога пользователя USR1CV8 и дать полные права.
  Форум: Администрирование и настройка 1С · Просмотр сообщения: #171772 · Ответов: 2 · Просмотров: 1166
 

>  Переназначение Журнала регистрации ?
bizisoft
Отправлено: 15.03.21, 16:30


Завсегдатай
****

Группа: Пользователи
Сообщений: 242
Регистрация: 11.12.12
Из: Донецк
Пользователь №: 22868


Добрый день.
1С:Предприятие 8.3 (8.3.14.2095) Альфа-Авто 4.1.23.01

Клиент-серверный режим работы.

Подскажите пожалуйста, как можно переназначить место сохранения журнала регистрации в клиент-серверном режиме - уж сильно быстро журнал заполняет место на диске С:?
Хотелось бы, чтобы он сохранялся на другой диск, более вместительный

Благодарю.
  Форум: Администрирование и настройка 1С · Просмотр сообщения: #171538 · Ответов: 2 · Просмотров: 1166
 

>  Автозапуск обработки / внешней обработки
bizisoft
Отправлено: 30.10.20, 12:41


Завсегдатай
****

Группа: Пользователи
Сообщений: 242
Регистрация: 11.12.12
Из: Донецк
Пользователь №: 22868


Получилось разобраться с запуском регл.задания.

В общем модуле бс_МоиФоновыеЗадания

Изменил процедуру
Процедура ВыполнитьРассылкуПрайсов() Экспорт
    Рассылка = Обработки._РассылкаПрайсовБизисофт.Создать();
    РежимОтладки = Константы._РассылкаПрайсов_РежимОтладки.Получить();
    Рассылка.СтартРассылки( РежимОтладки, Ложь);
КонецПроцедуры

В параметры добавил параметр СтруктураПараметров , только в него ничего не передаю
Процедура ВыполнитьРассылкуПрайсов(СтруктураПараметров) Экспорт
    Рассылка = Обработки._РассылкаПрайсовБизисофт.Создать();
    РежимОтладки = Константы._РассылкаПрайсов_РежимОтладки.Получить();
    Рассылка.СтартРассылки( РежимОтладки, Ложь);
КонецПроцедуры


обмен прайсами стартует и отрабатывает, но возникла непонятная ситуация.

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

Подскажите пожалуйста, что ни так, почему не отображается информация о работе регл.задания?
  Форум: Программирование в 1С Предприятие 8.3 · Просмотр сообщения: #167814 · Ответов: 5 · Просмотров: 2263
 

>  Автозапуск обработки / внешней обработки
bizisoft
Отправлено: 22.10.20, 16:28


Завсегдатай
****

Группа: Пользователи
Сообщений: 242
Регистрация: 11.12.12
Из: Донецк
Пользователь №: 22868


Попробовал провести эксперимент с обработкой для рассылки прайсов.
Перенес функции и процедуры, которые формируют прайсы и отправляют клиентам, в модуль объекта.
На форме кнопкой вызываю процедуру из модуля объекта, которая запускает процесс.
Все отрабатывает и на почту приходят файлы.

Теперь когда все работает, пробую запустить это через регламентные задания, но выдает ошибку "Слишком много фактических параметров для метода фонового задания".

Как понять данную ошибку? Подскажите пожалуйста из-за это и как можно обойти?
Перем ТемаПисьма, ТекстПисьма;
Перем ОшибкаОтправки;


Функция ОтправитьФайлPOSTЗапросом(ФайлАрхив, ПараметрыПодключения) Экспорт
    НТТРАдресСайта = ПараметрыПодключения[0];
    НТТРПорт = ПараметрыПодключения[1];
    НТТРЛогин = ПараметрыПодключения[2];
    НТТРПароль = ПараметрыПодключения[3];
    ИДСклада = ПараметрыПодключения[4];
    
    //Подготовка переменных
    Boundary = СтрЗаменить(Строка(Новый УникальныйИдентификатор()), "-", "");
    //Определяем имя файла ответа от веб-сервера
    ИмяФайлаОтвета = КаталогВременныхФайлов() + "answer.tmp";
    //Какой-то ранее созданный архив
    ИмяФайлаДанных = ФайлАрхив; //"D:\42489.zip";
    //Закодируем содержимое файла по Base64, то есть преобразуем его к URL-неактивному виду.
    СодержимоеZIP = Base64Строка(Новый ДвоичныеДанные(ИмяФайлаДанных));
    //Проверим размер кодированного файла.
    ДопустимыйРазмерФайлаВБайтах = 2500000;
    Если СтрДлина(СодержимоеZIP) > ДопустимыйРазмерФайлаВБайтах Тогда
        //Какие-то ваши действия, возможно
        Возврат 0;
    КонецЕсли;
    ИмяФайлаОтправки = КаталогВременныхФайлов() + "post.txt";
    ФайлОтправки = Новый ЗаписьТекста(ИмяФайлаОтправки, КодировкаТекста.ANSI, Символы.ПС, ЛОЖЬ);
    //Определяем раздел двоичных данных
    ФайлОтправки.ЗаписатьСтроку("--" + Boundary);
    ФайлОтправки.ЗаписатьСтроку("Content-Disposition: form-data; name=""data""; filename=""" + ИмяФайлаДанных + """");
    //С таким же успехом в Content-Type можно указать application/x-octet-stream
    ФайлОтправки.ЗаписатьСтроку("Content-Type: application/x-zip-compressed" + Символы.ПС + Символы.ПС);
    ФайлОтправки.ЗаписатьСтроку(СодержимоеZIP);
    ФайлОтправки.ЗаписатьСтроку("--" + Boundary);
    //Определяем раздел для каких либо других POST-данных, например содержимого полей виртуальной HTML-формы.
    ФайлОтправки.ЗаписатьСтроку("--" + Boundary);
    //Соответствует HTML-тэгу input type="submit" name="submit" value="Submit" /
    ФайлОтправки.ЗаписатьСтроку("Content-disposition: form-data; name=""submit""" + Символы.ПС);
    ФайлОтправки.ЗаписатьСтроку("1");
    ФайлОтправки.ЗаписатьСтроку("--" + Boundary);
    ФайлОтправки.ЗаписатьСтроку("--" + Boundary);
    //Соответствует HTML-тэгу
    //input type="text" name="some_field" value="Some text" /
    ФайлОтправки.ЗаписатьСтроку("Content-disposition: form-data; name=""some_field""" + Символы.ПС);
    ФайлОтправки.ЗаписатьСтроку("Some text");
    ФайлОтправки.ЗаписатьСтроку("--" + Boundary);
    ФайлОтправки.Закрыть();

    ЗаголовокHTTP = Новый Соответствие();
    //При необходимости зададим Referer, например таким образом
    СтрокаСоединения = СтрокаСоединенияИнформационнойБазы();
    СерверИсточник = НСтр(СтрокаСоединения, "Srvr") + НСтр(СтрокаСоединения, "Ref");
    ЗаголовокHTTP.Вставить("Referer", СерверИсточник);
    //Укажем формат данных Content-Type
    ЗаголовокHTTP.Вставить("Content-Type", "multipart/form-data; boundary=" + Boundary);
    //Укажем длину POST-запроса Content-Length
    ФайлОтправки = Новый Файл(ИмяФайлаОтправки);
    РазмерФайлаОтправки = XMLСтрока(ФайлОтправки.Размер());
    ЗаголовокHTTP.Вставить("Content-Length", РазмерФайлаОтправки);

    //api.avto.pro:8080/api/v1/parts/fileupload/42489
    //Сервер = "api.avto.pro"; //Естественно, следует указать свой адрес.
    //Порт = "8080";
    
    Сервер = НТТРАдресСайта; //"ga.dn.ua"; //Естественно, следует указать свой адрес.
    Порт = НТТРПорт; //"80"; //Это общепринятый порт. Возможно, для вашего сервера применяется другой. Конкретное значение уточните у хостера.
    //ИспользоватьПрокси - какая-то логическая переменная, может быть значение флажка на форме или переключатель
    ИспользоватьПрокси = Ложь;
    Если ИспользоватьПрокси Тогда
        Прокси = Новый ИнтернетПрокси;
        Прокси.НеИспользоватьПроксиДляЛокальныхАдресов = Истина;
        Прокси.Пароль = "ПарольПрокси"; // укажите своё значение
        Прокси.Пользователь = "ПользовательПрокси"; // укажите своё значение
        НТТР = Новый HTTPСоединение(Сервер, Порт, , , Прокси);
    Иначе
        НТТР = Новый HTTPСоединение(Сервер, Порт);
    КонецЕсли;
    
    //АдресСкрипта = "/UpdateParts?warehouseId="+ИДСклада;          //  /api/v1/parts/fileupload/
    //АдресСкрипта = "/api/v1/parts/fileupload/"+ИДСклада;
    АдресСкрипта = "load_price_achiv.php"; //"ld.php"; //Естественно, следует указать имя своего скрипта.
    Попытка
        Сообщить("Пробуем отправить");  
        НТТР.ОтправитьДляОбработки(ИмяФайлаОтправки, АдресСкрипта, ИмяФайлаОтвета, ЗаголовокHTTP);
        Сообщить("Что-то отправили");
    Исключение
        #Если Клиент Тогда
            Сообщить("Неудачная попытка соединения: " + ОписаниеОшибки());
        #Иначе
            ЗаписьЖурналаРегистрации("HTTPСоединение", УровеньЖурналаРегистрации.Ошибка, , , "Неудачная попытка соединения: " + ОписаниеОшибки());
        #КонецЕсли
        Возврат 0;
    КонецПопытки;
    //Удалим файл отправки POST-запроса. Больше он нам не нужен.
    УдалитьФайлы(ИмяФайлаОтправки);
    
    //Отправили данные, анализируем ответ сервера.
    ФайлОтвета = Новый Файл(ИмяФайлаОтвета);
    Если ФайлОтвета.Существует() Тогда
        ТекстОтвета = Новый ТекстовыйДокумент();
        ТекстОтвета.Прочитать(ИмяФайлаОтвета);
        Если ТекстОтвета.КоличествоСтрок() > 0 Тогда
            ОтветСервера = ТекстОтвета.ПолучитьТекст();
            #Если Клиент Тогда
                Сообщить(ОтветСервера);
            #КонецЕсли
        Иначе
            #Если Клиент Тогда
                Сообщить("Отправка файла на сервер: Получен пустой ответ сервера.");
            #Иначе
                ЗаписьЖурналаРегистрации("HTTPСоединение", УровеньЖурналаРегистрации.Ошибка, , , "Получен пустой ответ сервера.");
            #КонецЕсли
        КонецЕсли;

        УдалитьФайлы(ИмяФайлаОтвета);
    Иначе
        #Если Клиент Тогда
            Сообщить("Отправка файла на сервер: Ответ сервера не получен.");
        #Иначе
            ЗаписьЖурналаРегистрации("HTTPСоединение", УровеньЖурналаРегистрации.Ошибка, , , "Ответ сервера не получен.");
        #КонецЕсли
    КонецЕсли;


    Сообщить("Файл прайса скопирован на "+НТТРАдресСайта);

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

Функция ОтправитьПочту(КвоПисем, имяФайлаОтправки, Получатели, НовоеТело = "")
    Если Получатели.Количество() = 0 Тогда
        Возврат Истина;
    КонецЕсли;
    
    УчетнаяЗапись = эпПолучитьУчетнуюЗаписьПоУмолчанию();
    СтруктураРежимовОбмена = Новый Структура("Получить, Отправить", Ложь, Истина);  
    Профиль = эпПолучитьПочтовыйПрофиль(УчетнаяЗапись, СтруктураРежимовОбмена);
    
//    эпОтправитьЭлектронныеПисьма(УчетнаяЗапись);
    Попытка
        ИнтернетПочта = Новый ИнтернетПочта;
    Исключение
        #Если Клиент Тогда
            Сообщить("Неудачная попытка Отправки почты: " + ОписаниеОшибки());
        #Иначе
            ЗаписьЖурналаРегистрации("ОтправитьПочту", УровеньЖурналаРегистрации.Ошибка, , , "Неудачная попытка Отправки почты: " + ОписаниеОшибки());
        #КонецЕсли
        //Предупреждение("2а");
    КонецПопытки;
    
    Попытка
        ИнтернетПочта.Подключиться(Профиль);
    Исключение
        Сообщить("Произошли ошибки при проверке настроек учетной записи. "+ОписаниеОшибки());
        Возврат "Произошли ошибки при проверке настроек учетной записи. "+ОписаниеОшибки();
    КонецПопытки;

    Сообщение = Новый ИнтернетПочтовоеСообщение;
    Для каждого Стр Из Получатели Цикл
        ПочтовыйАдрес=Сообщение.Получатели.Добавить(Стр.Email);
        ПочтовыйАдрес.ОтображаемоеИмя=СокрЛП(Стр.Имя);
    КонецЦикла;

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

&НаСервере
Функция КурсЗапросомСервер(ДатаДок, ВалютаДок)
    Запрос = Новый Запрос;
    Запрос.УстановитьПараметр("Дата",ДатаДок);
    Запрос.УстановитьПараметр("Валюта",ВалютаДок);
    Запрос.Текст = "Выбрать        
            |КурсыВалют.Период,        
            |КурсыВалют.Курс,        
            |КурсыВалют.Кратность        
            |ИЗ        
            |РегистрСведений.КурсыВалют.СрезПоследних(&Дата, Валюта =&Валюта) КАК КурсыВалют";
    Результат = Запрос.Выполнить();
    Выборка = Результат.Выбрать();
    Если Выборка.Следующий() Тогда      
        Рез = Выборка.Курс; //Строка(Выборка.Курс)+":"+Строка(Выборка.Кратность);
    КонецЕсли;
    Возврат Рез;
КонецФункции


Процедура Тест() Экспорт

    ТД = Новый ТекстовыйДокумент;
    ТД.ВставитьСтроку(1, "Тестовая строка");
    дт = Строка(ТекущаяДата());
    дт = СтрЗаменить(дт, ".", "_");
    дт = СтрЗаменить(дт, ":", "_");
    ТД.Записать("D:\1с\_DN\Тестовый_файл_"+дт+".txt");
КонецПроцедуры

Процедура СтартРассылки(ЭтоАдмин, ГрупповаяРассылка=Ложь) Экспорт
    //Формируем прайсы
    НовыйПрайс();
    //Получаем настройки из регистра сведений НастройкиРассылкиПрайсов
    КвоПисем=0;    
    КаталогИБ = НСтр(СтрокаСоединенияИнформационнойБазы(), "File");    
    
    Запрос = Новый Запрос;
    Запрос.Текст =
        "ВЫБРАТЬ
        |    НастройкиРассылкиПрайсов.НомерПрайса КАК НомерПрайса,
        |    НастройкиРассылкиПрайсов.ТипЦены КАК ТипЦены,
        |    НастройкиРассылкиПрайсов.Склады КАК Склады,
        |    НастройкиРассылкиПрайсов.Валюта КАК Валюта,
        |    НастройкиРассылкиПрайсов.Доп КАК Доп,
        |    НастройкиРассылкиПрайсов.Активно КАК Активно
        |ИЗ
        |    РегистрСведений.НастройкиРассылкиПрайсов КАК НастройкиРассылкиПрайсов
        |ГДЕ
        |    НастройкиРассылкиПрайсов.Активно = ИСТИНА";
    
    НастройкиРассылки = Запрос.Выполнить().Выгрузить();
    //ТабличноеПоле1 = Запрос.Выполнить().Выгрузить();
    
    //ЭлементыФормы.НадпТекОперация.Заголовок = "Этап (9/9): Отправка писем.";
    Для каждого Стр из НастройкиРассылки Цикл
        ИмяФайла = КаталогИБ+"\ExtForms\_MailPrices\price"+Строка(Стр.НомерПрайса)+".zip";        
        Тхт = Строка(Стр.НомерПрайса)+"  "+Строка(Стр.ТипЦены)+"  "+Строка(Стр.Склады)+"  "+Строка(Стр.Валюта);
        #Если Клиент Тогда
            Сообщить(Тхт);
        #Иначе
            ЗаписьЖурналаРегистрации("Настройка прайсов", УровеньЖурналаРегистрации.Предупреждение, , , Тхт);
        #КонецЕсли

        Запрос = Новый Запрос;
        Запрос.Текст =
        "ВЫБРАТЬ
        |    Контрагенты.ПометкаУдаления,
        |    Контрагенты.РассылатьПрайсы,
        |    Контрагенты.НомерПрайса,
        |    Контрагенты.Ссылка,
        |    Контрагенты.Наименование
        |ИЗ
        |    Справочник.Контрагенты КАК Контрагенты
        |ГДЕ
        |    Контрагенты.ПометкаУдаления = ЛОЖЬ
        |    И Контрагенты.РассылатьПрайсы = ИСТИНА
        |    И Контрагенты.НомерПрайса = &НомерПрайса";
        Запрос.УстановитьПараметр("НомерПрайса",Стр.НомерПрайса);
        Результат = Запрос.Выполнить();
        Выборка = Результат.Выбрать();    
        Если ЭтоАдмин Тогда //флТолькоАдмин Тогда
            Получатели = Новый ТаблицаЗначений;
            Получатели.Колонки.Добавить("Имя");
            Получатели.Колонки.Добавить("Email");    
            ПолучателиНовСтр = Получатели.Добавить();
            ПолучателиНовСтр.Имя = "bizisoft";
            ПолучателиНовСтр.Email = "bizisoft@yandex.ru";            
            ТемаПисьма = "Остатки на " + СокрЛП(Формат(ТекущаяДата(),"ДЛФ=D"));
        //Организация = Справочники.Организации.НайтиПоКоду("00001");  
            ТекстПисьма = "Это письмо отправлено автоматически, отвечать на него не нужно.";
            ОтправитьПочту(1, ИмяФайла, Получатели);
            Продолжить;
        КонецЕсли;

            //КвоПисем=КвоПисем+1;    
        Если ГрупповаяРассылка Тогда //флГрупповаяРассылка Тогда
            Получатели = Новый ТаблицаЗначений;
            Получатели.Колонки.Добавить("Имя");
            Получатели.Колонки.Добавить("Email");        
            
            КвоПисем = 0;
            Пока Выборка.Следующий() Цикл
                ЭлектронныйАдрес = Неопределено;
                ЭлектронныйАдрес = киПолучитьПредставлениеКИ(Выборка.Ссылка, Справочники.ВидыКонтактнойИнформации["АдресЭлектроннойПочтыРабочий"]);
                ПолучателиНовСтр = Получатели.Добавить();
                ПолучателиНовСтр.Имя = Выборка.Наименование;
                ПолучателиНовСтр.Email = ЭлектронныйАдрес;            
                КвоПисем=КвоПисем+1;                    
            КонецЦикла;
            
            ТемаПисьма = "Остатки на " + СокрЛП(Формат(ТекущаяДата(),"ДЛФ=D"));
            Организация = Справочники.Организации.НайтиПоКоду("00001");  
            ТекстПисьма = "Это письмо отправлено автоматически, отвечать на него не нужно."+Символы.ПС+Символы.ПС+Символы.ПС+
                          киПолучитьПредставлениеКИ(Организация, Справочники.ВидыКонтактнойИнформации["АдресЮридический"])+Символы.ПС+
                          "Магазин тел."+Символы.ПС+
                          киПолучитьПредставлениеКИ(Организация, Справочники.ВидыКонтактнойИнформации["ТелефонРабочий"])+Символы.ПС+
                          киПолучитьПредставлениеКИ(Организация, Справочники.ВидыКонтактнойИнформации["ТелефонСотовый"])+Символы.ПС+
                          киПолучитьПредставлениеКИ(Организация, Справочники.ВидыКонтактнойИнформации["ТелефонКонтактный"])+Символы.ПС+
                          киПолучитьПредставлениеКИ(Организация, Справочники.ВидыКонтактнойИнформации["ТелефонДомашний"])+Символы.ПС+
                          "E-mail: "+киПолучитьПредставлениеКИ(Организация, Справочники.ВидыКонтактнойИнформации["АдресЭлектроннойПочтыРабочий"])+Символы.ПС+
                          "Интернет-Магазин: "+киПолучитьПредставлениеКИ(Организация, Справочники.ВидыКонтактнойИнформации["ВебСтраницаОрганизации"])+Символы.ПС+
                          "С уважением Гранд-Авто";    
            ОтправитьПочту(КвоПисем, ИмяФайла, Получатели);
        Иначе
            Получатели = Новый ТаблицаЗначений;
            Получатели.Колонки.Добавить("Имя");
            Получатели.Колонки.Добавить("Email");        
            ТемаПисьма = "Остатки на " + СокрЛП(Формат(ТекущаяДата(),"ДЛФ=D"));
            Организация = Справочники.Организации.НайтиПоКоду("00001");
            ТекстПисьма = "Это письмо отправлено автоматически, отвечать на него не нужно."+Символы.ПС+Символы.ПС+Символы.ПС+
                          киПолучитьПредставлениеКИ(Организация, Справочники.ВидыКонтактнойИнформации["АдресЮридический"])+Символы.ПС+
                          "Магазин тел."+Символы.ПС+
                          киПолучитьПредставлениеКИ(Организация, Справочники.ВидыКонтактнойИнформации["ТелефонРабочий"])+Символы.ПС+
                          киПолучитьПредставлениеКИ(Организация, Справочники.ВидыКонтактнойИнформации["ТелефонСотовый"])+Символы.ПС+
                          киПолучитьПредставлениеКИ(Организация, Справочники.ВидыКонтактнойИнформации["ТелефонКонтактный"])+Символы.ПС+
                          киПолучитьПредставлениеКИ(Организация, Справочники.ВидыКонтактнойИнформации["ТелефонДомашний"])+Символы.ПС+
                          "E-mail: "+киПолучитьПредставлениеКИ(Организация, Справочники.ВидыКонтактнойИнформации["АдресЭлектроннойПочтыРабочий"])+Символы.ПС+
                          "Интернет-Магазин: "+киПолучитьПредставлениеКИ(Организация, Справочники.ВидыКонтактнойИнформации["ВебСтраницаОрганизации"])+Символы.ПС+
                          "С уважением Гранд-Авто";
            Пока Выборка.Следующий() Цикл
                КвоПисем = 0;            
                Получатели.Очистить();
                ЭлектронныйАдрес = Неопределено;
                ЭлектронныйАдрес = киПолучитьПредставлениеКИ(Выборка.Ссылка, Справочники.ВидыКонтактнойИнформации["АдресЭлектроннойПочтыРабочий"]);
                ПолучателиНовСтр = Получатели.Добавить();
                ПолучателиНовСтр.Имя = Выборка.Наименование;
                ПолучателиНовСтр.Email = ЭлектронныйАдрес;            
                КвоПисем=КвоПисем+1;    
                ОтправитьПочту(КвоПисем, ИмяФайла, Получатели);    
            КонецЦикла;               
        КонецЕсли;
    
        Если Стр.Доп = 1 Тогда
            Сообщить("Вызов процедуры отправки файла ПОСТ запросом на сайт");
            ФТПСервер = Константы.ФТПСервер.Получить();//"ga.dn.ua";
            ПараметрыПодключения = Новый Массив();
            ПараметрыПодключения.Добавить(ФТПСервер);   //хост
            ПараметрыПодключения.Добавить("80");         //порт
            ПараметрыПодключения.Добавить("login");    //логин
            ПараметрыПодключения.Добавить("password");   //пароль
            ПараметрыПодключения.Добавить("ИДСклада"); //ид склада    
            Сообщить(ИмяФайла);
            ОтправитьФайлPOSTЗапросом(ИмяФайла, ПараметрыПодключения);
            //--- отчет на почту о загрузке архива на сайт
            Пол = Новый ТаблицаЗначений;
            Пол.Колонки.Добавить("Имя");
            Пол.Колонки.Добавить("Email");
            ПолНовСтр = Пол.Добавить();
            ПолНовСтр.Имя = "bizisoft";
            ПолНовСтр.Email = "bizisoft@yandex.ru";
            
            ТемаПисьма = "Отчет загрузки файла";
            ТекстПисьма = "Файл "+Строка(ИмяФайла)+" был загружен на сайт:"+ФТПСервер;
            ОтправитьПочту(1, ИмяФайла, Пол);
            //---

        КонецЕсли;        
    КонецЦикла;
    //ЭлементыФормы.НадпТекОперация.Заголовок = "Этап (-/-): Процесс завершен.";

КонецПроцедуры

Функция НовыйПрайс()
//дтНач = ТекущаяДата();
    КаталогИБ = НСтр(СтрокаСоединенияИнформационнойБазы(), "File");    
    Запрос = Новый Запрос;
    Запрос.Текст =
        "ВЫБРАТЬ
        |    НастройкиРассылкиПрайсов.НомерПрайса КАК НомерПрайса,
        |    НастройкиРассылкиПрайсов.ТипЦены КАК ТипЦены,
        |    НастройкиРассылкиПрайсов.Склады КАК Склады,
        |    НастройкиРассылкиПрайсов.Валюта КАК Валюта,
        |    НастройкиРассылкиПрайсов.Доп КАК Доп,
        |    НастройкиРассылкиПрайсов.Активно КАК Активно
        |ИЗ
        |    РегистрСведений.НастройкиРассылкиПрайсов КАК НастройкиРассылкиПрайсов
        |ГДЕ
        |    НастройкиРассылкиПрайсов.Активно = ИСТИНА";
    
    НастройкиРассылки = Запрос.Выполнить().Выгрузить();
    Для каждого стрНастройки из НастройкиРассылки Цикл
        //Сообщить(стрНастройки.НомерПрайса);
        //Сообщить(стрНастройки.ТипЦены);
        //Сообщить(стрНастройки.Склады);
        //СТРОИМ ЗАПРОС ПО ВЫБРАННЫМ СКЛАДАМ
        ТекстЗапросаИТОГ =  "ВЫБРАТЬ
                            |    ЦеныСрезПоследних.Номенклатура,
                            |    ЦеныСрезПоследних.Цена * (КурсУпр.Курс / КурсУпр.Кратность) / (КурсВал.Курс / КурсВал.Кратность) КАК Цена";
        Счетчик = 0;
        Сообщить(стрНастройки.Склады);
        //Преобразуем строку с разделителями (Склады: Д-МАГАЗИН; Д-ЦЕНТР) в массив
        МассивИзСтроки = СтрРазделить(стрНастройки.Склады,";",Ложь);
        врСЗСклады = Новый СписокЗначений;
        //Помещаем массив во временный список значений
        врСЗСклады.ЗагрузитьЗначения(МассивИзСтроки);
        Сообщить(врСЗСклады);
        //Пересобираем список складов, но уже ввиде ссылок
        СЗСклады = Новый СписокЗначений;
        СпрСклады = Справочники.СкладыКомпании;
        Для Каждого Элемент Из врСЗСклады Цикл
            НайденныйСклад = СпрСклады.НайтиПоНаименованию(Элемент.Значение);
            Если НЕ НайденныйСклад.Пустая() Тогда
                СЗСклады.Добавить(НайденныйСклад, НайденныйСклад);
            КонецЕсли;            
        КонецЦикла;
        //Собираем текст запроса
        Для Каждого Элемент Из СЗСклады Цикл //стрНастройки.Склады Цикл
          //  Сообщить(Элемент.Представление+": "+Строка(Элемент.Значение)+"   "+Строка(Элемент.Значение.Код)      );
            Счетчик=Счетчик+1;
            ТекстЗапросаИТОГ = ТекстЗапросаИТОГ+","+Символы.ПС+
                "Остатки"+Строка(Счетчик)+".КоличествоОстаток-Остатки"+Строка(Счетчик)+".РезервОстаток КАК "+Строка(Элемент.Значение.Код);                    
        КонецЦикла;
        ТекстЗапросаИТОГ = ТекстЗапросаИТОГ+Символы.ПС+Символы.ПС+
            "ИЗ
            |    РегистрСведений.Цены.СрезПоследних(&Период, ТипЦен = &Цена И ПодразделениеКомпании = &Подразделение) КАК ЦеныСрезПоследних
            |        ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.КурсыВалют.СрезПоследних(&Период, ) КАК КурсУпр
            |        ПО (КурсУпр.Валюта = &ВалютаУпр)
            |        ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.КурсыВалют.СрезПоследних(&Период, ) КАК КурсРег
            |        ПО (КурсРег.Валюта = &ВалютаРег)
            |        ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.КурсыВалют.СрезПоследних(&Период, ) КАК КурсВал
            |        ПО (КурсВал.Валюта = &Валюта)";
        Счетчик = 0;
        Для Каждого Элемент Из СЗСклады Цикл //стрНастройки.Склады Цикл
     //       Сообщить(Элемент.Представление+": "+Строка(Элемент.Значение)+"   "+Строка(Элемент.Значение.Код)      );
            Счетчик=Счетчик+1;
            ТекстЗапросаИТОГ = ТекстЗапросаИТОГ+Символы.ПС+
            "        ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ОстаткиТоваровКомпании.Остатки(&Период, СкладКомпании = &Склад"+Строка(Счетчик)+") КАК Остатки"+Строка(Счетчик)+"
            |        ПО ЦеныСрезПоследних.Номенклатура = Остатки"+Строка(Счетчик)+".Номенклатура";        
        КонецЦикла;    
        //Формируем запрос
        Запрос = Новый Запрос;
        Запрос.Текст = ТекстЗапросаИТОГ;
        //Обработка параметров
        Запрос.УстановитьПараметр("Подразделение", Справочники.ПодразделенияКомпании.ОсновноеПодразделение);
        Запрос.УстановитьПараметр("Цена", стрНастройки.ТипЦены);
        Запрос.УстановитьПараметр("Период", ТекущаяДата());
        Счетчик = 0;
        Для Каждого Элемент Из СЗСклады Цикл //стрНастройки.Склады Цикл             
            Счетчик=Счетчик+1;
            Запрос.УстановитьПараметр("Склад"+Строка(Счетчик), Элемент.Значение);
        КонецЦикла;
        Запрос.УстановитьПараметр("ВалютаУпр", Константы.ВалютаУправленческогоУчетаКомпании.Получить());
        Запрос.УстановитьПараметр("ВалютаРег", Константы.ВалютаРегламентированногоУчетаОрганизаций.Получить());
        Запрос.УстановитьПараметр("Валюта", стрНастройки.Валюта);
        
    //    Сообщить(ТекстЗапросаИТОГ);    
            
            
        //Сообщить(стрНастройки.Валюта);
        //Сообщить(стрНастройки.Доп);
        
        Результат = Запрос.Выполнить();
        ТЗ = Результат.Выгрузить();
        
        //бсПоказатьРезультатВТаблице(ТЗ);
        
        //ЭлементыФормы.Индикатор1.МинимальноеЗначение = 0;
        //ЭлементыФормы.Индикатор1.МаксимальноеЗначение = ТЗ.Количество();
        //ЭлементыФормы.Индикатор1.Значение = 0;  
        ИмяФайлаПрайса = КаталогИБ+"\ExtForms\_MailPrices\price"+Строка(стрНастройки.НомерПрайса);          
        ТабличныйДокумент=Новый ТабличныйДокумент;
        Макет = ПолучитьМакет("Макет");        
        ОбластьЗаголовок = Макет.ПолучитьОбласть("Заголовок");
        ОбластьЗаголовок.Параметры.ПечОрганизация = Справочники.Организации.ОсновнаяОрганизация;
        ТабличныйДокумент.Вывести(ОбластьЗаголовок);     
        ОбластьКопирования = Макет.ПолучитьОбласть("Шапка|Основное");    
        ТабличныйДокумент.Вывести(ОбластьКопирования);
        //Заполняем шипку складами из настроек
        Для каждого ст из СЗСклады Цикл //стрНастройки.Склады Цикл
            ОбластьКопирования = Макет.ПолучитьОбласть("Шапка|Склад");
            ОбластьКопирования.Параметры.СкладКомпанииНаименование = ст;
            ТабличныйДокумент.Присоединить(ОбластьКопирования);
        КонецЦикла;    
        //Заполняем шапку типом цены из настроек
        ОбластьКопирования = Макет.ПолучитьОбласть("Шапка|Цены");
        ОбластьКопирования.Параметры.ТипЦен = стрНастройки.ТипЦены;//ст.ТипыЦен.Наименование;
        ТабличныйДокумент.Присоединить(ОбластьКопирования);            
        //Получаем курсы основных валют
        ТекКурс = КурсЗапросомСервер(ТекущаяДата(), Справочники.Валюты.НайтиПоКоду("840"));
        ТекКурсР = КурсЗапросомСервер(ТекущаяДата(), Справочники.Валюты.НайтиПоКоду("643"));
        ТекВалюта = стрНастройки.Валюта;  
        Пп = 0;
        Для каждого стр из ТЗ Цикл
            Пп=Пп+1;
              ОбластьШапка = Макет.ПолучитьОбласть("Шапка");
            //Заполняем основную часть макета
            ОбластьКопирования = Макет.ПолучитьОбласть("Детали|Основное");    
            ОбластьКопирования.Параметры.пп = Пп;
            ОбластьКопирования.Параметры.ПечНоменклатура = стр.Номенклатура;
            ОбластьКопирования.Параметры.ПечАртикул = стр.Номенклатура.тАртикул;
            ОбластьКопирования.Параметры.ПечПроизводитель = стр.Номенклатура.Производитель;
            ОбластьКопирования.Параметры.ПечМодель = стр.Номенклатура.Модель;                
            ТабличныйДокумент.Вывести(ОбластьКопирования);    
            //Выводим остатки на складах в макет
            Для каждого скл из СЗСклады Цикл //стрНастройки.Склады Цикл    
            //    Сообщить(скл);    
                Склад = Справочники.СкладыКомпании.НайтиПоНаименованию(скл);
            //    Сообщить(Склад.Код);
                ОбластьКопирования = Макет.ПолучитьОбласть("Детали|Склад");
                ТекКол=0;
                Попытка
                    ТекКол = Число(стр[Склад.Код]);
                Исключение
                    ТекКол = 0;
            //        Сообщить("Ошибка преобразования в число для: "+Строка(стр[Склад.Код]));
                КонецПопытки;
                
                Если ТекКол>5 Тогда
                    ОбластьКопирования.Параметры.ПечСклад = ">5";
                Иначе
                    ОбластьКопирования.Параметры.ПечСклад = ТекКол; //стр[Склад.Код];
                КонецЕсли;                
                ТабличныйДокумент.Присоединить(ОбластьКопирования);
            КонецЦикла;            
            ОбластьКопирования = Макет.ПолучитьОбласть("Детали|Цены");
            //Расчитываем цены по полученым курсам     
            ВалютаРегламентированногоУчета=Константы.ВалютаРегламентированногоУчетаОрганизаций.Получить();
            ВалютаУправленческогоУчета = Константы.ВалютаУправленческогоУчетаКомпании.Получить();
    
                ЦенаВВалюте = стр.Цена;
            Состояние("Формирование прайса",Пп,,);
            ОбластьКопирования.Параметры.ПечЦена = ЦенаВВалюте;//стр[НаимКолонки];
            ТабличныйДокумент.Присоединить(ОбластьКопирования);
        КонецЦикла;
        ТабличныйДокумент.Записать(ИмяФайлаПрайса+".xls", ТипФайлаТабличногоДокумента.XLS97);
        //Архивируем прайсы    
        Zip = Новый ЗаписьZipФайла(ИмяФайлаПрайса+".zip");
        Zip.Добавить(ИмяФайлаПрайса+".xls");
        Zip.Записать();
    
    КонецЦикла;    

    Возврат 0;


КонецФункции
  Форум: Программирование в 1С Предприятие 8.3 · Просмотр сообщения: #167572 · Ответов: 5 · Просмотров: 2263
 

>  Автозапуск обработки / внешней обработки
bizisoft
Отправлено: 20.10.20, 13:11


Завсегдатай
****

Группа: Пользователи
Сообщений: 242
Регистрация: 11.12.12
Из: Донецк
Пользователь №: 22868


Попробовал следующиее:

В в модуле объекта обработки прописал экспортную процедуру Тест() для проверки возможности запуска

Процедура Тест() Экспорт    
    ТД = Новый ТекстовыйДокумент;
    ТД.ВставитьСтроку(1, "Тестовая строка");
    ТД.Записать("D:\1с\_DN\Тестовый_файл.txt");
КонецПроцедуры



В общем модуле "фзФоновыеЗадания" в процедуре прописал:
Процедура ВыполнитьМоюОбработку(Параметр) Экспорт
    Рассылка = Обработки._РассылкаПрайсовБизисофт.Создать();
    Рассылка.Тест();
КонецПроцедуры


Нажимаю выполнить РЗ немедленно - отрабатывает и в указанной директории создаются файлы.

Т.е. получается все работает и экспортная процедура выполняется.

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

  Форум: Программирование в 1С Предприятие 8.3 · Просмотр сообщения: #167490 · Ответов: 5 · Просмотров: 2263
 

>  Автозапуск обработки / внешней обработки
bizisoft
Отправлено: 20.10.20, 10:51


Завсегдатай
****

Группа: Пользователи
Сообщений: 242
Регистрация: 11.12.12
Из: Донецк
Пользователь №: 22868


nik389 @ Вчера, 20:07 * ,
Не уверен, что в Альфа-Авто используется БСП.

Рарус ответил касательно РЗ следующее:
Цитата
В конфигурации стандартный функционал работы Регламентных заданий: устанавливается расписание, пользователь и другие настройки запуска. Из специфики клиент-серверного варианта - должны быть разблокирована работа регламентных заданий для этой базы на сервере.


Я попробовал следующие действия:
- в общем модуле "фзФоновыеЗадания" добавил процедуру
Процедура ВыполнитьМоюОбработку(Параметр) Экспорт
    Сообщить(Параметр);
        Сообщить("Параметр");
КонецПроцедуры

- добавил метаданные РегламентныеЗадания бс_ОбменССайтом имя метода выбрал фзФоновыеЗадания.ВыполнитьМоюОбработку

В режиме предприятия добавляю регламентное задание, выбираю Вид задание бс_ОбменССайтом, выбираю пользователя, заполняю "Ключ" = 123 (с потолка), ставлю галочку Использование.
Нажимаю кнопку "Выполнить регламентное задание немедленно" и вот что получается:
Регламентные задания
Бс обмен с сайтом    Бс обмен с сайтом    Робот    19.10.2020 16:47:22    Задание выполнено

Воновые задания
<Самостоятельный запуск>    Бс обмен с сайтом    Задание выполнено    20.10.2020 10:36:00    20.10.2020 10:36:00


Я правильно понимаю, что задание выполнилось, судя по значению "Состояния", но при этом Сообщить("Параметр"); не выводит сообщение или при регламентных заданиях сообщения не выводятся?

Теперь можно в процедуре ВыполнитьМоюОбработку(Параметр) прописать запуск внешней обработки или обычной разработки?
  Форум: Программирование в 1С Предприятие 8.3 · Просмотр сообщения: #167489 · Ответов: 5 · Просмотров: 2263
 

>  Автозапуск обработки / внешней обработки
bizisoft
Отправлено: 16.10.20, 21:42


Завсегдатай
****

Группа: Пользователи
Сообщений: 242
Регистрация: 11.12.12
Из: Донецк
Пользователь №: 22868


Здравствуйте.
1С (8.3.14.2095) / Альфа-Авто (4.1.23.01) / Файловый режим / обычные формы.

Есть обработки для обмена с сайтом и рассылка прайсов.
Запуск этих обработок осуществляется через планировщик заданий windows (запускается база, в качестве параметра передается внешняя обработка и в ней в качестве своего параметра "режим" внешней обработки (т.е какие функции будут отрабатывать).

Грядет перевод базы на клиент-серверный режим работы, и что-то мне подсказывает, что автостарт обработок перестанет работать.

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

Люди добрые, направьте на путь истинный, растолкуйте, как лучше это сделать и в какой последовательности нужно действовать?
  Форум: Программирование в 1С Предприятие 8.3 · Просмотр сообщения: #167412 · Ответов: 5 · Просмотров: 2263
 

>  После обновления платформы и конфигурации перестал работать FTPСоединение
bizisoft
Отправлено: 07.10.20, 10:08


Завсегдатай
****

Группа: Пользователи
Сообщений: 242
Регистрация: 11.12.12
Из: Донецк
Пользователь №: 22868


Alegzander @ Сегодня, 8:17 * ,
Ну так до обновления все работало.

Решил проверить, изменил константу ФТППорт на Число.
Так работает.
Получается в предыдущей версии платформы это было не существенным, поэтому работало и ошибку не выдавало.
  Форум: Программирование в 1С Предприятие 8.3 · Просмотр сообщения: #167129 · Ответов: 3 · Просмотров: 1757
 

>  После обновления платформы и конфигурации перестал работать FTPСоединение
bizisoft
Отправлено: 06.10.20, 20:17


Завсегдатай
****

Группа: Пользователи
Сообщений: 242
Регистрация: 11.12.12
Из: Донецк
Пользователь №: 22868


Вот так создавалось FTP соединение:
ФТП = Новый FTPСоединение(ФТПСервер, ФТППорт, ФТППользователь, ФТППароль, Прокси);


На старой платформе все работало, но на новой (причину я так и не понял) ни в какую.

Погрыз мануалы и выяснил, что в новой платформе они добавили поддержку SSL (защищенные) соединений, и добавили для этого несколько параметров:
ФТП = Новый FTPСоединение(ФТПСервер, ФТППорт, ФТППользователь, ФТППароль, Прокси, Истина,0,ssl4,УровеньИспользованияЗащищенногоСоединенияFTP.Авто);


Но что я только не пробовал не помогало.

В итоге получилось так:
ФТП = Новый FTPСоединение(ФТПСервер, , ФТППользователь, ФТППароль);

т.е. убрал 2-й параметр ФТППорт, хотя не понятно почему так, где логика в этом, а если порт будет отличаться от "21" (по умолчанию) ?
  Форум: Программирование в 1С Предприятие 8.3 · Просмотр сообщения: #167096 · Ответов: 3 · Просмотров: 1757
 

>  После обновления платформы и конфигурации перестал работать FTPСоединение
bizisoft
Отправлено: 06.10.20, 15:59


Завсегдатай
****

Группа: Пользователи
Сообщений: 242
Регистрация: 11.12.12
Из: Донецк
Пользователь №: 22868


Здравствуйте.

1С:Предприятие 8.3 (8.3.14.2095)
Альфа-Авто: 4.1.22.01

После обновления конфигурации 4.1.21.01 на 4.1.22.01 с соответствующим переходом с платформы 8.2 на 8.3.
После этого обновления самописная внешняя обработка для выгрузки данных (номенклатура, остатки, цены) на сайт перестала работать.
Выгрузка данных на сайт происходит посредством выгрузки данных в файлы csv, архивирование файлов и загрузки их в каталог сайта через FTP.

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


Не понятно почему перестал работать метод FTPСоединение() после обновления, в 1С 8.2.19.130 АА 4.1.21.01.

Вроде в 8.3 есть какое-то отличие (не уверен точно) в параметрах FTPСоединение() чем у 8.2 (их стало больше).
Поэтому пробовал указать эти дополнительные параметры:
ФТП = Новый FTPСоединение(ФТПСервер, ФТППорт, ФТППользователь, ФТППароль, Прокси, Истина,0,Неопределено,УровеньИспользованияЗащищенногоСоединенияFTP.Авто);

Но и это не дало результата.

Может кто-нибудь сталкивался с такой ситуацией и подскажет как решить данную проблему.

Для получения развернутой информации по ошибке убрал обвязку Попытка-Исключение, но скупая ошибка ясности не внесла.
{ВнешняяОбработка.ПроверкаИнтернетЗаказов.Форма.ПроверкаИнтернетЗаказов.Форма(5419)}: Ошибка при вызове конструктора (FTPСоединение)
        ФТП = Новый FTPСоединение(ФТПСервер, ФТППорт, ФТППользователь, ФТППароль, Прокси);
по причине:
Несоответствие типов (параметр номер '2')

Если ругается на 2-ой параметр, то это константа строкового типа
ФТПСервер = "xx.yy.ua";
ФТППорт = "21";
ФТППользователь = "user";
ФТППароль = "123";
  Форум: Программирование в 1С Предприятие 8.3 · Просмотр сообщения: #167095 · Ответов: 3 · Просмотров: 1757
 

>  Как лучше хранить тарифы
bizisoft
Отправлено: 05.10.20, 23:31


Завсегдатай
****

Группа: Пользователи
Сообщений: 242
Регистрация: 11.12.12
Из: Донецк
Пользователь №: 22868


bizisoft @ 19.09.20, 11:47 * ,
Все получилось.
При проведении документа, создаются записи в регистр, а при отмене проведение, удаляются.
  Форум: Программирование обычных форм 1С 8.2 и не интер... · Просмотр сообщения: #167064 · Ответов: 7 · Просмотров: 1422
 

>  Обновление конфигурации с нюансами
bizisoft
Отправлено: 01.10.20, 9:56


Завсегдатай
****

Группа: Пользователи
Сообщений: 242
Регистрация: 11.12.12
Из: Донецк
Пользователь №: 22868


Petre @ Сегодня, 7:34 * ,
Не совсем понял что это такое:
Цитата(Petre @ 01.10.20, 7:34) *
Замену имен можно быстро произвести переименованием из функционала рефакторинга.

Это какой-то функционал конфигуратора?



Цитата(Petre @ 01.10.20, 7:34) *
А вообще правильнее было бы делать так. Создать базу для разработки, а потом из нее делать поставки для рабочей базы.

Я пришел к созданию копии для разработки где-то на 5-ом обновлении.
А что означает делать поставки для рабочей базы, это какой-то другой способ переноса изменений?
Я просто после изменений в "разработке" сохранял конфигурацию в файл и после сравнение-объединение - это можно назвать "поставка для базы"?.
  Форум: Администрирование и настройка 1С · Просмотр сообщения: #166920 · Ответов: 8 · Просмотров: 2098
 

>  Обновление конфигурации с нюансами
bizisoft
Отправлено: 30.09.20, 20:33


Завсегдатай
****

Группа: Пользователи
Сообщений: 242
Регистрация: 11.12.12
Из: Донецк
Пользователь №: 22868


Здравствуйте
1С Предприятие 8.2.19.130

Собираюсь обновить конфигурацию Альфа-Авто: 4.1.21.01 на 4.1.22.01 из файла конфигурации посредством сравнение и объединения, т.к. конфигурация уже многократно модифицирована
До текущего момента уже неоднократно доводилось выполнять обновление данной базы начиная с 4.1.14.01, но тут походу особый случай, т.к. с новой конфигурацией будет осуществлен переход на другую версию платформы (8.3.10).

При сравнении конфигураций видно что изменениям подверглись большое количество модулей конфигурации причем основной объем изменений связан с заменой везде ЭтотОбъект на ЭтотОбъект82 (например в общем модуле дкДокументы заменили
ЭтотОбъект = ЭтаФорма.ДокументОбъект;
на
ЭтотОбъект82 = ЭтаФорма.ДокументОбъект;
и дальше по всему тексту ЭтотОбъект везде заменяется на ЭтотОбъект82.

Но не в этом суть, вопрос вот в чем:
Есть две разные не связанные базы, работающие на одинаковой конфигурации и их предстоит обновить.
Т.к. видимо это обновление займет у меня гораздо больше времени чем обычно, то не хотелось надолго останавливать работу этих баз и меня посетила идея, а можно-ли не спеша (чтобы не наломать в спешке дров) выполнить обновление конфигурации на копии базы, а после выгрузить уже обновленную конфигурацию в файл и уже через сравнение и объединение обновить рабочие базы за один вечер?
  Форум: Администрирование и настройка 1С · Просмотр сообщения: #166892 · Ответов: 8 · Просмотров: 2098
 

>  Как лучше хранить тарифы
bizisoft
Отправлено: 19.09.20, 10:47


Завсегдатай
****

Группа: Пользователи
Сообщений: 242
Регистрация: 11.12.12
Из: Донецк
Пользователь №: 22868


mut @ Сегодня, 11:24 * ,
Благодарю за подсказку - попробую изучить вопрос.
  Форум: Программирование обычных форм 1С 8.2 и не интер... · Просмотр сообщения: #166583 · Ответов: 7 · Просмотров: 1422
 

>  Как лучше хранить тарифы
bizisoft
Отправлено: 18.09.20, 20:30


Завсегдатай
****

Группа: Пользователи
Сообщений: 242
Регистрация: 11.12.12
Из: Донецк
Пользователь №: 22868


mut @ Сегодня, 17:48 * ,

Я попробовал немного изменить то что у меня было ранее с учетом ваших рекомендаций.

Вот такие объекты у меня получились:
Справочник.Квартиросъемщик

Реквизиты:
- Код
- Наименование (ФИО)
- Адрес
- КодЕРЦ
- Площадь
- Прописано

ТЧ (Услуги):
- Услуга (СправочникСсылка.Номенклатура)
- НомерСчета
- Тариф (СправочникСсылка.Тарифы)

ТЧ (счетчики):
- НомерСчетчика
- Назначение
- ДатаПроизводства
- ДатаУстановки
- ДатаПоверкиПоследняя
- ДатаПоверкиСледующая

////////////////////////////////

Справочник.Номенклатура

Реквизиты:
- Код
- Наименование (Услуга)
- Родитель
- Тариф (СправочникСсылка.Тарифы)
- ВидыРасчетов (По счетчику / По площади / По прописке)

////////////////////////////////

Справочник.Тарифы

Реквизиты:
- Код
- Наименование (Тариф)
- Услуга (СправочникСсылка.Услуги
- ЕдиницаИзмерения

Табличное поле
- Номер
- ОтсчетОт
- ОтсчетДо
- Стоимость

///////////////////////////////////

Документ.ОплатаУслуг

Реквизиты:
- Номер
- Дата
- Плательщик (СправочникСсылка.Квартиросъемщик)
- ПлатежныйПериодС
- ПлатежныйПериодДо

ТЧ (Услуги);
- Услуга (СправочникСсылка.Номенклатура)
- Сумма
- ПлатежныйПериодС
- ПлатежныйПериодДо
- ПоказаниеСчетчикаНачальн
- ПоказаниеСчетчикаКонечн
- ПоказаниеСчетчикаРазница
- ЛицевойСчет

//////////////////////////////////////

Документ.ИзменениеТарифов

Реквизиты:
- Услуга (СправочникСсылка.Номенклатура)
- Тариф (СправочникСсылка.Тарифы)

ТЧ (Тарифы)
- Номер
- ОтсчетОт
- ОтсчетДо
- Стоимость

//////////////////////////////////////

РегистрСведений.ТарифныйПлан (периодический)

Измерение:
- Услуга (СправочникСсылка.Номенклатура)
- Тариф (СправочникСсылка.Тарифы)
- ОтсчетОт
- ОтсчетДо

Ресурсы:
- Стоимость


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

Мне видится, что изменение тарифа будет удобнее через документ, когда в табличной части одна стоимость или пределы и стоимость по каждому пределу (для многотарифного тарифа) и при проводке делать или одну запись или сразу несколько записей (для многотарифного) в регистр
  Форум: Программирование обычных форм 1С 8.2 и не интер... · Просмотр сообщения: #166567 · Ответов: 7 · Просмотров: 1422
 

10 страниц V   1 2 3 > » 

Новые сообщения  Открытая тема (есть новые ответы)
Опрос  Опрос (есть новые голоса)
Нет новых сообщений  Открытая тема (нет новых ответов)
Нет новых голосов  Опрос (нет новых голосов)
Популярная тема  Горячая тема (есть новые ответы)
Закрыта  Закрытая тема
Нет новых  Горячая тема (нет новых ответов) Перемещена  Тема перемещена
 

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