1. headMade 141 01.06.17 13:35 Сейчас в теме

Ускорить ВЫБРАТЬ КОЛИЧЕСТВО(*) ИЗ РегистрСведений.<> [Вопрос 1С Эксперт]

Задача с экзамена 1С Эксперт. (частично обсуждение было тут (форум Гилева))

Текст задачи:
"В базе работают 1000 пользователей. Есть регистр сведений в нем 100 млн записей. запрос select count выполняется t= 60 сек. Необходимо сделать так, чтобы данные были получены за t = 1c."

Можете ли Вы подсказать, пожалуйста, в каком направлении мыслить/искать? Преподаватель говорит, есть порядка 12 способов решить задачу.

Коллеги отвечали преподавателю (Александру Морозову) по-разному, мы заранее придумали что можно отетить и отвечали
1) требуется выполнение всех регламентных операций, дефрагментация, реиндексация
2) требуется создание некластерного индекса или сделать регистр таким, чтобы был хотя бы один некластерный индекс, т.к. scan по нему быстрее скана по кластерному индексу

Первые два совета недостаточны.

3) Пробовали ответить, что нужно хранить заведомо где-то количество в этом регистре, типо константы и при записи наборов записей или удалении - следить за тем, сколько у нас записей (жертвуем записью ради запроса по выбору количества записей) - тоже не подходит
4) Коллеги предлагали из DMV представлений или статистики получать значение - тоже преподаватель говорит нарушение лиц.соглашения, нельзя в обход rphost подключаться к SQL базе напрямую
5) может быть нужно секционирование предложить было? Но Вы писали где-то, что его оч.сложно настроить и нужны знания сертифицированного специалиста MS SQL
6) Может быть надо MDOP = 1 выставить? Т.к. если 60 секунд выполняется сканирование - может быть происходит блокировка параллельных сканов или что-то такое.
7) Мы предлагали преподавателю перестроить бизнес-логику решения. Тоже не "прокатило".


Если подскажете, что можно было бы сделать, или где почитать (направление), очень многие люди будут благодарны!
Сейчас это задание как триггер, отсеиватель, добрая часть людей отсеивается просто в самом конце экзамена:)

Спасибо!!!
Ответы
Избранное Подписка Сортировка: Древо
5. корум 311 01.06.17 14:26 Сейчас в теме
7. herfis 276 01.06.17 15:02 Сейчас в теме
Вид сервера БД имеет значение или нет?
Т.е. это вопрос на тюнинг настроек конкретного сервера БД или на придумывание механизма?
16. headMade 141 01.06.17 17:02 Сейчас в теме
(7)
Вид сервера БД имеет значение или нет?
Т.е. это вопрос на тюнинг настроек конкретного сервера БД или на придумывание механизма?

вообще вопрос каcаемо MSSQL, но потом спрашиваю что может измениться на PostgreSQL

(11)
Интересно, для чего сказано что 1000 пользователей? Как то с блокировками связано?

Мне кажется что нет т.к. для 8.3 будет использоваться RCSI и читающие транзакции не будут блокировать друг друга.
17. spe1c 01.06.17 18:24 Сейчас в теме
(16)
использоваться RCSI
А они все только читают? И вообще какой уровень изоляции транзакций используется, есть уверенность? Может быть в этой задаче его нужно понизить? По логике вопроса, решение должно быть каким-то простым.
18. headMade 141 01.06.17 22:17 Сейчас в теме
(17)
А они все только читают?

Да. В условии написано
запрос select


(17)
какой уровень изоляции транзакций используется

Будет или RCSI или read uncommited. Про транзакции в условии ничего не сказано, поэтому усложнять я думаю не стоит.
19. spe1c 08.06.17 14:46 Сейчас в теме
(18)Регистр периодический или нет? В него можно добавить ресурс или реквизит, в котором сохранять общее количество записей (в момент записи). Потом отбирать только последнюю запись.
20. headMade 141 08.06.17 16:43 Сейчас в теме
(19)
Регистр периодический или нет? В него можно добавить ресурс или реквизит, в котором сохранять общее количество записей (в момент записи). Потом отбирать только последнюю запись.


