gifts2017

Экзамен "1С:Специалист" по платформе 8.3 - заметки для успешной сдачи (обновлено 20.08.2014)

Опубликовал Анатолий (hame1e00n) в раздел Программирование - Сертификация

Совсем недавно сдал экзамен "1С:Специалист" по платформе 8.3. Экзамен сдал с первого раза. Готовился где-то полгода, за это время изучил много информации по экзамену и прорешал около 100 задач из сборника. В процессе подготовки для себя создал много небольших заметок с готовыми кусками кода для решения определенных подзадач, а также краткими пояснениями сложных моментов. Хочу поделиться этим материалом с людьми, которые сейчас готовятся к сдаче, это должно им очень помочь.

Если моя публикация Вам полезна, не забудьте поставить плюсик :-)

В процессе подготовки прошел курс Павла Чистова
"Подготовка к аттестации на «1С:Специалист по платформе" 
Также очень помог его форум 
http://chistov.spb.ru/forum/16

Здесь рубрикатор по всем задачам сборника (страничка, где собраны ссылки на ветки форума по каждой задаче) 
http://chistov.spb.ru/forum/16-969-1

Рекомендую также дополнительно ознакомиться с этими публикациями на этом сайте:
http://infostart.ru/public/102366/ 
http://infostart.ru/public/126813/ 

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


Итак, приступим:

*************************************************************************************************
В случае удаленной сдачи у вас должно быть в конце экзамена на рабочем столе два объекта:

1. Итоговая выгрузка информационной базы (файл dt)
2. Пояснительная записка

Ничего другого быть не должно, никаких промежуточных копий и т.д.

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

Но об этом Вам и так будет сказано в инструкции, которую дадут прочесть перед началом экзамена.
Просто лучше знать заранее)

*************************************************************************************************
Использование знака амперсанда в запросах.

Иногда быстрее набрать с дополнительной клавиатуры, чем переключать туда-сюда раскладку, экономится время
& = Alt+38

*************************************************************************************************
Использование МоментВремени() в запросах

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

	 Момент = ?(РежимПроведения = РежимПроведенияДокумента.Оперативный, Неопределено, МоментВремени());


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

Код такой: 

	 Движения.НазваниеРегистра.Записывать = Истина;
	 Движения.НазваниеРегистра.Очистить(); 

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

	 Движения.НазваниеРегистра.Записать(); 

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

Но я везде просто указывал сразу конструкцию из этих трех строчек:

	 Движения.НазваниеРегистра.Записывать = Истина;
	 Движения.НазваниеРегистра.Очистить(); 
	 Движения.НазваниеРегистра.Записать();

*************************************************************************************************
Есть два способа блокировки данных, выбор между ними зависит от методики проведения - старой или новой:

1) Обычная управляемая блокировка, старая методика проведения документа (объект БлокировкаДанных)

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


Пример:
Рассмотрим операцию реализации товара. 
В документе - количество, в регистре - количество и сумма (себестоимость)
Так вот, количество товара мы знаем из документа - сколько списываем, а себестоимость - нет. 
Мы можем ее узнать только из регистра, но для того, чтобы никто не изменил регистр между моментом получения остатков и моментом записи движений, нам необходимо еще до чтения остатков заблокировать регистр. 
Так вот, в этом случае и используется объект БлокировкаДанных. И при его создании правильнее указать по каким измерениям мы блокируем регистр (например в нашем случае - только по указанной в документе номенклатуре) - чтобы не было излишних блокировок и другой пользователь смог продавать другую номенклатуру. 

То есть последовательность такая: 
1. Устанавливаем блокировку с помощью объекта БлокировкаДанных 
2. Читаем остатки 
3. Проверяем возможность списания 
4. Формируем движения, к примеру списываем товар 
5. После проведения документа блокировка автоматически снимается (блокировка действует в рамках транзакции проведения и снимается автоматически системой). То есть как-то специально разблокировать объект не надо. 

2) Новая методика проведения документов (использование свойства БлокироватьДляИзменения = Истина)

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

Пример:
Рассмотрим операцию реализации товара. 
В документе - количество, в регистре - только количество
Так вот, количество товара мы знаем из документа. 
Мы формируем движения с указанным в документе количеством и записываем их. Далее читаем регистр, смотрим остатки, анализируем - есть ли отрицательные. Если есть выводим ошибку и ставим Отказ = Истина. 

То есть последовательность такая: 
1. Для движения по регистру устанавливаем свойство БлокироватьДляИзменения = Истина 
2. Формируем движения - списываем товар 
3. Записываем движения 
4. Читаем регистр, смотрим, чтобы не было отрицательных остатков. Если есть - то списали лишнее, если нет - то все нормально. 

Так вот, в этом случае нет необходимости указывать по каким измерениям нам надо блокировать регистр. 
Мы просто устанавливаем свойство БлокироватьДляИзменения = Истина до записи наших движений, формируем движения и записываем. 
Система сама заблокирует регистр в момент записи по тем измерениям, которые надо, проанализировав то, что мы записали. 
После проведения блокировка снимется. 

Этот вариант (второй) проще, называется "новая методика проведения документов" и 1С рекомендует использовать именно его в случае возможности и снимает баллы, если используется первый вариант, но в некоторых случаях его просто невозможно применить и используется первый вариант с объектом БлокировкаДанных (см. приведенный выше пример).

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

*************************************************************************************************
Блокировка данных (способ блокировки №1 из приведенного выше описания)

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

Выглядит примерно следующим образом:

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

*************************************************************************************************
Табличную часть документов лучше называть просто "ТЧ"

Табличная часть в 99% документов - одна. Такое унифицированное название табличных частей очень поможет сэкономить время, так как:
1) Очень короткое - быстро писать
2) Одинаковое для всех документов, не придется вспоминать при написании кода как она называется

*************************************************************************************************
Результат запроса проверять на пустоту перед выборкой или выгрузкой в ТЗ. 

Вообще во всех задачах использовал выборку.

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

Но в любом случае до метода Выбрать() лучше проверить на пустоту результат запроса, это еще уменьшит нагрузку на систему.

	 Результат = Запрос.Выполнить();
	 Если Не Результат.Пустой() Тогда
	    Выборка = Результат.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
	    ...
	 КонецЕсли;

 А в случае, если нам нужно получить только одно значение из запроса
(например только метод списания в соответствии с учетной политикой, установленной на этот год):

	Результат = Запрос.Выполнить();
	Если Не Результат.Пустой() Тогда
	   Выборка = Результат.Выбрать();
	   Выборка.Следующий();
	   МетодСписанияСебестоимости = Выборка.МетодСписанияСебестоимости;
	КонецЕсли; 

*************************************************************************************************
Документ "Операция" для задачи по БУ

Обязательно нужно создавать документ Операция для задач по БУ.

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

*************************************************************************************************
Оперативное проведение документов:

Должно быть включено:
В оперативном и бух. учете у документов должно быть включено (кроме документа "Операция", см. ниже). 

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

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

*************************************************************************************************
Условие в запросе вида "Или указанная номенклатура или любая, если не указана"

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

	 Номенклатура = &Номенклатура ИЛИ &Номенклатура = Значение(Справочник.Номенклатура.ПустаяСсылка)

Но более оптимально и правильнее это условие будет преобразовать (спасибо yukon):

Если ЗначениеЗаполнено(Номенклатура) Тогда
    Запрос.Текст = Запрос.Текст + " ГДЕ Номенклатура = &Номенклатура";
    Запрос.УстановитьПараметр("Номенклатура", Номенклатура);
КонецЕсли;

С появлением объектной модели запроса в 8.3.5 условие можно будет добавлять безопаснее: 

Если ЗначениеЗаполнено(Номенклатура) Тогда
    Запрос1.Отбор.Добавить("Номенклатура = &Номенклатура");
    Запрос.УстановитьПараметр("Номенклатура", Номенклатура);
КонецЕсли;

 *************************************************************************************************
Присоединение таблиц в запросах:

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

Если требуется присоединить таблицу без всяких условий, то на закладке с условиями просто писать условие "ИСТИНА".
В этом случае таблица присоединится точно. 

*************************************************************************************************
Использование плана видов характеристик (ПВХ):

1. Использование в качестве механизма описания характеристик объектов.

1.1. Создаем ПВХ. Это будут ВидыХарактеристик (например, цвет, размер, макс. скорость и т.д.). В настройках выбираем все возможные типы значений характеристик и если нужно создаем объект из пункта 1.2 и указываем его также в настройках.

