Форум Чистова. Подготовка к экзаменам 1С

Аттестация "1С:Специалист" => Аттестация "1С:Специалист" БП => Тема начата: CrazyKid от Декабрь 14, 2012, 02:02:39 pm

Название: Задачи 38-43.
Отправлено: CrazyKid от Декабрь 14, 2012, 02:02:39 pm
Кто решает задачник новый, где организовать контроль минимальных остатков при ручной операции?
 Что то не пойму я куда вносить изменения, чтоб контроль был.
 Для документов все норм, там есть стандартные функции, вносишь в них необходимые изменения и все пашет, а ручная операция к этим функциям(процедурам) не обращается.
 У кого какие идеи есть?)
Название: Задачи 38-43.
Отправлено: sanok от Декабрь 14, 2012, 02:25:04 pm
Если это задача, где нужно контролировать лимит остатков товаров при списании (у меня сейчас нет задачника), то я в модуле регистра бухгалтерии, ПередЗаписью() проверял по каким счетам делается проводка, если по 10 или 41, то выполняется проверка минимального лимита.
Название: Задачи 38-43.
Отправлено: CrazyKid от Декабрь 17, 2012, 05:12:02 pm
sanok, У меня возникла проблема при внесении изменений в данную процедуру!) Когда только заводишь документ и записываешь данные, он нормально считает остатки, когда перезаписываю данные, отчет берет еще и данные из этого документа. Как их осторнировать при повторной записи, что то в голову не приходит!)
Название: Задачи 38-43.
Отправлено: sanok от Декабрь 18, 2012, 09:25:53 am
Попробуй использовать
 Новый Граница(Новый МоментВремени(ЭтотОбъект.Отбор.Регистратор.Дата,ЭтотОбъект.Отбор.Регистратор.Ссылка),ВидГраницы.Исключая)
 в качестве отбора по Дате в Запросе.
Название: Задачи 38-43.
Отправлено: CrazyKid от Декабрь 19, 2012, 03:28:51 pm
sanok, Спасибо, помогло!) Только я код малость изменил
 Новый Граница(Новый МоментВремени(ЭтотОбъект.Отбор.Регистратор.Значение.Дата,ЭтотОбъект.Отбор.Регистратор.Значение),ВидГраницы.Исключая)

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

Название: Задачи 38-43.
Отправлено: sanok от Декабрь 21, 2012, 08:39:12 am
Я еще на 2.0 сдавал.
Название: Задачи 38-43.
Отправлено: olya от Февраль 13, 2013, 12:43:45 pm
Пытаюсь разобраться с 41 задачей, ее решение в сборнике задач рассмотрено, кое как нашла функцию похожую на "ПолучитьТаблицуПартийНаСкладах" теперь мучаюсь: где находится процедура "Подобрать партии"? Подскажите кто как решал? а то в сборнике очень мутно решено...
Название: Задачи 38-43.
Отправлено: beatthatthing от Февраль 14, 2013, 05:57:35 pm
РегистрСведений с измерениями
 - Номенклатура (Номенклатурная группа)
 - Организация (Организация)
 - Склад (Склад)
 Ресурсы:
 - Минимальный остаток (Число, 10, 3)

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

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

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

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

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


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

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

 
Код
// Экзамен
              Если ТипЗнч(СтрокаТаблицыОстатки.МинимальныйОстаток) = Тип("Число") Тогда
                 Если (СтрокаТаблицыОстатки.МинимальныйОстаток) > 0 Тогда
                    Если СтрокаТаблицыОстатки.Количество - Количество < СтрокаТаблицыОстатки.МинимальныйОстаток Тогда
                       Сообщить ("Превышение минимального лимита остатков на " + (СтрокаТаблицыОстатки.МинимальныйОстаток - (СтрокаТаблицыОстатки.Количество - Количество)) +
                       " по номенклатуре " + СтрокаТаблицыОстатки.Номенклатура);
                    КонецЕсли;
                 КонецЕсли;
              КонецЕсли;
              // - экзамен