Если два пользователя начнут добавлять (удалять) записи из этого регистра, то они станут в очередь на изменение
ресурса или реквизита, в котором будет храниться общее количество записей
21. spe1c 08.06.17 16:50 Сейчас в теме
(20)Ресурс в разных строках. Если регистр периодический, то в 8.3 если не ошибаюсь есть таблица итогов, тогда да. НО! Вам ведь нужно ускорить чтение, а это может быть куплено ценой более долгой записи. Поэтому пусть встанут. Поправьте если не прав.
Сурикат; +1 Ответить
14. KazanKokos 7 01.06.17 16:36 Сейчас в теме
(1) а прочитать в наборзаписей без отборов и вызвать Количество() сколько будет занимать можете попробовать?
183. vdmkvrshn 12 26.06.17 10:03 Сейчас в теме
(14) И загрузить в память 100 млн записей регистра???
35. KazanKokos 7 09.06.17 12:53 Сейчас в теме
может кто нибудь проверить на больших таблицах?:
  ВЫБРАТЬ
        СУММА(1) КАК Количество
    ИЗ 
        Справочник.Контрагенты КАК Контрагенты  


И


  ВЫБРАТЬ
        Количество(*) КАК Количество
    ИЗ 
        Справочник.Контрагенты КАК Контрагенты
38. iskdv 09.06.17 13:07 Сейчас в теме
41. GPavelS 09.06.17 13:56 Сейчас в теме
(35) в моей вот так:
результат 1 753 мс
результата - 1 781 мс
соответственно.
35млн записей
39. корум 311 09.06.17 13:28 Сейчас в теме
(38) а сколько записей было?
42. KazanKokos 7 09.06.17 13:57 Сейчас в теме
43. GPavelS 09.06.17 13:58 Сейчас в теме
(42)да. первый результат по первому, второй - по второму
44. Сурикат 192 09.06.17 14:00 Сейчас в теме
(42)
Да будет также работать как и КОЛИЧЕСТВО(*)

Также Full Index Scan и потом AGGREGATE

Нужен способ как избавиться от Full Index Scan
45. KazanKokos 7 09.06.17 14:00 Сейчас в теме
46. KazanKokos 7 09.06.17 14:01 Сейчас в теме
(44) а как-то заранее индексы подготовить можно? просто никогда не связывался
228. buganov 54 20.07.17 06:54 Сейчас в теме
(35) Второй отработал быстрее. Записей ~600К. Сумма(1) выполнился за 0.391 мс, второй запрос за 0.188 мс.
37. iskdv 09.06.17 13:06 Сейчас в теме
ВЫБРАТЬ
СУММА(1) КАК Поле1
ИЗ
РегистрСведений.ЗначенияСвойствОбъектов КАК ЗначенияСвойствОбъектов
40. KazanKokos 7 09.06.17 13:52 Сейчас в теме
56. DJDUH 17 09.06.17 15:25 Сейчас в теме
(1)
"В базе работают 1000 пользователей. Есть регистр сведений в нем 100 млн записей. запрос sel ect count выполняется t= 60 сек. Необходимо сделать так, чтобы данные были получены за t = 1c."


Дедуктивный метод:

Пока пришёл к выводу, что не сделать никак! ( при учёте, что именно необходимо выполнить запрос
select count(*) Fr om Table
в 1С - не прямой)
2. BackinSoda 01.06.17 13:37 Сейчас в теме
Не эксперт, но может выбирать порциями по N-к записей ?
3. headMade 141 01.06.17 14:14 Сейчас в теме
(2) не поможет т.к. в любом случае будет происходить сканирование кластерного индекса.
4. sleakers 01.06.17 14:18 Сейчас в теме
На форуме Гилева говорится
"разумные решения заключаются в том чтобы не сканировать таблицу в 100 миллионов строк"
Отсюда вывод что нужно сканировать частями.

