Несколько рекомендаций готовящимся к 1С:Специалист по Платформе

17.05.12

Разработка - Подготовка к аттестации

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

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

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

2. Запустите хотя бы раз синтакс помощник.  Компы там не шибко мощные, и если СП ни разу не запускался с момента установки/обновления 1С, его индексация занимает время.

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

4.  Создайте сразу подсистемы, этим вы сделаете часть работы которую делать нужно все равно обязательно, однако наглядный интерфейс даже во время разработки упростит вам тестирование. Причем для оптимизации времени, как вариант, можно делать так: создаете подсистему ОперативныйУчет, далее в ней три подсистемы Документы, СправочникиИПланы, Регистры. После этого подсистему ОперативныйУчет раскопируйте еще на две (подчиненные тоже скопируются) и переименуйте в БухгалтерскийУчет и Расчет.

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

 

 ОПЕРАТИВНЫЙ УЧЕТ

 

 6. Новая методика проведения документов. Используется в небольшом проценте задач, однако если попадется, не перемудрите с блокировками, тут ее надо устанавливать при помощи свойства БлокироватьДляИзменения, так же важно включить движения самого документа в запрос по отлову минусов. Пример ниже:

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

|РасходнаяНакладнаяСписокНоменклатуры.Ссылка = &Ссылка

|СГРУППИРОВАТЬ ПО | РасходнаяНакладнаяСписокНоменклатуры.Номенклатура |; | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ | ТоварыНаСкладахОстатки.Номенклатура, | ТоварыНаСкладахОстатки.КоличествоОстаток |ИЗ | РегистрНакопления.ТоварыНаСкладах.Остатки( | &МоментВремени, | Номенклатура В | (ВЫБРАТЬ | втДанныеДокумента.Номенклатура | ИЗ | втДанныеДокумента КАК втДанныеДокумента) | И Склад = &Склад) КАК ТоварыНаСкладахОстатки |ГДЕ | ТоварыНаСкладахОстатки.КоличествоОстаток < 0"; Выборка = Запрос.Выполнить().Выбрать(); Если Выборка.Количество() Тогда
Отказ = Истина; КонецЕсли;

 

7. Правильный порядок расположения операндов при расчете себестоимости. Проблема копеек. Есть мнение, что правильно делать так:

НоваяЗапись.Сумма = Выборка.КоличествоДокумент * Выборка.СуммаОстаток / Выборка.КоличествоОстаток;

То есть, умножение идет перед делением, что обеспечит в случае 3 * 10 / 3 число 10 а не число 9.99999999(9), как может быть при совсем неправильном порядке, однако методически такой способ не считается верным (это слова преподавателя из 1С), во-первых, деление по методике должно идти сначала, но деление не суммы на остаток количества, а количества к списанию на количество остатка, во-вторых, при равенстве количеств, лучше просто взять сумму, поэтому делая так, как ниже, проблем быть не должно:

НоваяЗапись.Сумма = ?(Выборка.КоличествоДокумент = Выборка.КоличествоОстаток, Выборка.СуммаОстаток, 
Окр(Выборка.КоличествоДокумент / Выборка.КоличествоОстаток,2) * Выборка.СуммаОстаток);

 

8. Правильная установка момента времени в качестве параметра запроса при проведении документа. Если документ по вашему решению может проводиться оперативно, то установку параметра для запроса оптимальнее делать так:

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

 


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

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

Движения.ОстаткиНоменклатуры.Записывать = Истина;
Движения.Продажи.Записывать = Истина;

// ТУТ НЕОБХОДИМА УПРАВЛЯЕМАЯ БЛОКИРОВКА

Запрос = Новый Запрос;
Запрос.УстановитьПараметр("Ссылка", Ссылка);
Запрос.УстановитьПараметр("Момент", ?(РежимПроведения=РежимПроведенияДокумента.Оперативный, Неопределено, МоментВремени()));
Запрос.Текст = "ВЫБРАТЬ
 |РасходнаяНакладнаяСписокНоменклатуры.Номенклатура,
 |СУММА(РасходнаяНакладнаяСписокНоменклатуры.Количество) КАК Количество,
 |СУММА(РасходнаяНакладнаяСписокНоменклатуры.Сумма) КАК Сумма
 |ПОМЕСТИТЬ втТаблицаДокумента
 |ИЗ
 |Документ.РасходнаяНакладная.СписокНоменклатуры КАК РасходнаяНакладнаяСписокНоменклатуры
 |ГДЕ
 |РасходнаяНакладнаяСписокНоменклатуры.Ссылка = &Ссылка
 |
 |СГРУППИРОВАТЬ ПО
 |РасходнаяНакладнаяСписокНоменклатуры.Номенклатура
 |;
 |
 |////////////////////////////////////////////////////////////////////////////////
 |ВЫБРАТЬ
 |втТаблицаДокумента.Номенклатура КАК Номенклатура,
 |ОстаткиНоменклатурыОстатки.Партия,
 |ЕСТЬNULL(ОстаткиНоменклатурыОстатки.КоличествоОстаток, 0) КАК КоличествоОстаток,
 |ЕСТЬNULL(ОстаткиНоменклатурыОстатки.СуммаОстаток, 0) КАК СуммаОстаток,
 |втТаблицаДокумента.Количество КАК КоличествоДокумент,
 |втТаблицаДокумента.Сумма КАК СуммаДокумент,
 |втТаблицаДокумента.Номенклатура.ВидНоменклатуры КАК ВидНоменклатуры
 |ИЗ
 |втТаблицаДокумента КАК втТаблицаДокумента
 |ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ОстаткиНоменклатуры.Остатки(
 |&Момент,
 |Номенклатура В
 |(ВЫБРАТЬ
 |втТаблицаДокумента.Номенклатура
 |ИЗ
 |втТаблицаДокумента КАК втТаблицаДокумента)) КАК ОстаткиНоменклатурыОстатки
 |ПО втТаблицаДокумента.Номенклатура = ОстаткиНоменклатурыОстатки.Номенклатура
 |
 |УПОРЯДОЧИТЬ ПО
 |ОстаткиНоменклатурыОстатки.Партия.МоментВремени
 |ИТОГИ
 |СУММА(КоличествоОстаток),
 |СУММА(СуммаОстаток),
 |МАКСИМУМ(КоличествоДокумент),
 |МАКСИМУМ(СуммаДокумент)
 |ПО
 |Номенклатура";
Если РегистрыСведений.НастройкаУчетнойПолитики.ПолучитьПоследнее(Дата).УчетнаяПолитика = Перечисления.УчетнаяПолитика.ЛИФО Тогда
Запрос.Текст = СтрЗаменить(Запрос.Текст,"ОстаткиНоменклатурыОстатки.Партия.МоментВремени",
"ОстаткиНоменклатурыОстатки.Партия.МоментВремени УБЫВ"
); КонецЕсли; ВыборкаНоменклатура = Запрос.Выполнить().Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам,"Номенклатура"); Пока ВыборкаНоменклатура.Следующий() Цикл Себестоимость = 0; Если ВыборкаНоменклатура.ВидНоменклатуры = Перечисления.ВидыНоменклатуры.Товар Тогда КоличествоСписать = ВыборкаНоменклатура.КоличествоДокумент; Если ВыборкаНоменклатура.КоличествоДокумент > ВыборкаНоменклатура.КоличествоОстаток Тогда Отказ = Истина; // Оповестить о нехватке. Продолжить; КонецЕсли; ВыборкаПартии = ВыборкаНоменклатура.Выбрать(); Пока КоличествоСписать > 0 И ВыборкаПартии.Следующий() Цикл НоваяЗапись = Движения.ОстаткиНоменклатуры.ДобавитьРасход(); НоваяЗапись.Период = Дата; НоваяЗапись.Номенклатура = ВыборкаНоменклатура.Номенклатура; НоваяЗапись.Партия = ВыборкаПартии.Партия; НоваяЗапись.Количество = Мин(КоличествоСписать, ВыборкаПартии.КоличествоОстаток); НоваяЗапись.Сумма = ?(ВыборкаПартии.КоличествоОстаток=НоваяЗапись.Количество,ВыборкаПартии.СуммаОстаток,
Окр(НоваяЗапись.Количество/ВыборкаПартии.КоличествоОстаток,2)*ВыборкаПартии.СуммаОстаток); КоличествоСписать = КоличествоСписать - НоваяЗапись.Количество; Себестоимость = Себестоимость + НоваяЗапись.Сумма; КонецЦикла; КонецЕсли; НоваяЗапись = Движения.Продажи.Добавить(); НоваяЗапись.Период = Дата; НоваяЗапись.Номенклатура = ВыборкаНоменклатура.Номенклатура; НоваяЗапись.Количество = ВыборкаНоменклатура.КоличествоДокумент; НоваяЗапись.Сумма = ВыборкаНоменклатура.СуммаДокумент; НоваяЗапись.Себестоимость = Себестоимость; КонецЦикла;

 

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

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

 