1.2. Для дополнительных значений ПВХ создаем подчиненный ему справочник ДопЗначенияХарактеристик (или просто ЗначенияХарактеристик).
В нем будут хранится характеристики, если их нет в существующих справочниках. Мы можем его не создавать, если все нужные нам характеристики есть в существующих справочниках, либо эти значения можно представить элементарными типами данных. В настройках ПВХ указываем, что этот справочник будет использоваться для доп. значений характерестик.

1.3. Создаем регистр сведений, который собственно и связывает три объекта:
   - Объект, к которому мы подключаем механизм характеристик
   - ВидХарактеристики (тип ПВХ)
   - ЗначениеХарактеристики (тип - характеристика, это новый тип, который появился в системе после создания ПВХ 
     и описывающий все возможные типы данных, которые может принимать значение характеристики).
В регистре сведений указываем, что ВидХарактеристики является владельцем для ЗначенияХарактеристики (свяхь параметра выбора), а также связь по типу для ЗначенияХарактеристики опять же от ВидаХарактеристики.

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

2. Использование ПВХ для создания механизма субконто регистра бухгалтерии.

2.1. Создаем ПВХ ВидыСубконто.

2.2. Создаем подчиненный справочник ЗначенияСубконто (как с характеристиками, в нем будут значения субконто, если нет таких в других справочниках).

2.3. Связь производится с помощью плана счетов.

*************************************************************************************************
Ресурсы регистра бухгалтерии: 

Сумма - балансовый, 
Количество - небалансовый и связан с признаком учета Количественный

*************************************************************************************************
Виртуальные таблицы регистра бухгалтерии:

Обороты: обороты какого-то одного счета
ОборотыДтКт: обороты между какими-то двумя счетами, то есть все одинаковые проводки за период.

*************************************************************************************************
Валютный учет на регистрах бухгалтерии - как реализовать:

Создаем признак учета "валютный" в плане счетов.
В регистре бухгалтерии создаем дополнительно:
- измерение Валюта (запрет незаполненных значений, небалансовый, признак учета - валютный)
- ресурс ВалютнаяСумма (небалансовый, признак учета - валютный, в нем будет хранится сумма в валюте, то есть 100$ например)
Все.

Таким образом структура регистра:

Измерения:
 - Валюта
Ресурсы
 - Количество
 - Сумма (сумма в рублях)
 - ВалютнаяСумма (сумма в валюте)

Таким образом валютный учет - это лишь доработка обычного учета на РБ, он не изменяет сути к примеру ресурса Сумма 
(там как и обычно сумма в рублях, независимо от того, валютный ли счет или нет).
И если признак учета Валютный для счета выключен, то это обычная структура РБ (ресурсы - только количество и сумма).

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

Иначе получим не срез последних, а последнюю запись с указанным значением ресурса - она может быть не последней по набору измерений

*************************************************************************************************
Смысл ресурса и реквизита в регистре расчета

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

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

*************************************************************************************************
Галочка "Базовое" в свойствах измерения регистра расчета
Означает, что по этому измерению в дальнейшем будет получаться база и служит для дополнительной индексации значений по этому полю.

*************************************************************************************************
Разбивка периода действия отпуска по месяцам при записи наборов записей регистра, 
в случае если отпуск задается в документе одной строкой сразу на несколько месяцев одной строкой:

	 ДатаНачалаТекМесяца = НачалоМесяца(ТекСтрокаОсновныеНачисления.ПериодДействияНачало);
	 ДатаОкончанияТекМесяца = КонецМесяца(ТекСтрокаОсновныеНачисления.ПериодДействияНачало);
	 ТекМесяц = Дата; 
	 Пока ДатаНачалаТекМесяца <= НачалоМесяца(ТекСтрокаОсновныеНачисления.ПериодДействияКонец) Цикл
	    Движение = Движения.ОсновныеНачисления.Добавить();
	    Движение.Сторно = Ложь;
	    Движение.ВидРасчета = ТекСтрокаОсновныеНачисления.ВидРасчета;
	    Движение.ПериодДействияНачало = Макс(ДатаНачалаТекМесяца, ТекСтрокаОсновныеНачисления.ПериодДействияНачало);
	    Движение.ПериодДействияКонец = КонецДня(Мин(ДатаОкончанияТекМесяца, ТекСтрокаОсновныеНачисления.ПериодДействияКонец));
	    Движение.ПериодРегистрации = Дата;
	    Движение.Сотрудник = ТекСтрокаОсновныеНачисления.Сотрудник;
	    Движение.Подразделение = ТекСтрокаОсновныеНачисления.Подразделение;
	    Движение.Сумма = 0;
	    Движение.КоличествоДней = 0;
	    Движение.График = ТекСтрокаОсновныеНачисления.График;
	    Движение.Параметр = ТекСтрокаОсновныеНачисления.Параметр;
	    Движение.БазовыйПериодНачало = НачалоМесяца(ДобавитьМесяц(Дата, -3));
	    Движение.БазовыйПериодКонец = КонецДня(КонецМесяца(ДобавитьМесяц(Дата, -1)));
	    ДатаНачалаТекМесяца = НачалоМесяца(ДобавитьМесяц(ДатаНачалаТекМесяца, 1));
	    ДатаОкончанияТекМесяца = КонецМесяца(ДатаНачалаТекМесяца);
	 КонецЦикла; 
	 КонецЕсли;

*************************************************************************************************
Построение Диаграммы Ганта:

Размещаем на форме элемент типа "ДиаграммаГанта", называем ДГ, далее создаем команду "Сформировать" и в модуле формы пишем следующее:

	&НаКлиенте
	Процедура Сформировать(Команда)
	   СформироватьНаСервере();
	КонецПроцедуры

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

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

*************************************************************************************************
Обработка записей "сторно" в расчетных задачах:

В процедуре обработки проведения (модуль объекта) формируем все движения, а далее если есть записи в других периодах получим их так
(система формирует их автоматически - помогает нам):

ЗаписиДополнения = Движения.ОсновныеНачисления.ПолучитьДополнение(); // Записывать движения для получения дополнения не нужно

Для Каждого ТекСтрока Из ЗаписиДополнения Цикл
   Запись = Движения.ОсновныеНачисления.Добавить();
   ЗаполнитьЗначенияСвойств(Запись, ТекСтрока);
   Запись.ПериодРегистрации = ТекСтрока.ПериодРегистрацииСторно;
   Запись.ПериодДействияНачало = ТекСтрока.ПериодДействияНачалоСторно;
   Запись.ПериодДействияКонец = ТекСтрока.ПериодДействияКонецСторно;
КонецЦикла

А при расчете записей вставлять проверки:

Если ТекДвижение.Сторно Тогда
   ТекДвижение.Сумма = - ТекДвижение.Сумма;
КонецЕсли;

*************************************************************************************************
Как определить что относить в основным начислениям, а что - к дополнительным в расчетных задачах.

Общая рекомендация такая - те начисления, которые имеют протяженность по времени относим к основным, а те, что не имеют - к дополнительным.

Но не всегда это на 100% ясно, бывают и случаи посложней, хотя их довольно мало 
(например премия, которая зависит от количества рабочих в месяце дней - это ОН).

Поэтому если приведенная выше вам рекомендация не помогла, вывел для себя более развернутое правило определения:

Основные начисления:
Если по виду расчета есть зависимость от графика (имеется в виду регистр сведений с датами календаря), то он относится к основным начислениям.

Пример ОН:
 - Оклад
 - Что-то, что считается от количества рабочих дней (а для этого нужно использовать график): либо в периоде действия (как оклад), либо в базовом периоде

Дополнительные начисления:
То, что считается либо от начисленной суммы, либо ОТРАБОТАННОГО (а не нормы!) времени, либо вообще не зависит - это доп. начисления.

То есть: начисления для расчета которых используется норма времени (может еще и факт) - это ОН, а для которых фактические данные или вообще ничего не нужно - это ДН.

Или другими словами:

Если ВР использует норму времени, то для ПВР должен быть включен период действия.

*************************************************************************************************
Добавить возможность в форме списка справочника "Номенклатура" возможность открытия раздела встроенной справки "Работа со справочниками".

Сделать на форме команду:

&НаКлиенте 
Процедура Справка(Команда) 
   ОткрытьСправку("v8help://1cv8/EnterprWorkingWithCatalogs"); 
КонецПроцедуры 

