Автор Тема: Задача 1.01  (Прочитано 176976 раз)

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

poritskiy

  • Пользователь
  • **
  • Сообщений: 10
  • ФИО: Александр
Re: Задача 1.01
« Ответ #420 : Январь 02, 2015, 03:37:44 pm »
Моё решение, прокомментируйте.

Solitar

  • Пользователь
  • **
  • Сообщений: 14
  • ФИО: Den
Re: Задача 1.01
« Ответ #421 : Январь 02, 2015, 08:00:29 pm »
Мое решение. Не смог придумать, как красиво сделать движение по РН "Продажи", т.к. добавление нового движения по продаже у меня должно было быть одновременно со списанием партии, то возникли сложности как посчитать сумму продажи. И в отчете "Остатки по товарам" не смог найти способ, как убрать надпись ИТОГО в самом низу.


poritskiy

  • Пользователь
  • **
  • Сообщений: 10
  • ФИО: Александр
Re: Задача 1.01
« Ответ #422 : Январь 03, 2015, 01:29:12 pm »
Мое решение. Не смог придумать, как красиво сделать движение по РН "Продажи", т.к. добавление нового движения по продаже у меня должно было быть одновременно со списанием партии, то возникли сложности как посчитать сумму продажи. И в отчете "Остатки по товарам" не смог найти способ, как убрать надпись ИТОГО в самом низу.

1.У вас решение не на каркасной конфигурации.
2.В модуле док. Приходной накладной строка "Движения.ПартииТоваров.Очистить();" не обязательна.
3.В модуле док. расходной накладной строка "Движения.ПартииТоваров.Очистить(); и Движения.Продажи.Очистить();
" не обязательна.
4.Для чего этот фрагмент кода "
Если ДополнительныеСвойства.Проведен Тогда
      Движения.ПартииТоваров.БлокироватьДляИзменения = Истина;  //блокируем старые записи в ТЧ + для разделения итогов
   КонецЕсли;
"
Видел много решений но такое первый раз.
 5.  В запросе временные таблицы нужно обязательно индексировать за это снимают балы.
6. вместо параметра "Запрос.УстановитьПараметр("ТочкаИтогов", МоментВремени());"
я бы вам посоветовал писать
"Запрос.УстановитьПараметр("ТочкаИтогов",?(Режим=РежимПроведенияДокумента.Неоперативный,Новый Граница(МоментВремени(),ВидГраницы.Включая),Неопределено));
7. Вместо
"Если ОбщийМодуль.ПолучитьУчетнуюПолитику(Дата) = Перечисления.МетодыСписания.FIFO Тогда
      
      Запрос.Текст = СтрЗаменить(Запрос.Текст, "ПартииТоваровОстатки.Партия.МоментВремени УБЫВ",
      "ПартииТоваровОстатки.Партия.МоментВремени ВОЗР");   
      
   КонецЕсли;

"
Лучше писать например так
"Если РегистрыСведений.УчетнаяПолитика.ПолучитьПоследнее(Дата).МетодСписания = Перечисления.УчетнаяПолитика.ФИФО Тогда
      Запрос.Текст = СтрЗаменить(Запрос.Текст, " УБЫВ", "");   
   КонецЕсли;    

"
8. Сообщение пользователю также не оптимально реализовано
вместо "
Сообщение = Новый СообщениеПользователю;
         Сообщение.Текст = "Товар " + ВыборкаИтоги.Номенклатура + " отсутствует.";  // х3 как вывести в итогах Представление наименования, это минус...
         Сообщение.Сообщить();

"
Лучше писать
"
Сообщение = Новый СообщениеПользователю;
            Сообщение.Текст = "Не доастаточно номенклатуры "+ВыборкаНоменклатура.Номенклатура+" в количестве "+(ВыборкаНоменклатура.Количество -ВыборкаНоменклатура.КолОст);
            Сообщение.Поле = "СписркНоменклатуры[ВыборкаНоменклатура.номерСтроки-1].Номенклатура";
            Сообщение.УстановитьДанные(ЭтотОбъект);
            Сообщение.Сообщить();

"
9. Цикл по обходу результата не оптимально сделан
Посмотрите мое решение там и найдете решение по заполнению регистра Продажи.

Solitar

  • Пользователь
  • **
  • Сообщений: 14
  • ФИО: Den
Re: Задача 1.01
« Ответ #423 : Январь 05, 2015, 12:43:04 pm »
poritskiy,

1. Это не минус. Не нужно будет смотреть настройки каркасной + я буду уверен в настройке всех метаданных.
2. Обязательно, сам Чистов про это говорил на своих курсах. Т.к. возможны ситуации, что с конфигурацией будут работать и в обычном, и в управляемом приложение. Разъяснения ниже.
3. К 2ому.
4. Чтобы не раздувалась таблица итогов
5. Палка на двух концах, смотря какие объемы данных. На эту тему можно подискутировать с экзаменатором.
6. Ничего про оперативность проведения не сказано
7. Кому как читабельнее

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

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

4. СписатьСум = ?(ВыборкаДетальныеЗаписи.КоличествоОстаток=0,0,ВыборкаДетальныеЗаписи.СтоимостьОстаток*СписатьКол/ВыборкаДетальныеЗаписи.КоличествоОстаток) первое условие у Вас не должно никогда сработать, т.к. проверка на количествоОстаток у Вас сделана на уровне итогов.

5. Сообщение.Текст = " "+ВыборкаНоменклатура.Номенклатура+" Не хватает "+КолНеХватает*(-1) ; - за это снимут балы, т.к. не явно строится запрос к спр "Номенклатура". Для этого нужно в запросе использовать "Представление".

