Автор Тема: Билет 1. Спец по платформе V8  (Прочитано 256048 раз)

0 Пользователей и 2 Гостей просматривают эту тему.

MadRave

  • Новичок
  • *
  • Сообщений: 1
Re: Билет 1. Спец по платформе V8
« Ответ #195 : Сентябрь 05, 2016, 03:26:54 pm »
Буду рад критике :)

Анатолий

  • Проверенный
  • ***
  • Сообщений: 134
Re: Билет 1. Спец по платформе V8
« Ответ #196 : Сентябрь 09, 2016, 04:41:51 pm »
попался этот билет. все сделал кроме з/п. Никак не хотела проводиться НачислениеЗарплаты.
Вылезла ошибка :
-Недопустимое значение параметра (параметр номер '2') (Необходим пересчет фактического периода действия)'
на: Движения.ДопНачисления.Записать(,Истина);

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


Alyx Ruby

  • Пользователь
  • **
  • Сообщений: 72
  • ФИО: Alyx Ruby
Re: Билет 1. Спец по платформе V8
« Ответ #197 : Сентябрь 09, 2016, 05:55:36 pm »
Анатолий, ты про экзамен? Если да, то и у меня в 1 билете была ошибка с пустой партией, с которой я боролась , потеряв драгоценное время (хотя все заполнялось прекрасно, видимо глючная база или платформа)...  :D В итоге не зачет!  :-\ Такое впечатление, что это делается специально! А люди от нервов теряются и тратят драгоценное время и деньги впустую!  >:(
« Последнее редактирование: Сентябрь 09, 2016, 06:01:58 pm от Alyx Ruby »

Анатолий

  • Проверенный
  • ***
  • Сообщений: 134
Re: Билет 1. Спец по платформе V8
« Ответ #198 : Сентябрь 09, 2016, 06:36:16 pm »
у меня тоже все рассчиталось норм. В режиме отладки через "Вычислить выражение" проверял - все нормально заполнено. НО не проводится. Выше названная ошибка. До сих пор не пойму из-за чего. Может хоть когда результат экзамена пришлют, скажут что это. Хотя вряд ли. Там конвейер - не работает - два, дальше думаю причины смотреть даже не будут.

Анатолий

  • Проверенный
  • ***
  • Сообщений: 134
Re: Билет 1. Спец по платформе V8
« Ответ #199 : Сентябрь 28, 2016, 01:05:39 am »
почему все используют в запросе:
РАЗНОСТЬДАТ(НачислениеЗарплатыДопНачисления.Сотрудник.ДатаПриема, &ПериодРегистрации, ГОД)
//если от 2016.01.01 вычесть 2015.12.31 то вернется 1 год.
//////////////////////////////////////////////////////
Никто не знает:
-В условии сказано что отчет должен быть строго за месяц определенного года (январь,февраль). Никак попроще это нельзя решить, не создавая формуОтчета и реквизитов? Нет же никаких хитрых настроек?
« Последнее редактирование: Сентябрь 28, 2016, 02:09:22 am от Анатолий »

lanky

  • Пользователь
  • **
  • Сообщений: 37
Re: Билет 1. Спец по платформе V8
« Ответ #200 : Сентябрь 28, 2016, 01:24:51 pm »
попался этот билет. все сделал кроме з/п. Никак не хотела проводиться НачислениеЗарплаты.
Вылезла ошибка :
-Недопустимое значение параметра (параметр номер '2') (Необходим пересчет фактического периода действия)'
на: Движения.ДопНачисления.Записать(,Истина);

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

Из синтакс-помощника

"<ТолькоЗапись> (необязательный)

Тип: Булево.
Определяет режим записи набора. Истина - производится только запись набора; Ложь - производится пересчет фактического периода действия и ввод записей перерасчетов.
По умолчанию при записи набора производится не только собственно запись, но и пересчет периода действия (для регистров расчета с поддержкой периода действия) и ввод записей перерасчета (если необходимо).
Внимание! Значение Истина для параметра можно задавать только при записи уже записанного набора записей и только в том случае, если в наборе записей изменялись только ресурсы и реквизиты. Если в наборе записей изменялись любые другие поля записей набора, то запись набора с параметром, равным Истина не выполняется и выдается сообщение об ошибке.
Значение по умолчанию: Ложь. "

Необходимо было писать так
Движения.ДопНачисления.Записать();
« Последнее редактирование: Сентябрь 28, 2016, 01:28:20 pm от lanky »

alex1248

  • Призрак форума
  • *****
  • Сообщений: 714
Re: Билет 1. Спец по платформе V8
« Ответ #201 : Сентябрь 28, 2016, 02:45:00 pm »
почему все используют в запросе:
РАЗНОСТЬДАТ(НачислениеЗарплатыДопНачисления.Сотрудник.ДатаПриема, &ПериодРегистрации, ГОД)
//если от 2016.01.01 вычесть 2015.12.31 то вернется 1 год.
че сразу все-то? я наверное дни/365 использовал с округлением куда надо. Или месяцы / 12, т.к. в днях может быть проблема с 365/366
Никто не знает:
-В условии сказано что отчет должен быть строго за месяц определенного года (январь,февраль). Никак попроще это нельзя решить, не создавая формуОтчета и реквизитов? Нет же никаких хитрых настроек?
Ни в одном отчете не создавал форму отчета, отчеты в этих задачах все простые. Сложные вот только начал делать, по спецзаказам от бухов )