Название: Задачи 38-43.
Отправлено: olya от Февраль 15, 2013, 07:33:41 am
Большое спасибо! попробую...
Название: Задачи 38-43.
Отправлено: gavrikprog от Февраль 21, 2013, 07:36:48 pm
В сборнике задач решение есть.
 В решении нет условия для документа ручная операция.
Название: Задачи 38-43.
Отправлено: IgorXml от Март 13, 2013, 10:56:11 am
Начал решать примеры задач из сборника 2012. Нашел особенности:
 Вот код отчета из сборника:
Код
ВЫБРАТЬ
             НеСнижаемыеОстаткиСрезПоследних.НоменклатурнаяГруппа,
             НеСнижаемыеОстаткиСрезПоследних.МинимальныйОстаток,
             Номенклатура.Ссылка
 ПОМЕСТИТЬ Ном
 ИЗ
             РегистрСведений.НеСнижаемыеОстатки.СрезПоследних КАК НеСнижаемыеОстаткиСрезПоследних
                         ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.Номенклатура КАК Номенклатура
                         ПО НеСнижаемыеОстаткиСрезПоследних.НоменклатурнаяГруппа = Номенклатура.НоменклатурнаяГруппа
 ;
 ////////////////////////////////////////////////////////////////////////////////
 ВЫБРАТЬ
             Ном.Ссылка,
             Ном.НоменклатурнаяГруппа,
             Ном.МинимальныйОстаток,
             ХозрасчетныйОстатки.КоличествоОстаток
 ИЗ
             Ном КАК Ном,
             РегистрБухгалтерии.Хозрасчетный.Остатки(, Счет В (&Счет), , Организация = &Организация) КАК ХозрасчетныйОстатки

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

 Т.е. соединение забыли сделать smile
Название: Задачи 38-43.
Отправлено: olya от Март 13, 2013, 11:04:42 am
Согласна, сборник вообще ужасный! Особой помощи от него нет, много чего надо самим додумывать и догадываться. Такое ощущение, что просто на скорую руку его сделали:(
Название: Задачи 38-43.
Отправлено: beatthatthing от Март 13, 2013, 01:35:07 pm
я считаю, что пример решения задач - вообще не эталон и инструкция к действию. Просто покажет где и что смотреть.
 Посему запоминать конкретный текст запроса - вообще не имеет смысла (просто нужно понимание того, как примерно все строится). Для себя к примеру обнаружил (благодаря первому примеру) возможность обращения к экспортным функциям общего модуля из вычисляемых выражений.
 Задача кстати попалась по типу первой из примеров, но отчет на экзамене писал немного по-другому (как и функцию экспортную - она у меня даже меньше строк заняла). И это никак не повлияло на оценку.
Название: Задачи 38-43.
Отправлено: IgorXml от Март 13, 2013, 11:40:49 pm
beatthatthing, Проверил Ваше решение задач 40 и 41: http://forum.chistov.pro/index.php?topic=2308.msg27773#msg27773
 Работает, спасибо. smile
 Поправил только измерение Номенклатура -> НоменклатурнаяГруппа в регистре сведений. Так понятней.
Название: Задачи 38-43.
Отправлено: pvl_mksv от Апрель 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 ТОгда
                //Сообщить("По номеклатурной группе "+СтрокаТАблицыОстатки.НоменклатурнаяГруппа+" не соблюден неснижаемый остаток", СтатусСообщения.Информация);
                Сообщение = Новый СообщениеПользователю;
                Сообщение.Текст= "По номеклатурной группе "+СтрокаТАблицыОстатки.НоменклатурнаяГруппа+" не соблюден неснижаемый остаток.";
                Сообщение.КлючДанных = Реквизиты.Регистратор;
                Сообщение.Сообщить();
             КонецЕсли;
кто как делал?
 Спасибо.
Название: Задачи 38-43.
Отправлено: IgorXml от Апрель 15, 2013, 10:04:24 am
Цитата (pvl_mksv)
1) сам запрос  на минимальные остатки. связь по ном.группе, достаточно

 Да, в задании так: "...В табличной части документа определяется перечень номенклатурных групп и размер неснижаемого остатка (для каждой номенклатурной группы).
 ".
 От куда я брал методику(http://forum.chistov.pro/index.php?topic=2308.msg27773#msg27773) было введено "номенклатура", но понимать надо было как "НоменклатурнаяГруппа". Можно спросить у самого автора ))) - beatthatthing. Уверен, что у него в регистре тип "НоменклатурныеГруппы"

 
Цитата (pvl_mksv)
2)условие на вывод сообщения и как, таки, работает СообщениеСообщить в управляемом интерфейсе

 У меня так работает.