Строку раздела определяем так:
Зайти в справочную информацию объекта конфигурации (в конфигураторе), написать слово, выделить его, зайти в меню Элементы/Ссылка и выбрать нужный раздел хелпа 1С, после этого ссылка подставляется автоматически. Выглядит сложно, на практике - все легко.

*************************************************************************************************
Осуществление взаимодействия между формами, например, подбор:

1. Из текущей формы открываем нужную методом "ОткрытьФорму()", вторым параметром передаем структуру с параметрами (если надо). Третьим параметром можем передать ссылку на эту форму - ЭтаФорма.

2. В открываемой форме в обработчике "ПриСозданииНаСервере()" мы можем поймать переданные в п.1 параметры через "Параметры.[ИмяПараметра]". Форма, которая инициализировала открытие этой формы, будет доступна через идентификатор "Владелец" (если она конечно была указана в п.1). 

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

*************************************************************************************************
Жизненный цикл параметров формы

Все параметры, переданные в форму в момент ее открытия видны только в процедуре «ПриСозданииНаСервере». 
После создания все параметры уничтожаются и более не доступны в форме.
Исключение составляют параметры, которые в редакторе формы объявлены с признаком «Ключевой параметр».
Они определяют уникальность формы. 
Такой параметр будет существовать до тех пор, пока существует сама форма.

*************************************************************************************************
Использование интерфейса "Такси"

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

*************************************************************************************************

PS: Есть отдельные типовые подзадачи, которые используются во всех задачах, именно их и нужно уметь решать (например, списание по партиям, использование ПВХ (ну это правда редко) и другие). И во всех задачах они просто повторяются (где-то одни подзадачи есть, где-то другие, просто в разных комбинациях). Тем более, что сборник же уже давно обещали новый выпустить (если еще не выпустили), в котором вроде задач должно быть намного больше, то есть нет смысла запоминать решения отдельных задач, есть смысл научиться решать отдельные типовые подзадачи, тогда решишь любую задачу.

PSS: Коллеги, если у кого-нибудь есть еще какая-либо полезная информация по подготовке к экзамену и сдаче, просьба писать в комментариях, дополним статью.

См. также

Вознаграждение за ответ
Сумма: 0 $m
Добавили:
Мурадов Музафар (sdx) (3.00 $m)
Подписаться Добавить вознаграждение

Комментарии

1. www witalit (wtlz) 15.07.14 14:11
спасибо! дома почитаю! (сам начинаю готовится)
2. Анатолий (hame1e00n) 15.07.14 14:22
Не за что)) Задавай вопросы, если будут)))
jurist80; +1 Ответить
3. Игорь Батомункуев (b22igor) 15.07.14 15:43
Спасибо!
Оч доступно и понятно
hame1e00n; +1 Ответить
4. Юрий Гончарук (yukon) 15.07.14 15:47
Условие в запросе вида "Или указанная номенклатура или любая, если не указана"
...
Решается следующим условием в самом запросе:
Номенклатура = &Номенклатура ИЛИ &Номенклатура = Значение(Справочник.Номенклатура.ПустаяСсылка)


И непопаданием в индекс (вы же не забыли проиндексировать реквизит "Номенклатура"?)
5. Анатолий (hame1e00n) 15.07.14 16:00
(4) yukon, не понял, поясните, пожалуйста, что хотите сказать?
6. Юрий Гончарук (yukon) 15.07.14 17:37
(5) hame1e00n,
Условия вида "а или б" неэффективно используют индексы.

В данном случае, поле "Номенклатура" нужно проиндексировать ибо "В задачах получения данных из информационной базы установка отборов по неиндексированным полям -0,5". Приведенное условие эффективней всего отработает при "ГДЕ Номенклатура = &Номенклатура". С другой стороны при пустой номенклатуре индекс вообще не используется, т.к. попросту не нужен. Приведенное решение ухудшает выполнение запроса с заполненной номенклатурой, а при пустой номенклатуре никакого влияния не оказывает, т.к. оптимизатор отбросит условие "Х или истина".

Т.е. оптимальным будет:
Если ЗначениеЗаполнено(Номенклатура) Тогда
    Запрос.Текст = Запрос.Текст + " ГДЕ Номенклатура = &Номенклатура";
    Запрос.УстановитьПараметр("Номенклатура", Номенклатура);
КонецЕсли;
...Показать Скрыть


С появлением объектной модели запроса в 8.3.5 условие можно будет добавлять безопаснее:
Если ЗначениеЗаполнено(Номенклатура) Тогда
    Запрос1.Отбор.Добавить("Номенклатура = &Номенклатура");
    Запрос.УстановитьПараметр("Номенклатура", Номенклатура);
КонецЕсли;
...Показать Скрыть
kgn2011; RailMen; iTony73; Созинов; hame1e00n; +5 Ответить 2
7. Julian (hercares) 15.07.14 18:36
8. Яков Коган (Yashazz) 15.07.14 20:56
Замечу только одно: на экзаменах в 1С принимают не работающие решения, а решения, правильные с точки зрения конкретного экзаменатора. Я это почему знаю: когда 8.0 только появилась, я предлагал пост-контроль остатков при оперативном проведении, и эту концепцию забраковали напрочь; спустя каких-то 6 лет именно её требовали с ножом у горла и за другие варианты снижали балл. Прошу заметить, регистры были в обоих случаях отстроены одинаково, т.к. на экзамене по сию пору не требуют разделители, хитрое управление остатками и прочая.

Поэтому - спасибо, конечно, и поздравляю со счастливым случаем под названием "удалось сдать". Мне вот за 5 раз не удалось, хотя платформу, как выяснилось, знаю получше иных сдавших. Найденные решения рассмотрю, авось что пригодится в реальной практике.
kuzyara; smaximaa; ART13; AEVdovin; Durko; SirYozha; arnautov.eugene; bovka; spetzpozh; vano-ekt; Bukaska; nurpoz; wolfsoft; OldOdin; gutentag; hame1e00n; +16 Ответить 3
9. Егор Иванов (Infactum) 15.07.14 21:58
(8) Yashazz, пост контроль стали требовать только с приходом 8.2, т.к. добавили флаг "Записывать" у движений. В более ранних версиях платформы при завершении процедуры проведения движения записывались автоматически. Итого выходила бы двойная работа.
Кстати на очной аттестации никто вам не запрещает по дискутировать с экзаменатором. Свою точку зрения отстоять можно - проверенный факт. А вот на дистанционной аттестации все не так радужно.
10. Алексей 1 (AlX0id) 15.07.14 22:03
(6) yukon,
Ну это же не ЭТВ ) Такого там не проверяют.
Пробежался посмотреть, чем же отличаются требования к 8.3 от 8.2 - ровным счетом ничем..
hame1e00n; +1 Ответить
11. www witalit (wtlz) 15.07.14 22:34
Параметры виртуальной таблицы накладываем на измерения, а не на ресурсы.

Если не ошибаюсь (только что проверил к конструкторе) - параметры можно наложить ТОЛЬКО на измерения. Или имелось ввиду что-то другое?
12. mpudy mpudy (mpudy) 15.07.14 23:07
(11) wtlz, как проверяли? Конструктор дает в параметрах среза последних делать отбор даже по реквизитам.

Скорее всего вы смотрели для регистров накопления.
13. www witalit (wtlz) 15.07.14 23:36
(12) mpudy, ну да... не туда посмотрел.
14. Анатолий (hame1e00n) 16.07.14 00:11
(11), (12) Спасибо, за замечание, написал более корректно - "Условия при установке параметров виртуальной таблицы для получения среза последних накладываем на измерения, а не на ресурсы"
15. Анатолий (hame1e00n) 16.07.14 00:21
(6) yukon, спасибо, отредактировал :-)
16. mikhailovaew (mikhailovaew) 16.07.14 09:56
в листинге "Разбивка периода действия отпуска по месяцам при записи наборов записей регистра" немного смущают манипуляции с графиком, видимо, описка:

Движение.График = ТекСтрокаОсновныеНачисления.График;
Движение.Параметр = ТекСтрокаОсновныеНачисления.Параметр;
Движение.График = Справочники.Графики.Шестидневка;

