Автоматические и управляемые блокировки применительно к типовым конфигурациям 1С

Публикация № 940251

Разработка - Практика программирования

режим автоматических и управляемых блокировок разделение итогов уровни изоляции транзакций Предприятие 8.3 УТ 11 КА 2 ЕРП

Основные принципы работы с режимами автоматических и управляемых блокировок в 1С Предприятие 8. Теория и применение в типовых конфигурациях: БП, УТ, ЕРП

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

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

И так, поехали…

Сперва напишу про уровни изоляции транзакций, кратко рассмотрю только те уровни, которые имеют отношение к данной статье. 

 

Уровни изоляции транзакций

Read committed (чтение завершенных) - разрешено чтение данных в транзакции, изменения по которым были завершены всеми остальными транзакциями. По умолчанию используется для большинства баз данных.

Read committed Snapshot (версионирование данных) - разрешено чтение старой версии данных, изменения по которым не завершены другими транзакциями. Штатно поддерживается базами данных: PostgreSQL и Oracle. Начиная с версии платформы 1С 8.3 реализован для работы с базами данных: MSSQL.

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

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

 

Разделение итогов регистров накопления

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

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

Поехали дальше…   

Для раскрытия основной темы статьи, мне потребуется описать общие принципы  механизмов контроля остатков, которые применяются в типовых конфигурациях. Если коротко, существует старый и новый механизмы контроля, причем оба применяются на текущий момент, несмотря на то, что новому режиму уже около 8 лет.

 

Механизмы контроля остатков в типовых конфигурациях 1С

Старая схема, далее OLD – формируется запрос к базе данных для выполнения контроля свободных остатков, в случае положительного решения, формируется движение по регистру. На данный момент применяется в Бухгалтерии 3.0 и в некоторых алгоритмах УТ 11, КА 2, ЕРП 2.

Недостатки:

  • необходимо блокировать записи, которые участвуют в движении уже в момент их прочтения, что ухудшает параллельность работы.

Новая схема, далее NEW – выполняется движение по регистру, затем проверяется наличие отрицательных остатков, в случае их наличия, операция откатывается. На данный момент применяется в УТ 11, КА 2, ЕРП 2.

Преимущества:

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

Недостатки:

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

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

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

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

 

Режим автоматических блокировок

В данном случае используется описанный выше режим изоляции транзакций: Repeatable read.

Примечание: в данной статье рассматривается преимущественно клиент серверный вариант работы. Для файлового режима будет применяться еще более высокий уровень изоляции, который здесь рассматривать не будем.

Для исключения взаимоблокировок при проведении документов с контролем остатков - OLD применяется конструкция языка запросов «ДЛЯ ИЗМЕНЕНИЯ», позволяющая при первом чтении данных в транзакции наложить на эти данные не разделяемую блокировку на чтение, а блокировку обновления. Соответственно, в другой транзакции уже будет невозможно выполнить подобную процедуру, так как наложить на одни и те же данные две блокировки обновления из разных транзакций нельзя.

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

Примечание: В случае работы с файловой базой и с PpostgreSQL, блокировка накладывается целиком на всю таблицу.

Пример:

ВЫБРАТЬ ОстаткиТоваров.Номенклатура,
ОстаткиТоваров.КоличествоОстаток КАК Количество
ИЗ РегистрНакопления.ОстаткиТоваров.Остатки КАК ОстаткиТоваров
ДЛЯ ИЗМЕНЕНИЯ

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

 

Режим управляемых блокировок

В данном случае, применяется режимы изоляции транзакций: Read committed и Read committed Snapshot.

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

Пример:

БлокировкаДанных = Новый БлокировкаДанных;
ЭлементБлокировки = БлокировкаДанных.Добавить("РегистрНакопления.ТоварыНаСкладах.НаборЗаписей");
ЭлементБлокировки.УстановитьЗначение("Склад", Склад);
ЭлементБлокировки.УстановитьЗначение("Номенклатура", Номенклатура);
ЭлементБлокировкиДанных.Режим = РежимБлокировкиДанных.Исключительный;
БлокировкаДанных.Заблокировать();

Использование режима контроля остатков NEW:

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

В случае использования регистров накопления с разделением итогов (по умолчанию к конфигураторе создаются регистры именно с данным флагом) можно получить следующие негативные ситуации:

  • Без режима версионирования (MS SQL и 1С 8.2) – получим взаимоблокировку при попытке чтения данных, если запись в двух транзакциях была выполнена одновременно. При записи данных блокировка не будет возникать, так как используются разные строки СУБД (разделение итогов)
  • С режимом версионирования Snapshot (postgresql, oracle или 1С 8.3) – блокировка возникать не будет, но будут появляться отрицательные остатки, так как контроль будет выполнен без учета всех не завершенных транзакций.