БУХГАЛТЕРСКИЙ УЧЕТ

 

11. Правильная организация процедуры ПередЗаписью документа РучнаяОперация, который необходимо реализовывать в любой задаче по бухгалтерскому учету. Процедура, разумеется, модуля объекта документа. Так же стоит помнить, что документу необходимо запретить проведение. 

Процедура ПередЗаписью(Отказ, РежимЗаписи, РежимПроведения)

Проводки = Движения.Управленческий;
Проводки.Записывать = Истина;
Если НЕ Проводки.Модифицированность() И НЕ ЭтоНовый() Тогда
           Проводки.Прочитать();
КонецЕсли;

Для каждого Проводка Из Проводки Цикл
           Проводка.Период = Дата;

 Если НЕ ЭтоНовый() И ПометкаУдаления <> Ссылка.ПометкаУдаления Тогда
                     Проводка.Активность = НЕ ПометкаУдаления;
 КонецЕсли;

КонецЦикла;

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

 

12. Управляемая транзакционная блокировка регистра бухгалтерии. 

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

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

| КорСчет В (Значение(ПланСчетов.Управленческий.Поставщики), Значение(ПланСчетов.Управленческий.ПрибылиУбытки))

 

ПЕРИОДИЧЕСКИЕ РАСЧЕТЫ

 

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

Процедура ПроизвестиРасчетНабора(НаборЗаписей) Экспорт
	
	Регистратор = НаборЗаписей.Отбор.Регистратор.Значение;
	
	Измерения = Новый Массив;
	Измерения.Добавить("Сотрудник");
	Измерения.Добавить("Подразделение");
	
	Запрос = Новый Запрос;
	Запрос.УстановитьПараметр("Регистратор", Регистратор);
	Запрос.УстановитьПараметр("Измерения", Измерения);
	
	///////////////////////////////
	// ПОВТОРЯЕМЫЙ БЛОК
	ВидРасчета = ПланыВидовРасчета.ОсновныеНачисления.Оклад;
	Если НаборЗаписей.ПроверитьНаличиеВидаРасчета(ВидРасчета) Тогда
	
		Запрос.УстановитьПараметр("ВидРасчета", ВидРасчета);		
		
		Запрос.Текст = ""; // ТЕКСТ ЗАПРОСА ДЛЯ КОНКРЕТНОГО ВИДА РАСЧЕТА
		
		Выборка = Запрос.Выполнить().Выбрать();
		
		Для каждого Запись Из НаборЗаписей Цикл
		
			Если Запись.ВидРасчета <> ВидРасчета Тогда
				Продолжить;
			КонецЕсли;
			
			Выборка.Сбросить();
			Если Выборка.НайтиСледующий(Запись.НомерСтроки, "НомерСтроки") Тогда			
				Запись.Результат = 0; // ФОРМУЛА ДЛЯ РАСЧЕТА
			КонецЕсли;
		КонецЦикла;
		
	КонецЕсли;
	///////////////////////////////
	
	НаборЗаписей.Записать(, Истина);
	
	
	// ПОВТОРЯЕМЫЙ БЛОК
	
	НаборЗаписей.Записать(, Истина);
	
	
	// ПОВТОРЯЕМЫЙ БЛОК
	
	НаборЗаписей.Записать(, Истина);	
	
КонецПроцедуры

 Функцию "ПроверитьНаличиеВидаРасчета" имеет смысл разместить в каждом регистре в модуле набора записей. Тогда повторяемые блоки будут универсальными. Сама функция имеет следующий вид:

Функция ПроверитьНаличиеВидаРасчета(ВидРасчета) Экспорт	
	Возврат ?(ЭтотОбъект.ВыгрузитьКолонку("ВидРасчета").Найти(ВидРасчета)=Неопределено,Ложь,Истина);	
КонецФункции


 15.  Заполнение сторно записей для набора записей регистра расчета.

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

16. Разбитие оклада при многократном изменении его значения внутри периода расчета. Вариант получения разбивки прямо в запросе. 

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

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

 

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

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

 

18. "Обеспечить пользователю возможность редактировать результат расчета прямо в документе" - такое условие тоже встречается нередко. В этом случае в форме документа размещается кнопка "Расчет", которая и производит весь расчет. Вариант процедуры модуля формы ниже:

ОбъектСервер = РеквизитФормыВЗначение("Объект");
ОбъектСервер.СформироватьДвиженияДокумента();
	
Расчет.ПроизвестиРасчетНабора(ОбъектСервер.Движения.ОсновныеНачисления);
Расчет.ПроизвестиРасчетНабора(ОбъектСервер.Движения.ДополнительныеНачисления);
	
ОбъектСервер.ОсновныеНачисления.Загрузить(ОбъектСервер.Движения.ОсновныеНачисления.Выгрузить());
ОбъектСервер.ДополнительныеНачисления.Загрузить(ОбъектСервер.Движения.ДополнительныеНачисления.Выгрузить());
	
ОбъектСервер.Движения.ОсновныеНачисления.Очистить();
ОбъектСервер.Движения.ОсновныеНачисления.Записать();
ОбъектСервер.Движения.ДополнительныеНачисления.Очистить();
ОбъектСервер.Движения.ДополнительныеНачисления.Записать();	
	
ЗначениеВРеквизитФормы(ОбъектСервер,"Объект");

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

 

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

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

 

20. Заполнение диаграммы Ганта. 

 

// ЗАПРОС ПО ФАКТИЧЕСКОМУ ПЕРИОДУ ДЕЙСТВИЯ
Диаграмма.Обновление = Ложь;
Диаграмма.Очистить();	
Пока Выборка.Следующий() Цикл
              Серия = Диаграмма.УстановитьСерию(Выборка.Сотрудник);
	Точка = Диаграмма.УстановитьТочку(Выборка.ВидРасчета);
	ТекущееЗначение = Диаграмма.ПолучитьЗначение(Точка,Серия);		
	Интервал = ТекущееЗначение.Добавить();
	Интервал.Начало = Выборка.ПериодДействияНачало;
	Интервал.Конец  = Выборка.ПериодДействияКонец;
КонецЦикла; 	
Диаграмма.Обновление = Истина;

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

Процедура ЗаполнитьГрафик(ДатаНачала, ДатаОкончания, ВыходныеДни, ГрафикРаботы) Экспорт 

Набор = РегистрыСведений.ГрафикиРаботы.СоздатьНаборЗаписей();
Набор.Отбор.ГрафикРаботы.Установить(ГрафикРаботы); // 1. ДОБАВЛЯЕМ ОТБОР ПО ГРАФИКУ
//Набор.Прочитать(); // 2. КОММЕНТИРУЕМ ЧТЕНИЕ НАБОРА

ЧислоСекундВСутках = 86400;

Дат = ДатаНачала;
Для к = 0 По Набор.Количество()-1 Цикл

Запись = Набор[к];
Если Запись.Дата < ДатаНачала Тогда
    Продолжить;
ИначеЕсли Запись.Дата =Дат Тогда
Если Найти(ВыходныеДни, Строка(ДеньНедели(Дат))) Тогда
Запись.Значение = 0;
Иначе          
Запись.Значение = 8;
КонецЕсли;
Дат = Дат + ЧислоСекундВСутках;
Иначе
Пока Дат < Мин(Запись.Дата, ДатаОкончания) Цикл
НоваяЗапись = Набор.Добавить();
НоваяЗапись.Дата = Дат;
Если Найти(ВыходныеДни, Строка(ДеньНедели(Дат))) Тогда
НоваяЗапись.Значение = 0;
Иначе          
НоваяЗапись.Значение = 8;
КонецЕсли; 
Дат = Дат + ЧислоСекундВСутках;
КонецЦикла; 
Если Запись.Дата > ДатаОкончания Тогда
Прервать;
Иначе
Если Найти(ВыходныеДни, Строка(ДеньНедели(Дат))) Тогда
Запись.Значение = 0;
Иначе          
Запись.Значение = 8;
КонецЕсли;
КонецЕсли;
Дат = Дат + ЧислоСекундВСутках;
КонецЕсли; 
КонецЦикла;
Набор.Записать();