17. Андрей Г (grand.pers) 16.07.14 10:20
При работе с регистрами в модуле объекта в самом начале процедуры проведения необходимо очищать движения текущего документа по регистру.
Согласен-сам столкнулся с этим недавно.
спасибо за статью.
18. Анатолий (hame1e00n) 16.07.14 10:40
(16) mikhailovaew, спасибо, исправил :-)
19. Анатолий (hame1e00n) 16.07.14 10:56
(17) grand.pers, да, в случае если движения задвоятся, на экзамене можно не сразу сообразить в чем дело и потерять достаточно много времени на поиск ошибки.
20. Антон Бордачев (iTony73) 16.07.14 11:36
Спасибо за публикацию, сейчас сам готовлюсь к сдаче, потихоньку прорешиваю все задачки из сборника, начинал для себя делать что то подобное, действительно, эти мелочи, если долго готовишься, могут подзабыться;
Пара дополнений:
1. Есть гугл док, с текстами актуальных билетов. Там можно задать вопрос, постоянно тусуется в документе около 30 человек, да и там все подводные камни уже расписаны; Ссылку приводить не буду, очень легко ищется на сайте Чистова;
2. В расчетных задачах, в ряде задач есть формулировка "Позволить пользователю редактировать результат", что говорит о том, что расчет, производится по кнопке на форме , просьба особо камнями не кидать, сам нашел подобное решение, в одной из решенных задач на форуме Чистова, если кто то подтвердит или опровергнет, очень поможете:
Собственно Принцип самой конструкции;
1. Вызывается по кнопке из формы, располагается в модуле документа, естественно выполняется на сервере;
2. Процедура выполняется в транзакции,
3. Стандартные запись и очистка движений;
4. Расчет и запись результата в таб часть документа;
5. Фиксация транзакции, очистка движений;
При проведении, записываются уже рассчитанные результаты, из табличной части;
21. Антон Антонов (monkbest) 16.07.14 12:23
(19) hame1e00n, а разве нельзя сейчас устанавливать автоматическое удаление движений? это теперь плохой тон?

есть же свойства Записывать движения при проведении и Удаление движений

я всегда, если не предполагается в документе непосредственное изменение движений пользователем, использую автоматические режимы (удалять автоматически и Записывать модифицированные)
22. Анатолий (hame1e00n) 16.07.14 12:24
(20) iTony73, дай ссылку на гугл док если несложно, добавлю в публикацию, может кому будет полезно :-)
23. serno (Sergey.Noskov) 16.07.14 12:51
>Табличную часть документов лучше называть просто "ТЧ"
А все переменные лучше называть просто а1, а2 и т.д., оч быстро пишется.
#Сарказм
24. Яков Коган (Yashazz) 16.07.14 12:56
Кстати, насчёт этого утверждения:
А значение реквизита доступно только в реальной таблице регистра расчета, в виртуальных таблицах его нет.
- проверьте, будете удивлены. Вообще, советую почитать http://langslab.com/ebooks/prof-dev2/tome2/pr-dev-t2-ch13
25. Анатолий (hame1e00n) 16.07.14 13:12
(21) monkbest, возможно я не совсем понял вопрос, но попытаюсь объяснить, зачем нужно очищать движения в самом начале процедуры обработки проведения, ну или вернее перед работой в этой процедуре с каким-то конкретным регистром.
Вообще существует очень много способов работы с движениями документов из-за достаточно большого количества настроек.
Но анализируя форумы и решения других участников пришел к выводу, что все используют именно этот код.

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

Движения.НазваниеРегистра.Очистить();

То есть очищаем набор записей движений текущего документа.
А далее в этот набор будем добавлять записи.

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

Поэтому я еще и добавляю строчку:

Движения.НазваниеРегистра.Записать();

************************************************************************************

Насчет того, зачем нужно свойство Движения.НазваниеРегистра.Записывать

Тут следует сказать о том, как происходит запись движений.
А она может происходить двумя способами:

1. Движения.НазваниеРегистра.Записать()
Первый способ записывает движения только какого-то одного регистра.

2. Движения.Записать()
Второй - по всем регистрам. Но(!) только по тем, у которых установлен в коде признак Движения.НазваниеРегистра.Записывать = Истина.
При вызове этого метода по всем регистрам у которых установлено Записывать = Истина происходит запись и одновременно этот флаг сбрасывается: Записывать = Ложь.
Таким образом, при следующем вызове Движения.Записать() если по регистру не установить Записывать = Истина, то записи не произойдет.
Очень важно, что по умолчанию этот флаг сброшен.
И еще очень важно, что метод Движения.Записать() вызывается системой автоматически в конце процедуры обработки проведения.

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

В коде делаешь движения по первым трем (перед работой с ними устанавливаешь для каждого из них Записывать = Истина).
Потом просто вызываешь Движения.Записать().
Запись происходит только по этим трем. Флаг Записывать по каждому регистру система сбрасывает в Ложь.

Далее работаешь с двумя другими. Также перед работой с ними устанавливаешь для каждого из них Записывать = Истина. Вызываешь Движения.Записать(). Запись происходит только по этим двум.

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

Поэтому при работе с движениями каждого регистра имеет смысл устанавливать Записывать = Истина, иначе записи не произойдет.
Ну только если указать явно Движения.НазваниеРегистра.Записать() - так да, запишется.
26. Анатолий (hame1e00n) 16.07.14 13:35
(21) monkbest, поэтому на практике просто используется три строчки кода которые я написал в публикации.
Возможно, что когда-то эта методика изменится, какое-то свойство добавится или еще что-то случится, но сейчас так:

Перед началом работы с регистром на автомате пишешь так:

Движения.НазваниеРегистра.Записывать = Истина;
Движения.НазваниеРегистра.Очистить();

И можно еще чтобы не было проблем с существующими текущими движениями при анализе остатков по этому регистру перед записью:

Движения.НазваниеРегистра.Записать();

Далее принудительно можешь не вызывать в конце Движения.Записать() - все движения со взведенным флагом Записывать = Истина запишутся автоматически
27. Антон Бордачев (iTony73) 16.07.14 13:35
(22) hame1e00n, по ряду причин, не имею возможности это сделать:-)))
hame1e00n; +1 Ответить
28. Анатолий (hame1e00n) 16.07.14 13:37
(23) serno, каждый выбирает сам как называть))

В любом случае, при проверке экзамена не проверяется орфография и смысловая нагрузка идентификаторов, главное, чтобы все работало.
Но мои рекомендации помогут сэкономить время)))
29. Артем Целовальников (slazzy) 16.07.14 16:10
Перед записью движений можно ещё свойство БлокироватьДляИзменения поставить в истину, управляемые блокировки же...
30. Анатолий (hame1e00n) 16.07.14 16:29
(29) slazzy, не совсем так...

Есть два способа блокировки данных, выбор между ними зависит от методики проведения - старой или новой:

1) Обычная управляемая блокировка, старая методика проведения документа (объект БлокировкаДанных)

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


Пример:
Рассмотрим операцию реализации товара.
В документе - количество, в регистре - количество и сумма (себестоимость)
Так вот, количество товара мы знаем из документа - сколько списываем, а себестоимость - нет.
Мы можем ее узнать только из регистра, но для того, чтобы никто не изменил регистр между моментом получения остатков и моментом записи движений, нам необходимо еще до чтения остатков заблокировать регистр.
Так вот, в этом случае и используется объект БлокировкаДанных. И при его создании правильнее указать по каким измерениям мы блокируем регистр (например в нашем случае - только по указанной в документе номенклатуре) - чтобы не было излишних блокировок и другой пользователь смог продавать другую номенклатуру.

То есть последовательность такая:
1. Устанавливаем блокировку с помощью объекта БлокировкаДанных
2. Читаем остатки
3. Проверяем возможность списания
4. Формируем движения, к примеру списываем товар
5. После проведения документа блокировка автоматически снимается (блокировка действует в рамках транзакции проведения и снимается автоматически системой). То есть как-то специально разблокировать объект не надо.

2) Новая методика проведения документов

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

Пример:
Рассмотрим операцию реализации товара.
В документе - количество, в регистре - только количество
Так вот, количество товара мы знаем из документа.
Мы формируем движения с указанным в документе количеством и записываем их. Далее читаем регистр, смотрим остатки, анализируем - есть ли отрицательные. Если есть выводим ошибку и ставим Отказ = Истина.

То есть последовательность такая:
1. Для регистра устанавливаем свойство БлокироватьДляИзменения = Истина
2. Формируем движения - списываем товар
3. Записываем движения
4. Читаем регистр, смотрим, чтобы не было отрицательных остатков. Если есть - то списали лишнее, если нет - то все нормально.

Так вот, в этом случае нет необходимости указывать по каким измерениям нам надо блокировать регистр.
Мы просто устанавливаем свойство БлокироватьДляИзменения = Истина до записи наших движений, формируем движения и записываем.
Система сама заблокирует регистр в момент записи по тем измерениям, которые надо, проанализировав то, что мы записали.
После проведения блокировка снимется.