Для исключения подобной ситуации необходимо перед записью в регистр установить флаг набора записей: БЛОКИРОВАТЬ ДЛЯ ИЗМЕНЕНИЯ. Данная конструкция дает команду при записи накладывать исключительную блокировку на записи таблицы остатков регистра без учета разделителя итогов, по своей сути, она просто напросто временно отключает разделение итогов для регистра накопления.

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

Пример:

НаборЗаписей. БлокироватьДляИзменения = Истина;

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

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

Отдельное огромное спасибо, если отметите статью звездочкой, так как не что так не мотивирует на написание новых статей, как Ваше одобрение J

Специальные предложения

Комментарии
Избранное Подписка Сортировка: Древо развёрнутое
Свернуть все
1. ZLENKO 385 10.11.18 17:09 Сейчас в теме
Какие полезные на практике выводы можно сделать на основе этой информации?
В статье нет рецептов применения этих знаний, а сами по себе они интересны но ценности не представляют.
Antonov.AV; IVC_goal; Vedishchev; YLioY; HystriX; +5 1 Ответить
2. ids79 5392 10.11.18 22:24 Сейчас в теме
Владимир, Вы правы, примеров практичскго применения в статье нет.
Но я и не ставил такую задачу, я планировал кратко и тезисно изложить тот обширный материал, который присутствует в сети по данному вопросу, чтобы при прочтении сформировалось четкое понимание в целом.
Насколько это получилось, судить Вам :))
pavelpribytkin96; Александр4023512; SmArtist; VVi3ard; Vedishchev; +5 Ответить
3. spectre1978 53 11.11.18 12:57 Сейчас в теме
Действительно, довольно неплохо собрано в кучку. А вот ИС сегодня глючит. Захотел поставить звездочку - не ставится. Тыкал-тыкал, и тут оно раз - и поставило сразу 8 звезд :)) Я было решил, что вам повезло, но после обновления страницы из восьми все же осталась только одна.
Vedishchev; +1 Ответить
4. triviumfan 16 11.11.18 13:03 Сейчас в теме
может возникнуть deadlovk
описка
6. ids79 5392 11.11.18 19:31 Сейчас в теме
5. bulpi 173 11.11.18 16:21 Сейчас в теме
Непонятно, в чем преимущества новой схемы контроля остатков перед старой. В обоих случаях нужен запрос на чтение и запись в регистр, меняется только порядок этих действий.

повышена скорость проведения, так как в большинстве случаев, запрос после проведения выдает пустой результат.


А какая разница, пустой результат. или не пустой ? Все равно выполнить то его надо.

Нет необходимости предварительной блокировки изменяемых данных.


Ну так потом придется заблокировать. А если не блокировать, то риск точно такой же, как и в старой схеме. Например, в тот же момент может быть проведен приход, и остатки уже не отрицательные.
7. ids79 5392 11.11.18 19:40 Сейчас в теме
(5)Добрый вечер.

"Непонятно, в чем преимущества новой схемы контроля остатков перед старой. В обоих случаях нужен запрос на чтение и запись в регистр, меняется только порядок этих действий."
Запрос, не возвращающий записей всегда будет выполняться быстрее.

"Ну так потом придется заблокировать. А если не блокировать, то риск точно такой же, как и в старой схеме"
Блокировать специально как раз не нужно, это делает сама СУБД при изменении данных в таблице итогов регистра накопления в момент записи движений. Нужно только отключить разделение итогов, если разделение включено для регистра, для этого и флаг: ЗаблокироватьДляИзменения.
VVi3ard; acanta; +2 Ответить
8. bulpi 173 11.11.18 23:30 Сейчас в теме
(7)
Запрос, не возвращающий записей всегда будет выполняться быстрее.


???? Да ну ? А Вы проверяли ? ИМХО, скорость выполнения запроса зависит от целой кучи факторов, среди которых кол-во возвращаемых записей на последнем месте.

Блокировать специально как раз не нужно, это делает сама СУБД


Какая разница, я или СУБД ? Я не понимаю, почему от перестановки слагаемых должна измениться сумма.
9. bulpi 173 12.11.18 00:57 Сейчас в теме
(7)
ИМХО,
преимущества новой схемы не в этом. А в том, что раньше нужно было удалять движения уже проведенного документа перед повторным проведением, получать в запросе данные (контроль остатков, например), а затем записывать новые наборы записей. Это 3 действия, 2 из которых - запись, т.е. очень затратные.
В новой схеме движения не удаляются перед проведением, а сразу записываются новые. Потом проверяются в запросе результаты. Если все плохо, транзакция откатывается. Если все хорошо ( в большинстве случаев), то , получается 2 действия вместо 3, причем убрано 1 действие записи, т.е. очень затратное.
wowik; Terve!R; ids79; +3 Ответить
10. CSiER 29 12.11.18 03:05 Сейчас в теме
(9) про преимущества хорошо написано здесь (блок "Преимущества контроля остатков по новой методике").
14. bulpi 173 12.11.18 13:33 Сейчас в теме
(10)
Хорошо то хорошо, но есть нюансы :)
Написано так :
Запрос, получающий данные по отрицательным остаткам, обращается только к одной таблице – нет необходимости делать левое соединение с данными документа и применять функцию «ЕСТЬNULL()»