На своей практики использую такой метод для быстрой очистки регистра сведений "Версии объектов" множественными фоновыми заданиями.
6. headMade 141 01.06.17 14:53 Сейчас в теме
(4) да. надо будет попробовать сделать выборку фоновыми заданиями (с разбивкой по периодам т.е. каждое фоновое задание свой период).
(5) скорее нет т.к.
"нельзя в обход rphost подключаться к SQL базе напрямую"
8. корум 311 01.06.17 15:40 Сейчас в теме
(6)что-то вспоминается смутный пример типа
начатьТранзакцию();
ы= (что-то-там.Новый());
СчетчикЗаписей = ы.Код;
отменитьТранзакцию();
9. KazanKokos 7 01.06.17 15:43 Сейчас в теме
(8) это если коды без префикса и больших дырок от удалений помеченных
10. корум 311 01.06.17 15:48 Сейчас в теме
(9) и не для регистра сведений.
11. spe1c 01.06.17 16:12 Сейчас в теме
Интересно, для чего сказано что 1000 пользователей? Как то с блокировками связано?
12. WasiliyMay 7 01.06.17 16:29 Сейчас в теме
Может правильный ответ заключается в том, что средствами платформы этого не сделать?)
13. KazanKokos 7 01.06.17 16:34 Сейчас в теме
(12) написано же что нельзя обходить лицензии
15. WasiliyMay 7 01.06.17 16:45 Сейчас в теме
(13) Правильный ответ как раз может заключаться в том, что нет такой возможности
22. spe1c 08.06.17 16:53 Сейчас в теме
Кстати сходил по ссылке в топике на форму Гилева, там писали что преподаватель требовал решить это штатными средствами платформы. Причем как я понял дополнительные константы или отдельные регистры тут создавать нельзя. Новые константы / регистры создавать не вариант, новые индексы не проходят. А что тогда вообще остается из штатных средств платформы?
23. Vovan1975 14 08.06.17 18:12 Сейчас в теме
может использовать выборку из регистра?
24. spe1c 08.06.17 22:46 Сейчас в теме
(23)Как это? Прочитать в объектной технике? Вряд ли это будет быстрее, тут что-то более хитрое должно быть, в идеале нужно уйти от сканирования таблицы в 100 млн записей, но вот как? Все попытки перенести уже посчитанные данные в другой объект конфигурации экзаменатор отвергает, настройка доп. индексов тоже не подходит, прямое обращение к базе SQL минуя сервер 1С тоже нельзя.
32. Vovan1975 14 09.06.17 11:29 Сейчас в теме
(24) да, прочитать в объектной технике без отборов.
33. spe1c 09.06.17 12:01 Сейчас в теме
(32)А что, это может работать быстрее запроса?
34. Сурикат 192 09.06.17 12:30 Сейчас в теме
(33)
По идее должно работать также
47. Vovan1975 14 09.06.17 14:01 Сейчас в теме
(33) ну там используется чтение порциями, соответствнно данные кэшируются, так что есть шанс что таки да.
52. spe1c 09.06.17 14:30 Сейчас в теме
(47)В 60 раз? Буду удивлен если это окажется одним из способов.
55. Сурикат 192 09.06.17 15:20 Сейчас в теме
(47)
А можно ссылку на источник?
(53)
Это я больше для того, чтобы не городить тестовый пример для получения планов. По ссылке планы есть.
57. Vovan1975 14 09.06.17 15:37 Сейчас в теме
(55)
А можно ссылку на источник?


метод РегистрСведенийМенеджер.<Имя регистра сведений>.Выбрать (InformationRegisterManager.<Имя регистра сведений>.Select)

формирует объект РегистрСведенийВыборка.<Имя регистра сведений> (InformationRegisterSelection.<Имя регистра сведений>)

в описании которого сказано
Объект этого типа возвращается методами Выбрать и ВыбратьПоРегистратору у объекта типа РегистрСведенийМенеджер. и представляет собой специализированный способ перебора записей регистра сведений.
Обход записей выполняется системой динамически. Это означает, что использование выборки не считывает все записи сразу, а выбирает их порциями из базы данных. Такой подход позволяет достаточно быстро обходить с помощью выборки большое количество записей и не загружать в память всех элементов выборки.


источник - синтакс помошник
58. DJDUH 17 09.06.17 15:38 Сейчас в теме
(57) в формулировке именно запросом, а не выборкой с менеджера РС - хотя может я и не прав!
59. Сурикат 192 09.06.17 15:45 Сейчас в теме
(57)
Спасибо!