Для себя почерпнул идею с накоплением себестоимости в цикле.

ksandr

  • Проверенный
  • ***
  • Сообщений: 138
  • ФИО: ksandr
Re: Задача 1.01
« Ответ #424 : Январь 05, 2015, 10:31:05 pm »
poritskiy,

6. Ничего про оперативность проведения не сказано

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

evtgeniy

  • Новичок
  • *
  • Сообщений: 2
Re: Задача 1.01
« Ответ #425 : Март 05, 2015, 02:47:48 pm »
Такой вопрос. У многих видел следующее. При проверке наличия остатков в цикле, когда остатка не хватает, все равно происходит заполнение наборов записей(отказ устанавливается в Истину). Что будет если сделать сначала проверку остатков по всем товарам, потом,если товаров хватает для выборки применить метод Сбросить() и начать новый обход уже с заполнением наборов записей?
Будет ли в этом какой-то выигрыш? С одной стороны не происходит создание и заполнение наборов записей, если этого не нужно, а с другой стороны два цикла

todd22

  • Новичок
  • *
  • Сообщений: 4
  • ФИО: Борис
Re: Задача 1.01
« Ответ #426 : Март 06, 2015, 10:03:07 am »
" а в том что система возьмет актуальные рассчитанные итоги (на 2999 год если мне не изменяет память)"
С 8.3 на 5999 год.

ksandr

  • Проверенный
  • ***
  • Сообщений: 138
  • ФИО: ksandr
Re: Задача 1.01
« Ответ #427 : Март 08, 2015, 09:27:01 pm »
" а в том что система возьмет актуальные рассчитанные итоги (на 2999 год если мне не изменяет память)"
С 8.3 на 5999 год.
С какой легкостью фирма 1С оперирует тысячелетиями:)

GROOVY

  • Администратор
  • Старожил
  • *****
  • Сообщений: 284
  • ФИО: Павел Чистов
Re: Задача 1.01
« Ответ #428 : Март 09, 2015, 08:38:27 pm »
" а в том что система возьмет актуальные рассчитанные итоги (на 2999 год если мне не изменяет память)"
С 8.3 на 5999 год.

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

program1Cer

  • Новичок
  • *
  • Сообщений: 8
  • ФИО: Алексей
Re: Задача 1.01
« Ответ #429 : Март 10, 2015, 08:41:10 am »
Такой вопрос. У многих видел следующее. При проверке наличия остатков в цикле, когда остатка не хватает, все равно происходит заполнение наборов записей(отказ устанавливается в Истину). Что будет если сделать сначала проверку остатков по всем товарам, потом,если товаров хватает для выборки применить метод Сбросить() и начать новый обход уже с заполнением наборов записей?
Будет ли в этом какой-то выигрыш? С одной стороны не происходит создание и заполнение наборов записей, если этого не нужно, а с другой стороны два цикла

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

Good_Smile

  • Пользователь
  • **
  • Сообщений: 21
  • ФИО: Елена
Re: Задача 1.01
« Ответ #430 : Март 10, 2015, 10:07:07 am »
Такой вопрос. У многих видел следующее. При проверке наличия остатков в цикле, когда остатка не хватает, все равно происходит заполнение наборов записей(отказ устанавливается в Истину). Что будет если сделать сначала проверку остатков по всем товарам, потом,если товаров хватает для выборки применить метод Сбросить() и начать новый обход уже с заполнением наборов записей?
Будет ли в этом какой-то выигрыш? С одной стороны не происходит создание и заполнение наборов записей, если этого не нужно, а с другой стороны два цикла

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

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

program1Cer

  • Новичок
  • *
  • Сообщений: 8
  • ФИО: Алексей
Re: Задача 1.01
« Ответ #431 : Март 10, 2015, 01:28:31 pm »
http://1c.chistov.pro/2013/07/blog-post_25.html - хорошую статью не грех еще раз посоветовать.

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

Good_Smile

  • Пользователь
  • **
  • Сообщений: 21
  • ФИО: Елена
Re: Задача 1.01
« Ответ #432 : Март 10, 2015, 05:23:06 pm »
http://1c.chistov.pro/2013/07/blog-post_25.html - хорошую статью не грех еще раз посоветовать.

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

Да, хорошая статья, читала её даже не один раз

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

да, она конкретно в их примерах не нужна (тонкий клиент, движений на форме нет) в общем без этой строчки код отрабатывает корректно,

и вопрос собственно в этой строчке: как вы считаете очищать или нет движения документа, и что при этом писать в пояснительной записке, и стоит ли вообще в пояснении акцентировать на этом внимание преподавателя?

-------
извините за комментарий не по задаче
« Последнее редактирование: Март 10, 2015, 05:24:47 pm от Good_Smile »

Наталья Б

  • Новичок
  • *
  • Сообщений: 2
Задача 1.01
« Ответ #433 : Март 15, 2015, 05:30:07 pm »
Мое решение, пожалуйста, поделитесь своими замечаниями и предложениями

program1Cer

  • Новичок
  • *
  • Сообщений: 8
  • ФИО: Алексей
Re: Задача 1.01
« Ответ #434 : Март 16, 2015, 10:23:00 am »
А вот кстате по поводу статьи есть вопрос всегда хотела его задать
Павел, в пункте 2 очищает движения документа, потом движения записывает, он там подробно рассказывает для чего сначала нужно очистить движения, но на форуме многие говорят, что строчка Движения.Очистить() не нужна,

Я считаю, что нужно. Там в статье Павел как раз и явно показывает, когда движения могут быть не очищены.