Ну да . Сначала так написали модуль, а потом сами же его критикуют. Никто не мешает написать в старой схеме абсолютно те же 2 запроса, что и в новой (это вместо одного! А может, все таки 1 запрос лучше?)

Так что в чистом остатке остается 1 несомненное преимущество, о котором я написал.
17. ids79 5392 13.11.18 10:33 Сейчас в теме
(14)
Так что в чистом остатке остается 1 несомненное преимущество, о котором я написал.

Не могу не согласиться. Внесу исправление в статью
21. CSiER 29 13.11.18 14:16 Сейчас в теме
(14) думаю, что один запрос лучше как в плане быстродействия, так и в плане простоты кода.
11. ids79 5392 12.11.18 10:37 Сейчас в теме
(9) Добрый день
Да Вы правы, упоустил этот момент. Наверно он действительно является самым значимым.
Но, в любом случае, запрос, который не возвращает ни одной записи причем без необходимости соединения с таблицей документа - будет выполняться скорее всего быстрее, чем запрос на получения остатков по старой методике контроля.
13. bulpi 173 12.11.18 13:20 Сейчас в теме
(11)
Попробуйте такую простую вещь. Создайте таблицу с миллионом записей из чисел от 1 до 1000000. Запустите 2 запроса, один из который выбирает по условию значение=0 (пустой результат), а второй по условию значение=1 (непустой результат).
И "без необходимости соединения" - это о чем ? Запросы в первой схеме и во второй одинаковые.
15. ids79 5392 12.11.18 13:37 Сейчас в теме
(13)
Запросы в первой схеме и во второй одинаковые.

В новой схеме не нужно соединять запрос к регистру с запросом к ТЧ документа. В старой нужно.
35. CSiER 29 18.11.18 10:41 Сейчас в теме
(9) ещё один момент: с новой методикой уменьшается время блокировки таблиц в транзакции => меньше ожидание на блокировках => ускорение проведения.
andron77777; +1 Ответить
12. T_Guest 12.11.18 12:52 Сейчас в теме
А можете пояснить про режим разделения итогов и новой схемой контроля остатков.
Я правильно понял: разделение итогов будет нормально работать только если система 1С 8.3 + MSSQL?
Ведь если стоит Postgre, то разделение итогов бессмысленно поскольку в новом механизме контроля придется писать "НаборЗаписей. БлокироватьДляИзменения = Истина;" а это отключит режим разделения на момент записи.
18. kolya_tlt 22 13.11.18 10:42 Сейчас в теме
(12) СУБД тут ни при чем, как в случае с разделением итогов, так и схеме контроля остатков
19. ids79 5392 13.11.18 10:52 Сейчас в теме
(12)
Добрый день.
Я не совсем Вас понял.
В версии 1С 8.3 работа с MSSQL поддерживает версионирование, аналогично PostgreSQL.
Так что для 8.3 разницы не будет.

(12)
разделение итогов бессмысленно поскольку в новом механизме контроля придется писать "НаборЗаписей. БлокироватьДляИзменения = Истина;

Вы правы в какой-то степени, но не совсем. Существуют еще движения по приходу или расходу, в которых по логике программы не требуется контролировать остатки. Соответственно в таких движениях разделение итогов отключено не будет.
Также в конфигурации есть возможность отключения контроля остатков, в этом случае разделение итогов также будет ускорять работу. Вот здесь подробно описано про разделение итогов, почитайте.
16. kolya_tlt 22 13.11.18 10:28 Сейчас в теме
Дмитрий Гончаров бы вас поправил и сказал, что новая методика - это не только запись и контроль отрицательного результата.
EMelihoff; +1 Ответить
20. ids79 5392 13.11.18 11:04 Сейчас в теме
(16)Добрый день.
Конечно не только.
Здесь я все упрощаю, чтобы описать в рамках одной статьи
22. Vovan1975 13 14.11.18 11:34 Сейчас в теме
интересно почему нельзя получить остатки на момент времени ДО документа, и посчитать их с новыми движениями документа и таким образом сразу узнать, будет ли отрицательное значение?
23. ids79 5392 14.11.18 12:04 Сейчас в теме
Добрый день, Владимир.
Если я правильно Вас понял, Вы, по сути, предлагаете старый вариант контроля...
Но в этом случае придеться удалять существующие записи до получения остатков, чтобы они не попали в выборку, например при изменении времени проведения документа.
Получаем основной минус старого режима контроля.
24. Vovan1975 13 14.11.18 12:08 Сейчас в теме
(23) неправильно.