Но все равно не подходит...Такое же последовательное чтение всех записей =(
60. borodatii 2 09.06.17 15:46 Сейчас в теме
(58) В "Необходимо сделать так, чтобы данные были получены за t = 1c." нет слова "запрос", между прочим.
62. Vovan1975 14 09.06.17 15:48 Сейчас в теме
(59) это именно что просто чтение. Все иные предложенные варианты предлагали к томуж и обработку данных.
25. nvv1970 08.06.17 23:51 Сейчас в теме
Знать точное количество порядка 100 млн записей - априори бред. На практике изменение логики неизбежно. Гилев верно ставит краеугольный вопрос "для чего это нужно?".
Но здесь как я понимаю чисто теоретическая плоскость решения? Фраза 12 способов меня поставила в тупик... Что же это за теоретические решения такие?
26. nk25 09.06.17 06:58 Сейчас в теме
(25)
Фраза 12 способов меня поставила в тупик
- согласен, это круче чем 400 способов отъема денег Остапа Бендера.
интересно когда эти 12 способов будут озвучены
27. Сурикат 192 09.06.17 09:15 Сейчас в теме
А если попытаться написать запрос так, чтобы MS SQL его распараллелил.
Программно сформировать текст запроса например для всех значений первого измерения. А потом объединить.
28. Сурикат 192 09.06.17 09:18 Сейчас в теме
Т.е. рефрен будет где-то такой:

ВЫБРАТЬ КОЛИЧЕТСВО(*) ИЗ РегистрСведений.НашРегистр КАК Таблица1 ГДЕ Таблица1.Измерение1 = &Значение1
starik-2005; +1 Ответить
29. DJDUH 17 09.06.17 09:47 Сейчас в теме
А можно хоть один из 12 способов описать?
Потому, как мучаюсь в поиске ответа!)
Bukaska; spe1c; +2 Ответить
30. Dream_kz 88 09.06.17 09:52 Сейчас в теме
(29) Я думаю экзаменатор сам не знал, вот и спрашивает у всех подряд))
Boulala; Гриффин; talych; DarkUser; корум; KazanKokos; +6 Ответить
31. DJDUH 17 09.06.17 09:55 Сейчас в теме
36. ipoloskov 65 09.06.17 13:06 Сейчас в теме
Выгнать 1000 пользователей, прочитать, запустить 1000 пользователей.
49. Vovan1975 14 09.06.17 14:04 Сейчас в теме
(36) ну на самом деле можно смастрячить регламентное задание которое будет получать это значение и сохнаять его в хранилище настроек. А пользователи будут его оттуда брать, но им потребуется права дать на получение чужих настроек
51. spe1c 09.06.17 14:29 Сейчас в теме
(49)Не прокатит, подобное на экзамене предлагали, преподаватель отвечал что будут примерные данные, а ему нужны точные (уж не знаю зачем). Я так понял что все формы кэширования/предварительного расчета отвергаются по этой причине.
48. Сурикат 192 09.06.17 14:02 Сейчас в теме
https://habrahabr.ru/post/271797/

Есть планы запросов, правда к 1С не имееющие отношения. Но все же ситуация 1 в 1
53. spe1c 09.06.17 14:51 Сейчас в теме
(48)Это всё хорошо, но вот что писали на форуме Гилева:
Добрый день.
На экзамене задали такой же вопрос. Уточнения:
Сначала спросили про MSSQL в полном режиме совместимости (Read Commited Snapshot). Каждый из 1000 пользователей хочет получить точное количество записей из регистра, запрос выполняется 60 секунд. Как "средствами платформы" получить целевое время выполнения в 1 секунду?


Смущает добавление "средствами платформы". Знать бы что имели в виду, может быть какую-то реструктуризацию таблиц в конфигураторе сделать.
50. ImHunter 92 09.06.17 14:07 Сейчас в теме
Пробовал еще вставить во времянку Выбрать 1 из регистра и прочитать количество через Запрос.ВыполнитьПакет() - ожидаемо медленно. Но убедиться стоило тоже.
54. baton_pk 384 09.06.17 15:17 Сейчас в теме
В порядке бреда:
попробовать через ODATA: /Catalog_Номенклатура?$count
вдруг, оно там как-то по-своему реализовано?