Этот вариант (второй) проще, называется "новая методика проведения документов" и 1С рекомендует использовать именно его в случае возможности и снимает баллы, если используется первый вариант, но в некоторых случаях его просто невозможно применить и используется первый вариант с объектом БлокировкаДанных (см. приведенный выше пример).
NN2P; Василиса250; odin777; +3 Ответить 2
31. Артем Целовальников (slazzy) 16.07.14 17:03
(30) hame1e00n,
спасибо за такое детальное объяснение, но дело в том, что я в общем-то уже имею этот сертификат и прекрасно знаю, какие есть методики проведения :) не стоило.

Вы допустили одну ошибочку,


То есть последовательность такая:
1. Устанавливаем блокировку с помощью объекта БлокировкаДанных
2. Читаем остатки
3. Проверяем возможность списания


На самом деле перед этими действиями надо очистить движения

   
     Движения.НазваниеРегистра.БлокироватьДляИзменения = Истина;
     Движения.НазваниеРегистра.Записывать = Истина;
     Движения.НазваниеРегистра.Очистить(); 
     Движения.НазваниеРегистра.Записать();
...Показать Скрыть

Как-то так:) именно это я имел в виду, но надо было уточнить, что это про старую методику проведения.
32. Анатолий (hame1e00n) 16.07.14 17:09
(31) slazzy, мои старания не пропали даром, я добавил это в публикацию))

По поводу возможной ошибки - ее нет - очищать движения нужно в обоих случаях :-)
33. Артем Целовальников (slazzy) 17.07.14 08:27
(32) hame1e00n, не совсем :) во втором случае из вашего примера, движения надо очищать, но не записывать. А в первом случае, собственно к чему я всё это и писал, вы не написали Движения.НазваниеРегистра.БлокироватьДляИзменения = Истина;
и вообще это потенциальная ошибка. Ведь если документ перепроводится и в нем меняется состав ТЧ, то при простой блокировке данных вы заблокируете движения только по новому составу ТЧ, но надо блокировать и по старому.
34. Леонид Павлиенко (PLAstic) 17.07.14 09:49
Коллеги! Я вот выбираю любой документ, нажимаю Alt-Enter и там есть параметр "Запись движений при проведении", который обычно стоит в значении "Записывать модифицированные" и избавляет от геморроя с отметкой каждого набора записей, который нужно записывать.
В чём ошибка использования данного свойства и отказа от использования предлагаемого автором способа с "Записывать = Истина" ? Или автор об этом просто не знал?
35. Анатолий (hame1e00n) 17.07.14 10:10
(33) slazzy,

"hame1e00n, не совсем :) во втором случае из вашего примера, движения надо очищать, но не записывать. А в первом случае, собственно к чему я всё это и писал, вы не написали Движения.НазваниеРегистра.БлокироватьДляИзменения = Истина;
и вообще это потенциальная ошибка. Ведь если документ перепроводится и в нем меняется состав ТЧ, то при простой блокировке данных вы заблокируете движения только по новому составу ТЧ, но надо блокировать и по старому."

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

2. При указании БлокироватьДляИзменения = Истина, регистр блокируется в момент записи по набору ключевых полей записываемых данных, а если мы их уже исправили, то набор будет новый. Но у нас и так есть блокировка с помощью объекта БлокировкаДанных с указанием этих измерений.

То есть: Дублируется блокировка

Или же делать такую блокировку и запись старого набора еще до очистки движений - по старому набору и его записывать, но в приведенном Вами коде этого нет. Если же просто как в приведенном Вами коде указать БлокироватьДляИзменения = Истина без записи, то блокировки все равно не будет.

Подтверждение моих слов из СП по поводу свойства БлокироватьДляИзменения:

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

Мне кажется преподаватель не упустит случая снять баллы.

По поводу "и вообще это потенциальная ошибка. Ведь если документ перепроводится и в нем меняется состав ТЧ, то при простой блокировке данных вы заблокируете движения только по новому составу ТЧ, но надо блокировать и по старому."

Да, возможно, что по хорошему надо все проверять, но мне кажется это чересчур - я при подготовке не встречал подобных решений.
Если так рассуждать, то хорошему блокировать нужно регистр и в момент прихода товара, но я этого не видел в решениях.
Блокировался регистр только в момент проведения документа списания, а вернее правило такое:
"Блокировать нужно в том случае, если текущее состояние регистра влияет на формирование новых движений"


Как пример: посмотрели, что товара хватает в остатках, заблокировали регистр, чтоб другой пользователь не мог его списать, сделали списание :-)
Olka_Polka; +1 Ответить 1
36. Артем Целовальников (slazzy) 17.07.14 10:24
(35) hame1e00n,

     
Движения.НазваниеРегистра.БлокироватьДляИзменения = Истина;
     Движения.НазваниеРегистра.Записывать = Истина;
     Движения.НазваниеРегистра.Очистить(); 
     Движения.НазваниеРегистра.Записать();
...Показать Скрыть


Вот в момент записи(очистки движений) заблокируется старый набор движений. Приведу пример зачем это надо.
К примеру у вас есть документ 1, в нем вы продаете 10 яблок.
Вдруг вы решили, что в этом документе на самом деле вы продаете 10 груш, заходите в документ и изменяете яблоки на груши.
Следуя вашему коду мы очищаем движения, в регистре снимается расходная проводка на 10 яблок, после этого вы накладываете блокировку по грушам. И всё здорово, но что если

То есть последовательность такая:
1. Устанавливаем блокировку с помощью объекта БлокировкаДанных
2. Читаем остатки
3. Проверяем возможность списания
4. Формируем движения, к примеру списываем товар
5. После проведения документа блокировка автоматически снимается (блокировка действует в рамках транзакции проведения и снимается автоматически системой). То есть как-то специально разблокировать объект не надо.


Где-то между пунктами 1-5 другой человек заходит в другой документ и продает 10 яблок. И проводит эту операцию успешно, ведь яблоки не заблокированы. И по прежнему в общем-то ничего страшного.
А вот теперь страшно :) вдруг оказывается, что груш у вас нет на складе и на шаге 3 вы выставляете отказ в истину и отменяете транзакцию. И у вас получается -10 яблок на складе...такие дела.
37. Анатолий (hame1e00n) 17.07.14 10:26
(34) PLAstic,

"Коллеги! Я вот выбираю любой документ, нажимаю Alt-Enter и там есть параметр "Запись движений при проведении", который обычно стоит в значении "Записывать модифицированные" и избавляет от геморроя с отметкой каждого набора записей, который нужно записывать.
В чём ошибка использования данного свойства и отказа от использования предлагаемого автором способа с "Записывать = Истина" ? Или автор об этом просто не знал?"


Из СП:

"ЗаписыватьВыбранные (WriteSelected)
Описание:
Перед началом проведения документ устанавливает всем наборам записей, участвующим в регистрации движений, свойство Записывать в Ложь."

"ЗаписыватьМодифицированные (WriteModified)
Описание:
Все наборы записей, участвующие в регистрации движений документа имеют значение свойства Записывать установленным системой по умолчанию в Истина."

Что значит "обычно"? Создайте новый документ - по умолчанию стоит как раз "Записывать выбранные".
Если будете использовать способ "Записывать модифицированные", то в случае, если при проведении надо несколько раз производить запись (а такие задачи есть), нужно будет писать тоже самое, но только писать Записывать = Ложь для тех регистров, которые не надо записывать, чтоб лишний раз не писать в них.

Чуть выше описал пример использования этого свойства, когда производится запись движений в несколько этапов.

По моему скромному мнению, лучше делать однотипно, как хочет 1С и как она принимает.
Я не спорю, что могут быть другие варианты, возможно в каких-то ситуациях более оптимальные (хотя не уверен), но думаю преподаватель не будет особо разбираться во всех тонкостях. Если для него решение будет очень сильно отличаться от типично правильного, то он может посчитать, что Вы сделали неправильно.
38. Анатолий (hame1e00n) 17.07.14 10:31
(36) slazzy,

"Движения.НазваниеРегистра.БлокироватьДляИзменения = Истина;
Движения.НазваниеРегистра.Записывать = Истина;
Движения.НазваниеРегистра.Очистить();
Движения.НазваниеРегистра.Записать();

Вот в момент записи(очистки движений) заблокируется старый набор движений. Приведу пример зачем это надо.
К примеру у вас есть документ 1, в нем вы продаете 10 яблок.
Вдруг вы решили, что в этом документе на самом деле вы продаете 10 груш, заходите в документ и изменяете яблоки на груши. "