Пока Дат <= ДатаОкончания Цикл
Запись = Набор.Добавить();
Запись.ГрафикРаботы = ГрафикРаботы; // 3. ВСТАВЛЯЕМ НУЖНЫЙ ГРАФИК
Запись.Дата = Дат;
Если Найти(ВыходныеДни, Строка(ДеньНедели(Дат))) Тогда
Запись.Значение = 0;
Иначе          
Запись.Значение = 8;
КонецЕсли; 
Дат = Дат + ЧислоСекундВСутках;
КонецЦикла; 
Набор.Записать();

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

См. также

Подготовка к аттестации Программист Платформа 1С v8.3 Конфигурации 1cv8 Платные (руб)

Обучающая программа 1С Online представляет собой интерактивное изучение языка запросов с самого начала: - 50 практических заданий с различным уровнем сложности; - Методические материалы по практике написания запросов; - Описание назначения таблиц и индексов 1С Предприятие 8; - Методика решения реальных задач запросом 1С; - Автоматическая система проверки решений с указанием ошибок; - Инструкции по решению задач с разъяснениями; - Техническая поддержка пользователей. Тренажер запросов подходит для начинающих и действующих разработчиков 1С

1800 руб.

11.02.2014    76981    95    15    

189

Подготовка к аттестации Программист Стажер Бесплатно (free)

Меня зовут Татьяна, в 1С-разработке я уже семь лет, а в этом году официально стала junior-специалистом. Рассказываю, как всё происходило.

10.09.2024    7103    PROSTO-1C    21    

13

Подготовка к аттестации Программист Стажер Платформа 1С v8.3 Россия Бесплатно (free)

Я Олег, разработчик 1С. Расскажу, как сдавал на сертификат Специалиста, в чём ошибся и что стоит учесть.

11.06.2024    14064    PROSTO-1C    51    

66

Подготовка к аттестации Программист Стажер Платформа 1С v8.3 Россия Бесплатно (free)

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

04.06.2024    9304    anton99    50    

57

Подготовка к аттестации Стажер Конфигурации 1cv8 Фармацевтика, аптеки Россия Управленческий учет Бесплатно (free)

Краткий рассказ о выборе 1С как основного языка программирования для дипломной работы в университете, и само приложение к диплому.

28.05.2024    4334    DmitryOneBit    20    

20

Подготовка к аттестации Программист Стажер Платформа 1С v8.3 Россия Абонемент ($m)

В публикации предоставлено решения 7 билетов из сборника 2022 года . Решения выполнены по пунктам и подробно, каждый БП описан и решен по условиям задач. Благодаря данному решению к экзамену стало подготовиться проще, чем когда-либо.

10 стартмани

07.05.2024    8364    83    user1988637    16    

42

Подготовка к аттестации Платформа 1С v8.3 1С:ERP Управление предприятием 2 Россия Абонемент ($m)

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

10 стартмани

08.04.2024    2968    39    user1988637    4    

15

Подготовка к аттестации Программист Стажер Платформа 1С v8.3 Россия Бесплатно (free)

Готовилась три месяца, сдала с первого раза. Делюсь опытом, лайфхаками и ресурсами, по которым учила материал.

14.03.2024    18075    PROSTO-1C    47    

90
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
0. correct_coding 457 01.01.70 03:00 Сейчас в теме
Перед сдачей экзамена начитался в интернете мнений и отзывов, что времени на решение отведено очень мало (а это 4 часа) и что хватает только набить код и чуток отладить. После сдачи с этой точкой зрения не согласен, времени достаточно если вы быстро печатаете и быстро думаете=) Однако в процессе подготовки в голове волей-неволей складывался небольшой набор действий по оптимизации расхода времени и набор часто встречающихся механизмов, присутствующих, в той или иной модификации, в большинстве задач.

Перейти к публикации

1. Новиков 292 20.12.11 17:57 Сейчас в теме
Молодец! Хорошая информация. Но, инфа кажется не полной без:

1. Когда сам сдавал?
2. С какого раза сдал?
3. На курсы какие-нибудь ходил или тренинги?
4. Сколько времени убито на подготовку?
5. Ну и конечно, пруфлинки на ресурсы, которые помогли!

Статьи такие уважаю!
samadov; Open-BS; quNas; Pechenuych_ka; Mixmaister; +5 Ответить
2. tango 545 20.12.11 18:36 Сейчас в теме
автор мегамонстр +++
sulfur17; +1 Ответить
3. andru_dv 21.12.11 00:45 Сейчас в теме
Да, полезная информация для сдачи зачета.
Спасибо!
4. tslk 26 21.12.11 05:08 Сейчас в теме
В пункте 6 по моему ошибочка :

Выборка = Запрос.Выполнить().Выбрать();
Если Выборка.Количество() Тогда
-------------------------^
Отказ = Истина;
КонецЕсли;
5. svsource 21.12.11 08:33 Сейчас в теме
В общем ходил я на все курсы, тренинги по 8.2. За все сам платил. Хочу сказать что Вы молодец. Все что написано - по делу исключительно. Замечания АБСОЛЮТНО правильные. 5+ Вам. Сейчас как раз решаю задачи на время из СПЕЦА 8.2 по платформе. Планирую до майских обязательно сдать. То, что Вы написали - БУКВАЛЬНО то, что нам Гончаров Дмитрий, Козырев Дмитрий и т.д. на курсах несколько раз повторяли. Народ в 1С (преподаватели) все ПРАКТИКУЮЩИЕ СПЕЦЫ. Втереть им лажу не прокатит. Я хотел после курсов сразу пойти сдавать, Но Дмитрий Гончаров мой пыл охладил. Решать то я решаю задачи - но сейчас особенно!!!! требование решить АКАДЕМИЧЕСКИ ПРАВИЛЬНО, а не только чтоб работало :) Полно примеров, когда все работает - но ставят 2. Народ обижается конечно - у меня друг на 4-ый круг пошел. Очень требуют чтоб задания были решены с учетом специфики именно платформы 8.2 и обязательно работали в тонком клиенте! Все что Вы написали - еще раз говорю - ПРАВИЛЬНО и АКТУАЛЬНО!!! Очень полезно для сдающих Спеца по платформе 8.2. С Уважением, Сергей.
sulfur17; 1С-Учебный Центр №3; +2 Ответить
46. 1С-Учебный Центр №3 14.03.13 18:56 Сейчас в теме
(5) svsource,
То, что Вы написали - БУКВАЛЬНО то, что нам Гончаров Дмитрий, Козырев Дмитрий и т.д. на курсах несколько раз повторяли. Народ в 1С (преподаватели) все ПРАКТИКУЮЩИЕ СПЕЦЫ. Втереть им лажу не прокатит. Я хотел после курсов сразу пойти сдавать, Но Дмитрий Гончаров мой пыл охладил. Решать то я решаю задачи - но сейчас особенно!!!! требование решить АКАДЕМИЧЕСКИ ПРАВИЛЬНО, а не только чтоб работало :)

Спасибо за то, что выбираете наши курсы! Надеемся, что они действительно помогают.
Хочется обратить внимание на то, что наш учебный центр запустил новый проект WEB-обучение. Курсов уже много (http://www.1c-uc3.ru/web_obuchenie.html), но в контексте данной темы (про подготовку к экзамену) особо полезен WEB-курс "Решение задачи, схожей с задачей экзамена 1С:Специалист по платформе 1С:Предприятие 8.2". Автор и ведущий - сам Дмитрий Гончаров. Более подробная информация здесь: http://www.1c-uc3.ru/web-specv8.html
6. musatov1c.ru 6 21.12.11 08:42 Сейчас в теме
Очень интересно. Просмотрел пока мельком. Оставляю как закладку для изучения. Требуется еще время для специалиста. :)
7. pparshin 508 21.12.11 09:00 Сейчас в теме
Замечательно! По делу и без воды.

