7.7 Отчет о загруженности оборудования

Тема в разделе "Конфигурирование на платформе "1С:Предприятие 7.7"", создана пользователем nicfest, 5 дек 2012.

  1. TopicStarter Overlay
    nicfest
    Offline

    nicfest Опытный в 1С

    Регистрация:
    5 дек 2012
    Сообщения:
    73
    Симпатии:
    0
    Баллы:
    26
    В данном случае речь идет об аналогах оборудования, никогда этого не делал и нигде не могу найти пример как можно задать а в последствии перебирать аналоги оборудования. Нельзя ли описать детали создания такого механизма?
  2. Бухгалтерский угодник
    Offline

    Бухгалтерский угодник Администраторы Команда форума Администратор

    Регистрация:
    29 дек 2008
    Сообщения:
    21.520
    Симпатии:
    407
    Баллы:
    104
    Откуда мне знать архитектуру вашей БД?
    В типовой ПУБ нет оборудования по выпуску. Вы как-то делаете аналоги?
  3. TopicStarter Overlay
    nicfest
    Offline

    nicfest Опытный в 1С

    Регистрация:
    5 дек 2012
    Сообщения:
    73
    Симпатии:
    0
    Баллы:
    26
    В выпуске нет. Но сейчас я имею ввиду не с привязкой к моей БД а вообще принцип по которому можно описать аналоги оборудования. Как то же это делается.
  4. Бухгалтерский угодник
    Offline

    Бухгалтерский угодник Администраторы Команда форума Администратор

    Регистрация:
    29 дек 2008
    Сообщения:
    21.520
    Симпатии:
    407
    Баллы:
    104
    Делается....
    У вас есть справочник оборудования.
    Создайте еще один справочник АналогиОборудования Наименования и кода нет. Есть единственный реквизит тпа справочник Оборудование".
    Справочник АналогиОборудования сделайте подчиненным справочнику Оборудование.
  5. TopicStarter Overlay
    nicfest
    Offline

    nicfest Опытный в 1С

    Регистрация:
    5 дек 2012
    Сообщения:
    73
    Симпатии:
    0
    Баллы:
    26
    Не совсем пойму а как потом добавлять аналоги, т.е в справочнике АналогиОборуд есть только один реквизит СправочникОборуд и можно выбрать только оборудование но как указать тогда аналогом чего оно является?
  6. Бухгалтерский угодник
    Offline

    Бухгалтерский угодник Администраторы Команда форума Администратор

    Регистрация:
    29 дек 2008
    Сообщения:
    21.520
    Симпатии:
    407
    Баллы:
    104
    АналогОборуд это же подчиненный справочник. У него есть владелец. Выбирая подчиненные элементы справочника мы узнаем аналоги.
    Здесь нужна будет рекурсивная процедура отбора.

    Учтите сразу подводный камень в алгоритме. Оборудование "А" имеет аналог оборудование "Б". А оборудование "Б" имеет своим аналогом оборудование "А".
    Для того чтобы не произошло попадание в бесконечный цикл нужно делать фильтр по уже пройденным позициям при отборе
  7. TopicStarter Overlay
    nicfest
    Offline

    nicfest Опытный в 1С

    Регистрация:
    5 дек 2012
    Сообщения:
    73
    Симпатии:
    0
    Баллы:
    26
    А вот например если справочник оборудования это иерархический справочник и аналогичное оборудование принадлежит одной группе может проще ничего не создавать а просто описать программно что аналоги это все элементы принадлежащие одному родителю???
  8. Бухгалтерский угодник
    Offline

    Бухгалтерский угодник Администраторы Команда форума Администратор

    Регистрация:
    29 дек 2008
    Сообщения:
    21.520
    Симпатии:
    407
    Баллы:
    104
    В принципе можно, но как-то топорно... Могут быть нюансы. Вдруг найдется оборудование которое подходит для другой группы? Творить дубль?
    Впрочем - дело вкуса
  9. TopicStarter Overlay
    nicfest
    Offline

    nicfest Опытный в 1С

    Регистрация:
    5 дек 2012
    Сообщения:
    73
    Симпатии:
    0
    Баллы:
    26
    Разрешите задать еще такой вопрос записываю в таблицу значений в цикле строки с единственной колонкой (документ.ссылка) и вроде все норма но при считывании значение возвращается только из первой строки, далее строки пустые, хотя запись проде проходит нормально
  10. Бухгалтерский угодник
    Offline

    Бухгалтерский угодник Администраторы Команда форума Администратор

    Регистрация:
    29 дек 2008
    Сообщения:
    21.520
    Симпатии:
    407
    Баллы:
    104
    код чтения/записи покажите
  11. TopicStarter Overlay
    nicfest
    Offline

    nicfest Опытный в 1С

    Регистрация:
    5 дек 2012
    Сообщения:
    73
    Симпатии:
    0
    Баллы:
    26
    Код:
    Если (ВремяДок = ВремяВРаботу) Тогда
    Док.ПолучитьВремя(ЧЧ,ММ);
    ДатаСдачиПрошл = ДатаВРаботу;
    ВремяСдачиПрошл = ЧЧ*60+ММ;
    ТабОчередь = СоздатьОбъект("ТаблицаЗначений");	  
    ТабОчередь.НоваяКолонка("Док");
    ТабОчередь.НоваяКолонка("Дата");
    ДокОЗ.ВыбратьПоНомеру(Форма.Параметр.НомерДок,Форма.Параметр.ДатаДок);
    ДокОЗ.ПолучитьДокумент();
    ТабОчередь.НоваяСтрока();
    ТабОчередь.Док = ДокОЗ.НомерДок;
    ТабОчередь.Дата = ДокОЗ.ДатаДок;
    Док.ВыбратьПоЗначению(ДатаВработу,,"Оборудование", Оборудование);
    Пока Док.ПолучитьДокумент() = 1 Цикл
    Если (Док.НомерДок <> Форма.Параметр.НомерДок) Тогда
    ТабОчередь.НоваяСтрока();
    ТабОчередь.Док = Док.НомерДок;
    ТабОчередь.Дата = Док.ДатаДок;
    КонецЕсли;
    КонецЦикла;
    ТабОчередь.ВыбратьСтроки();
    Пока ТабОчередь.ПолучитьСтроку() = 1 Цикл
    ДокОЗ.ВыбратьПоНомеру(ТабОчередь.Док,ТабОчередь.Дата);
    ДокОЗ.ПолучитьДокумент();
    глРасчетОчереди(ДокОЗ, ДатаСдачиПрошл, ВремяСдачиПрошл);
    КонецЦикла;
    
    Убедительная просьба - пользуйтесь тэгами!
  12. TopicStarter Overlay
    nicfest
    Offline

    nicfest Опытный в 1С

    Регистрация:
    5 дек 2012
    Сообщения:
    73
    Симпатии:
    0
    Баллы:
    26
    Я пытаюсь сделать пересчет очереди при ручном изменении, сначала делал так

    ДокОЗ.ВыбратьПоНомеру(Форма.Параметр.НомерДок,Форма.Параметр.ДатаДок);
    ДокОЗ.ПолучитьДокумент();
    глРасчетОчереди(ДокОЗ, Док.ДатаДок, ЧЧ*60+ММ);

    Док.ВыбратьПоЗначению(ДатаВработу,,"Оборудование", Оборудование);
    Пока Док.ПолучитьДокумент() = 1 Цикл
    Док.ПолучитьВремя(ЧЧ,ММ);
    ВремяДок = Док.ПолучитьВремя();
    Если (Док.НомерДок <> Форма.Параметр.НомерДок) или
    ((Док.ДатаДок = ДатаВРаботу) и (ВремяДок > ВремяВРаботу)) или (Док.ДатаДок > ДатаВРаботу) Тогда
    глРасчетОчереди(Док, ДатаСдачиПрошл, ВремяСдачиПрошл);
    КонецЕсли;
    КонецЦикла;

    но получается что если у двух документов стоящим друг за другом дата 01.12.12, а я ставлю перед ними еще один док и таким образом у первому из этих двух присваивается например дата 02.12.12 то следующий за ним док уже в выборку почему то не попадает. Я так понимаю что при выборке он смотрит на список динамически и если у документа попавшего в выборку дата изменилась то следующий док он берет уже этой датой независимо от того в каком порядке выбирал
  13. TopicStarter Overlay
    nicfest
    Offline

    nicfest Опытный в 1С

    Регистрация:
    5 дек 2012
    Сообщения:
    73
    Симпатии:
    0
    Баллы:
    26
    Пардон вот в этом коде возникает проблема о которой я спрашивал

    Код:
    Если (Форма.Параметр.ВремяДок <> ВремяВРаботу) Тогда
    Док.ВыбратьПоЗначению(ДатаВРаботу,ДатаВРаботу,"Оборудование", Оборудование);
    Пока Док.ПолучитьДокумент() = 1 Цикл
    ВремяДок = Док.ПолучитьВремя();
    Если (ВремяДок = ВремяВРаботу) Тогда
    Док.ПолучитьВремя(ЧЧ,ММ);
    ДатаСдачиПрошл = ДатаВРаботу;
    ВремяСдачиПрошл = ЧЧ*60+ММ;
    ТабОчередь = СоздатьОбъект("ТаблицаЗначений");	  
    ТабОчередь.НоваяКолонка("Док");
    ДокОЗ.ВыбратьПоНомеру(Форма.Параметр.НомерДок,Форма.Параметр.ДатаДок);
    ДокОЗ.ПолучитьДокумент();
    ТабОчередь.НоваяСтрока();
    ТабОчередь.Док = ДокОЗ.ТекущийДокумент();
    Док.ВыбратьПоЗначению(ДатаВработу,,"Оборудование", Оборудование);
    Пока Док.ПолучитьДокумент() = 1 Цикл
    Если (Док.НомерДок <> Форма.Параметр.НомерДок) Тогда
    ТабОчередь.НоваяСтрока();
    ТабОчередь.Док = Док.ТекущийДокумент;
    КонецЕсли;
    КонецЦикла;
    ТабОчередь.ВыбратьСтроки();
    Пока ТабОчередь.ПолучитьСтроку() = 1 Цикл
    глРасчетОчереди(ТабОчередь.Док, ДатаСдачиПрошл, ВремяСдачиПрошл);
    КонецЦикла;
    
  14. Бухгалтерский угодник
    Offline

    Бухгалтерский угодник Администраторы Команда форума Администратор

    Регистрация:
    29 дек 2008
    Сообщения:
    21.520
    Симпатии:
    407
    Баллы:
    104
    Код:
    Если (ВремяДок = ВремяВРаботу) Тогда
    Док.ПолучитьВремя(ЧЧ,ММ);
    ДатаСдачиПрошл = ДатаВРаботу;
    ВремяСдачиПрошл = ЧЧ*60+ММ;
    ТабОчередь = СоздатьОбъект("ТаблицаЗначений");	  
    ТабОчередь.НоваяКолонка("Док","Документ");
    ДокОЗ.ВыбратьПоНомеру(Форма.Параметр.НомерДок,Форма.Параметр.ДатаДок);
    ДокОЗ.ПолучитьДокумент();
    ТабОчередь.НоваяСтрока();
    ТабОчередь.Док = ДокОЗ.ТекущийДокумент();
    
    Док.ВыбратьПоЗначению(ДатаВработу,,"Оборудование", Оборудование);
    Пока Док.ПолучитьДокумент() = 1 Цикл
    Если (Док.НомерДок <> Форма.Параметр.НомерДок) Тогда
    ТабОчередь.НоваяСтрока();
    ТабОчередь.Док = Док.ТекущийДокумент();
    КонецЕсли;
    КонецЦикла;
    
    ТабОчередь.ВыбратьСтроки();
    Пока ТабОчередь.ПолучитьСтроку() = 1 Цикл
    Если ДокОЗ.НайтиДокумент(ТабОчередь.Док)=1 Тогда
    глРасчетОчереди(ДокОЗ, ДатаСдачиПрошл, ВремяСдачиПрошл);
    КонецЕсли;
    КонецЦикла;
    
  15. TopicStarter Overlay
    nicfest
    Offline

    nicfest Опытный в 1С

    Регистрация:
    5 дек 2012
    Сообщения:
    73
    Симпатии:
    0
    Баллы:
    26
    Т.е. даже если в таблице значений хранится ссылка на документ для его непосредственного изменения мне необходимо производить выборку???
  16. Бухгалтерский угодник
    Offline

    Бухгалтерский угодник Администраторы Команда форума Администратор

    Регистрация:
    29 дек 2008
    Сообщения:
    21.520
    Симпатии:
    407
    Баллы:
    104
    ваш код похоже вообще не работает.... Во всяком в условие не попадает
    Код:
    Если (Док.НомерДок <> Форма.Параметр.НомерДок) Тогда
    ТабОчередь.НоваяСтрока();
    ТабОчередь.Док = Док.ТекущийДокумент; //забыли скобки. должна вываливаться ошибка
    КонецЕсли;
    
  17. TopicStarter Overlay
    nicfest
    Offline

    nicfest Опытный в 1С

    Регистрация:
    5 дек 2012
    Сообщения:
    73
    Симпатии:
    0
    Баллы:
    26
    Скажите а верны ли мои доводы по поводу (52)

    В итоге у меня заработало как в (51) но так мне не совсем нравиться как то слишком топорно, хотел сделать как в (52) но не получается по описанным там причинам верно ли я мыслю и возможно ли там это как то обойти???
    Или только через таблицу значений, просто получается какая то двойная работа?
  18. Бухгалтерский угодник
    Offline

    Бухгалтерский угодник Администраторы Команда форума Администратор

    Регистрация:
    29 дек 2008
    Сообщения:
    21.520
    Симпатии:
    407
    Баллы:
    104
    что есть глРасчетОчереди? Рекурсивная процедура?
  19. TopicStarter Overlay
    nicfest
    Offline

    nicfest Опытный в 1С

    Регистрация:
    5 дек 2012
    Сообщения:
    73
    Симпатии:
    0
    Баллы:
    26
    Код:
    Функция глРасчетОчереди(Док="", ДатаПостановкиВРаботу="", ВремяПостановкиВРаботу=0, Оборуд="") Экспорт
    
    МинутВсего = ВремяПостановкиВРаботу + Док.ВремяВыполнения;
    СдачаЧЧ = Цел(МинутВсего/60);
    СдачаММ = МинутВсего - СдачаЧЧ*60;
    Если СдачаЧЧ>=24 Тогда
    СдачаДД = Цел(СдачаЧЧ/24);
    СдачаЧЧ = СдачаЧЧ - СдачаДД*24;
    КонецЕсли;
    
    Если СтрДлина(Строка(СдачаЧЧ)) < 2 Тогда //Представляем время сдачи в удобном для чтения виде
    ВремяСдачи = "0"+""+СдачаЧЧ;
    Иначе
    ВремяСдачи = ""+СдачаЧЧ;  
    КонецЕсли;
    Если СтрДлина(Строка(СдачаММ)) < 2 Тогда
    ВремяСдачи = ВремяСдачи + ":0"+""+СдачаММ;
    Иначе
    ВремяСдачи = ВремяСдачи + ":"+""+СдачаММ;  
    КонецЕсли;
    
    Док.ДатаДок = ДатаПостановкиВРаботу;
    Док.УстановитьВремя(Цел(ВремяПостановкиВРаботу/60),ВремяПостановкиВРаботу-(Цел(ВремяПостановкиВРаботу/60))*60,00);
    Док.ДатаСдачи = ДатаПостановкиВРаботу + СдачаДД;
    Док.ВремяСдачи = ВремяСдачи;
    Если ПустоеЗначение(Оборуд) = 0 Тогда
    Док.Оборудование = Оборуд;
    КонецЕсли;
    Док.Записать();
    ДатаСдачиПрошл = Док.ДатаСдачи;
    ВремяСдачиПрошл = СдачаЧЧ*60+СдачаММ;
    
    
    КонецФункции // глРасчетОчереди
  20. Бухгалтерский угодник
    Offline

    Бухгалтерский угодник Администраторы Команда форума Администратор

    Регистрация:
    29 дек 2008
    Сообщения:
    21.520
    Симпатии:
    407
    Баллы:
    104
    вот теперь все понял. №52 не взлетит т.к. выборку нужно начинать с начала. Внутри цикла нельзя менять. Только вариант 51. Я вам его немного подкорректировал

Поделиться этой страницей