Я понял и раньше о какой ситуации Вы говорите :-)

Откуда уверенность, что заблокируется старый набор записей? ИМХО, ничего не заблокируется - вы попытаетесь заблокировать по набору измерений, но блокировать нечего - движения то вы очистили. Разве нет?

Говорю ж, тогда по идее надо записывать старый набор записей перед очисткой, но ИМХО это - чересчур, очень легко можно нахватать штрафных баллов (преподаватель может не понять), по моему 0.5 за каждую лишнюю запись движений.
39. Артем Целовальников (slazzy) 17.07.14 10:56
(38) hame1e00n,
Откуда уверенность, что заблокируется старый набор записей? ИМХО, ничего не заблокируется - вы попытаетесь заблокировать по набору измерений, но блокировать нечего - движения то вы очистили. Разве нет?

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


И да, я только что провел небольшой тест, который это подтвердил :) выставил время ожидания на блокировке 20с, сделал цикл работающий 25с после блокировки. Сначала провожу одну реализацию, в которой Товар1 и Товар3, после этого удаляю товар1 и перепровожу. В момент перепроведения создаю новый документ(в другом сеансе), в котором продаю товар1, через 20с сеанс вываливается с ошибкой превышения времени ожидания на блокировке.
Вывод -
"Движения.НазваниеРегистра.БлокироватьДляИзменения = Истина;
Движения.НазваниеРегистра.Записывать = Истина;
Движения.НазваниеРегистра.Очистить();
Движения.НазваниеРегистра.Записать();


Блокирует записи по старому набору движений.


ЗЫ Кстати и правда, у Павла Чистова именно это и написано в статье, которую прежде всего рекомендуется прочитать.
http://infostart.ru/public/195591/
Дейл; natar82; EMelihoff; odin777; hame1e00n; +5 Ответить 1
40. Артем Целовальников (slazzy) 17.07.14 11:01
(34) PLAstic,
Дело в том, что если вы вручную записываете какие-то движения в момент проведения, то при установке этого флажка, они второй раз перезапишутся в конце транзакции проведения.
41. Анатолий (hame1e00n) 17.07.14 11:16
(40) slazzy,
да, и при любой записи всех движений...
42. Анатолий (hame1e00n) 17.07.14 11:19
(39) slazzy,

Ооо, спасибо за такое подробное описание и за ссылку))) Почитаю :-)

Но для экзамена это наверное слишком тонкий момент, в его видеоуроках я такого не видел (я проходил курс).

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

:-)
43. Александр Анисков (vandalsvq) 17.07.14 11:51
Как то иногда всплывает мысль мол какой я спец, если 1С:Специалист не получил :)))).
Но вот такие вот вещи как
Только не забудьте когда все сделаете поставить снова "Такси"! Иначе экзаменатор снимет балы!

напрочь убивает любое желание даже начинать готовиться. Нельзя же так просто всех принуждать, а то ведь нехорошо это как то.
mulla1979; hame1e00n; +2 Ответить
44. Артем Целовальников (slazzy) 17.07.14 14:00
на сколько я понимаю - главные изменения это отказ от модальности, но в этом экзамене вроде бы нет ситуаций, когда это может потребоваться.

И ещё изменение, как это было анонсировано, что вырастет число задач и билеты будут не одинаковыми, а будут формироваться перед экзаменом из разных частей.

Нельзя же так просто всех принуждать, а то ведь нехорошо это как то.


Можно ) ничего нехорошего в этом нет. Вы же сдаете экзамен на УФ, а не в обычных. Так же и тут просто требование времени.
hame1e00n; +1 Ответить
45. Анатолий (hame1e00n) 17.07.14 16:13
(43, 44)
"на сколько я понимаю - главные изменения это отказ от модальности, но в этом экзамене вроде бы нет ситуаций, когда это может потребоваться."

Есть, задача по работе с картинками, но это наверное единственная задача.
У Павла Чистова есть подробная статья как работать с диалоговыми окнами в новом режиме отказа от модальности.

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

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

И да, обещают вроде сборник, где количество задач увеличат.
Я сдавал совсем недавно - пятой задачи по управляемым формам не было, по ОУ, БУ, БП задачи из сборника, а вот по расчету зп такое ощущение задача упрощена была.

В общем задачи попались не сильно объемные и сложные, но вот компы - очень плохие, мышка вообще никакая - сдавал удаленно, еле успел из-за этого.
46. anry mc (AnryMc) 19.07.14 08:45
(8) Yashazz,

Пример "правильного" ответа от 1С
http://infostart.ru/public/97489/ "Экзамен 1С Профессионал - Приколы"

П.С. Главное - выучить "правильный ответ" а не знание...
47. Анатолий (hame1e00n) 21.07.14 09:48
(46) AnryMc, не стоит так категорично говорить - да, бывают и проблемы, но в итоге ведь очень-очень много зависит от сдающего. Можно ведь и апелляцию подать :-)
48. Елена Пименова (Bukaska) 21.07.14 09:56
(46) AnryMc, Ахахах))) тоже читала.. под столом была...
вот потому я пока что и не суюсь на экзамены.. что кто их знает.. этих тараканов)))
49. Юрий Муллабакиев (mulla1979) 22.07.14 12:59
Спасибо автору за хорошую статью! Кстати, вчера вышли новые задачи http://1c.ru/news/info.jsp?id=18610
hame1e00n; +1 Ответить
50. Павел Горский (gorski) 23.07.14 08:51
Решение должно быть правильным как с прикладной точки зрения, так и с позиции платформы. Все преподаватели на экзамене оценивают одинаково объективно, все остальные мнения - мифы... Мы с коллегой сдали очный экзамен с первого раза. Очень рекомендую курсы фирмы 1С от Павла Белоусов по конфигурированию http://www.1c.ru/rus/partners/training/uc1/course.jsp?id=75 и консультации к экзамену http://www.1c.ru/rus/partners/training/uc1/course.jsp?id=160. Он один из преподавателей принимающих экзамен, является создателем правил проведения экзамена, автором задач сборника, 15 лет опыта, умеет ученую степень и т.п. и т.д. Чем более подготовленными вы пойдете на курсы, тем эффект будет круче! Вас будут не просто учить программировать, а научат правильно понимать платформу. Такой полноты и глубины знаний и понимания платформы из книг не достать. За эти 4-5 дней вы получите очень большой объем информации. Вам не нужны будут правила, поскольку вы будете понимать и знать что делать. Правила обычно заучивают, забывая как и при каких обстоятельствах они были сформулированы. Нужно помнить, ведь у любых правил есть исключения... Не нужно гоняться за суррогатами, возьмите знания из первоисточника (или подправьте свои уже сформированные знания). Если есть возможность сходите на эти курсы, в любом случае не пожалеете, даже если пока не собираетесь сдавать экзамен.
52. Елена Пименова (Bukaska) 24.07.14 09:42
(45) hame1e00n,
В общем задачи попались не сильно объемные и сложные, но вот компы - очень плохие, мышка вообще никакая - сдавал удаленно, еле успел из-за этого.

Не понимаю.. У этой же конторы денег хватает.. неужели не обновить компьютерный класс, чтобы не на висячих компах сдавать))))
53. Яков Коган (Yashazz) 24.07.14 14:47
(50) Не рассказывайте сказки. Моя жена ходила сдавать "Спеца" по ЗУП, экзаменатор мельком глянул, сказал, что всё неверно и до свидания. Она подала апелляцию, на разборку подтянулся лично Харитонов (думаю, не надо объяснять, кто это). Так вот, при детальном разборе выяснилось, что а) экзаменатор допустил логический ляп, б) Харитонов не в курсе специфики работы современных ЗУП, в) решение моей жены оптимально, красиво, методически верно. Только непривычно.