У меня три вопроса.
1.в сети валяется управляемая консоль запросов
Какая сеть имеется ввиду?
2.откройте блокнот, и создайте себе несколько заготовок
Подразумевается блокнот, который Notepad?
3.За какое время до начала экзамена можно приходить?
8. sa1m0nn 28 21.12.11 09:10 Сейчас в теме
Спасибо, в мемориз. 2 раза уже лажанулся именно по причине нехватки времени, в январе на третий заход.
9. Alexey55 21.12.11 10:17 Сейчас в теме
Спасибо! очень полезная информация
10. DragonAgo 16 21.12.11 10:52 Сейчас в теме
Вот бы знать, как же правильно решить ту или иную задачу, в книгах и то не расписывается конкретика, все в основном либо сам достигаешь либо из форумов...Хоть и получается успешно изменять конфигурации, типовые отчеты, но до сих пор понимаю я ничего не знаю
sulfur17; +1 Ответить
11. DragonAgo 16 21.12.11 10:52 Сейчас в теме
Хорошая статья!!!Автору риспект
12. ms200999 21.12.11 11:58 Сейчас в теме
Вот действительно достойная работа. Побольше бы подобных публикаций.
sulfur17; +1 Ответить
13. progr21 21.12.11 13:47 Сейчас в теме
Спасибо автору за щедрость, за то, что поделился свои опытом! Не только сам сдал, но и подумал о других сдающих, которым предстоит пройти этот же путь. Очень толковая публикация.
14. dell_anna 21.12.11 14:09 Сейчас в теме
Хорошая статья! Спасибо за проделанную работу! И все таки можете ответить на вопрос:
1. За какое время до экзамена можно прийти?
2. Сразу пускают в кабинет, чтобы например проделать все необходимые манипуляции (подготовки)?
15. no_registration 21.12.11 19:11 Сейчас в теме
16. Программулькин 301 22.12.11 06:32 Сейчас в теме
Хорошая статья. Нужная,актуальная. Вот ещё бы ответы автора на заданные тут вопросы получить, было бы вообще чудненько.
17. F1_1 22.12.11 09:17 Сейчас в теме
Согласен с практически со всем комментраиями. Очень нужная статья. И как раз вовремя - решился на сдачу. Готовлюсь. Особенно нужным кажется высказывание про "АКАДЕМИЧЕСКИ ПРАВИЛЬНЫМ".
Автору - большое спасибо.
18. dandrontiy 22.12.11 10:50 Сейчас в теме
Автору реальный респект! Если бы автор сего поста составил список правильных Академически решений по темам (не все билеты, а сам подход, видно что автор именно концептуально подходит к вопросу, что очень ценно) такую работу и за деньги было бы не грех приобрести! Труд проделанный им - очень полезен, готов так сказать оформить подписку на методические статьи...
19. пользователь 22.12.11 15:00
Сообщение было скрыто модератором.
...
20. dkprim 5 22.12.11 15:11 Сейчас в теме
невероятно полезная статья. краткость - сестра таланта. автору спасибо :)
21. DimanYa 23.12.11 07:22 Сейчас в теме
Где вы были месяц назад? =) А та прибавлю свои 5 копеек. Дома обязательно попытайтесь сделать один билет на время. Это кажется, что 4 часа, что даётся на экзамен это много. А когда начинаешь делать там, то времени жутко не хватает. И не забывайте сохраняться. У меня на сдаче вылетела 1с и я потерял 25 минут работы.
22. prestige 23.12.11 16:03 Сейчас в теме
Спасибо, написано умно, полезно и "академически правильно";)
23. Fruit83 28 25.12.11 13:23 Сейчас в теме
Спасибо! понадобится в подготовке!
24. thang_madi 26.12.11 10:07 Сейчас в теме
25. Гость 27.12.11 22:39
Спасибо большое за подробное описание и полезные реальные рекомендации. Ну очень бы хотелось получить от автора ответы на заданные в комментариях вопросы. Планирую сдавать спеца, хотелось бы оценить шансы и заложить время на подготовку. Еще раз спасибо.
26. Созинов 30.12.11 10:25 Сейчас в теме
Автору плюс. Как было сказано выше, неплохо было бы добавить пруфлинки на ресурсы, которые помогли в подготовке.
27. Bassgood 1449 07.01.12 01:49 Сейчас в теме
(0) Хотел бы задать автору статьи некоторые вопросы и предложить внести некоторые изменения в ее содержание с целью более полного обзора:
1. Поясните почему нужно применить именно управляемый, а не автоматический режим управления блокировками?
6.1. Можно было бы дописать, что новая методика проведения заключается в том, что сначала записываются движения документа по соответствующему регистру, а затем уже производится проверка на наличие в регистре отрицательных остатков. И сказать что таких задач, в которых применяется новая методика проведения, небольшой процент - мне кажется ошибочно, она применяется в задачах, требующих контроль остатков, а таковыми являются практически все задачи по оперативному учету, в которых происходит списание товаров.
6.2. Почему мы применили свойство набора записей БлокироватьДляИзменения, а не использовали управляемые транзакционные блокировки, как это было сделано в последующих примерах?
6.3. В запросе в качестве параметра не указана ссылка на документ, из которого выбираются товары и помещаются в "втДанныеДокумента".
6.4. Ошибка в выборке запроса: "Если Выборка.Количество() Тогда"
7. А почему вместо этого нельзя просто использовать округление (функция Окр())?
8. Здесь можно добавить, что это сделано с целью увеличения скорости исполнения запроса, т.к. получение текущих остатков (актуальных, что соответствует методике оперативного проведения) производится быстрее, нежели на какой-либо другой момент времени.
sulfur17; RustIG; +2 Ответить
28. ipyu 13.01.12 23:13 Сейчас в теме
Огромное спасибо за очень подробную и полезную информацию.
29. Uncore 1282 14.01.12 08:18 Сейчас в теме
Очень полезная информация. Автору +1
30. VictorK 22.02.12 21:24 Сейчас в теме
Очень ценная информация для подготовки к экзамену, раньше такой информации не найти было! Жаль, что не все готовы делиться такой информацией. Спасибо!!!!!
31. Flashill 1007 25.02.12 14:55 Сейчас в теме
1. В свойствах конфигурации режим управления блокировками намеренно установлен в автоматический, хотя нужно управляемый. Это необходимо исправить сразу, т.к. по мере решения вы можете насоздавать объектов с неверно установленным режимом управления блокировками, чем позже вы это заметите, тем больше потом исправлять. А если не заметите вовсе, могут "штрафануть".


На сколько я помню из вопросов на 1С: Профессионала по платформе 8.2, то
"Управляемый" и "Автоматический" - эти режимы принудительно включают выбранный способ управления блокировками. Т.е. не важно какой способ поставился во всех новых созданных объектах. Если в свойствах самой конфигурации стоит "Управляемый" - то он будет привилегированным, автоматического не будет.
А вот если поставить "Автоматический и управляемый", то тогда действительно придется править режим блокировок во всех объектах.

sulfur17; +1 Ответить
32. Sanek_GAL 25.02.12 15:34 Сейчас в теме
Спасибо! Очень полезная информация.
33. dimk@a 21.03.12 13:03 Сейчас в теме
Спасибо! Вот это правильный, системный подход! и стимул - времени достаточно, нужно только знать как им распорядиться.
34. Artemuch2 21.03.12 15:20 Сейчас в теме
Доброе время суток! по своему опыту знаю что с первого раза сдать не получится точно - это раз. если ты не делал такое же задание то не успеешь ну или мегабыстрый программист- это два. на задании нужно решать только поставленную задачу и не отвлекаться ни на какие красивости- это три. ну и настроение преподавателя-это четыре
35. gavrikprog 118 28.03.12 18:53 Сейчас в теме
Кто знает, в терминале при сдаче дистанционно буфер обмена работает ?

т.е. я пишу код локально, потом зашел в терминал и время пошло. А тот код кот. писал локально скопировал в терминал.
36. ris83 05.04.12 10:21 Сейчас в теме
"Если Выборка.Количество() Тогда"

