Автор Тема: Задачи 38-43.  (Прочитано 10249 раз)

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

CrazyKid

  • Новичок
  • *
  • Сообщений: 1
  • ФИО: Алекс
Задачи 38-43.
« : Декабрь 14, 2012, 02:02:39 pm »
Кто решает задачник новый, где организовать контроль минимальных остатков при ручной операции?
 Что то не пойму я куда вносить изменения, чтоб контроль был.
 Для документов все норм, там есть стандартные функции, вносишь в них необходимые изменения и все пашет, а ручная операция к этим функциям(процедурам) не обращается.
 У кого какие идеи есть?)
« Последнее редактирование: Декабрь 14, 2012, 03:23:58 pm от Алекс »

sanok

  • Новичок
  • *
  • Сообщений: 0
  • ФИО: Александр
Задачи 38-43.
« Ответ #1 : Декабрь 14, 2012, 02:25:04 pm »
Если это задача, где нужно контролировать лимит остатков товаров при списании (у меня сейчас нет задачника), то я в модуле регистра бухгалтерии, ПередЗаписью() проверял по каким счетам делается проводка, если по 10 или 41, то выполняется проверка минимального лимита.


CrazyKid

  • Новичок
  • *
  • Сообщений: 1
  • ФИО: Алекс
Задачи 38-43.
« Ответ #2 : Декабрь 17, 2012, 05:12:02 pm »
sanok, У меня возникла проблема при внесении изменений в данную процедуру!) Когда только заводишь документ и записываешь данные, он нормально считает остатки, когда перезаписываю данные, отчет берет еще и данные из этого документа. Как их осторнировать при повторной записи, что то в голову не приходит!)
« Последнее редактирование: Декабрь 17, 2012, 05:16:09 pm от Алекс »

sanok

  • Новичок
  • *
  • Сообщений: 0
  • ФИО: Александр
Задачи 38-43.
« Ответ #3 : Декабрь 18, 2012, 09:25:53 am »
Попробуй использовать
 Новый Граница(Новый МоментВремени(ЭтотОбъект.Отбор.Регистратор.Дата,ЭтотОбъект.Отбор.Регистратор.Ссылка),ВидГраницы.Исключая)
 в качестве отбора по Дате в Запросе.
« Последнее редактирование: Декабрь 18, 2012, 09:26:13 am от Александр »

CrazyKid

  • Новичок
  • *
  • Сообщений: 1
  • ФИО: Алекс
Задачи 38-43.
« Ответ #4 : Декабрь 19, 2012, 03:28:51 pm »
sanok, Спасибо, помогло!) Только я код малость изменил
 Новый Граница(Новый МоментВремени(ЭтотОбъект.Отбор.Регистратор.Значение.Дата,ЭтотОбъект.Отбор.Регистратор.Значение),ВидГраницы.Исключая)

Добавлено (19.12.2012, 15:28)
---------------------------------------------
sanok, А ты сдавал экзамен, на 2.0 или 3.0? Если на 3.0, то какие билеты, как раньше или другие?


sanok

  • Новичок
  • *
  • Сообщений: 0
  • ФИО: Александр
Задачи 38-43.
« Ответ #5 : Декабрь 21, 2012, 08:39:12 am »
Я еще на 2.0 сдавал.

olya

  • Новичок
  • *
  • Сообщений: 0
  • ФИО: Оля
Задачи 38-43.
« Ответ #6 : Февраль 13, 2013, 12:43:45 pm »
Пытаюсь разобраться с 41 задачей, ее решение в сборнике задач рассмотрено, кое как нашла функцию похожую на "ПолучитьТаблицуПартийНаСкладах" теперь мучаюсь: где находится процедура "Подобрать партии"? Подскажите кто как решал? а то в сборнике очень мутно решено...

beatthatthing

  • Новичок
  • *
  • Сообщений: 0
  • ФИО: Wazdukka Gutsmek
Задачи 38-43.
« Ответ #7 : Февраль 14, 2013, 05:57:35 pm »
РегистрСведений с измерениями
 - Номенклатура (Номенклатурная группа)
 - Организация (Организация)
 - Склад (Склад)
 Ресурсы:
 - Минимальный остаток (Число, 10, 3)

 Общий модуль УчетТоваров
 По поиску ищем строку "Если СчетаУчетаН.Количество() > 0 Тогда"

 Чуть выше до Текст = ""; вставляем следующее:

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

 В самом первом пакете запроса следом под строкой "|Пустая партия КАК ДокументОприходования," вставляем
 
Цитата
| " + ?(КонтрольМО, "СУММА(ЕСТЬNULL(ТЧ.МинимальныйОстаток, 0)) КАК МинимальныйОстаток,","") + "

 и чуть ниже, где таблицы соединяются над "|Сгруппировать ПО" вставляем
 
Цитата
| " + ?(КонтрольМО, " ЛЕВОЕ СОЕДИНЕНИЕ ТЧ КАК ТЧ
 | ПО Остатки.Субконто1.НоменклатурнаяГруппа = ТЧ.НоменклатурнаяГруппа", "") + "


 Далее ищем строку "СтрокаТаблицыОстатки = ТаблицаОстатки.Найти(СтрокаПартии.НомерСтроки, "НомерСтроки");"

 И под ней вставляем

 
Код
// Экзамен
              Если ТипЗнч(СтрокаТаблицыОстатки.МинимальныйОстаток) = Тип("Число") Тогда
                 Если (СтрокаТаблицыОстатки.МинимальныйОстаток) > 0 Тогда
                    Если СтрокаТаблицыОстатки.Количество - Количество < СтрокаТаблицыОстатки.МинимальныйОстаток Тогда
                       Сообщить ("Превышение минимального лимита остатков на " + (СтрокаТаблицыОстатки.МинимальныйОстаток - (СтрокаТаблицыОстатки.Количество - Количество)) +
                       " по номенклатуре " + СтрокаТаблицыОстатки.Номенклатура);
                    КонецЕсли;
                 КонецЕсли;
              КонецЕсли;
              // - экзамен