Алгоритм такой
1)Получаете остатки на момент времени до (новых) движений документа.
2)Получаете старые движения документа
3) Если старые движение "входят" в остатки (ну например пользователь изменил дату документа) - исключаете их из остатков
4) Добавляете к остаткам новые движения
5)Проверяете результат.


В итоге 2 запроса на чтение к бд.
25. acanta 74 14.11.18 12:10 Сейчас в теме
(24) в 8ке нет момента времени до новых движений документа!!
26. Vovan1975 13 14.11.18 12:25 Сейчас в теме
(25) движения формируются исходя из даты документа или другого реквизита документа. Ничего не мешает определить эту дату для новых движений.
27. HomeInc 15.11.18 07:31 Сейчас в теме
(24) Операция чтения остатков используя границу (до проведения документа) намного затратнее, чем получение самых последних остатков
28. Vovan1975 13 15.11.18 11:46 Сейчас в теме
(27) а при чем тут получение самых последних остатков? В так называемой новой методике один фиг получение остатков через границу документа(уже после записи движений), то есть получается и там и там одно и тоже.
29. ids79 5392 15.11.18 12:02 Сейчас в теме
(28)
В так называемой новой методике один фиг получение остатков через границу документа

Нет, в новой методике получение остатков происходит на дату дату актуальности.
30. Vovan1975 13 15.11.18 12:37 Сейчас в теме
(29) неа, неверно.

https://xn----1-bedvffifm4g.xn--p1ai/articles/2017-02-12-two-methods-for-inventory-check/

Обратите внимание, как передается момент времени – используется тип данных «Граница». Остатки нужно получить на момент времени сразу ПОСЛЕ текущего документа. Можно ли было получить остатки без границы, например, прибавив к дате документа 1 секунду? Нет! Ведь в одной секунде может быть большое число документов. Поэтому единственный правильный вариант – использовать вид границы «Включая».
31. Vovan1975 13 15.11.18 12:58 Сейчас в теме
(30) кстати насчет большого числа документов - в данном случае момент времении вообще выглядит ненужной сущьностью, по той простой причине, что им нельзя управлять. То есть нельзя всунуть документ между двумя другими документами.
32. ids79 5392 15.11.18 13:28 Сейчас в теме
(30) У указанном Вами примере, действительно так сделано.
Я же говорю про типовые конфигурации, там на дату актуальности.
По организациям также еще и на конец кажрого месяца следующего за проводимым документм, но это отдельная песня.
33. Vovan1975 13 15.11.18 13:41 Сейчас в теме
(32) это странно слышать, поскольку отсутсвие отрицательных итогов в актуальных еще не гарантирует их отстутсвие по времени между проводимым документом и таблицей актуальных итогов
34. Vovan1975 13 15.11.18 13:44 Сейчас в теме
+ (33) при такой схеме можно также вычитать старые движения из остатков, полученных из таблицы актуальных остатков. Хотя лично мне такая метода представляется фигней.
36. acanta 74 18.11.18 11:00 Сейчас в теме
1с Ники с этой 8кой уперлись в блокировки при росте объема и интенсивности еще 7ки Не придумали ничего лучше чем убрать полный журнал. Мелкие разработчики дробили файлы на какие то периоды в рамках системы. Период хранения предполагал разные таблицы для каждого периода, неважно, год,это или день. Отсюда, именно из архитектуры хранения вытекает невозможность редактировать задним числом и необходимость сторно. Ужасная конечно, но если необходимость осознанная, то это уже свобода.
37. acanta 74 18.11.18 11:08 Сейчас в теме
Как вариант вместо обрезания в конфигураторе переименовывать объемные регистры и создавать новые аналогичные. А отчеты , которые требуют старых данных дописать обьедиением таблиц. Этого
в дбф не стали делать. Тот же период хранения итогов подразумевает разделение на уровне таблиц, а не индекса или обрезанной базы данных.
38. mrf 16.01.19 18:23 Сейчас в теме
Т.е. если по регистру нужен контроль остатка, нужно отключить использования разделения итогов как вредное?
39. ids79 5392 16.01.19 19:46 Сейчас в теме
(38)Или отключить, или использовать НаборЗаписей.БлокироватьДляИзменения = Истина;
По сути, это тоже отключение разделения данных, но для конкретного документа.
40. EMelihoff 13.02.19 08:44 Сейчас в теме
Лучше чем тут ИТС нигде, про блокировки не читал.
Оставьте свое сообщение

См. также

3 онлайн-курса по 1С-программированию: обмен данными, расчетные задачи и бухгалтерские задачи с 12 мая по 8 июля 2020 г. Промо