А если б не очно, да без желания что-то доказывать - нафиг надо. Мне вот просто противно стало с этим связываться. Тем более, когда дипломированный "спец" по платформе спрашивает меня, "а чо такое агрегаты", даже как-то приятно, что я на это дело плюнул.
54. Анатолий (hame1e00n) 24.07.14 15:36
(52) Bukaska, не знаю, я удаленно в Воронеже сдавал. Лучше свою клавиатуру и мышку брать)
55. Анатолий (hame1e00n) 24.07.14 15:38
(53) Yashazz, жена в итоге сдала по результатам апелляции?
Ну вот и я о том же, что надо делать так, как они хотят видеть, чтобы сдать.
Можно сделать своеобразно, но правильно, но они могут этого не понять. Поэтому лучше не выделываться и делать как они хотят
56. Яков Коган (Yashazz) 24.07.14 16:39
(55) Жена с мобилы дала им прочитать нужные моменты в нужных официальных источниках (в т.ч. 1С-овских) и таки доказала правоту. Сдала. Но, согласитесь, это исключение.
57. Анатолий (hame1e00n) 24.07.14 16:48
(56) Yashazz, хорошо, что сказали про это, а вообще на заметку всем сдающим: не нужно бояться отстаивать свою правоту, в том числе подавать апелляцию.
58. Павел Горский (gorski) 24.07.14 20:35
(53) Yashazz, это не сказки. Прошу Вас быть аккуратнее с высказываниями...
Не рассказывайте сказки.


Я писал про Специалиста по платформе, про ЗУП ничего ни хорошего, ни плохого сказать не могу. Агрегаты на экзамене по платформе не рассматриваются, так для информации.
Если считаете себя правильным и всезнающим, возьмите и сдайте на Спеца без лишних слов и взаимных обвинений. Это у многих получилось, и не нужно здесь искать себе оправданий... Это лишь Ваше мнение. С нами сдавал программист, который делал уже 6-ую попытку - все относительно.

Считаю несколько неуважительным полное отсутствие каких-либо ссылок на официальные источники от фирмы 1С в статье. Вы программируете на 1С, а не на C# или Java, нужно уметь уважать того, кто дает Вам работу. Вас бы не было, если бы не было фирмы 1С. Данное обстоятельно можно считать отсутствием объективности в обсуждениях по данной теме.
59. Елена Пименова (Bukaska) 24.07.14 21:32
(53) Yashazz, Дело в том.. что решения можно скатать.. кто тупит - значит на компе нашел правильный пример и скатал с кого -то.., а кто знает - тот сдавал сам и шпор в компе не искал...
Так что это всё зависит от того..КАК ты сдаешь)
60. Андрей Киреев (FractonKireyev) 28.07.14 15:52
Я совсем не новичок в 1С, а из этой статьи узнал очень много новой и полезной информации.
Спасибо автору!!!
TashaRiga_nv; hame1e00n; +2 Ответить
61. serno (Sergey.Noskov) 29.07.14 14:34
(28) hame1e00n,
Времени всегда не хватает, ни на экзамене ни на проекте, но это ж не повод, понравится - привыкнешь, потом долго отвыкать ))
62. dimaster dimaster (dimaster) 31.07.14 11:53
(22) hame1e00n, в гугле (не яндексе) "гугл док Чистова 1С платформа" и самый топ )
63. Сергей Рудаков (fishca) 31.07.14 12:22
Я бы
Результат = Запрос.Выполнить();
    
    Если Не Результат.Пустой() Тогда
       Выборка = Результат.Выбрать();
       Выборка.Следующий();
       МетодСписанияСебестоимости = Выборка.МетодСписанияСебестоимости;
    КонецЕсли; 
...Показать Скрыть

заменил на:
    ТРезультат = Запрос.Выполнить().Выгрузить();
    МетодСписанияСебестоимости = ?(ТРезультат.Количество(), ТРезультат[0].МетодСписанияСебестоимости, Неопределено или же ПустоеЗначениеТипа);
64. Алексей Молодов (Allexe8.1) 31.07.14 17:56

Номенклатура = &Номенклатура ИЛИ &Номенклатура = Значение(Справочник.Номенклатура.ПустаяСсылка)


можно еще так:
Номенклатура В (Значение(Справочник.Номенклатура.ПустаяСсылка),&Номенклатура) 
hame1e00n; +1 Ответить
65. Иван Китаев (Zord) 01.08.14 09:28
Отличная статья! А про Alt+* я вообще не знал... и как я до этого жил!? "Век живи - век учись"
hame1e00n; +1 Ответить
66. Алексей Рожнятовский (spetzpozh) 02.08.14 14:23
Сдал вчера в УЦ №1. Как написал Yashazz: "Замечу только одно: на экзаменах в 1С принимают не работающие решения, а решения, правильные с точки зрения конкретного экзаменатора" - могу подписаться. Чтобы вообще понимать, что хочет 1С, я прошел очный курс по платформе в том же УЦ №1 и дополнительно мастер-класс через веб в УЦ №3. Везде эта "новая" методика.
У меня по заданию в о/у два регистра - складской (Ном., Склад, Кол-во) и для партий без учета складов, надо сделать парт. списание.
Сделал, как уже выработался рефлекс у собаки Павлова - записал набор в складской, если минусов нет - запрос и списываю партии. На что экзаменатор сказал - "а вы что, считаете, что в вашем случае это будет эффективней старой методики?". И тут сложно поспорить, но после всех источников информации и после курсов я это сделал с полной уверенностью.
Еще лажанулся в чтении задания и в б/у сделал субконто Склад суммовое, а списание себестоимости должно быть только партионное. И вообще, билет был очень странный, т.к. сейчас они генерятся рандомно - у меня по факту в б/у и о/у абсолютно одинаковые задания списания по партиям. А доп. задачи на упр. формы вообще не имели отношения к тем объектам, которые были в базе созданы и использованы. В итоге 3.
Преподаватель вообще не открывал польз. режим, так что мои идеально сделанные отчеты (с оформлением 1 в 1 как в задании) даже не смотрел. Опять же, его коллега, который тоже принимает экзамены, на курсах уделял немало времени оформлению интерфейса как в задании и говорил, что это важно.
Курс Чистова мне помог, но его решения сложно назвать эталонными с т.з. 1С. Я его почти весь прошел, но сначала решал сам, потом уже смотрел, как он делает. Было полезно.
Резюмируя, я бы настоятельно рекомендовал пройти какой-то курс от 1С, либо курс по платформе, либо курс-консультация к экзамену. За время подготовки ни одного "чужого" решения из Интернета не смотрел, чему и рад.
marinelle; hame1e00n; Allexe8.1; +3 Ответить
67. Мурадов Музафар (sdx) 04.08.14 01:08
автору респект, хорошо написал, понятно.
hame1e00n; +1 Ответить
68. Леонид Игнатьев (ignatievl) 04.08.14 12:29
1. Есть гугл док, с текстами актуальных билетов. Там можно задать вопрос, постоянно тусуется в документе около 30 человек, да и там все подводные камни уже расписаны; Ссылку приводить не буду, очень легко ищется на сайте Чистова;
2. В расчетных задачах, в ряде задач есть формулировка "Позволить пользователю редактировать результат", что говорит о том, что расчет, производится по кнопке на форме , просьба особо камнями не кидать, сам нашел подобное решение, в одной из решенных задач на форуме Чистова, если кто то подтвердит или опровергнет, очень поможете:
Собственно Принцип самой конструкции;
1. Вызывается по кнопке из формы, располагается в модуле документа, естественно выполняется на сервере;
2. Процедура выполняется в транзакции,
3. Стандартные запись и очистка движений;
4. Расчет и запись результата в таб часть документа;
5. Фиксация транзакции, очистка движений;
При проведении, записываются уже рассчитанные результаты, из табличной части;
69. Алексей Рожнятовский (spetzpozh) 04.08.14 21:50
(68) ignatievl, о каких актуальных билетах идет речь? :) Вышел задачник по 8.3 в июле вроде, задачи оттуда и билеты генерятся случайным образом. По п.2 вы верно написали.
70. Владимир Клименко (KliMich) 04.08.14 19:25
Спасибо! Понятно, доступно и всерьез!
hame1e00n; +1 Ответить
71. Viacheslav Bilous (Gendalf_beliy) 05.08.14 13:42
Спасибо огромное за ваши труды. И правда часть из этого ранее не знал и возьму теперь на вооружение.
hame1e00n; +1 Ответить
72. Dexter Morgan (DexterMorgan777) 05.08.14 13:49
Спасибо. Очень пригодится.
hame1e00n; +1 Ответить
73. Amory Meow (Amory) 05.08.14 15:33
Спасибо, очень полезно
hame1e00n; +1 Ответить
74. Анатолий (hame1e00n) 05.08.14 16:01
Очень рад, что кому-то это будет полезно, также повторюсь, что еще нужно прочитать две статьи, упомянутые в самом начале, постарался по минимуму с ними пересекаться, там очень много полезного :-) Они мне очень пригодились, когда я готовился)
75. Денис Соломасов (Denis S) 07.08.14 16:02
Большое спасибо! Все четко и по делу!
hame1e00n; +1 Ответить
76. Андрей (f333) 24.08.14 17:19
Добрый день.

