Экзамен "1С:Специалист" по платформе 8.3 - заметки для успешной сдачи (обновлено 20.08.2014)
Разработка - Подготовка к аттестации
Если моя публикация Вам полезна, не забудьте поставить плюсик :-)
Рекомендую также дополнительно ознакомиться с этими публикациями на этом сайте:
//infostart.ru/public/102366/
//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: Коллеги, если у кого-нибудь есть еще какая-либо полезная информация по подготовке к экзамену и сдаче, просьба писать в комментариях, дополним статью.
Вступайте в нашу телеграмм-группу Инфостарт
Сертификация Специалист Экзамен 1С
Вы можете заказать платную адаптацию этой статьи под ваши задачи на «Бирже заказов».
- 0% комиссии — оплата напрямую исполнителю;
- Исполнители любого масштаба — от отдельных специалистов до команд под проект;
- Прямой обмен контактами между заказчиком и исполнителем;
- Безопасная сделка — при необходимости;
- Рейтинги, кейсы и прозрачная система откликов.
См. также
Подготовка к аттестации Разработчик Стажер 1С:Предприятие 8 1C:Бухгалтерия Платные (руб)
Обучающая программа 1С Online представляет собой интерактивное изучение языка запросов с самого начала:
- 50 практических заданий с различным уровнем сложности;
- Методические материалы по практике написания запросов;
- Описание назначения таблиц и индексов 1С Предприятие 8;
- Методика решения реальных задач запросом 1С;
- Автоматическая система проверки решений с указанием ошибок;
- Инструкции по решению задач с разъяснениями;
- Техническая поддержка пользователей.
Тренажер запросов подходит для начинающих и действующих разработчиков 1С
5094 руб.
11.02.2014 89279 121 15
Подготовка к аттестации Разработчик Стажер 1С 8.3 Россия Абонемент ($m)
Экзамен 1С:Специалист по платформе 8.3. Решения билетов экзамена (Июнь 2026). В публикации собраны базы с решениями билетов, задачи которых аналогичны экзаменационным. Решения выполнены в соответствии с требованиями и рекомендациями учебного центра (курсы подготовки к экзамену). Решено на актуальной на 2026 каркасной конфигурации "new_carcass_8_3_25_1445".
1 стартмани
10.06.2026 5854 104 RosinMaksim 49
Математика и алгоритмы Механизмы платформы 1С Подготовка к аттестации Разработчик Стажер 1С 8.5 Бесплатно (free)
Платформа 1Craft[Code] — это, по сути, профессиональный тренажёр для тех, кто хочет наконец-то перестать бояться кода 1С и начать писать его уверенно. Здесь нет скучной теории — сразу практика, сразу дело.
05.06.2026 8182 burni4 17
Подготовка к аттестации Разработчик Стажер 1С 8.3 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 Россия Абонемент ($m)
Предлагается ряд опытных задач, который позволит оценить ваш уровень компетенции как программиста
2 стартмани
20.02.2026 6779 19 aximo 53
Подготовка к аттестации Разработчик Стажер 1С 8.3 Россия Бесплатно (free)
Представьте ситуацию. Вы по каким-либо причинам ищете работу. Приходите на собеседование, и с вами проводят техническое интервью. Вы хороший специалист, но уже несколько лет не проходили технических собеседований. Естественно, волнуетесь, испытываете стресс, теряетесь. Не можете ответить на элементарные вопросы. Возможно, какие-то ответы просто забыли или чем-то просто не пользовались и поэтому забыли.
13.01.2026 7457 770 cheshirshik 6
Подготовка к аттестации Разработчик Стажер 1С:Предприятие 8 Россия Бесплатно (free)
Установим основные параметры, сделаем тексты удобочитаемыми, создадим копипастом подсистемы и группы команд, настроим консоль запросов.
07.07.2025 17971 cargobird 15
Подготовка к аттестации Разработчик 1С:Предприятие 8 1С:ЗУП Бесплатно (free)
Рассказываю, как готовилась и сдавала, а ещё об изменениях в работе после получения сертификата. Делюсь советами и наблюдениями.
04.02.2025 8727 AlexeyPROSTO_1C 4
Подготовка к аттестации Разработчик Россия Бесплатно (free)
Источники информации для подготовки к Эксперту.
18.12.2024 20852 GraVVitY 62
...
Решается следующим условием в самом запросе:
Номенклатура = &Номенклатура ИЛИ &Номенклатура = Значение(Справочник.Номенклатура.ПустаяСсылка)И непопаданием в индекс (вы же не забыли проиндексировать реквизит "Номенклатура"?)
Условия вида "а или б" неэффективно используют индексы.
В данном случае, поле "Номенклатура" нужно проиндексировать ибо "В задачах получения данных из информационной базы установка отборов по неиндексированным полям -0,5". Приведенное условие эффективней всего отработает при "ГДЕ Номенклатура = &Номенклатура". С другой стороны при пустой номенклатуре индекс вообще не используется, т.к. попросту не нужен. Приведенное решение ухудшает выполнение запроса с заполненной номенклатурой, а при пустой номенклатуре никакого влияния не оказывает, т.к. оптимизатор отбросит условие "Х или истина".
Т.е. оптимальным будет:
Если ЗначениеЗаполнено(Номенклатура) Тогда
Запрос.Текст = Запрос.Текст + " ГДЕ Номенклатура = &Номенклатура";
Запрос.УстановитьПараметр("Номенклатура", Номенклатура);
КонецЕсли;
С появлением объектной модели запроса в 8.3.5 условие можно будет добавлять безопаснее:
Если ЗначениеЗаполнено(Номенклатура) Тогда
Запрос1.Отбор.Добавить("Номенклатура = &Номенклатура");
Запрос.УстановитьПараметр("Номенклатура", Номенклатура);
КонецЕсли;
Поэтому - спасибо, конечно, и поздравляю со счастливым случаем под названием "удалось сдать". Мне вот за 5 раз не удалось, хотя платформу, как выяснилось, знаю получше иных сдавших. Найденные решения рассмотрю, авось что пригодится в реальной практике.
Кстати на очной аттестации никто вам не запрещает по дискутировать с экзаменатором. Свою точку зрения отстоять можно - проверенный факт. А вот на дистанционной аттестации все не так радужно.
(14) Не понятно почему нельзя устанавливать параметры виртуальной таблицы на реквизиты/ресурсы для получения среза последний.
Само требование ересь, особенно если знать как устроены регистры сведений.
(17) Это абсолютная глупость из-за которой возникают лишние блокировки. За это целесообразно 0,5 бала снимать сразу. Я бы вообще выгонял бы с экзамена.
(25) Если бы ты не добавил слово "Имхо", то лежал бы я под столом. Ладно еще познаешь дзен ).
Движения.НазваниеРегистра.Очистить(); - это лишнее.
(30) Мда.... верх заблуждения. Ставим мы БлокироватьДляИзменения или не ставим система заблокирует записи в любом случае. БлокироватьДляИзменения это не управляемая блокировка это другое ). Данное свойство необходимо только при использовании разделителей.
Движение.График = ТекСтрокаОсновныеНачисления.График;
Движение.Параметр = ТекСтрокаОсновныеНачисления.Параметр;
Движение.График = Справочники.Графики.Шестидневка;
Согласен-сам столкнулся с этим недавно.
спасибо за статью.
есть же свойства Записывать движения при проведении и Удаление движений
я всегда, если не предполагается в документе непосредственное изменение движений пользователем, использую автоматические режимы (удалять автоматически и Записывать модифицированные)
Вообще существует очень много способов работы с движениями документов из-за достаточно большого количества настроек.
Но анализируя форумы и решения других участников пришел к выводу, что все используют именно этот код.
1. Если мне не изменяет память в режиме толстого клиента, если движения не очистить, то при проведении движения задублируются и будут дублироваться каждый раз при проведении - вот такая особенность. Очистки не происходит в этом режиме, а движения просто добавляются к существующим. В тонком клиенте такой проблемы нет. Но чтобы не зависеть от того, в каком режиме пользователь запустил систему, очищаем записи в процедуре обработки проведения перед работой с регистром:
Движения.НазваниеРегистра.Очистить();
То есть очищаем набор записей движений текущего документа.
А далее в этот набор будем добавлять записи.
2. Кроме того, может быть и еще одна проблема. Во многих случаях требуется сначала проанализировать например остатки по складу, а затем уже делать движения в соответствии с этой информацией.
И если документ до этого был проведен и соответственно сделал движения по регистру, то при проверке остатков на складе будет уже меньше с учетом его прежних движений. Тут можно либо просто очистить движения по этому регистру в самом начале процедуры, либо получать остатки на границу времени, исключая сам документ.
Поэтому я еще и добавляю строчку:
Движения.НазваниеРегистра.Записать();
************************************************************************************
Насчет того, зачем нужно свойство Движения.НазваниеРегистра.Записывать
Тут следует сказать о том, как происходит запись движений.
А она может происходить двумя способами:
1. Движения.НазваниеРегистра.Записать()
Первый способ записывает движения только какого-то одного регистра.
2. Движения.Записать()
Второй - по всем регистрам. Но(!) только по тем, у которых установлен в коде признак Движения.НазваниеРегистра.Записывать = Истина.
При вызове этого метода по всем регистрам у которых установлено Записывать = Истина происходит запись и одновременно этот флаг сбрасывается: Записывать = Ложь.
Таким образом, при следующем вызове Движения.Записать() если по регистру не установить Записывать = Истина, то записи не произойдет.
Очень важно, что по умолчанию этот флаг сброшен.
И еще очень важно, что метод Движения.Записать() вызывается системой автоматически в конце процедуры обработки проведения.
Это сделано для более гибкой работы с движениями и чтобы система лишний раз не производила работу по записи движений.
Например, есть у тебя 5 регистров, но тебе нужно сначала записать по первым трем, а потом анализируя данных из них сделать движения в два других.
В коде делаешь движения по первым трем (перед работой с ними устанавливаешь для каждого из них Записывать = Истина).
Потом просто вызываешь Движения.Записать().
Запись происходит только по этим трем. Флаг Записывать по каждому регистру система сбрасывает в Ложь.
Далее работаешь с двумя другими. Также перед работой с ними устанавливаешь для каждого из них Записывать = Истина. Вызываешь Движения.Записать(). Запись происходит только по этим двум.
Какой плюс и зачем это было сделано - система не записывает каждый раз все движения, а только нужные.
Более того, можно вообще не указывать Движения.Записать() - в конце процедуры этот метод система вызовет автоматически для тех регистров, по которым Записывать = Истина.
То есть в нашем случае для последних двух регистров мы его могли явно не вызывать.
Поэтому при работе с движениями каждого регистра имеет смысл устанавливать Записывать = Истина, иначе записи не произойдет.
Ну только если указать явно Движения.НазваниеРегистра.Записать() - так да, запишется.
Возможно, что когда-то эта методика изменится, какое-то свойство добавится или еще что-то случится, но сейчас так:
Перед началом работы с регистром на автомате пишешь так:
Движения.НазваниеРегистра.Записывать = Истина;
Движения.НазваниеРегистра.Очистить();
И можно еще чтобы не было проблем с существующими текущими движениями при анализе остатков по этому регистру перед записью:
Движения.НазваниеРегистра.Записать();
Далее принудительно можешь не вызывать в конце Движения.Записать() - все движения со взведенным флагом Записывать = Истина запишутся автоматически
Пара дополнений:
1. Есть гугл док, с текстами актуальных билетов. Там можно задать вопрос, постоянно тусуется в документе около 30 человек, да и там все подводные камни уже расписаны; Ссылку приводить не буду, очень легко ищется на сайте Чистова;
2. В расчетных задачах, в ряде задач есть формулировка "Позволить пользователю редактировать результат", что говорит о том, что расчет, производится по кнопке на форме , просьба особо камнями не кидать, сам нашел подобное решение, в одной из решенных задач на форуме Чистова, если кто то подтвердит или опровергнет, очень поможете:
Собственно Принцип самой конструкции;
1. Вызывается по кнопке из формы, располагается в модуле документа, естественно выполняется на сервере;
2. Процедура выполняется в транзакции,
3. Стандартные запись и очистка движений;
4. Расчет и запись результата в таб часть документа;
5. Фиксация транзакции, очистка движений;
При проведении, записываются уже рассчитанные результаты, из табличной части;
А все переменные лучше называть просто а1, а2 и т.д., оч быстро пишется.
#Сарказм
В любом случае, при проверке экзамена не проверяется орфография и смысловая нагрузка идентификаторов, главное, чтобы все работало.
Но мои рекомендации помогут сэкономить время)))
Времени всегда не хватает, ни на экзамене ни на проекте, но это ж не повод, понравится - привыкнешь, потом долго отвыкать ))
Есть два способа блокировки данных, выбор между ними зависит от методики проведения - старой или новой:
1) Обычная управляемая блокировка, старая методика проведения документа (объект БлокировкаДанных)
Устанавливается в случае, если сначала идет проверка остатков, а затем списание.
В том случае, когда нам для формирования движения необходимо иметь какую-то информацию из регистра.
Пример:
Рассмотрим операцию реализации товара.
В документе - количество, в регистре - количество и сумма (себестоимость)
Так вот, количество товара мы знаем из документа - сколько списываем, а себестоимость - нет.
Мы можем ее узнать только из регистра, но для того, чтобы никто не изменил регистр между моментом получения остатков и моментом записи движений, нам необходимо еще до чтения остатков заблокировать регистр.
Так вот, в этом случае и используется объект БлокировкаДанных. И при его создании правильнее указать по каким измерениям мы блокируем регистр (например в нашем случае - только по указанной в документе номенклатуре) - чтобы не было излишних блокировок и другой пользователь смог продавать другую номенклатуру.
То есть последовательность такая:
1. Устанавливаем блокировку с помощью объекта БлокировкаДанных
2. Читаем остатки
3. Проверяем возможность списания
4. Формируем движения, к примеру списываем товар
5. После проведения документа блокировка автоматически снимается (блокировка действует в рамках транзакции проведения и снимается автоматически системой). То есть как-то специально разблокировать объект не надо.
2) Новая методика проведения документов
Используется в случае, если нам для формирования движений не нужна информация из регистров, а проверить не ушли ли мы в минус при списании мы сможем, если после записи посмотрим остатки по регистру и увидим что есть отрицательные. В этом случае, мы поймем, что списали лишнее и отменим операцию списания.
Пример:
Рассмотрим операцию реализации товара.
В документе - количество, в регистре - только количество
Так вот, количество товара мы знаем из документа.
Мы формируем движения с указанным в документе количеством и записываем их. Далее читаем регистр, смотрим остатки, анализируем - есть ли отрицательные. Если есть выводим ошибку и ставим Отказ = Истина.
То есть последовательность такая:
1. Для регистра устанавливаем свойство БлокироватьДляИзменения = Истина
2. Формируем движения - списываем товар
3. Записываем движения
4. Читаем регистр, смотрим, чтобы не было отрицательных остатков. Если есть - то списали лишнее, если нет - то все нормально.
Так вот, в этом случае нет необходимости указывать по каким измерениям нам надо блокировать регистр.
Мы просто устанавливаем свойство БлокироватьДляИзменения = Истина до записи наших движений, формируем движения и записываем.
Система сама заблокирует регистр в момент записи по тем измерениям, которые надо, проанализировав то, что мы записали.
После проведения блокировка снимется.
Этот вариант (второй) проще, называется "новая методика проведения документов" и 1С рекомендует использовать именно его в случае возможности и снимает баллы, если используется первый вариант, но в некоторых случаях его просто невозможно применить и используется первый вариант с объектом БлокировкаДанных (см. приведенный выше пример).
спасибо за такое детальное объяснение, но дело в том, что я в общем-то уже имею этот сертификат и прекрасно знаю, какие есть методики проведения :) не стоило.
Вы допустили одну ошибочку,
То есть последовательность такая:
1. Устанавливаем блокировку с помощью объекта БлокировкаДанных
2. Читаем остатки
3. Проверяем возможность списания
На самом деле перед этими действиями надо очистить движения
Движения.НазваниеРегистра.БлокироватьДляИзменения = Истина;
Движения.НазваниеРегистра.Записывать = Истина;
Движения.НазваниеРегистра.Очистить();
Движения.НазваниеРегистра.Записать();
Как-то так:) именно это я имел в виду, но надо было уточнить, что это про старую методику проведения.
и вообще это потенциальная ошибка. Ведь если документ перепроводится и в нем меняется состав ТЧ, то при простой блокировке данных вы заблокируете движения только по новому составу ТЧ, но надо блокировать и по старому.
"hame1e00n, не совсем :) во втором случае из вашего примера, движения надо очищать, но не записывать. А в первом случае, собственно к чему я всё это и писал, вы не написали Движения.НазваниеРегистра.БлокироватьДляИзменения = Истина;
и вообще это потенциальная ошибка. Ведь если документ перепроводится и в нем меняется состав ТЧ, то при простой блокировке данных вы заблокируете движения только по новому составу ТЧ, но надо блокировать и по старому."
1. Чуть выше написал, зачем записываю очищенные движения - чтобы в регистре не было информации по старым движениям документа.
2. При указании БлокироватьДляИзменения = Истина, регистр блокируется в момент записи по набору ключевых полей записываемых данных, а если мы их уже исправили, то набор будет новый. Но у нас и так есть блокировка с помощью объекта БлокировкаДанных с указанием этих измерений.
То есть: Дублируется блокировка
Или же делать такую блокировку и запись старого набора еще до очистки движений - по старому набору и его записывать, но в приведенном Вами коде этого нет. Если же просто как в приведенном Вами коде указать БлокироватьДляИзменения = Истина без записи, то блокировки все равно не будет.
Подтверждение моих слов из СП по поводу свойства БлокироватьДляИзменения:
"Устанавливает режим, при котором в процессе записи набора будет установлена управляемая блокировка для всех комбинаций измерений в соответствии с записями набора записей. Имеет смысл использовать, если проверка итогов регистра выполняется после записи и заблокировать нужно именно те комбинации, по которым записываются записи. В этом случае можно не использовать объект БлокировкаДанных."
Мне кажется преподаватель не упустит случая снять баллы.
По поводу "и вообще это потенциальная ошибка. Ведь если документ перепроводится и в нем меняется состав ТЧ, то при простой блокировке данных вы заблокируете движения только по новому составу ТЧ, но надо блокировать и по старому."
Да, возможно, что по хорошему надо все проверять, но мне кажется это чересчур - я при подготовке не встречал подобных решений.
Если так рассуждать, то хорошему блокировать нужно регистр и в момент прихода товара, но я этого не видел в решениях.
Блокировался регистр только в момент проведения документа списания, а вернее правило такое:
"Блокировать нужно в том случае, если текущее состояние регистра влияет на формирование новых движений"
Как пример: посмотрели, что товара хватает в остатках, заблокировали регистр, чтоб другой пользователь не мог его списать, сделали списание :-)
Движения.НазваниеРегистра.БлокироватьДляИзменения = Истина;
Движения.НазваниеРегистра.Записывать = Истина;
Движения.НазваниеРегистра.Очистить();
Движения.НазваниеРегистра.Записать();Вот в момент записи(очистки движений) заблокируется старый набор движений. Приведу пример зачем это надо.
К примеру у вас есть документ 1, в нем вы продаете 10 яблок.
Вдруг вы решили, что в этом документе на самом деле вы продаете 10 груш, заходите в документ и изменяете яблоки на груши.
Следуя вашему коду мы очищаем движения, в регистре снимается расходная проводка на 10 яблок, после этого вы накладываете блокировку по грушам. И всё здорово, но что если
1. Устанавливаем блокировку с помощью объекта БлокировкаДанных
2. Читаем остатки
3. Проверяем возможность списания
4. Формируем движения, к примеру списываем товар
5. После проведения документа блокировка автоматически снимается (блокировка действует в рамках транзакции проведения и снимается автоматически системой). То есть как-то специально разблокировать объект не надо.
Где-то между пунктами 1-5 другой человек заходит в другой документ и продает 10 яблок. И проводит эту операцию успешно, ведь яблоки не заблокированы. И по прежнему в общем-то ничего страшного.
А вот теперь страшно :) вдруг оказывается, что груш у вас нет на складе и на шаге 3 вы выставляете отказ в истину и отменяете транзакцию. И у вас получается -10 яблок на складе...такие дела.
"Движения.НазваниеРегистра.БлокироватьДляИзменения = Истина;
Движения.НазваниеРегистра.Записывать = Истина;
Движения.НазваниеРегистра.Очистить();
Движения.НазваниеРегистра.Записать();
Вот в момент записи(очистки движений) заблокируется старый набор движений. Приведу пример зачем это надо.
К примеру у вас есть документ 1, в нем вы продаете 10 яблок.
Вдруг вы решили, что в этом документе на самом деле вы продаете 10 груш, заходите в документ и изменяете яблоки на груши. "
Я понял и раньше о какой ситуации Вы говорите :-)
Откуда уверенность, что заблокируется старый набор записей? ИМХО, ничего не заблокируется - вы попытаетесь заблокировать по набору измерений, но блокировать нечего - движения то вы очистили. Разве нет?
Говорю ж, тогда по идее надо записывать старый набор записей перед очисткой, но ИМХО это - чересчур, очень легко можно нахватать штрафных баллов (преподаватель может не понять), по моему 0.5 за каждую лишнюю запись движений.
нет, как раз заблокируется старый набор движений. Весьма уважаемый Павел Чистов, вроде бы тоже писал об этом :) это тонкий момент, безусловно, но это - правильно. Да и не я это придумал, я тоже много готовился и находил информацию, что надо блокировать старый набор движений.
И да, я только что провел небольшой тест, который это подтвердил :) выставил время ожидания на блокировке 20с, сделал цикл работающий 25с после блокировки. Сначала провожу одну реализацию, в которой Товар1 и Товар3, после этого удаляю товар1 и перепровожу. В момент перепроведения создаю новый документ(в другом сеансе), в котором продаю товар1, через 20с сеанс вываливается с ошибкой превышения времени ожидания на блокировке.
Вывод -
Движения.НазваниеРегистра.Записывать = Истина;
Движения.НазваниеРегистра.Очистить();
Движения.НазваниеРегистра.Записать();
Блокирует записи по старому набору движений.
ЗЫ Кстати и правда, у Павла Чистова именно это и написано в статье, которую прежде всего рекомендуется прочитать.
Ооо, спасибо за такое подробное описание и за ссылку))) Почитаю :-)
Но для экзамена это наверное слишком тонкий момент, в его видеоуроках я такого не видел (я проходил курс).
Но все равно, всем готовящимся думаю будет полезно иметь представление об этом моменте, хотя бы чтобы ответить преподавателю, если будут какие-то вопросы по блокировкам.
:-)
В чём ошибка использования данного свойства и отказа от использования предлагаемого автором способа с "Записывать = Истина" ? Или автор об этом просто не знал?
"Коллеги! Я вот выбираю любой документ, нажимаю Alt-Enter и там есть параметр "Запись движений при проведении", который обычно стоит в значении "Записывать модифицированные" и избавляет от геморроя с отметкой каждого набора записей, который нужно записывать.
В чём ошибка использования данного свойства и отказа от использования предлагаемого автором способа с "Записывать = Истина" ? Или автор об этом просто не знал?"
Из СП:
"ЗаписыватьВыбранные (WriteSelected)
Описание:
Перед началом проведения документ устанавливает всем наборам записей, участвующим в регистрации движений, свойство Записывать в Ложь."
"ЗаписыватьМодифицированные (WriteModified)
Описание:
Все наборы записей, участвующие в регистрации движений документа имеют значение свойства Записывать установленным системой по умолчанию в Истина."
Что значит "обычно"? Создайте новый документ - по умолчанию стоит как раз "Записывать выбранные".
Если будете использовать способ "Записывать модифицированные", то в случае, если при проведении надо несколько раз производить запись (а такие задачи есть), нужно будет писать тоже самое, но только писать Записывать = Ложь для тех регистров, которые не надо записывать, чтоб лишний раз не писать в них.
Чуть выше описал пример использования этого свойства, когда производится запись движений в несколько этапов.
По моему скромному мнению, лучше делать однотипно, как хочет 1С и как она принимает.
Я не спорю, что могут быть другие варианты, возможно в каких-то ситуациях более оптимальные (хотя не уверен), но думаю преподаватель не будет особо разбираться во всех тонкостях. Если для него решение будет очень сильно отличаться от типично правильного, то он может посчитать, что Вы сделали неправильно.
Но вот такие вот вещи как
напрочь убивает любое желание даже начинать готовиться. Нельзя же так просто всех принуждать, а то ведь нехорошо это как то.
И ещё изменение, как это было анонсировано, что вырастет число задач и билеты будут не одинаковыми, а будут формироваться перед экзаменом из разных частей.
Можно ) ничего нехорошего в этом нет. Вы же сдаете экзамен на УФ, а не в обычных. Так же и тут просто требование времени.
"на сколько я понимаю - главные изменения это отказ от модальности, но в этом экзамене вроде бы нет ситуаций, когда это может потребоваться."
Есть, задача по работе с картинками, но это наверное единственная задача.
У Павла Чистова есть подробная статья как работать с диалоговыми окнами в новом режиме отказа от модальности.
Но я, честно говоря, не стал заучивать как это делается - очень мала вероятность что эта задачка попадется.
+ использование интерфейса Такси, но как я уже говорил разрабатывать на нем задачи очень неудобно, лучше переключить, но в требованиях четко завялено, что проверяется умение работать в этом интерфейсе, поэтому переключить назад на Такси интерфейс нужно обязательно, иначе снимут балы. Будет очень обидно из-за такой мелочи, по сути ничего не значащей...
И да, обещают вроде сборник, где количество задач увеличат.
Я сдавал совсем недавно - пятой задачи по управляемым формам не было, по ОУ, БУ, БП задачи из сборника, а вот по расчету зп такое ощущение задача упрощена была.
В общем задачи попались не сильно объемные и сложные, но вот компы - очень плохие, мышка вообще никакая - сдавал удаленно, еле успел из-за этого.
Не понимаю.. У этой же конторы денег хватает.. неужели не обновить компьютерный класс, чтобы не на висячих компах сдавать))))
А если б не очно, да без желания что-то доказывать - нафиг надо. Мне вот просто противно стало с этим связываться. Тем более, когда дипломированный "спец" по платформе спрашивает меня, "а чо такое агрегаты", даже как-то приятно, что я на это дело плюнул.
Ну вот и я о том же, что надо делать так, как они хотят видеть, чтобы сдать.
Можно сделать своеобразно, но правильно, но они могут этого не понять. Поэтому лучше не выделываться и делать как они хотят
Я писал про Специалиста по платформе, про ЗУП ничего ни хорошего, ни плохого сказать не могу. Агрегаты на экзамене по платформе не рассматриваются, так для информации.
Если считаете себя правильным и всезнающим, возьмите и сдайте на Спеца без лишних слов и взаимных обвинений. Это у многих получилось, и не нужно здесь искать себе оправданий... Это лишь Ваше мнение. С нами сдавал программист, который делал уже 6-ую попытку - все относительно.
Считаю несколько неуважительным полное отсутствие каких-либо ссылок на официальные источники от фирмы 1С в статье. Вы программируете на 1С, а не на C# или Java, нужно уметь уважать того, кто дает Вам работу. Вас бы не было, если бы не было фирмы 1С. Данное обстоятельно можно считать отсутствием объективности в обсуждениях по данной теме.
Так что это всё зависит от того..КАК ты сдаешь)
Спасибо автору!!!
Результат = Запрос.Выполнить();
Если Не Результат.Пустой() Тогда
Выборка = Результат.Выбрать();
Выборка.Следующий();
МетодСписанияСебестоимости = Выборка.МетодСписанияСебестоимости;
КонецЕсли;
Показатьзаменил на:
ТРезультат = Запрос.Выполнить().Выгрузить();
МетодСписанияСебестоимости = ?(ТРезультат.Количество(), ТРезультат[0].МетодСписанияСебестоимости, Неопределено или же ПустоеЗначениеТипа);
У меня по заданию в о/у два регистра - складской (Ном., Склад, Кол-во) и для партий без учета складов, надо сделать парт. списание.
Сделал, как уже выработался рефлекс у собаки Павлова - записал набор в складской, если минусов нет - запрос и списываю партии. На что экзаменатор сказал - "а вы что, считаете, что в вашем случае это будет эффективней старой методики?". И тут сложно поспорить, но после всех источников информации и после курсов я это сделал с полной уверенностью.
Еще лажанулся в чтении задания и в б/у сделал субконто Склад суммовое, а списание себестоимости должно быть только партионное. И вообще, билет был очень странный, т.к. сейчас они генерятся рандомно - у меня по факту в б/у и о/у абсолютно одинаковые задания списания по партиям. А доп. задачи на упр. формы вообще не имели отношения к тем объектам, которые были в базе созданы и использованы. В итоге 3.
Преподаватель вообще не открывал польз. режим, так что мои идеально сделанные отчеты (с оформлением 1 в 1 как в задании) даже не смотрел. Опять же, его коллега, который тоже принимает экзамены, на курсах уделял немало времени оформлению интерфейса как в задании и говорил, что это важно.
Курс Чистова мне помог, но его решения сложно назвать эталонными с т.з. 1С. Я его почти весь прошел, но сначала решал сам, потом уже смотрел, как он делает. Было полезно.
Резюмируя, я бы настоятельно рекомендовал пройти какой-то курс от 1С, либо курс по платформе, либо курс-консультация к экзамену. За время подготовки ни одного "чужого" решения из Интернета не смотрел, чему и рад.
Дорогое это удовольствие курсы. Максимум, можно веб-курс за 2100р. позволить (чего я по ЗУП 3.1 и сделал).
Платформу 8 сдавал в 2009. Там пять билетов "бумажных" было и 4 часа.
2. В расчетных задачах, в ряде задач есть формулировка "Позволить пользователю редактировать результат", что говорит о том, что расчет, производится по кнопке на форме , просьба особо камнями не кидать, сам нашел подобное решение, в одной из решенных задач на форуме Чистова, если кто то подтвердит или опровергнет, очень поможете:
Собственно Принцип самой конструкции;
1. Вызывается по кнопке из формы, располагается в модуле документа, естественно выполняется на сервере;
2. Процедура выполняется в транзакции,
3. Стандартные запись и очистка движений;
4. Расчет и запись результата в таб часть документа;
5. Фиксация транзакции, очистка движений;
При проведении, записываются уже рассчитанные результаты, из табличной части;
Если ЗначениеЗаполнено(Номенклатура) Тогда
Запрос1.Отбор.Добавить("Номенклатура = &Номенклатура");
Запрос.УстановитьПараметр("Номенклатура", Номенклатура);
КонецЕсли;
расскажите пожалуйста подробнее про объектную модель запроса
на 8.3.5 не нашел у запроса свойства "отбор"
вот тут прочитал про объектную модель схемы запроса
если в вашем коде используется она, просьба привести полный код, т.е. создание схемы запроса и т.д.
// Создаем объект Запрос.
Запрос = Новый Запрос;
Запрос.Текст = "...";
// Создаем объект Схему запроса и устанавливаем текст запроса.
СхемаЗапроса = Новый СхемаЗапроса;
СхемаЗапроса.УстановитьТекстЗапроса(Запрос.Текст);
// Добавляем отбор в первый запрос пакета.
ОператорыЗапроса = СхемаЗапроса.ПакетЗапросов[0].Операторы;
ОператорыЗапроса[0].Отбор.Добавить("ВсевдонимТаблицы.Номенклатура= &Номенклатура");
//Возвращаем итоговый текст запроса.
Запрос.Текст = СхемаЗапроса.ПолучитьТекстЗапроса();
// Устанавливаем значение нового параметра
Запрос.УстановитьПараметр("Номенклатура", Номенклатура);
//...
// Код выполнения запроса и обработки результата ПоказатьНо я везде просто указывал сразу конструкцию из этих трех строчек:
Движения.НазваниеРегистра.Записывать = Истина;
Движения.НазваниеРегистра.Очистить();
Движения.НазваниеРегистра.Записать();
Именно в этом месте движения очищаются одной строкой:
Движения.НазваниеРегистра.Записать();Строка "Движения.НазваниеРегистра.Записывать = Истина;" к очистке записей вообще никакого отношения не имеет.
Я и не писал, что это делает конкретно эта строка.
В публикации писал, что такой набор из трех строк использовал в качестве стандартного при формировании движений по регистрам в момент проведения.
Каждая из них несет свой смысл.
Да, в публикации подробнее описал зачем нужны две другие строки, но это не делает эту ненужной.
Во-вторых,
(89)
Цитата из текста публицации:
Код такой:
Движения.НазваниеРегистра.Записывать = Истина;
Движения.НазваниеРегистра.Очистить();
Этот кусок текста статьи мне однозначно говорит о том, что очистка движений выполняется двумя строками кода, хотя первая строка не относится к очистке.
Так вот, чтобы при анализе текущие записи (старые, до изменения документа) точно не попали в выборку, к приведенным двум строчкам можно добавить еще одну:
Движения.НазваниеРегистра.Записать();
Или же при анализе записей явно указывать границу, не включающую момент времени текущего документа.
>можно добавить еще одну: Движения.НазваниеРегистра.Записать();
Не можно, а нужно.
>Или же при анализе записей явно указывать границу, не включающую момент времени текущего документа.
Это получение остатка на момент времени документа, объект "Граница" можно не использовать.
Но данный способ можно использовать только тогда, когда моменты времени движений документа и самого документа совпадают. Например, если мы перед запросом к регистру запишем новые движения документа.
Если движения не были записаны, и время документа изменилось в будущее (в т.ч. при оперативном проведении), то на момент времени документа его старые движения будут получены.
Т.о, если предполагается обращение к данным регистра, в котором не должны учитываться движения текущего документа, код очистки записей регистра такой:
Движения.НазваниеРегистра.Очистить(); // эта строка нужна, если движения были считаны из БД.
Движения.НазваниеРегистра.Записать();сам давно экзамен сдавал, если не сложно, проясни разницу между включением этого свойства и строками:
Движения.НазваниеРегистра.Записывать = Истина;
Движения.НазваниеРегистра.Очистить();
Движения.НазваниеРегистра.Записать();
А то методики они новые требуют. понапридумывали, что сами путаются... релизы без косяков делать бы научились сперва
Поддержу вопрос, заданный в предыдущем посте. Очень интересно свойство документа «Удаление движения», а именно поведение документа при различных его значениях и необходимость использования описанных выше трех строк. Если не сложно дайте, пожалуйста, развернутый ответ.
И еще один вопрос, по поводу трех строк. На сколько, всё-таки, уместна строчка:
Движения.НазваниеРегистра.Очистить();
Легко проверить, что при использовании следующей записи:
Движения.НазваниеРегистра.Записывать = Истина;
Движения.НазваниеРегистра.Записать();Результат будет абсолютно идентичный записи:
Движения.НазваниеРегистра.Записывать = Истина;
Движения.НазваниеРегистра.Очистить();
Движения.НазваниеРегистра.Записать();Про то, что указанные куски кода аналогичны, и запись Очистить() лишняя, написано много (при желании легко найти данную информацию). Может быть, данная строка используется для некой оптимизации? Т.е. при ее использовании повышается скорость записи или же мы получаем другие не очевидные плюсы? Просьба не оставлять мои вопросы без ответа. Всем заранее спасибо.
Рейтинг: 524
Вы можете заказать платную консультацию или разработку у автора. Будет создан приватный заказ на «Бирже заказов» для автора.
№ 291885
Создание 15.07.14 13:24
Обновление 12.02.15 19:56
Просмотры 147697
Загрузки 0
Рейтинг
402
Комментарии 97
Код открыт Не указано
Рубрики Подготовка к аттестации
Кому Разработчик
Тип файла Нет файла
Платформа 1С:Предприятие 8
Конфигурация 1C:Бухгалтерия
Операционная система Не имеет значения
Страна Не имеет значения
Отрасль Не имеет значения
Налоги Не имеет значения
Вид учета Не имеет значения
Доступ к файлу Бесплатно (free)