Практика программирования v8 Бесплатно (free)

Пакет из 3-х курсов по 1С-программированию. Основная цель - сформировать у слушателей практические навыки, связанные с реализацией задач обмена для прикладных решений, работающих на платформе “1С:Предприятие”, а также с разработкой прикладных решений, предназначенных для автоматизации расчета заработной платы и задач бухгалтерского учета.

22.04.2020    3177    23    infostart    2    

Программная работа с настройками СКД

Практика программирования v8 v8::СКД 1cv8.cf Бесплатно (free)

Нюансы программной работы с настройками системы компоновки данных в отчетах и динамических списках. Обзор всех видов настроек компоновки. Что в каких случаях правильно применять. В качестве примера рассмотрена работа с отборами и группировками.

27.01.2020    14966    0    ids79    26    

[СКД] Программное создание схемы компоновки данных

Практика программирования v8 v8::СКД 1cv8.cf Бесплатно (free)

Сделаем отчет на СКД полностью программно, без использования макета "схема компоновки данных".

15.01.2020    15575    0    John_d    22    

Последовательности событий. Шпаргалка

Практика программирования v8 Россия Бесплатно (free)

Собрал информацию о событиях/подписках/расширениях в одном месте.

30.12.2019    10702    0    kuzyara    33    

Использование программных перечислений, ч.1: строковые константы Промо

Практика программирования v8 1cv8.cf Бесплатно (free)

Часто ли у вас возникает необходимость в коде выполнять сравнение на строку?

10.12.2016    34160    0    unichkin    45    

Таблица значений. Нюансы

Практика программирования v8 Бесплатно (free)

Обзор некоторых аспектов использования общеизвестного инструмента 1С.

01.10.2019    25343    0    Yashazz    45    

[Шпаргалка] Программное создание элементов формы

Практика программирования Работа с интерфейсом v8 1cv8.cf Бесплатно (free)

Программное создание практически всех популярных элементов формы.

06.09.2019    34695    0    rpgshnik    59    

Агрегатные функции СКД, о которых мало кто знает

Практика программирования v8 v8::СКД 1cv8.cf Бесплатно (free)

Пользуетесь ли Вы всеми возможными агрегатными функциями, которые предоставляет система компоновки данных? Если Вы используете только: СУММА, КОЛИЧЕСТВО, МИНИМУМ, МАКСИМУМ, СРЕДНЕЕ, то эта статья для Вас.

05.09.2019    36869    0    ids79    52    

Вспомогательные инструкции в коде 1С Промо

Практика программирования v8 1cv8.cf Бесплатно (free)

Помогаем редактору кода 1С помогать нам писать и анализировать код.

15.10.2018    26139    0    tormozit    100    

Регистры бухгалтерии. Общая информация

Практика программирования Математика и алгоритмы v8 v8::БУ БУ Бесплатно (free)

Общая информация о внутреннем устройстве регистров бухгалтерии.

05.09.2019    21578    0    YPermitin    24    

Три костыля. Сказ про фокусы в коде

Практика программирования v8 Бесплатно (free)

Три интересных (или странных) костыля в коде, которые могут помочь в повседневных и не очень задачах.

03.09.2019    21816    0    YPermitin    80    

Иерархия без "В ИЕРАРХИИ"

Математика и алгоритмы v8 Бесплатно (free)