Код
Если СтрокаТаблицыОстатки.Количество - Количество < СтрокаТаблицыОстатки.МинимальныйОстаток Тогда   
                         Сообщить ("Превышение минимального лимита остатков на " + (СтрокаТаблицыОстатки.МинимальныйОстаток - (СтрокаТаблицыОстатки.Количество - Количество)) +   
                         " по номенклатуре " + СтрокаТаблицыОстатки.Номенклатура);   
 КонецЕсли;   
 ;

 И наверно лучше "СтрокаТаблицыОстатки.Номенклатура". Учет остатков всё-таки по не ней, а не по "СтрокаТАблицыОстатки.НоменклатурнаяГруппа", хотя отчет и регистр сделан по номенклатурной группе. Вообще надо будет всё проверить wink
Название: Задачи 38-43.
Отправлено: beatthatthing от Апрель 15, 2013, 10:42:59 am
Вроде в самой задаче было условие именно на номенклатурную группу - поэтому и делал как номенклатурная группа.
Название: Задачи 38-43.
Отправлено: pvl_mksv от Апрель 16, 2013, 10:47:52 pm
(17)Да, так и есть. Ладно будем надеяться и разбираться, а то в 22 уже сдавать, а выходные я проспал )
Название: Задачи 38-43.
Отправлено: alex_1974 от Июнь 06, 2013, 10:39:11 am
Кто смотрел задачи 38 и 39? Не пойму что имеется ввиду в разделении операций "Отпущено в производство" и "Использовано в производстве". В бухгалтерии требование-накладная и отчет производства за смену сразу списывают материалы на затраты. Т.е отпущено  - значит списано. Кроме спецодежды и спецоснастки. Нужно ли здесь учитывать в отпущенных именно спецодежду и спецоснастку или городить свой учет для разделения операций передачи и списания любых материалов?
Название: Задачи 38-43.
Отправлено: Charity от Октябрь 08, 2013, 02:05:32 pm
alex_1974, думаю, тут надо НЗП

Добавлено (08.10.2013, 14:05)
---------------------------------------------
Но я лично пока что 38-39 оставила на потом, когда всю книгу по учету производственных операций Харитонова и Чистова прочитаю

Название: Изменения в бухгалтерии
Отправлено: v3n7 от Февраль 02, 2016, 07:59:22 am
Готовлюсь к экзамену и заметил довольно сильные изменения в БП 3.0 и чтобы сильно не страдать с написанием и отладкой решения под новую версию конфигурации был придуман вот такой способ:
НестижаемыйОстаток = РегистрыСведений.МинимальныеОстатки.ПолучитьПоследнее(СтрокаДокумента.Период, Новый Структура("НоменклатурнаяГруппа, Склад", СтрокаТаблицыОстатки.Номенклатура.НоменклатурнаяГруппа, СтрокаДокумента.Склад));
Если НестижаемыйОстаток.Свойство("МинимальныеОстаток") Тогда
Если (СтрокаТаблицыОстатки.Количество - Количество) < НестижаемыйОстаток.МинимальныеОстаток Тогда
Сообщение = Новый СообщениеПользователю;
Сообщение.Текст = "Количества товара " + СтрокаТаблицыОстатки.Номенклатура +  "на складе " + СтрокаДокумента.Склад + " осталось меньше заданного минимума на " + (НестижаемыйОстаток.МинимальныеОстаток - (СтрокаТаблицыОстатки.Количество - Количество));
Сообщение.Сообщить();
КонецЕсли;
КонецЕсли;
Добавлен в общем модуле УчетТоваров, процедура СписатьОстаткиТоваров
Понятно,что не правильно вызывать запрос в цикле, получить срез последних можно получить до начала цикл, а в цикл уже выбирать нужное значение.