Никакой тут ошибки нет...вспомните неявное преобразование типов! Число преобразуется в булево по принципу 0-ложь, а все что больше в истину...Поэтому если результат запроса пустой то будет преобразовано в ЛОЖЬ. а если хоть одна или больше записей то будет ИСТИНА
demart-omsk; vitaliy1911; timeforlive; veretennikoff; Olenevod; igor-pn; RailMen; RustIG; +8 Ответить
37. cmd_vasec 34 05.04.12 10:58 Сейчас в теме
Спасибо. Отличная статья.
38. LivingStar 25 22.04.12 16:22 Сейчас в теме
а не верно ли получать учетную политику следующим образом?
|
// 1). Получение учетной политики ->
Запрос = Новый Запрос;
Запрос.Текст = "
|ВЫБРАТЬ
| УчетнаяПолитикаСрезПоследних.Период,
| УчетнаяПолитикаСрезПоследних.МетодСписания
|ИЗ
| РегистрСведений.УчетнаяПолитика.СрезПоследних(, ГОД(период) = &Год) КАК УчетнаяПолитикаСрезПоследних";
Запрос.УстановитьПараметр("Год",Год(ТекущаяДата()));
Рез = Запрос.Выполнить().Выбрать();
Рез.Следующий();
УчетнаяПолитика = Рез.МетодСписания;
Если Не ЗначениеЗаполнено(УчетнаяПолитика) Тогда
Сообщить("Не заполнена учетная политика на " + Формат(ТекущаяДата(), "ДФ=""гггг""") + " год!");
Возврат;
КонецЕсли;
39. Sunhare 4 11.05.12 14:11 Сейчас в теме
40. lolidy 18.05.12 06:55 Сейчас в теме
Спасибо большое! Очень полезная статья, скоро иду сдавать, очень пригодятся эти советы.
41. v.l. 435 25.06.12 13:09 Сейчас в теме
Статью прочитал "по диагонали", но радует описание, а не тупая копипаста в док-файл, который надо скачать.
42. MakcTLT63 5 13.07.12 06:30 Сейчас в теме
не ну круто конечно, наверное..
но, после такого заполнения значений, дальше читать уже не хочется

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

И еще.. писать такую конструкцию ?(3=3,10, Окр(4/3,2)*10), да и вообще весь 7 пункт - это что-то за гранью добра и зла..
43. RailMen 826 04.09.12 21:55 Сейчас в теме
44. Pechenuych_ka 11.02.13 19:24 Сейчас в теме
Очень хорошая статья!
45. Bukaska 140 11.02.13 20:36 Сейчас в теме
Хорошая статья, но поясните разницу между этим:
Запись = Движения.ТоварыНаСкладах.ДобавитьРасход();
И этим:
Запись = Движения.ТоварыНаСкладах.Добавить()
Запись.ВидДвижения = ВидДвиженияНакопления.Расход()
Почему то в питере преподаватели рекомендуют все вариант ниже.
47. manan 27.03.13 22:19 Сейчас в теме
Вот здесь http://infostart.ru/public/66244/ решения более 100 задач из актуального"Сборника задач для подготовки к экзамену "1С:Специалист" по платформе "1С:Предприятие 8". Версия 8.2 (артикул 4601546078247)" (редакция 3, 2011 год)
sulfur17; +1 Ответить
48. Graf_Cash 21.05.13 11:33 Сейчас в теме
Очень много полезной информации в одном месте.
Коротко и по-делу. Спасибо
49. Limas 27.06.13 12:01 Сейчас в теме
Если бы эта статья мне попалась до сдачи спеца по платформе, думаю сдал бы с первого, а не с пятого раза :))) насчет четырех часов их было действительно очень мало, т.к писать нужно правильно сразу, времени на выбор варианта, оптимизацию, поиск ошибок и отладку нету, недаром ведь время сдачи увеличили до 5 часов.
50. valex1c 06.08.13 16:35 Сейчас в теме
51. Interferon 1 07.08.13 11:39 Сейчас в теме
Интеренсая статья, спасибо!
52. andr_andrey 10 14.01.14 12:07 Сейчас в теме
7 пункт, с округлением до 2 знаков результата деления, без пояснения - вредный совет.
53. Isperator 18.04.14 13:18 Сейчас в теме
Статья хорошая, но сейчас сдают на Платформе 8.3. Кто нибудь может освежить информацию? Заранее спасибо.
54. Olga12 170 18.04.14 13:52 Сейчас в теме
(53)А что новые билеты на Спеца по 8.3 или просто на другой платформе?
55. Bukaska 140 18.04.14 14:47 Сейчас в теме
(54) kn, Ничего пока что не меняется.. главное чтобы работал интерфейс Такси.. то есть если на 8.2 важен был тонкий клиент, то для 8.3 надо чтобы работало в интерфейсе такси)
sulfur17; 1С-Учебный Центр №3; +2 Ответить
56. Olga12 170 18.04.14 15:06 Сейчас в теме
57. Isperator 23.04.14 15:06 Сейчас в теме
(54) kn, Звонил в 1С обещают сборник задач по 8.3 в конце мая. Изменятся ли задачи полностью или частично мне не ответили.
1С-Учебный Центр №3; +1 Ответить
59. 1С-Учебный Центр №3 23.04.14 17:42 Сейчас в теме
(57) Isperator, Принципиальных изменений нет, но формулировки немного изменились.

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

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

Изменился технический принцип компоновки задач.
Задача на экзамене будет собираться случайным образом из заранее подготовленных фрагментов.
58. Olga12 170 23.04.14 17:33 Сейчас в теме
Спасибо, встречалась такая информация тоже, теперь значит точно.
60. 1С-Учебный Центр №3 21.05.14 18:26 Сейчас в теме
Приглашаем на однодневный мастер-класс "Решение сквозной задачи с использованием платформы "1С:Предприятие 8" для подготовки к экзамену 1С:Специалист по платформе "1С:Предприятие 8", который состоится 29 мая 2014 г. :)
61. Isperator 22.05.14 12:58 Сейчас в теме
(60) 1С-Учебный Центр №3, Не подскажите, новый сборник задач вышел?
62. Bukaska 140 22.05.14 13:09 Сейчас в теме
63. 1С-Учебный Центр №3 22.05.14 13:11 Сейчас в теме
(61) Isperator, на данный момент сборник по 8.3 еще не вышел, ждем информационного письма от 1С
64. Isperator 26.05.14 13:10 Сейчас в теме
(63) 1С-Учебный Центр №3, Спасибо за информацию.
91. v.l. 435 14.07.19 17:50 Сейчас в теме
(61) не подскажЕте.
не подскажете, вышел новый сборник?

Не подсказывайте ему! Не подскажите ему! Он сам должен знать!
65. mikhailovaew 127 29.05.14 12:41 Сейчас в теме
Не совсем понятно с проблемой копеек:
НоваяЗапись.Сумма = ?(Выборка.КоличествоДокумент = Выборка.КоличествоОстаток, Выборка.СуммаОстаток,
Окр(Выборка.КоличествоДокумент / Выборка.КоличествоОстаток,2) * Выборка.СуммаОстаток);

Зачем мы тут округляем? Платформа сама при записи в регистр сделает округление до точности ресурса. Или тут есть какая-то методологическая тонкость? Поясните, пожалуйста.
66. spetzpozh 24.07.14 23:54 Сейчас в теме
(65) mikhailovaew, округлять не обязательно, проблема копеек в том, что есть требование - при списании всего товара списывать оставшуюся себестоимость. Хотя не очень понятно, как проблема копеек может вылезти при расчете (КоличествоСписываю)/(КоличествоОсталось)*Стоимость. Ну да 1С хочет как в статье.
67. mikhailovaew 127 08.08.14 14:45 Сейчас в теме
(66) spetzpozh, конструкция ?(Выборка.КоличествоДокумент = Выборка.КоличествоОстаток, Выборка.СуммаОстаток, <...ДругаяСуммаРассчитннаяОтКоличества..>) мне понятна, чтобы при выбирании остатка количества выбрать всю оставшуюся сумму.
Мне не понятно, зачем делать именно округление при расчете <...ДругойСуммыРассчитннойОтКоличества..>, оно дальше в расчетах не участвует (не влияет на получение других сумм), а при записи в регистр само округлится.
68. Astrey1C 19.09.14 13:39 Сейчас в теме
Отличная статья. Автору 5+.
69. Tedman 24.10.14 15:58 Сейчас в теме
Есть небольшое замечание в части
Разбитие оклада при многократном изменении его значения внутри периода расчета. Вариант получения разбивки прямо в запросе.