Говорится о том, как эффективно представлять иерархию в СУБД, как получать и использовать эти представления при решении задач в запросной технике. Уточняются и дополняются запросы из статьи "Уровни, глубина, прародители, циклы и аналоги запросом" [https://infostart.ru/public/160707/].

22.08.2019    10558    0    ildarovich    19    

Оформление и рефакторинг сложных логических выражений Промо

Практика программирования v8 Россия Бесплатно (free)

В сложных логических выражениях нередко самому автору спустя какое-то время тяжело разобраться, не говоря уже о других программистах. Предлагаемая методика позволяет повысить наглядность таких выражений путем оформления в виде И-ИЛИ дерева и одновременно выполнять их рефакторинг.

20.09.2012    73654    0    tormozit    129    

Отслеживание выполнения фонового задания

Практика программирования Универсальные функции Разработка v8 1cv8.cf Бесплатно (free)

Запуск фонового задания из модуля внешней обработки. Отслеживание выполнения задания в виде прогресса, расположенного на форме.

17.08.2019    25682    0    ids79    16    

Функции СКД: ВычислитьВыражение, ВычислитьВыражениеСГруппировкойМассив

Практика программирования v8 v8::СКД 1cv8.cf Бесплатно (free)

Подробное описание и использование внутренних функций системы компоновки данных: Вычислить, ВычислитьВыражение, ВычислитьВыражениеСГруппировкойМассив, ВычислитьВыражениеСГруппировкойТаблицаЗначений.

08.08.2019    55865    0    ids79    37    

Фоновое выполнение кода в 1С - это просто

Практика программирования v8 1cv8.cf Бесплатно (free)

Как легко запускать выполнение в фоне, не прибегая к долгому описанию фоновых процедур.

02.08.2019    26376    0    avalakh    21    

Запись значения в поле ввода/формы со срабатыванием события ПриИзменении Промо

Практика программирования v8 1cv8.cf Россия Бесплатно (free)

Иногда возникает необходимость после записи значения в какое либо поле ввода/формы вызвать для него обработчик события ПриИзменении, а о вызове самого события приходится только мечтать. В этой статье приводится программный способ вызова этого события.

11.07.2007    44744    0    tormozit    38    

СКД - наборы данных и связи между ними, создание собственной иерархии, вложенные отчеты

Практика программирования v8 v8::СКД 1cv8.cf Бесплатно (free)

Набор данных объект. Использование в схеме компоновки нескольких наборов данных. Различные варианты связи наборов: объединение, соединение. Использование иерархии в отчетах на СКД. Создание собственной иерархии, иерархия детальных записей. Использование вложенных схем в отчетах на СКД.

26.07.2019    42385    0    ids79    11    

Обработчики событий при записи объектов. Зачем и что за чем?

Математика и алгоритмы v8 Бесплатно (free)

Программисту, имеющему немного опыта на платформе 1С 8.3, бывает сложно разобраться: ПередЗаписью, ПриЗаписи, ПослеЗаписи, на сервере, на клиенте, в модуле формы, в модуле объекта.... Эта шпаргалка была создана в процессе обучения и реального опыта с целью разложить всё по полочкам, чтобы было четкое понимание в каком случае какой обработчик нужно использовать и в какой последовательности они запускаются при записи и проведении документов. Данная статья будет полезна в большей степени начинающим разработчикам. Но и опытным позволит освежить информацию, упорядочить её.

25.07.2019    35446    4    AlbinaAAA    25    

Управление качеством кода

Математика и алгоритмы Рефакторинг и качество кода v8 Бесплатно (free)

О SonarQube, АПК, EDT. Какие преимущества дает их использование. Для каких команд подходит.

22.07.2019    14616    0    Stepa86    33    

Как сделать из &НаКлиентеНаСервереБезКонтекста почти &НаКлиентеНаСервере Промо

Практика программирования v8 1cv8.cf Россия Бесплатно (free)

Как сделать метод формы, доступный на клиенте и на сервере одновременно, и сохранить при этом удобство разработки

10.09.2017    40507    0    tormozit    72    

СКД - использование расширений языка запросов, секция ХАРАКТЕРИСТИКИ

Инструментарий разработчика Практика программирования v8 v8::СКД Бесплатно (free)

Автоматическое и не автоматическое заполнение полей компоновки данных. Использование расширений языка запросов для СКД «{…}», секция ВЫБРАТЬ, секция ГДЕ, параметры виртуальных таблиц. Автоматизированное использование дополнительных данных в запросе: секция ХАРАКТЕРИСТИКИ.

17.07.2019    28489    0    ids79    27    

Регистры сведений. За кулисами

Практика программирования Разработка v8 1cv8.cf Бесплатно (free)

Небольшие заметки по внутреннему устройству регистров сведений.

09.07.2019    21444    0    YPermitin    13    

"Меньше копипаста!", или как Вася универсальную процедуру писал

Практика программирования Разработка v8 v8::СКД 1cv8.cf Бесплатно (free)

Программист Вася разбирает подход создания универсальных методов на примере программного вывода СКД.

04.07.2019    16462    0    SeiOkami    50    

Выгрузка документа по условию Промо

Практика программирования Разработка v8 Бесплатно (free)

Что делать, если документы нужно выгружать не все подряд, а по какому-то фильтру: статусу, дате, набору условий... А что если он соответствовал этим условиям, а потом перестал? А если потом опять начал? Такие ситуации заставили попотеть не одного программиста.

25.04.2019    14153    0    m-rv    2    

Создание отчетов с помощью СКД - основные понятия и элементы

Практика программирования Математика и алгоритмы v8 v8::СКД Бесплатно (free)

Основные принципы работы СКД. Понятия схемы компоновки и макета компоновки. Описание основных элементов схемы компоновки: наборы данных, поля, вычисляемые поля, ресурсы, параметры.

25.06.2019    42231    0    ids79    18    

Многопоточное ускорение однопользовательских нагрузок в 1С + Microsoft SQL Server 2017

Практика программирования Производительность и оптимизация (HighLoad) v8 v8::Запросы Бесплатно (free)

Взаимодействие с Microsoft SQL Server нередко вызывает трудности у 1С-ников, а потому интересны любые моменты, связанные с его использованием. О своем опыте работы с новым SQL Server 2017 участникам конференции Infostart-2018 рассказал директор ООО «Аналитика софт» Дмитрий Дудин.

11.06.2019    21383    0    dmurk    144    

Регистры накопления. Структура хранения в базе данных

Практика программирования Разработка v8 1cv8.cf Бесплатно (free)

Структура хранения регистров накопления в базе данных для платформы 1С:Предприятие 8.x. Первая часть в серии публикаций.

16.05.2019    35375    0    YPermitin    30    

Как прикрутить ГУИД к регистру сведений Промо

Практика программирования Перенос данных из 1C8 в 1C8 Разработка v8 Бесплатно (free)

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

16.04.2019    17749    0    m-rv    17    

Выполнение внешней обработки в фоновом задании

Практика программирования Разработка v8 1cv8.cf Бесплатно (free)

Подробное описание подхода к созданию длительной операции на основе внешней обработки. Реализация протестирована на 1С 8.3.12.1714 (x64).

11.05.2019    24200    0    Eret1k    23    

О расширениях замолвите слово...

Практика программирования Разработка v8 Бесплатно (free)

О чём стоит задуматься при принятии решения о создании расширения конфигурации…

07.04.2019    29266    0    ellavs    126    

Git-репозитории для 1С-кода (опыт использования при небольших проектах)

Практика программирования Разработка v8 Бесплатно (free)

Инструкции по взаимодействию с Git-репозиторием, которые писались для тех наших программистов, которые вообще никогда не работали с Git (руководства в духе "Как получить код из git-репозитория?", "Как отправить код в git-репозиторий")...

28.03.2019    23034    0    ellavs    86    

Как сделать запрос на изменение данных Промо

Практика программирования v8 v8::Запросы 1cv8.cf Бесплатно (free)

В статье приведены особенности внутренней архитектуры и примеры работы с расширением языка запросов 1С.

01.06.2018    27408    0    m-rv    21    

Трюки с внешними источниками данных

Практика программирования Разработка v8 1cv8.cf Бесплатно (free)

Некоторые трюки для преодоления ограничений внешних источников данных.

14.03.2019    26422    0    YPermitin    53    

Возможности типовых шаблонов ограничения доступа на уровне записей (RLS)

Практика программирования БСП (Библиотека стандартных подсистем) Роли и права v8 v8::Права Бесплатно (free)

Краткий обзор применения типовых шаблонов ограничения доступа на уровне записей в конфигурациях, созданных на базе БСП: #ПоЗначениям, #ПоНаборамЗначений, #ПоЗначениямРасширенный, #ПоЗначениямИНаборамРасширенный

03.02.2019    31361    0    ids79    9    

Метод формирования движений в типовых регистрах нетиповыми регистраторами Промо

Практика программирования v8 1cv8.cf Бесплатно (free)

Вариант решения задач с проведением по типовым регистрам нетиповыми регистраторами. Зачем - чтобы при сравнении конфигурации не обращать внимание на свойства регистров и исключить вероятность допущения горькой оплошности при обновлении информационных баз, заменив типы регистраторов основной конфигурации типами конфигурации поставщика. Для программных продуктов, имеющих в своем составе метаданных документ "Корректировка регистров"("Корректировка записей регистров").

05.12.2017    25714    0    itriot11    34    

Новый подход к обмену данными EnterpriseData

Практика программирования Обмен через XML v8 v8::УФ Россия Бесплатно (free)

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

14.12.2018    35073    0    ids79    72    

Программное заполнение пользовательских параметров и отборов СКД

Практика программирования v8 v8::СКД 1cv8.cf Бесплатно (free)

Публикация представляет из себя краткие примеры того, как можно заполнять параметры СКД программно так, чтобы все параметры и отборы были доступны в быстрых настройках и в обычных (типовых) настройках параметров и отборов СКД.

13.11.2018    37370    0    Unk92    21    

Произвольный код в фоновом режиме

Практика программирования v8 1cv8.cf Бесплатно (free)

Задача: реализовать выполнение произвольного кода в фоновом режиме без изменения конфигурации, т.е. во внешней обработке.

03.09.2018    23910    0    nikita0832    42    

Использование классов .Net в 1С для новичков Промо

Практика программирования Разработка внешних компонент Универсальные функции v7.7 v8 Бесплатно (free)

Руководство для новичков. Написав статью http://infostart.ru/public/238584/, я понял, что многие не понимают того, что написано. Поэтому в этой статье постараюсь более подробно остановиться на азах и без кода на вражеском языке (C#)

27.01.2016    71022    0    Serginio    108    

Основные понятия и механизмы оптимизации клиент-серверного взаимодействия в 1C

Математика и алгоритмы Практика программирования v8 Россия Бесплатно (free)

У многих начинающих 1С программистов часто возникают вопросы про клиент-серверное взаимодействие в 1С и чтобы разобраться в непростых механизмах платформы, необходимо понять, что же такое контекст, для чего предназначены директивы компиляции, что представляют собой контекстные/внеконтекстные вызовы и как наиболее оптимально описывать прикладные задачи в модулях управляемых форм.

23.08.2018    34804    0    Rain88    46    

Повышаем эффективность разработки правил обмена

Практика программирования Перенос данных из 1C8 в 1C8 v8 КД Бесплатно (free)

Как повысить скорость и качество разработки правил обмена? Как вести групповую разработку правил обмена? Как облегчить сопровождение правил обмена после передачи в эксплуатацию? Об этом и многом другом вы можете узнать из этой статьи.

25.06.2018    26123    0    olegtymko    47    

Введение в механизм представлений в ЗУП ред. 3

Практика программирования v8 v8::СПР ЗУП3.x Бесплатно (free)

В нашей организации на первом же телефонном собеседовании на должность разработчика по ЗУП ред. 3 вас обязательно спросят о том, что такое "Представления".

04.06.2018    34077    0    xrrg    82    

Тестер: частые вопросы Промо

Практика программирования v8 Бесплатно (free)

Ошибкам бой - тесты норма жизни!

25.07.2018    26231    0    grumagargler    26    

Строим графы средствами 1С (без GraphViz)

Практика программирования v8 Бесплатно (free)

Множество статей на Инфостарте описывают, как работать с компонентой GraphViz, чтобы построить ориентированный граф. Но практически нет материалов, как работать с такими графами средствами 1С. Сегодня я расскажу, как красиво строить графы с минимальным пересечением. Нам этот метод пригодился для отрисовки алгоритмов в БИТ.Финансе, т.к. типовой механизм не устраивал. Еще это может быть полезно для визуализации различных зависимостей: расчета себестоимости, графы аффилированности компаний и т.д. Надеюсь, эта статья поможет сделать мир 1С красивее и гармоничней:) Итак, поехали...