С появлением объектной модели запроса в 8.3.5 условие можно будет добавлять безопаснее:

Если ЗначениеЗаполнено(Номенклатура) Тогда
Запрос1.Отбор.Добавить("Номенклатура = &Номенклатура");
Запрос.УстановитьПараметр("Номенклатура", Номенклатура);
КонецЕсли;


расскажите пожалуйста подробнее про объектную модель запроса
на 8.3.5 не нашел у запроса свойства "отбор"
вот тут прочитал про объектную модель схемы запроса http://v8.1c.ru/o7/201401query/index.htm
если в вашем коде используется она, просьба привести полный код, т.е. создание схемы запроса и т.д.
77. Анатолий (hame1e00n) 25.08.14 12:37
(76) f333, я не использовал.

Про объектную модель добавил в публикацию информацию, которая была приведена yukon.
78. Владимир Попов (NittenRenegade) 25.09.14 07:15
Подскажите пожалуйста, в какой из задач необходимо использовать признак учета субконто?
79. Иван Мыльцов (van2) 27.09.14 12:48
Полезно) Надеюсь, на "отлично" сдали?)
80. Анатолий (hame1e00n) 13.01.15 09:54
(79) van2, к сожалению не сказали оценку
81. Алексей Марков (luxnlex) 31.01.15 23:45
Спасибо большое за статью!))) Сам начинаю готовиться, все очень доступно, много полезных моментов, которые встречал в разных изданиях и статьях.
82. Анатолий (hame1e00n) 01.02.15 11:50
(81) luxnlex, успехов в подготовке!
Тут еще главное понимать, что помимо самого результата сдачи есть огромный плюс и в самой подготовке - приобретается очень много ценных и полезных знаний.
84. Валерий Покатило (its_valera) 03.03.15 19:44
Спасибо за проделанный труд! прям вовремя! )
85. Алексей Шарапов (Isperator) 05.03.15 20:00
Спасибо за наставление. Готовлюсь к платформе.
86. Александр (NcSteel) 01.06.15 17:23
Начал готовиться к спецу, прочитал статьи и комментарии и прифигел от количества заблуждений, вот некоторые:

(14) Не понятно почему нельзя устанавливать параметры виртуальной таблицы на реквизиты/ресурсы для получения среза последний.
Само требование ересь, особенно если знать как устроены регистры сведений.

(17) Это абсолютная глупость из-за которой возникают лишние блокировки. За это целесообразно 0,5 бала снимать сразу. Я бы вообще выгонял бы с экзамена.

(25) Если бы ты не добавил слово "Имхо", то лежал бы я под столом. Ладно еще познаешь дзен ).
Движения.НазваниеРегистра.Очистить(); - это лишнее.

(30) Мда.... верх заблуждения. Ставим мы БлокироватьДляИзменения или не ставим система заблокирует записи в любом случае. БлокироватьДляИзменения это не управляемая блокировка это другое ). Данное свойство необходимо только при использовании разделителей.
88. Sibiryak (Sibiryak) 06.01.16 22:42
При формировании движений документа по регистру в самом начале процедуры обработки проведения необходимо очищать движения текущего документа по регистру.
Но я везде просто указывал сразу конструкцию из этих трех строчек:
Движения.НазваниеРегистра.Записывать = Истина;
Движения.НазваниеРегистра.Очистить();
Движения.НазваниеРегистра.Записать();


Именно в этом месте движения очищаются одной строкой:
Движения.НазваниеРегистра.Записать();


Строка "Движения.НазваниеРегистра.Записывать = Истина;" к очистке записей вообще никакого отношения не имеет.
89. Анатолий (hame1e00n) 07.01.16 03:03
(88) Sibiryak,

Я и не писал, что это делает конкретно эта строка.

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

Каждая из них несет свой смысл.

Да, в публикации подробнее описал зачем нужны две другие строки, но это не делает эту ненужной.
90. Sibiryak (Sibiryak) 07.01.16 12:11
Во-первых, статью считаю полезной (с учетом комментариев). Плюсанул.
Во-вторых,
(89) hame1e00n,
Цитата из текста публицации:
При формировании движений документа по регистру в самом начале процедуры обработки проведения необходимо очищать движения текущего документа по регистру.
Код такой:
Движения.НазваниеРегистра.Записывать = Истина;
Движения.НазваниеРегистра.Очистить();

Этот кусок текста статьи мне однозначно говорит о том, что очистка движений выполняется двумя строками кода, хотя первая строка не относится к очистке.
hame1e00n; +1 Ответить
91. Sibiryak (Sibiryak) 07.01.16 12:50
Возможно, что в процессе проведения нужно будет анализировать записи по этому регистру.
Так вот, чтобы при анализе текущие записи (старые, до изменения документа) точно не попали в выборку, к приведенным двум строчкам можно добавить еще одну:
Движения.НазваниеРегистра.Записать();
Или же при анализе записей явно указывать границу, не включающую момент времени текущего документа.


>можно добавить еще одну: Движения.НазваниеРегистра.Записать();
Не можно, а нужно.

>Или же при анализе записей явно указывать границу, не включающую момент времени текущего документа.
Это получение остатка на момент времени документа, объект "Граница" можно не использовать.
Но данный способ можно использовать только тогда, когда моменты времени движений документа и самого документа совпадают. Например, если мы перед запросом к регистру запишем новые движения документа.
Если движения не были записаны, и время документа изменилось в будущее (в т.ч. при оперативном проведении), то на момент времени документа его старые движения будут получены.
Т.о, если предполагается обращение к данным регистра, в котором не должны учитываться движения текущего документа, код очистки записей регистра такой:
Движения.НазваниеРегистра.Очистить(); // эта строка нужна, если движения были считаны из БД.
Движения.НазваниеРегистра.Записать();
hame1e00n; +1 Ответить
92. Игорь Лисицкий (lisrws) 25.08.16 21:29
В 21 посте, если я правильно понял, имелось ввиду свойство дока, которое я отметил на скрине.

сам давно экзамен сдавал, если не сложно, проясни разницу между включением этого свойства и строками:
Движения.НазваниеРегистра.Записывать = Истина;
Движения.НазваниеРегистра.Очистить();
Движения.НазваниеРегистра.Записать();

А то методики они новые требуют. понапридумывали, что сами путаются... релизы без косяков делать бы научились сперва
Прикрепленные файлы:
93. Александр Скоков (skalex) 02.11.16 11:28
Здравствуйте.
Поддержу вопрос, заданный в предыдущем посте. Очень интересно свойство документа «Удаление движения», а именно поведение документа при различных его значениях и необходимость использования описанных выше трех строк. Если не сложно дайте, пожалуйста, развернутый ответ.

И еще один вопрос, по поводу трех строк. На сколько, всё-таки, уместна строчка:
Движения.НазваниеРегистра.Очистить();
Легко проверить, что при использовании следующей записи:
Движения.НазваниеРегистра.Записывать = Истина; 
Движения.НазваниеРегистра.Записать();

Результат будет абсолютно идентичный записи:
Движения.НазваниеРегистра.Записывать = Истина; 
Движения.НазваниеРегистра.Очистить(); 
Движения.НазваниеРегистра.Записать();

Про то, что указанные куски кода аналогичны, и запись Очистить() лишняя, написано много (при желании легко найти данную информацию). Может быть, данная строка используется для некой оптимизации? Т.е. при ее использовании повышается скорость записи или же мы получаем другие не очевидные плюсы? Просьба не оставлять мои вопросы без ответа. Всем заранее спасибо.
94. Анатолий (hame1e00n) 05.11.16 23:48
(93) skalex, нет, оптимизация не преследовалась. Принудительно специально очищал движения, так как был замечен следующий баг в платформе - в толстом клиенте без предварительной очистки движений они добавлялись к уже существующим, то есть дублировались. Чтобы не столкнуться с этой ситуацией (ведь заранее неизвестно в толстым или тонком клиенте будет запускать конфигурацию проверяющий) и была добавлена эта строчка. В режиме тонкого клиента, как вы и заметили, при перепроведении старые движения очищались корректно. Как сейчас обстоят дела с этим, не знаю. Возможно, что и в толстым клиенте таких проблем нет, тогда эту строчку действительно можно не использовать.
Для написания сообщения необходимо авторизоваться
Прикрепить файл
Дополнительные параметры ответа