Запрос для разбиения строк документа в зависимости от оклада, как мне кажется, выглядит несколько сложнее.
Исходная задача:
Есть оклад на 31.12.2013 - 10 000. Оклад менялся 10.01 и 20.01.
Начисляем январь: с 01.01 по **.01 запрос отлично отрабатывает. Строка дробится на то количество частей, сколько раз у нас менялся оклад.
А вот если наш сотрудник пил после праздников, и на работу вышел только с 15.01. Тогда ваш запрос выдаст следующее:
Сотрудник	Подразделение	ВидРасчета	Оклад	ПериодДействияНачало	ПериодДействияКонец
Бельдыев	Бухгалтерия	Оклад	12 000	15.01.2014 0:00:00	19.01.2014 23:59:59
Бельдыев	Бухгалтерия	Оклад	10 000	15.01.2014 0:00:00	09.01.2014 23:59:59
Бельдыев	Бухгалтерия	Оклад	15 000	20.01.2014 0:00:00	31.01.2014 23:59:59

А это не правильно... Смысл в том, что использовать СрезПоследних на ДатуРегистрации или на НачалоМесяца(***) нельзя, т.к. совсем не факт, что начисление будет происходить с первого числа месяца, и что оклад не изменится с начала месяца до нашего первого дня начисления, поэтому СрезПоследних надо "симулировать" самим.
Я в итоге родил следующее:
ВЫБРАТЬ
	НачислениеЗарплатыОсновныеНачисления.Сотрудник,
	НачислениеЗарплатыОсновныеНачисления.Подразделение,
	НачислениеЗарплатыОсновныеНачисления.ДатаНачала,
	НачислениеЗарплатыОсновныеНачисления.ДатаОкончания,
	НачислениеЗарплатыОсновныеНачисления.ВидРасчета,
	ЗНАЧЕНИЕ(Справочник.ГрафикиРаботы.Пятидневка) КАК ГрафикРаботы
ПОМЕСТИТЬ втДок
ИЗ
	Документ.НачислениеЗарплаты.ОсновныеНачисления КАК НачислениеЗарплатыОсновныеНачисления
ГДЕ
	НачислениеЗарплатыОсновныеНачисления.Ссылка = &Ссылка
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ РАЗЛИЧНЫЕ
	СведенияОСотрудниках.Период,
	СведенияОСотрудниках.Сотрудник,
	СведенияОСотрудниках.Подразделение,
	СведенияОСотрудниках.Оклад,
	втДок.ГрафикРаботы
ПОМЕСТИТЬ Оклады
ИЗ
	втДок КАК втДок
		ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СведенияОСотрудниках КАК СведенияОСотрудниках
		ПО втДок.Сотрудник = СведенияОСотрудниках.Сотрудник
			И втДок.Подразделение = СведенияОСотрудниках.Подразделение
ГДЕ
	втДок.ВидРасчета = ЗНАЧЕНИЕ(ПланВидовРасчета.ОсновныеНачисления.Оклад)
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
	втДок.Сотрудник,
	втДок.Подразделение,
	втДок.ДатаНачала,
	втДок.ДатаОкончания,
	МАКСИМУМ(Оклады.Период) КАК Период,
	втДок.ГрафикРаботы
ПОМЕСТИТЬ втДокСПериодомНачОкл
ИЗ
	втДок КАК втДок
		ЛЕВОЕ СОЕДИНЕНИЕ Оклады КАК Оклады
		ПО втДок.Сотрудник = Оклады.Сотрудник
			И втДок.Подразделение = Оклады.Подразделение
			И втДок.ДатаНачала >= Оклады.Период
ГДЕ
	втДок.ВидРасчета = ЗНАЧЕНИЕ(ПланВидовРасчета.ОсновныеНачисления.Оклад)

СГРУППИРОВАТЬ ПО
	втДок.ДатаНачала,
	втДок.ДатаОкончания,
	втДок.Подразделение,
	втДок.Сотрудник,
	втДок.ГрафикРаботы
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
	втДокСПериодомНачОкл.Сотрудник,
	втДокСПериодомНачОкл.Подразделение,
	втДокСПериодомНачОкл.ДатаНачала,
	втДокСПериодомНачОкл.ДатаОкончания,
	втДокСПериодомНачОкл.Период,
	НачОклады.Оклад,
	втДокСПериодомНачОкл.ГрафикРаботы
ПОМЕСТИТЬ втДокСНачОкл
ИЗ
	втДокСПериодомНачОкл КАК втДокСПериодомНачОкл
		ЛЕВОЕ СОЕДИНЕНИЕ Оклады КАК НачОклады
		ПО втДокСПериодомНачОкл.Сотрудник = НачОклады.Сотрудник
			И втДокСПериодомНачОкл.Подразделение = НачОклады.Подразделение
			И втДокСПериодомНачОкл.Период = НачОклады.Период
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
	втДокСНачОкл.Сотрудник,
	втДокСНачОкл.Подразделение,
	втДокСНачОкл.ДатаНачала,
	втДокСНачОкл.ДатаОкончания,
	втДокСНачОкл.Период,
	втДокСНачОкл.Оклад КАК Оклад,
	Оклады.Оклад КАК ОкладРазрез,
	Оклады.Период КАК ПериодРазрез,
	втДокСНачОкл.ГрафикРаботы
ПОМЕСТИТЬ втДокПодготовкаКРазбивке
ИЗ
	втДокСНачОкл КАК втДокСНачОкл
		ЛЕВОЕ СОЕДИНЕНИЕ Оклады КАК Оклады
		ПО втДокСНачОкл.Сотрудник = Оклады.Сотрудник
			И втДокСНачОкл.Подразделение = Оклады.Подразделение
			И втДокСНачОкл.ДатаНачала < Оклады.Период
			И втДокСНачОкл.ДатаОкончания > Оклады.Период
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
	втДокПодготовкаКРазбивке.Сотрудник,
	втДокПодготовкаКРазбивке.Подразделение,
	втДокПодготовкаКРазбивке.ДатаНачала,
	ДОБАВИТЬКДАТЕ(втДокПодготовкаКРазбивке.ПериодРазрез, ДЕНЬ, -1) КАК ДатаОкончания,
	втДокПодготовкаКРазбивке.Оклад,
	втДокПодготовкаКРазбивке.ГрафикРаботы
ПОМЕСТИТЬ ОкладДанные
ИЗ
	втДокПодготовкаКРазбивке КАК втДокПодготовкаКРазбивке
ГДЕ
	НЕ втДокПодготовкаКРазбивке.ПериодРазрез ЕСТЬ NULL 

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
	втДокПодготовкаКРазбивке.Сотрудник,
	втДокПодготовкаКРазбивке.Подразделение,
	втДокПодготовкаКРазбивке.ДатаНачала,
	втДокПодготовкаКРазбивке.ДатаОкончания,
	втДокПодготовкаКРазбивке.Оклад,
	втДокПодготовкаКРазбивке.ГрафикРаботы
ИЗ
	втДокПодготовкаКРазбивке КАК втДокПодготовкаКРазбивке
ГДЕ
	втДокПодготовкаКРазбивке.ПериодРазрез ЕСТЬ NULL 

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
	втДокПодготовкаКРазбивке.Сотрудник,
	втДокПодготовкаКРазбивке.Подразделение,
	втДокПодготовкаКРазбивке.ПериодРазрез,
	втДокПодготовкаКРазбивке.ДатаОкончания,
	втДокПодготовкаКРазбивке.ОкладРазрез,
	втДокПодготовкаКРазбивке.ГрафикРаботы
ИЗ
	втДокПодготовкаКРазбивке КАК втДокПодготовкаКРазбивке
ГДЕ
	НЕ втДокПодготовкаКРазбивке.ПериодРазрез ЕСТЬ NULL 
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
	ОкладДанные.Сотрудник,
	ОкладДанные.Подразделение,
	ОкладДанные.ДатаНачала КАК ДатаНачала,
	ОкладДанные.ДатаОкончания,
	ОкладДанные.Оклад,
	ЗНАЧЕНИЕ(ПланВидовРасчета.ОсновныеНачисления.Оклад) КАК ВидРасчета,
	ОкладДанные.ГрафикРаботы КАК ГрафикРаботы