23.05.2018    22865    0    slozhenikin_com    20    

Распределение расходов пропорционально продажам

Финансовый учет и бюджетирование (FRP) Учет доходов и расходов Практика программирования Финансовый учет и бюджетирование (FRP) Учет доходов и расходов v8 v8::ОУ УТ10 УУ Бесплатно (free)

Финансовая модель. Распределение административных расходов по подразделениям пропорционально продажам за месяц. Дополнительные реквизиты против бизнес-процессов!

13.05.2018    16996    0    Rustig    9    

Просмотр временных таблиц запроса в отладчике без изменения кода

Практика программирования v8 v8::Запросы 1cv8.cf Бесплатно (free)

Данный способ можно использовать для просмотра содержимого временных таблиц запросов (менеджеров временных таблиц) без внесения изменений в код.

24.04.2018    42806    0    avfed@rambler.ru    26    

Ускоряем 1С: модули с повторным использованием возвращаемых значений Промо

Практика программирования v8 Бесплатно (free)

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

04.09.2017    49989    0    m-rv    60    

[ВсеПросто] "Оперативный" информатор из 1С за 5 мин.

Практика программирования v8 Бесплатно (free)

Быть всегда в курсе дел, даже в дороге!

22.02.2018    25294    0    DarkAn    25    