Анатолий

  • Проверенный
  • ***
  • Сообщений: 134
Re: Билет 1. Спец по платформе V8
« Ответ #202 : Сентябрь 28, 2016, 08:06:21 pm »
да не. я все правильно написал. просто в одном месте невнимательно код напечатал, и даже мысли не возникло что там косяк может быть. Я когда набор заполнял в цикле: вместо Движение.Результат написал Движение.Регистратор и из-за этого такая ошибка вылетела. Там времени совсем мало. Монитор маленький, неудобный.


попался этот билет. все сделал кроме з/п. Никак не хотела проводиться НачислениеЗарплаты.
Вылезла ошибка :
-Недопустимое значение параметра (параметр номер '2') (Необходим пересчет фактического периода действия)'
на: Движения.ДопНачисления.Записать(,Истина);

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

Из синтакс-помощника

"<ТолькоЗапись> (необязательный)

Тип: Булево.
Определяет режим записи набора. Истина - производится только запись набора; Ложь - производится пересчет фактического периода действия и ввод записей перерасчетов.
По умолчанию при записи набора производится не только собственно запись, но и пересчет периода действия (для регистров расчета с поддержкой периода действия) и ввод записей перерасчета (если необходимо).
Внимание! Значение Истина для параметра можно задавать только при записи уже записанного набора записей и только в том случае, если в наборе записей изменялись только ресурсы и реквизиты. Если в наборе записей изменялись любые другие поля записей набора, то запись набора с параметром, равным Истина не выполняется и выдается сообщение об ошибке.
Значение по умолчанию: Ложь. "

Необходимо было писать так
Движения.ДопНачисления.Записать();

Анатолий

  • Проверенный
  • ***
  • Сообщений: 134
Re: Билет 1. Спец по платформе V8
« Ответ #203 : Сентябрь 28, 2016, 09:19:13 pm »
никто не смог сделать чтоб отчет только за месяц формировался? Можно еще один параметр добавить Месяц. и его подставлять в параметры которые в запросе. Как сделать чтоб в отчете 01.05.2016 заменялось на май 2016.

Анатолий

  • Проверенный
  • ***
  • Сообщений: 134
Re: Билет 1. Спец по платформе V8
« Ответ #204 : Сентябрь 28, 2016, 09:20:19 pm »
а все. не надо. разобрался

Анатолий

  • Проверенный
  • ***
  • Сообщений: 134
Re: Билет 1. Спец по платформе V8
« Ответ #205 : Сентябрь 29, 2016, 01:14:13 am »
интересно на практике бизнес-процессы кто-нибудь применяет? Ясно же что этого недостаточно для практического применения. Что еще нужно доработать (например необходимо чтоб Жупиков не мог нажать "Выполнено,закрыть" на задаче для Лоханкиной и т.д.)

Пётр

  • Новичок
  • *
  • Сообщений: 2
Re: Билет 1. Спец по платформе V8
« Ответ #206 : Сентябрь 29, 2016, 02:43:43 pm »
Добрый день!
Прошу пояснить кто знает)) Что за волшебная кнопка рассчитать о которой пишут?

Я думал что это кнопка, должна пере провести документы которые влияют на сформированную премию. В задание (Механизм перерасчетов в рамках данной задачи использовать не надо) 

GH0STexe

  • Пользователь
  • **
  • Сообщений: 29
  • ФИО: Иван