ИЗ
	ОкладДанные КАК ОкладДанные

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
	втДок.Сотрудник,
	втДок.Подразделение,
	втДок.ДатаНачала,
	втДок.ДатаОкончания,
	NULL,
	втДок.ВидРасчета,
	втДок.ГрафикРаботы
ИЗ
	втДок КАК втДок
ГДЕ
	втДок.ВидРасчета <> ЗНАЧЕНИЕ(ПланВидовРасчета.ОсновныеНачисления.Оклад)

УПОРЯДОЧИТЬ ПО
	ДатаНачала
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
	НачислениеЗарплатыДополнительныеНачисления.Сотрудник,
	НачислениеЗарплатыДополнительныеНачисления.Подразделение,
	НачислениеЗарплатыДополнительныеНачисления.ВидРасчета,
	НачислениеЗарплатыДополнительныеНачисления.ДатаНачала,
	НачислениеЗарплатыДополнительныеНачисления.ДатаОкончания
ПОМЕСТИТЬ ДопНачисления
ИЗ
	Документ.НачислениеЗарплаты.ДополнительныеНачисления КАК НачислениеЗарплатыДополнительныеНачисления
ГДЕ
	НачислениеЗарплатыДополнительныеНачисления.Ссылка = &Ссылка
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
	ДопНачисления.Сотрудник,
	ДопНачисления.Подразделение,
	ДопНачисления.ВидРасчета,
	ДопНачисления.ДатаНачала,
	ДопНачисления.ДатаОкончания,
	ПремииСотрудникамСрезПоследних.Премия
ИЗ
	ДопНачисления КАК ДопНачисления
		ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ПремииСотрудникам.СрезПоследних(
				&ПериодРегистрации,
				Сотрудник В
					(ВЫБРАТЬ
						ДопНачисления.Сотрудник
					ИЗ
						ДопНачисления)) КАК ПремииСотрудникамСрезПоследних
		ПО ДопНачисления.Сотрудник = ПремииСотрудникамСрезПоследних.Сотрудник
Показать

Не даю 100% гарантии, что это правильно, но работает, вроде, правильно при всех вариантах, которые мне удалось придумать.
Хотелось бы услышать мнение "гуру" уже прошедших лёд и пламя, и имеющих заветную жёлтую бумажку.
70. Isperator 14.02.15 17:06 Сейчас в теме
Ребята, поделитесь впечатлениями и опытом кто ходил сдавать в 2015 году на экзамен. Готовлюсь к экзамену.
71. reg-81 08.03.15 20:23 Сейчас в теме
Первоначальный запрос работает корректно, нужно только условие вместо "МЕЖДУ" поставить ДатаНачала > &ДатаНачала И ДатаОкончания <= &ДатаОкончания
72. temamart 09.04.15 13:37 Сейчас в теме
Проводки = Движения.Управленческий;
Проводки.Записывать = Истина;
Если НЕ Проводки.Модифицированность() И НЕ ЭтоНовый() Тогда
Проводки.Прочитать();
КонецЕсли;

Зачем вот это условие? Проводки же всегда будут модифицированы.
73. avgyr77 10.06.15 20:59 Сейчас в теме
Спасибо автору за труд. идем здавать спеца!
74. wtlz 273 16.06.15 17:37 Сейчас в теме
А вот такой вопрос - как определить при записи набора записей регистра расчета когда надо замещать, а когда нет ? Ну и по ТолькоЗапись такой же вопрос)

РегистрРасчетаНаборЗаписей.<Имя регистра расчета> (CalculationRegisterRecordSet.<Имя регистра расчета>)
Записать (Write)
Синтаксис:
Записать(<Замещать>, <ТолькоЗапись>, <ЗаписьФактическогоПериодаДействия>, <ЗаписьПерерасчетов>)
<Замещать> (необязательный)
Тип: Булево.
Определяет режим замещения существующей записи в соответствии с текущими установками отбора (т.е. по регистратору набора записей). Истина - перед записью существующие записи будут удалены. Ложь - записи будут дописаны к уже существующим в информационной базе записям.
75. DopeDigga 31.07.15 14:07 Сейчас в теме
(74) wtlz, ну судя по необязательности - то если критично и явно требуется или беречь размер ИБ, или, к примеру, иметь возможность запроситься к истории этих изменений, получается истина / ложь соответственно
76. aleksey.kubovtsov 118 26.08.15 12:37 Сейчас в теме
Коллеги , прокомментируйте плиз
на экзамен кучу времени убил на запрос в РМ на разбитие периода
вариант :

ВЫБРАТЬ
	НачислениеЗарплатыОсновныеНачисления.НомерСтроки КАК НомерСтроки,
	НачислениеЗарплатыОсновныеНачисления.Сотрудник,
	НачислениеЗарплатыОсновныеНачисления.ВидРасчета,
	НачислениеЗарплатыОсновныеНачисления.ГрафикРаботы,
	НачислениеЗарплатыОсновныеНачисления.ДатаНачала,
	НачислениеЗарплатыОсновныеНачисления.ДатаОкончания,
	СведенияОСотрудниках.Период,
	СведенияОСотрудниках.Оклад
ПОМЕСТИТЬ ВТ_РазбитеПериода
ИЗ
	Документ.НачислениеЗарплаты.ОсновныеНачисления КАК НачислениеЗарплатыОсновныеНачисления
		ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.СведенияОСотрудниках КАК СведенияОСотрудниках
		ПО НачислениеЗарплатыОсновныеНачисления.Сотрудник = СведенияОСотрудниках.Сотрудник
			И НачислениеЗарплатыОсновныеНачисления.ДатаОкончания >= СведенияОСотрудниках.Период
			И НачислениеЗарплатыОсновныеНачисления.ДатаНачала <= СведенияОСотрудниках.Период
ГДЕ
	НачислениеЗарплатыОсновныеНачисления.Ссылка = &Ссылка
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
	ВТ_РазбитеПериода.НомерСтроки,
	ВТ_РазбитеПериода.Сотрудник,
	ВТ_РазбитеПериода.ВидРасчета,
	ВТ_РазбитеПериода.ГрафикРаботы,
	ЕСТЬNULL(ВТ_РазбитеПериода.Период, ВТ_РазбитеПериода.ДатаНачала) КАК ДатаНачала,
	ВТ_РазбитеПериода.ДатаОкончания,
	ЕСТЬNULL(ВТ_РазбитеПериода.Оклад, СведенияОСотрудникахСрезПоследних.Оклад) КАК Размер
ИЗ
	ВТ_РазбитеПериода КАК ВТ_РазбитеПериода
		ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.СведенияОСотрудниках.СрезПоследних(
				&КонецПериода,
				Сотрудник В
					(ВЫБРАТЬ РАЗЛИЧНЫЕ
						вт.Сотрудник
					ИЗ
						ВТ_РазбитеПериода КАК вт)) КАК СведенияОСотрудникахСрезПоследних
		ПО ВТ_РазбитеПериода.Сотрудник = СведенияОСотрудникахСрезПоследних.Сотрудник