Минимализмы 3

Практика программирования Универсальные функции v8 Бесплатно (free)

Очередная серия "минимализмов" [http://infostart.ru/public/306536/, https://infostart.ru/public/460935/]. Также, как и в предыдущих статьях, здесь приведена подборка коротких оригинальных авторских решений некоторых задач. Ранее эти решения были разбросаны по моим комментариям к чужим публикациям.

19.02.2018    43846    0    ildarovich    45    

Этюды по программированию. Взаимодействие с Microsoft Word

Практика программирования v8 Бесплатно (free)

Часто приходится заниматься созданием сложных документов Word с таблицами, вложенными фрагментами, хитрым оформлением и прочими радостями жизни. Это - попытка как-то структурировать полученный опыт, чтобы не приходилось перерывать ворох старых обработок в поисках крупиц истины. Надеюсь, эта статья будет полезна и Вам.

11.12.2017    30919    0    milkers    23    

1С: Конвертация данных 3. Инструкции и примеры. EnterpriseData (универсальный формат обмена)

Перенос данных из 1C8 в 1C8 Практика программирования Обмен через XML v8 КД Бесплатно (free)

Что такое КД3? Как начать использовать? Полезные дополнения к документации. Что нужно исправить в типовых обработках и конфигурации. Как изменить правила обмена не снимая конфигурацию с поддержки. Как отлаживать правила обмена?

19.11.2017    176738    0    MaxS    270