PS. сам с OData ещё не работал, не довелось :(
61. DJDUH 17 09.06.17 15:48 Сейчас в теме
В postgreSQL - предлагают тригер, типа как подписка на событие после добаление/удаление, инкрементировать / декрементировать счётчик.

Мож в 1С тоже подписку нужно и в константу!?
63. Сурикат 192 09.06.17 15:59 Сейчас в теме
(61)
Блокировку сразу схватите на 1000 пользователей-то
64. KazanKokos 7 09.06.17 16:03 Сейчас в теме
неправильный код....
Номер строки это номер строки ТЧ регистратора.

Выбрать Первые 1
номерстроки
из регистрсведений.ЦеныНоменклатуры
упорядочить по номерстроки убыв
67. DJDUH 17 09.06.17 16:05 Сейчас в теме
(64) да, а если не периодический !?
68. KazanKokos 7 09.06.17 16:06 Сейчас в теме
(67) неправильно поставлен вопрос. надо было спросить "а если не подчиненный регистратору". там с... этого индекса нет
65. KazanKokos 7 09.06.17 16:03 Сейчас в теме
сделана на основании информации из http://infostart.ru/public/527518/
66. KazanKokos 7 09.06.17 16:04 Сейчас в теме
а не. не подходит.... там еще есть встроенный индекс. может по ним както искать
69. KazanKokos 7 09.06.17 16:09 Сейчас в теме
Народ! а если некоторые варианты приведенные выше(включая Количество(*)) заключить в
НачатьТранзакцию();
ЗафиксироватьТранзакцию();

конечно понимаю что вопрос может быть глуп. а вдруг?
70. Dream_kz 88 09.06.17 16:15 Сейчас в теме
(69) Каким образом транзакция должна ускорить скорость чтения?
71. KazanKokos 7 09.06.17 16:17 Сейчас в теме
(70) вот тоже думаю каким образом.... у меня просто проверить не на чем...
нет больших регистров.
	НачатьТранзакцию();
	Запрос = Новый Запрос;
	Запрос.Текст = "ВЫБРАТЬ
	               |	КОЛИЧЕСТВО(*) КАК Поле1
	               |ИЗ
	               |	РегистрСведений.ЦеныНоменклатуры КАК ЦеныНоменклатуры";
	ТКОЛ = Запрос.Выполнить().Выгрузить();			   
	Сообщить(ТКОЛ[0].Поле1);
	ОтменитьТранзакцию();
Показать
74. DimDiemon 76 09.06.17 16:20 Сейчас в теме
(71) Проверил, не катит. Пол миллиона записей за 3 секунды с небольшим.
79. Dream_kz 88 09.06.17 16:40 Сейчас в теме
(71) Даже с точки зрения теории, транзакции никак не ускорят чтение
75. KazanKokos 7 09.06.17 16:20 Сейчас в теме
76. KazanKokos 7 09.06.17 16:21 Сейчас в теме
(74) с другой стороны жесткое условие "не больше секунды" видимо не предполагает выборки
80. herfis 276 09.06.17 16:48 Сейчас в теме
(79) Во времена 8.0 разница была бы. В худшую сторону :)
Но сейчас же повсеместно RCSI, что при обычном чтении, что при транзакционном, что в MSSQL что в PostgreSQL...
77. DimDiemon 76 09.06.17 16:27 Сейчас в теме
87. Dream_kz 88 09.06.17 17:07 Сейчас в теме
(80) Ну это с технической точки зрения, а с точки зрения платформенной теории транзакция для других вещей. Тоже самое что цикл в одну строчку работает быстрее, чем оформленный цикл с переносами строк.
72. KazanKokos 7 09.06.17 16:19 Сейчас в теме
имхо нужно смотреть в сторону встроенных типовых индексов http://infostart.ru/public/527518/
73. KazanKokos 7 09.06.17 16:20 Сейчас в теме
78. herfis 276 09.06.17 16:35 Сейчас в теме
По условию, нужно найти способ, при котором получение количества записей регистра станет работать в 60 раз быстрее.

При этом:
1) база в разделенном режиме (1000 пользователей)
2) запрос 1С остается штатный
3) бизнес-логику менять нельзя
4) использования индекса недостаточно (что понятно - некоторый прирост будет, но не в 60 раз)

Я склоняюсь к тому, что речь о каких-то фокусах со стороны настроек СУБД. Причем в реальном продакшене вряд ли применимых (ибо чудес не бывает).
81. Сурикат 192 09.06.17 16:51 Сейчас в теме
91. kolya_tlt 11 09.06.17 17:37 Сейчас в теме
(78) поэтому я больше не пойду на этот дебильный экзамен. потому что вчера вечером морозов и еще 10 человек закончили битву над решением этой задачи спустя неделю, а тебе сейчас надо выдать готовый ответ.
92. ImHunter 92 09.06.17 17:39 Сейчас в теме
(91) Почему не пойдешь-то?? Отрицательный результат - тоже результат. Расскажешь, что пробовал.
93. DJDUH 17 09.06.17 17:41 Сейчас в теме
(91) пойди и стань у двери - жди того, кто сдал, а дальше "паяльником или утюгом" - выведаешь верный ответ))))
Anchoret; +1 Ответить
82. Сурикат 192 09.06.17 16:53 Сейчас в теме
Фокус с СУБД - запрос к таблицам статистики. Но это запрещено
83. herfis 276 09.06.17 16:55 Сейчас в теме
О! Может, надо как раз без RCSI? В этом случае ЕМНИП раньше в 1С (еще при автоматических блокировках) нетранзакционное чтение выполнялось WITH NOLOCK
84. Сурикат 192 09.06.17 17:00 Сейчас в теме
Посмотрели у себя на базе. Регистр 1 млн записей - 40 мс.
Т.е. если было 100 млн, то было бы примерно 4 с. При это Количество(*) и выборка всех значений первого измерения одинаковы.
Сейчас к этому регистру не обращаются, т.е. блокировок не было.