Re: Билет 1. Спец по платформе V8
« Ответ #207 : Сентябрь 29, 2016, 02:55:48 pm »
Добрый день!
Прошу пояснить кто знает)) Что за волшебная кнопка рассчитать о которой пишут?

Я думал что это кнопка, должна пере провести документы которые влияют на сформированную премию. В задание (Механизм перерасчетов в рамках данной задачи использовать не надо)
А как между собой связаны кнопка "Рассчитать" и механизм перерасчетов? Я что то не понял мысли

Пётр

  • Новичок
  • *
  • Сообщений: 2
Re: Билет 1. Спец по платформе V8
« Ответ #208 : Сентябрь 29, 2016, 03:09:27 pm »
Добрый день!
Прошу пояснить кто знает)) Что за волшебная кнопка рассчитать о которой пишут?

Я думал что это кнопка, должна пере провести документы которые влияют на сформированную премию. В задание (Механизм перерасчетов в рамках данной задачи использовать не надо)
А как между собой связаны кнопка "Рассчитать" и механизм перерасчетов? Я что то не понял мысли

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

Fundo0rin

  • Пользователь
  • **
  • Сообщений: 12
Re: Билет 1. Спец по платформе V8
« Ответ #209 : Октябрь 06, 2016, 02:56:08 pm »
Хотел бы поделиться своими соображениями по поводу использования Старого или Нового метода учета остатков при списании.

Структура для ОУ:
2 Регистра:
1. "Остатки товаров"
изм: Номенклатура, склад
рес: Количество

2. "Стоимость товаров"
изм: Номенклатура, Партия
Рес: Количество, Стоимость
(Из условия задачи, себестоимость не учитывается в разрезе складов т.е. Остатки списываем со склада а себестоимость по учетной политике, даже если склад получается разным)


Мой листинг модуля документа РасходнаяНакладная для ОУ:

Процедура ОбработкаПроведения(Отказ, РежимПроведения)

Метод = РегистрыСведений.УчетнаяПолитика.ПолучитьПоследнее(Новый Граница(МоментВремени())).МетодСписания; // быстрее в 2 раза чем через запрос

Если ЗначениеЗаполнено(Метод) Тогда
Если Метод = Перечисления.МетодСписания.LIFO Тогда
Порядок = " Убыв";
Иначе
Порядок = "";
КонецЕсли;
Иначе
Сообщение = Новый СообщениеПользователю;
Сообщение.Текст = "Заполните Учетную политику!";
Сообщение.Сообщить();
Отказ = Истина;
Возврат;
КонецЕсли;

//- Получить учетную политику



//+ Получаем номенклатуру без услуг Делаем движения по отаткам

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

Запрос.УстановитьПараметр("Ссылка", Ссылка);

РезультатЗапроса = Запрос.ВыполнитьПакет();
СписатьОстатки = РезультатЗапроса[1].Выбрать();

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

Движения.ОстаткиТоваров.БлокироватьДляИзменения = Истина;
Движения.Записать();

//- Получаем номенклатуру без услуг Делаем движения по отаткам


//+ Проверяем отриц остатки

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

Запрос.УстановитьПараметр("Склад", Склад);
Запрос.УстановитьПараметр("ТочкаИтогов", Новый Граница(МоментВремени(), ВидГраницы.Включая));

ПакетРезультатов = Запрос.ВыполнитьПакет();
РезультатЗапроса = ПакетРезультатов[0];

Если НЕ РезультатЗапроса.Пустой() Тогда
Отказ = Истина;

Выборка = РезультатЗапроса.Выбрать();
Пока Выборка.Следующий() Цикл
Сообщение = Новый СообщениеПользователю;
Сообщение.Текст = "Мало товара " + Выборка.НаименованиеПолное + " на складе - "+ Склад +" нужно еще " + (-Выборка.КоличествоОстаток);
Сообщение.Сообщить();
КонецЦикла; 
КонецЕсли;

Если Отказ Тогда
Возврат;
КонецЕсли;

//- Проверяем отриц остатки


//+ Блокировка Создаем движения в регистре партий

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

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

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

Запрос.УстановитьПараметр("ТочкаИтоговДляСебестоимости", МоментВремени());

Движения.СтоимостьТоваров.Очистить();

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

Пока ВыборкаТовар.Следующий() Цикл

ОсталосьСписать = ВыборкаТовар.Количество;

ВыборкаПартия = ВыборкаТовар.Выбрать();
Пока ВыборкаПартия.Следующий() И ОсталосьСписать <> 0 Цикл