Показать
77. aleksey.kubovtsov 118 26.08.15 12:54 Сейчас в теме
сори . кривое решение. период конца не верно получается (
78. tsmgeorg@gmail.com 11.09.15 12:52 Сейчас в теме
Спасибо большое! Очень помогает при подготовке.
79. korol-ar 09.12.15 00:13 Сейчас в теме
В п.20. Вроде как в 2-х местах надо график в набор добавлять?

Процедура ЗаполнитьГрафик(ДатаНачала, ДатаОкончания, ВыходныеДни, ГрафикРаботы) Экспорт 

Набор = РегистрыСведений.ГрафикиРаботы.СоздатьНаборЗаписей();
Набор.Отбор.ГрафикРаботы.Установить(ГрафикРаботы); // 1. ДОБАВЛЯЕМ ОТБОР ПО ГРАФИКУ
//Набор.Прочитать(); // 2. КОММЕНТИРУЕМ ЧТЕНИЕ НАБОРА

ЧислоСекундВСутках = 86400;

Дат = ДатаНачала;
Для к = 0 По Набор.Количество()-1 Цикл

Запись = Набор[к];
Если Запись.Дата < ДатаНачала Тогда
    Продолжить;
ИначеЕсли Запись.Дата =Дат Тогда
Если Найти(ВыходныеДни, Строка(ДеньНедели(Дат))) Тогда
Запись.Значение = 0;
Иначе          
Запись.Значение = 8;
КонецЕсли;
Дат = Дат + ЧислоСекундВСутках;
Иначе
Пока Дат < Мин(Запись.Дата, ДатаОкончания) Цикл
НоваяЗапись = Набор.Добавить();
//+++korol-ar:
НоваяЗапись .ГрафикРаботы = ГрафикРаботы; // 3. вот здесь еще ВСТАВЛЯЕМ НУЖНЫЙ ГРАФИК 
//---korol-ar.
НоваяЗапись.Дата = Дат;
Если Найти(ВыходныеДни, Строка(ДеньНедели(Дат))) Тогда
НоваяЗапись.Значение = 0;
Иначе          
НоваяЗапись.Значение = 8;
КонецЕсли; 
Дат = Дат + ЧислоСекундВСутках;
КонецЦикла; 
Если Запись.Дата > ДатаОкончания Тогда
Прервать;
Иначе
Если Найти(ВыходныеДни, Строка(ДеньНедели(Дат))) Тогда
Запись.Значение = 0;
Иначе          
Запись.Значение = 8;
КонецЕсли;
КонецЕсли;
Дат = Дат + ЧислоСекундВСутках;
КонецЕсли; 
КонецЦикла;
Набор.Записать();

Пока Дат <= ДатаОкончания Цикл
Запись = Набор.Добавить();
Запись.ГрафикРаботы = ГрафикРаботы; // 3. ВСТАВЛЯЕМ НУЖНЫЙ ГРАФИК
Запись.Дата = Дат;
Если Найти(ВыходныеДни, Строка(ДеньНедели(Дат))) Тогда
Запись.Значение = 0;
Иначе          
Запись.Значение = 8;
КонецЕсли; 
Дат = Дат + ЧислоСекундВСутках;
КонецЦикла; 
Набор.Записать();

КонецПроцедуры
Показать
82. CSiER 36 19.03.16 19:22 Сейчас в теме
(79) korol-ar, автор как раз говорит о том, что править график на экзамене скорее всего не придется - поэтому и комментирует строку "Набор.Прочитать()" (Ваш код не выполнится - "Набор.Количество()" = 0 ).
80. Sibiryak 06.01.16 17:45 Сейчас в теме
Для каждого Строка Из СписокНоменклатуры Цикл
Запись = Движения.ТоварыНаСкладах.ДобавитьРасход();
Запись.Период = Дата;
Запись.Номенклатура = Строка.Номенклатура;
Запись.Склад = Склад;
Запись.Количество = Строка.Количество;
КонецЦикла;

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

Запрос.Текст = "ВЫБРАТЬ
| РасходнаяНакладнаяСписокНоменклатуры.Номенклатура,
| СУММА(РасходнаяНакладнаяСписокНоменклатуры.Количество) КАК КоличествоДокумент
|ПОМЕСТИТЬ втДанныеДокумента
|ИЗ
| Документ.РасходнаяНакладная.СписокНоменклатуры КАК РасходнаяНакладнаяСписокНоменклатуры
|ГДЕ
|РасходнаяНакладнаяСписокНоменклатуры.Ссылка = &Ссылка
|СГРУППИРОВАТЬ ПО
| РасходнаяНакладнаяСписокНоменклатуры.Номенклатура
|;

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

Выборка = Запрос.Выполнить().Выбрать();
Если Выборка.Количество() Тогда
Отказ = Истина;
КонецЕсли;

Возможно, правильнее сделать так:
РезультатЗапроса = Запрос.Выполнить();
Если НЕ РезультатЗапроса.Пустой() Тогда		
	Отказ = Истина; 
КонецЕсли;
81. Sibiryak 06.01.16 18:13 Сейчас в теме
НоваяЗапись.Сумма = ?(Выборка.КоличествоДокумент = Выборка.КоличествоОстаток, Выборка.СуммаОстаток, 
 Окр(Выборка.КоличествоДокумент / Выборка.КоличествоОстаток,2) * Выборка.СуммаОстаток);

Почему округление с точностью до 2-х, а не до 3-х, например?
83. timeforlive 16 21.04.16 14:00 Сейчас в теме
85. pyrkin_vanya 493 16.04.17 15:36 Сейчас в теме
Автор, вопрос про проблему копеек.
НоваяЗапись.Сумма = ?(Выборка.КоличествоДокумент = Выборка.КоличествоОстаток, Выборка.СуммаОстаток, 
 Окр(Выборка.КоличествоДокумент / Выборка.КоличествоОстаток,2) * Выборка.СуммаОстаток); 


У меня ситуация.
КоличествоСписания = 1;
КоличествоОстаток = 3;
СуммаОстаток = 300;

Прописал Вашу формулу и получается следующее:
Окр(1 / 3, 2) * 300
0,33 * 300 = 99.
Видно же, что явная ошибка. Должно быть 100.
Почему такая странная формула для расчету суммы списания?
86. talych 17 26.06.17 22:45 Сейчас в теме
(85)
Списать = Мин(ОсталосьСписать, ВыборкаДетальные.КоличествоОстаток);

СуммаСписания = ?(Списать = ВыборкаДетальные.КоличествоОстаток, ВыборкаДетальные.СтоимостьОстаток,
ВыборкаДетальные.СтоимостьОстаток/ВыборкаДетальные.КоличествоОстаток * Списать);

Еще вопрос. А с тех пор методика блокировок уже изменилась?
87. user913680 63 08.03.18 20:44 Сейчас в теме
Из всего что видел ранее 9и прежде всего на этом сайте) - данная статья пока наиболее содержательная и полезная (все существенные моменты в одном месте). Но как всегда - четкий ответ вопрос когда использовать новую методику, а когда старую - замыливается.
88. Videon 04.10.18 16:26 Сейчас в теме
(87)
Нашёл такой совет: "«Новый» метод контроля остатков использовать там, где не нужно рассчитывать себестоимость при проведении (она плановая или расчет в конце периода)".
89. Videon 04.10.18 16:37 Сейчас в теме
С округлением в 7-м пункте такая хрень, что сил нет.
При примере 1/3 * 10 получится, что первые товары спишутся по 33, а последний по 34.
Хотя вполне можно сделать не такую большую разницу (2* 33,33 и 1* 33,34).

Окр(Выборка.КоличествоДокумент / Выборка.КоличествоОстаток * Выборка.СуммаОстаток), 2)
Скорее так получше будет, но смысл теряется, ибо тип СуммаОстаток (число) подразумевает 2 знака, после запятой...
90. Videon 22.11.18 13:34 Сейчас в теме
(89) И ещё к этому пункту замечание.
там, наверное, не Выборка.КоличествоДокумент = Выборка.КоличествоОстаток должно быть, а
Выборка.КоличествоДокумент >= Выборка.КоличествоОстаток ...
92. irakuzaul 12.03.20 21:21 Сейчас в теме
Если Вам нужно по каждой задаче написать по 4 страницы кода, то Вы не успеете, это точно. Минут 25-30, как минимум, для каждой задачи уходит только на то, чтобы вниктуть в суть задачи и сделать настройку метаданных. Задачи не из сборника, вернее из сборника, но в одной задаче могут переплестись условия из 2-х разных задач, или добалено доп. условие (например, сделать новый документ). Так что если работататель готов Вам платить хорошую зарплату без сертификата, лучше не тратьте деньги. Экзамен-то платный, и за курсы еще нужно заплатить. Интересно, сколько автор стать потратил, чтобы просто откопировать код и вставить его в статью? Наверное, часов 5 точно.
93. Winston 23.10.20 17:33 Сейчас в теме
Ошибка
Если РегистрыСведений.НастройкаУчетнойПолитики.ПолучитьПоследнее(Дата).УчетнаяПолитика = Перечисления.УчетнаяПолитика.ЛИФО Тогда


НАДО

Если РегистрыСведений.НастройкаУчетнойПолитики.ПолучитьПоследнее(НачалоГода(Дата)).УчетнаяПолитика = Перечисления.УчетнаяПолитика.ЛИФО Тогда
94. abadonna83 45 10.06.21 13:32 Сейчас в теме
Очень познавательный материал. Сильно помог при подготовки к сдачи.
Оставьте свое сообщение