Может вопрос и в блокировках при записи
Тогда уж лучше отложенные движения.

Как вариант вопрос не на знания, а на подход? Если запрос крутить, то это не подход эксперта, т.к. нужно выяснить комплексную причину.
85. spe1c 09.06.17 17:03 Сейчас в теме
(84)Если вопрос на подход, то о каких 12 способах решения говорил экзаменатор?
86. Сурикат 192 09.06.17 17:04 Сейчас в теме
12 первых вопросов, которые нужно задавать при анализе такой проблемы? =))
88. herfis 276 09.06.17 17:08 Сейчас в теме
Ну вот в MSSQL в режиме блокировочника на большой таблице в разделенном доступе в самом деле будет большая разница между SELECT COUNT(*) и SELECT COUNT(*) WITH (NOLOCK) даже в READ COMMITTED
89. spe1c 09.06.17 17:34 Сейчас в теме
Возможно информация поможет: попробовал в своей рабочей базе на регистре цен номенклатуры, результат в прикрепленном скриншоте, первый раз запрос отрабатывал 3 секунды, потом чаще всего меньше 0,5 секунды, но была пара "выбросов" за 1 секунду. Баз рабочая, в том числе и в этот регистр идет активная запись/чтение данных.
Прикрепленные файлы:
90. spe1c 09.06.17 17:35 Сейчас в теме
Статистика была такая:
Длительность формирования результата - 328 мс
Длительность формирования результата - 343 мс
Длительность формирования результата - 2 403 мс
Длительность формирования результата - 437 мс
Длительность формирования результата - 327 мс
Длительность формирования результата - 452 мс
Длительность формирования результата - 530 мс
Длительность формирования результата - 327 мс
Длительность формирования результата - 702 мс
Длительность формирования результата - 296 мс
Длительность формирования результата - 374 мс
Длительность формирования результата - 312 мс
Длительность формирования результата - 312 мс
Длительность формирования результата - 421 мс
База УПП, MSSQL, режим совместимости с 8.2, толстый клиент.
94. ImHunter 92 09.06.17 17:43 Сейчас в теме
О! Надо Гилева пригласить в топик. Может мэтр скажет еще чего-то.
95. herfis 276 09.06.17 17:48 Сейчас в теме
(94) <ролик с Лавровым>
Новиков; корум; Сурикат; +3 Ответить
96. ImHunter 92 09.06.17 17:56 Сейчас в теме
(95) Да ладно;) Попытка - не пытка.
Автор - позовешь? Если нет - то мне не слабО попробовать.
97. herfis 276 09.06.17 18:00 Сейчас в теме
(96) Да я подозреваю что сама задача дебильная окажется. Заскоки препода, кривая вводная плюс кто-то кого-то неправильно понял.
zqzq; KazanKokos; +2 Ответить
98. Vovan1975 14 09.06.17 18:09 Сейчас в теме
а если использовать не таблицы регистра а таблицу регистрации изненений регистра?
Оставьте свое сообщение
Новые вопросы с вознаграждением
Автор темы объявил вознаграждение за найденный ответ, его получит тот, кто первый поможет автору.

Вакансии

Ведущий инженер - программист 1С
Москва
зарплата от 200 000 руб.
Полный день

Ведущий программист 1С
Нижний Новгород
зарплата от 100 000 руб.
Полный день

Программист 1С
Санкт-Петербург
зарплата от 110 000 руб. до 120 000 руб.
Полный день

Аналитик 1С
Санкт-Петербург
зарплата от 80 000 руб.
Полный день

Программист 1С
Волгоград
зарплата от 45 000 руб. до 90 000 руб.
Полный день