Списать = МИН(ОсталосьСписать, ВыборкаПартия.КоличествоОстаток);

Движение = Движения.СтоимостьТоваров.ДобавитьРасход();
Движение.Период = Дата;
Движение.Номенклатура = ВыборкаПартия.Номенклатура;
Движение.Партия = ВыборкаПартия.Партия;
Движение.Количество = Списать;
Движение.Стоимость = Списать / ВыборкаПартия.КоличествоОстаток * ВыборкаПартия.СтоимостьОстаток;

ОсталосьСписать = ОсталосьСписать - Списать;
КонецЦикла;

КонецЦикла;

Движения.СтоимостьТоваров.Записывать = Истина;

//- Блокировка Создаем движения в регистре партий
КонецПроцедуры

Короткий план:
1. Получаем учетную политику на тек момент.
2. Запросом получаем список номенклатуры без услуг. А так же сразу же создаем индексированную временную таблицу для последующих запросов. Делаем движения по остаткам товаров.
3. Получаем из Регистра Остатки товаров записи с отрицательными остатками, если записи есть - отмена транзакции иначе продолжаем
4. Блокируем регистр Стоимость товаров по номенклатуре. Читаем регистр по учет политике, делаем движения, записываемся.

Теперь нюансы:
1. В этой задаче обязателен запрос на выборку номенклатуры без услуг.
Обращение через точку в цикле - ошибка! При получении значения через точку мы не только получаем нужное значение но и все другие реквизиты.
2. По совету коллег – не использовать метод "Сообщить("")" т.к. он плохо работает в Web интерфейсе, использовать "СообщениеПользователю"

3. А теперь самое интересное, почему новая методика а не старая.
За образец "Старого" решения я взял решение от Alex1248, убрал в нем все движения/блокировки, все что относится к бухгалтерским задачам и начал замеры производительности.
Результаты:
Производительность моего решения показала лучший результат при 600+ записей в Табличной части документа (600+ одинаковых номенклатур в ТЧ). Что дает нам понять, при росте заполнености базы мое решение будет работать в разы быстрее. (При 1000 записей в ТЧ производительность различалась на 40% в мою пользу).
Как итог: Запись происходит быстрее, блокировки короче.

Код Alex1248 с которым сравнивал:
Процедура ОбработкаПроведения(Отказ, Режим)

Метод = РегистрыСведений.УчетнаяПолитика.ПолучитьПоследнее(Дата).Метод;

Если ЗначениеЗаполнено(Метод) Тогда
Если Метод = Перечисления.УчетнаяПолитика.ЛИФО Тогда
Порядок = " Убыв";
Иначе
Порядок = "";
КонецЕсли;
Иначе
Сообщить("Заполните метод списания!");
Отказ = Истина;
Возврат;
КонецЕсли;

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

// регистр Себестоимость Расход
Движения.Себестоимость.Записывать = Истина;

// регистр бухгалтерии
//Движения.РегистрБухгалтерии.Записывать = Истина;

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

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


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

//Движения по регистрам накопления
Пакет = Запрос.ВыполнитьПакет();
Результат = Пакет[1].Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);

Пока Результат.Следующий() Цикл

Выборка = Результат.Выбрать();
Остаток = Результат.КолДок;

Пока Выборка.Следующий() И Остаток > 0 Цикл

Если Выборка.КолДок > Выборка.КолСклад Тогда
Сообщить("Товара не хывтает");
Отказ = Истина;
Возврат;
КонецЕсли;

//Остатки
Движение = Движения.ОстаткиНоменклатуры.Добавить();
Движение.ВидДвижения = ВидДвиженияНакопления.Расход;
Движение.Период = Дата;
Движение.Номенклатура = Выборка.Номенклатура;
Движение.Склад = Склад;
Движение.Количество = мин(Выборка.КолОст,Остаток);

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

Остаток = Остаток - Движение.Колво;
КонецЦикла;

КонецЦикла;
КонецПроцедуры


Кстати
РегистрыСведений.УчетнаяПолитика.ПолучитьПоследнее(Новый Граница(МоментВремени())).МетодСписания;Работает быстрее чем через запрос в 2 раза. но разница в 0.0015 секунды (0.0030 против 0.0015).

Готов услышать критику и замечания.
« Последнее редактирование: Октябрь 06, 2016, 03:01:01 pm от Fundo0rin »