« Последнее редактирование: Февраль 14, 2013, 05:58:16 pm от Wazdukka Gutsmek »

olya

  • Новичок
  • *
  • Сообщений: 0
  • ФИО: Оля
Задачи 38-43.
« Ответ #8 : Февраль 15, 2013, 07:33:41 am »
Большое спасибо! попробую...

gavrikprog

  • Новичок
  • *
  • Сообщений: 0
  • ФИО: Александр
Задачи 38-43.
« Ответ #9 : Февраль 21, 2013, 07:36:48 pm »
В сборнике задач решение есть.
 В решении нет условия для документа ручная операция.
« Последнее редактирование: Февраль 21, 2013, 07:45:37 pm от Александр »

IgorXml

  • Пользователь
  • **
  • Сообщений: 42
  • IgorXml
  • ФИО: Игорь
Задачи 38-43.
« Ответ #10 : Март 13, 2013, 10:56:11 am »
Начал решать примеры задач из сборника 2012. Нашел особенности:
    Пример 2 это задачи 40 и 41
     Пример 2 решен для конфигурации 2.0
     Решение отчета не корректно. Но может так было и задумано))
     

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

 Мне кажется что лучше так:
Код
...
 ИЗ
     Ном КАК Ном
      ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрБухгалтерии.Хозрасчетный.Остатки(, Счет В ИЕРАРХИИ (&Счет), , Организация = &Организация) КАК ХозрасчетныйОстатки
      ПО Ном.Ссылка = ХозрасчетныйОстатки.Субконто1.Ссылка

 Т.е. соединение забыли сделать smile
« Последнее редактирование: Март 13, 2013, 11:17:10 am от Игорь »

olya

  • Новичок
  • *
  • Сообщений: 0
  • ФИО: Оля
Задачи 38-43.
« Ответ #11 : Март 13, 2013, 11:04:42 am »
Согласна, сборник вообще ужасный! Особой помощи от него нет, много чего надо самим додумывать и догадываться. Такое ощущение, что просто на скорую руку его сделали:(

beatthatthing

  • Новичок
  • *
  • Сообщений: 0
  • ФИО: Wazdukka Gutsmek
Задачи 38-43.
« Ответ #12 : Март 13, 2013, 01:35:07 pm »
я считаю, что пример решения задач - вообще не эталон и инструкция к действию. Просто покажет где и что смотреть.
 Посему запоминать конкретный текст запроса - вообще не имеет смысла (просто нужно понимание того, как примерно все строится). Для себя к примеру обнаружил (благодаря первому примеру) возможность обращения к экспортным функциям общего модуля из вычисляемых выражений.
 Задача кстати попалась по типу первой из примеров, но отчет на экзамене писал немного по-другому (как и функцию экспортную - она у меня даже меньше строк заняла). И это никак не повлияло на оценку.

IgorXml

  • Пользователь
  • **
  • Сообщений: 42
  • IgorXml
  • ФИО: Игорь
Задачи 38-43.
« Ответ #13 : Март 13, 2013, 11:40:49 pm »
beatthatthing, Проверил Ваше решение задач 40 и 41: http://forum.chistov.pro/index.php?topic=2308.msg27773#msg27773
 Работает, спасибо. smile
 Поправил только измерение Номенклатура -> НоменклатурнаяГруппа в регистре сведений. Так понятней.
« Последнее редактирование: Март 13, 2013, 11:41:34 pm от Игорь »

pvl_mksv

  • Новичок
  • *
  • Сообщений: 0
  • ФИО: Павел А. Мокосеев
Задачи 38-43.
« Ответ #14 : Апрель 14, 2013, 10:48:42 pm »
Всем привет!
 Есть два вопроса по задаче 40 и 41:
 1) сам запрос  на минимальные остатки. связь по ном.группе, достаточно ли? (шпора отсюда http://forum.chistov.pro/index.php?topic=1870.msg28429#msg28429)
 
Код
Если СчетаУчетаН.Количество() > 0 Тогда

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

       |СГРУППИРОВАТЬ ПО
       |   Остатки.Счет,
       |   Остатки.Подразделение,
       |   Остатки.Субконто1, " + ?(СчетаУчетаН_Склад.Количество() > 0, "
       |   ОстаткиПоСкладам.Субконто2,", "")+ "
       |   Остатки.Организация,
       |   ВложенныйЗапрос.НоменклатурнаяГруппа,
        |   ВложенныйЗапрос.Количество"
       ;

    КонецЕсли;

 что-то я упускаю при таком подходе к получению остатков (интуицией чую wink )
 2)условие на вывод сообщения и как, таки, работает СообщениеСообщить в управляемом интерфейсе
 процедура УчетТоваров.СписатьОстаткиТоваров по аналогии со шпорой делал
 
Код
Если (СтрокаТаблицыОстатки.Количество - Количество)<СтрокаТаблицыОстатки.Количество1 ТОгда
                //Сообщить("По номеклатурной группе "+СтрокаТАблицыОстатки.НоменклатурнаяГруппа+" не соблюден неснижаемый остаток", СтатусСообщения.Информация);
                Сообщение = Новый СообщениеПользователю;
                Сообщение.Текст= "По номеклатурной группе "+СтрокаТАблицыОстатки.НоменклатурнаяГруппа+" не соблюден неснижаемый остаток.";
                Сообщение.КлючДанных = Реквизиты.Регистратор;
                Сообщение.Сообщить();
             КонецЕсли;
кто как делал?
 Спасибо.