8.х Помогите написать код. Хелп

Тема в разделе "Конфигурирование на платформе "1С:Предприятие 8"", создана пользователем Gribo4eg, 16 авг 2019.

  1. TopicStarter Overlay
    Gribo4eg
    Offline

    Gribo4eg

    Регистрация:
    16 авг 2019
    Сообщения:
    7
    Симпатии:
    0
    Баллы:
    1
    Друзья, уважаемые гуру 1С коддинга, прошу помощи т.к. сам попросту не знаю 1С.
    Имеется стандартная печатаная форма 1С 8.2 ЗУП -График работы (Рис 1)
    Данную форму я привел к форме как на рисунке 2
    Т.е. добавил столбец
    Требуется что б в данном столбце производились расчеты
    Хотя бы на 1м примере как рассчитать

    Сделал Параметр ОтклЧасов, который должен рассчитываться следующим образом
    ОтклЧасов=Часов по графику - Часов по произв календарю

    Как записать это в коде я понятия не имею.

    Кому не сложно напишите код.


    Вот процедура печати
    Код:
    Функция Печать(КалендарьНаборЗаписей, ГодПечати = Неопределено) Экспорт
           
        Если Не ЗначениеЗаполнено(ГодПечати) Тогда
            ГодПечати = ТекущийГод;
        КонецЕсли;
       
        ВыводитьИтогиПроизводственногоКалендаря = Истина;
        ДатаНачалаИнтервала        = НачалоГода(ГодПечати);
        ДатаОкончанияИнтервала  = КонецГода(ГодПечати);
        ДнейВИнтервале = (КонецДня(ДатаОкончанияИнтервала) - НачалоДня(ДатаНачалаИнтервала) + 1) / мДлинаСуток;
        Календарь = ПолучитьДниВПроизводственномКалендаре(ДатаНачалаИнтервала, ДатаОкончанияИнтервала); // это соответствие: дата - вид дня
        Если ДнейВИнтервале <> Календарь.Количество() Тогда
            Сообщить("Проверьте правильность заполнения регламентированного производственного календаря на " + Формат(Год(ГодПечати), "ЧГ=5") + " год", СтатусСообщения.Важное);
            ВыводитьИтогиПроизводственногоКалендаря = Ложь;
        КонецЕсли;
       
        ПечатныйДокумент = Новый ТабличныйДокумент;
        ПечатныйДокумент.ИмяПараметровПечати = "ПАРАМЕТРЫ_ПЕЧАТИ_ГрафикиРаботы";
        ПечатныйДокумент.ОриентацияСтраницы = ОриентацияСтраницы.Ландшафт;
        ПечатныйДокумент.Автомасштаб = Истина;
    
        Макет = ПолучитьМакет("Макет");
       
        ОбластьДанныхШапка               = Макет.ПолучитьОбласть("Шапка");
       
        //ОТОБРАЖАЕМ ВСЕ ОБЛАСТЬ ШАПКИ ++
        //++ ОбластьДанныхШапка               = Макет.ПолучитьОбласть("Шапка|Месяцы");
       
       
        ОбластьДанныхКолонтитул       = Макет.ПолучитьОбласть("Колонтитул");
        ОбластьДанныхРасширение       = Макет.ПолучитьОбласть("Расширение");
        ОбластьДанныхДень             = Макет.ПолучитьОбласть("День|Месяцы");
        ОбластьДанныхДеньПоДням       = Макет.ПолучитьОбласть("День|Дни");   
        ОбластьДанныхНочные           = Макет.ПолучитьОбласть("НЧ");
        ОбластьИтогиЗаМесяц           = Макет.ПолучитьОбласть("День|Итоги");
        ОбластьИтогиЗаКвартал         = Макет.ПолучитьОбласть("Квартал");   
        ОбластьИтогиЗаКварталНЧ       = Макет.ПолучитьОбласть("КварталНЧ");
        ОбластьИтогиЗаГод              = Макет.ПолучитьОбласть("Год");   
        ОбластьИтогиЗаГодНЧ              = Макет.ПолучитьОбласть("ГодНЧ");
        ОбластьКалендаря              = Макет.ПолучитьОбласть("Календарь");       
        ОбластьПодписи                  = Макет.ПолучитьОбласть("Подпись");
        ОбластьРасширениеИтоги          = Макет.ПолучитьОбласть("РасширениеИтоги");
        //Получаем мою область ++
        //ОбластьДеньКалендарь              = Макет.ПолучитьОбласть("День|Календарь");
     
       
        //ОбластьКалендаря.Параметры.ОтклЧасов=111;   
        //ПечатныйДокумент.Вывести(ОбластьКалендаря);
    
       
        ОбластьДанныхШапка.Параметры.Наименование = "График работы '" + СокрЛП(ЭтотОбъект.Наименование)    + "' на " + Формат(Год(ГодПечати), "ЧГ=5") + " год";
        ПечатныйДокумент.Вывести(ОбластьДанныхШапка);
       
       
       
        ОбластьДнейЗаголовок = "Часов за день";
        Если УчитыватьНочныеЧасы Тогда
            ОбластьДнейЗаголовок = ОбластьДнейЗаголовок + ", в том числе ночных";
        КонецЕсли;
        ОбластьДанныхКолонтитул.Параметры.Установить(0, ОбластьДнейЗаголовок);
        ПечатныйДокумент.Вывести(ОбластьДанныхКолонтитул);
       
        ДнейЗаКвартал                         = 0;
        ЧасовЗаКвартал                         = 0;
        НочныхЧасовЗаКвартал                = 0;
        ДнейЗаГод                             = 0;
        ЧасовЗагод                             = 0;
        НочныхЧасовЗаГод                     = 0;
        ДнейПоКалендарю                        = 0;
        ЧасовПоКалендарю                    = 0;
        ВыходныхПоКалендарю                    = 0;
        ДнейЗаКварталПоКалендарю            = 0;
        ЧасовЗаКварталПоКалендарю            = 0;
        ВыходныхЗаКварталПоКалендарю        = 0;
        ДнейЗаГодПоКалендарю                = 0;
        ЧасовЗаГодПоКалендарю               = 0;
        ВыходныхЗаГодПоКалендарю            = 0;
        Квартал                              = 0;
        ИндексСтраницы                        = 0;
       
        ОтклЧасов                           = 0;
        ОтклКвартал                         = 0;
        ОтклГод                             = 0;
    
    
       
       
        Для Индекс = 0 По 11 Цикл
           
            НомерМесяца = Индекс + 1;
            НазваниеМесяца = КалендарьНаборЗаписей[Индекс].Месяц;
            Дней           = КалендарьНаборЗаписей[Индекс].ДнейЗаМесяц;
            Часов          = КалендарьНаборЗаписей[Индекс].ЧасовЗаМесяц;       
            НочныхЧасов       = КалендарьНаборЗаписей[Индекс].НочныхЧасовЗаМесяц;
           
            Если НомерМесяца = 4 ИЛИ НомерМесяца = 7 ИЛИ НомерМесяца = 10 Тогда
                ДнейЗаКвартал  = 0;
                ЧасовЗаквартал = 0;           
                НочныхЧасовЗаКвартал = 0;
            КонецЕсли;
           
            ДнейЗаКвартал  = ДнейЗаКвартал + Дней;
            ЧасовЗаКвартал = ЧасовЗаКвартал + Часов;
            ДнейЗаГод = ДнейЗаГод + Дней;
            ЧасовЗаГод = ЧасовЗаГод + Часов;       
            НочныхЧасовЗаГод = НочныхЧасовЗаГод + НочныхЧасов;
           
            ДанныеМесяца = КалендарьНаборЗаписей[Индекс];
            ОбластьДанныхДень.Параметры.Заполнить(ДанныеМесяца);
           
           
                   
                   
           
           
            СтрокаСПодвалом = Новый Массив; // создадим массив для проверки вывода
            СтрокаСПодвалом.Добавить(ОбластьДанныхДень);
            СтрокаСПодвалом.Добавить(ОбластьИтогиЗаКвартал);       
            СтрокаСПодвалом.Добавить(ОбластьИтогиЗаКварталНЧ);
           
            Если Не УниверсальныеМеханизмы.ПроверитьВыводДляТабличногоДокумента(ПечатныйДокумент, СтрокаСПодвалом) Тогда
                ПечатныйДокумент.ВывестиГоризонтальныйРазделительСтраниц();
                ПечатныйДокумент.Вывести(ОбластьДанныхКолонтитул);
                ИндексСтраницы = ИндексСтраницы+1;
            КонецЕсли;
           
            ПечатныйДокумент.Вывести(ОбластьДанныхДень);
           
            ОбластьДанныхДеньПоДням.Параметры.Заполнить(ДанныеМесяца);
            ОбластьИтогиЗаМесяц.Параметры.Заполнить(ДанныеМесяца);
            Если УчитыватьНочныеЧасы Тогда
                ОбластьДанныхНочные.Параметры.Заполнить(ДанныеМесяца);
                НочныхЧасовЗаКвартал = НочныхЧасовЗаКвартал + НочныхЧасов;
                ОбластьИтогиЗаКварталНЧ.Параметры.Установить(0, НочныхЧасовЗаКвартал);
            КонецЕсли;
           
            ДнейВМесяце = КоличествоДнейВМесяце(НомерМесяца, Год(ГодПечати));
            Если ДнейВМесяце < 31 Тогда
                ЛишнийДень = ДнейВМесяце + 1;
                Пока ЛишнийДень <= 31 Цикл
                    ОбластьДанныхДеньПоДням.Параметры.Установить(ЛишнийДень-1, "X");
                    ОбластьДанныхНочные.Параметры.Установить(ЛишнийДень-1, "X");
                    ЛишнийДень = ЛишнийДень + 1;
                КонецЦикла;
            КонецЕсли;
           
            //Установим параметры производственного календаря
            ДанныеПроизводственногоКалендаря = ДанныеПроизводственногоКалендаря(НомерМесяца);
            ТаблицаИтоговКалендаря = ДанныеПроизводственногоКалендаряЗаГод(Год(ГодПечати));
               
            Если ВыводитьИтогиПроизводственногоКалендаря Тогда
                ТаблицаИтогов = ТаблицаИтоговКалендаря[Индекс];
                ОбластьИтогиЗаМесяц.Параметры.Установить(2, ТаблицаИтоговКалендаря[Индекс].ДнейПоКалендарю);
                ОбластьИтогиЗаМесяц.Параметры.Установить(3, ТаблицаИтоговКалендаря[Индекс].ЧасовПоКалендарю);
                ОбластьИтогиЗаМесяц.Параметры.Установить(4, ТаблицаИтоговКалендаря[Индекс].ВыходныхПоКалендарю);
            КонецЕсли;
           
            ПечатныйДокумент.Присоединить(ОбластьДанныхДеньПоДням);
            ПечатныйДокумент.Присоединить(ОбластьИтогиЗаМесяц);
            Если УчитыватьНочныеЧасы Тогда
                ПечатныйДокумент.Вывести(ОбластьДанныхНочные);
            Иначе
                ПечатныйДокумент.Вывести(ОбластьДанныхРасширение);
            КонецЕсли;
                   
            //Выделим цветом нерабочие дни в календаре
            ТекущийМесяц = НачалоМесяца(Дата(Год(ГодПечати), НомерМесяца, 1));
            ДеньНеделиМесяца = ДеньНедели(НачалоМесяца(ТекущийМесяц));
            Для НомерДня = 1 По 31 Цикл
                Если НомерДня <= ДнейВМесяце Тогда
                    Если ДанныеПроизводственногоКалендаря.Количество() > 0 Тогда
                        ВидДня = ДанныеПроизводственногоКалендаря[НомерДня - 1].ВидДня;
                        Если ВидДня = Перечисления.ВидыДнейПроизводственногоКалендаря.Воскресенье
                            Или ВидДня = Перечисления.ВидыДнейПроизводственногоКалендаря.Суббота
                            Или ВидДня = Перечисления.ВидыДнейПроизводственногоКалендаря.Праздник Тогда
                            ОбластьВыходных = ПечатныйДокумент.НайтиТекст(Строка(НомерДня),,,,Истина);
                            ОбластьДляЗакрашивания = ПечатныйДокумент.Область(ОбластьВыходных.Верх + НомерМесяца*2 + Квартал*2- 1, ОбластьВыходных.Лево, ОбластьВыходных.Верх + НомерМесяца*2  + Квартал*2, ОбластьВыходных.Лево);
                            ОбластьДляЗакрашивания.ЦветФона = КрасныйЦвет;
                        КонецЕсли;
                    КонецЕсли;
                Иначе
                    ОбластьЛишнихДней = ПечатныйДокумент.НайтиТекст(Строка(НомерДня),,,,Истина);
                    ОбластьДляЗакрашивания = ПечатныйДокумент.Область(ОбластьЛишнихДней.Верх + НомерМесяца*2 + Квартал*2 - 1, ОбластьЛишнихДней.Лево, ОбластьЛишнихДней.Верх + НомерМесяца*2 + Квартал*2, ОбластьЛишнихДней.Лево);
                    ОбластьДляЗакрашивания.ЦветФона = СерыйЦвет;
                КонецЕсли;
            КонецЦикла;
           
            Если НомерМесяца = 3 ИЛИ НомерМесяца = 6 ИЛИ НомерМесяца = 9 ИЛИ НомерМесяца = 12 Тогда
                Квартал = НомерМесяца/3;
                ОбластьИтогиЗаКвартал.Параметры.Установить(0, "" + Квартал + " квартал");
                ОбластьИтогиЗаКвартал.Параметры.Установить(1, ДнейЗаКвартал);
                ОбластьИтогиЗаКвартал.Параметры.Установить(2, ЧасовЗаКвартал);
                Если ВыводитьИтогиПроизводственногоКалендаря Тогда
                    ОбластьИтогиЗаКвартал.Параметры.Установить(3, ТаблицаИтоговКалендаря[НомерМесяца-1].ДнейЗаКварталПоКалендарю);
                    ОбластьИтогиЗаКвартал.Параметры.Установить(4, ТаблицаИтоговКалендаря[НомерМесяца-1].ЧасовЗаКварталПоКалендарю);
                    ОбластьИтогиЗаКвартал.Параметры.Установить(5, ТаблицаИтоговКалендаря[НомерМесяца-1].ВыходныхЗаКварталПоКалендарю);
                КонецЕсли;
               
                ПечатныйДокумент.Вывести(ОбластьИтогиЗаКвартал);
               
                Если  УчитыватьНочныеЧасы Тогда
                    ПечатныйДокумент.Присоединить(ОбластьИтогиЗаКварталНЧ);               
                Иначе
                    ПечатныйДокумент.Вывести(ОбластьРасширениеИтоги);
                КонецЕсли;
            КонецЕсли;
           
        КонецЦикла;
    
        ОбластьИтогиЗаГод.Параметры.Установить(0, ДнейЗаГод);
        ОбластьИтогиЗаГод.Параметры.Установить(1, ЧасовЗаГод);
        Если ВыводитьИтогиПроизводственногоКалендаря Тогда
            ОбластьИтогиЗаГод.Параметры.Установить(2, ТаблицаИтоговКалендаря[11].ДнейЗаГодПоКалендарю);
            ОбластьИтогиЗаГод.Параметры.Установить(3, ТаблицаИтоговКалендаря[11].ЧасовЗаГодПоКалендарю);
            ОбластьИтогиЗаГод.Параметры.Установить(4, ТаблицаИтоговКалендаря[11].ВыходныхЗаГодПоКалендарю);
        КонецЕсли;
       
        ПечатныйДокумент.Вывести(ОбластьИтогиЗаГод);
       
        Если УчитыватьНочныеЧасы Тогда
            ОбластьИтогиЗаГодНЧ.Параметры.Установить(0, НочныхЧасовЗаГод);
            ПечатныйДокумент.Вывести(ОбластьИтогиЗаГодНЧ);
        Иначе
            ПечатныйДокумент.Вывести(ОбластьРасширениеИтоги);
            ОбластьИтоговЗаГод = ПечатныйДокумент.НайтиТекст("Итого за год:");
            СераяОбласть = ПечатныйДокумент.Область(ОбластьИтоговЗаГод.Верх + 1, ОбластьИтоговЗаГод.Лево, ОбластьИтоговЗаГод.Верх + 1, ОбластьИтоговЗаГод.Лево + 37);
            СераяОбласть.ЦветФона = ЦветаСтиля.ФонГруппировкиВерхнегоУровня;
        КонецЕсли;
    
        ПечатныйДокумент.Вывести(ОбластьПодписи);
    
        УниверсальныеМеханизмы.НапечататьДокумент(ПечатныйДокумент, , , "График работы " + Наименование);
       
       
           
    КонецФункции

    Куда нужно дописать мой расчет и как его дописать понятия не имею

    Спасибо.

    Вложения:

    • 1.JPG
      1.JPG
      Размер файла:
      162,1 КБ
      Просмотров:
      4
    • 2.JPG
      2.JPG
      Размер файла:
      182,8 КБ
      Просмотров:
      4
    • 51.xls
      Размер файла:
      42,5 КБ
      Просмотров:
      0
  2. nbIpKuH_BaH9I
    Offline

    nbIpKuH_BaH9I Модераторы Команда форума Модератор

    Регистрация:
    16 сен 2009
    Сообщения:
    8.004
    Симпатии:
    531
    Баллы:
    204
    Без обид. Никогда не понимал, зачем люди делают то, в чем не разбираются.

    Отступление: Представьте, что Вы ничего не понимаете в машинах. У вас она ломается. Вы примерно знаете, что произошло, и лезете туда, при этом спрашиваете у мастера, что Вам сделать и как.
    Мастер, в процессе своей профессиональной деятельности чтобы найти ответ на этот вопрос потратил много времени за работой. Мастер не хочет с Вами делиться бесплатно своим опытом, ибо это его хлеб.
    Вы злитесь, и начинаете все же делать сами. Делаете не правильно, и по ходу ломаете еще что-то, и машина вообще отказывается ехать. В итоге Вы все же отправляете машину на сервис и тратите деньги уже на 2 поломки.
    Мораль: Скупой платит дважды.

    Наш форум направлен на обучающий момент. На момент живого обсуждения проблемы. Обмена опытом. Выходом из той или иной ситуации в процессе автоматизации или работы того или иного решения от 1С.
    Я надеюсь не обидел Вас этим.
    Raider нравится это.
  3. TopicStarter Overlay
    Gribo4eg
    Offline

    Gribo4eg

    Регистрация:
    16 авг 2019
    Сообщения:
    7
    Симпатии:
    0
    Баллы:
    1
    Делают по тому что задача стоит сделать)))
    Куча текса, 0 помощи
  4. nbIpKuH_BaH9I
    Offline

    nbIpKuH_BaH9I Модераторы Команда форума Модератор

    Регистрация:
    16 сен 2009
    Сообщения:
    8.004
    Симпатии:
    531
    Баллы:
    204
    Ну что и требовалось доказать. Злитесь, потому что Вам не оказали помощь.
    nomad_irk нравится это.
  5. nomad_irk
    Offline

    nomad_irk Гуру в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    9.660
    Симпатии:
    1.009
    Баллы:
    204
    Лично меня умиляет то, что условному менеджеру по продажам никогда не требовалось программировать 1С до сего момента и эта потребность возникла срочно, причем не вывести на экран "Hello, World!", а сразу поменять отчет :)
    nbIpKuH_BaH9I нравится это.
  6. nbIpKuH_BaH9I
    Offline

    nbIpKuH_BaH9I Модераторы Команда форума Модератор

    Регистрация:
    16 сен 2009
    Сообщения:
    8.004
    Симпатии:
    531
    Баллы:
    204
    Мне очень любопытны ситуации, когда людей заставляют делать то, что они совершенно не знают.

    Автор, не злитесь пожалуйста. Расскажите Вашу историю.
    nomad_irk нравится это.
  7. TopicStarter Overlay
    Gribo4eg
    Offline

    Gribo4eg

    Регистрация:
    16 авг 2019
    Сообщения:
    7
    Симпатии:
    0
    Баллы:
    1
    Написал такой код
    но ничего не вывелось в мой параметр
  8. nomad_irk
    Offline

    nomad_irk Гуру в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    9.660
    Симпатии:
    1.009
    Баллы:
    204
    Оперируйте значениями, которые попадают в параметр ОбластьДеньКалендарь.Параметры.ЧасовПоКалендарю и ОбластьИтогиЗаМесяц.Параметры.ЧасовЗаМесяц вместо значений этих параметров.
  9. TopicStarter Overlay
    Gribo4eg
    Offline

    Gribo4eg

    Регистрация:
    16 авг 2019
    Сообщения:
    7
    Симпатии:
    0
    Баллы:
    1
    Не совсем понял как это
    Можно строчку кода
  10. nomad_irk
    Offline

    nomad_irk Гуру в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    9.660
    Симпатии:
    1.009
    Баллы:
    204
    Код:
    Значение1 =  КалендарьНаборЗаписей[Индекс].<НужноеЗначение1>;
    Значение2 =  КалендарьНаборЗаписей[Индекс].<НужноеЗначение2>;
    ОбластьДеньКалендарь.Параметры.ОтклЧасов=Значение1 - Значение2;
    
  11. TopicStarter Overlay
    Gribo4eg
    Offline

    Gribo4eg

    Регистрация:
    16 авг 2019
    Сообщения:
    7
    Симпатии:
    0
    Баллы:
    1
    --- Объединение сообщений, 16 авг 2019 ---

    Ошибка
    Последнее редактирование: 16 авг 2019
  12. TopicStarter Overlay
    Gribo4eg
    Offline

    Gribo4eg

    Регистрация:
    16 авг 2019
    Сообщения:
    7
    Симпатии:
    0
    Баллы:
    1
    не правильно написал я да?
  13. nomad_irk
    Offline

    nomad_irk Гуру в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    9.660
    Симпатии:
    1.009
    Баллы:
    204
    ага, абсолютно
  14. TopicStarter Overlay
    Gribo4eg
    Offline

    Gribo4eg

    Регистрация:
    16 авг 2019
    Сообщения:
    7
    Симпатии:
    0
    Баллы:
    1
    как надо что б заработало то??
  15. nomad_irk
    Offline

    nomad_irk Гуру в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    9.660
    Симпатии:
    1.009
    Баллы:
    204
    Без понимания, что написано в этом:
    Код:
    Значение1 =  КалендарьНаборЗаписей[Индекс].<НужноеЗначение1>;
    Значение2 =  КалендарьНаборЗаписей[Индекс].<НужноеЗначение2>;
    ОбластьДеньКалендарь.Параметры.ОтклЧасов=Значение1 - Значение2;
    не заработает никогда.
  16. nbIpKuH_BaH9I
    Offline

    nbIpKuH_BaH9I Модераторы Команда форума Модератор

    Регистрация:
    16 сен 2009
    Сообщения:
    8.004
    Симпатии:
    531
    Баллы:
    204
  17. TerANik
    Offline

    TerANik Профессионал в 1С

    Регистрация:
    19 ноя 2014
    Сообщения:
    1.270
    Симпатии:
    98
    Баллы:
    54
    Странная формулировка.. Помогите написать код.. почему никогда не пишут сразу "Напишите за меня" или "Сделайте бесплатно"?
    Одно дело когда человек пытался разобраться, что то сделать, описал в чём у него затык и просит направить в правильное русло. Другое дело когда говорят "Прошу помочь, 1С не знаю". Тут возникает один логичный ответ.. часовая ставка и количество часов которые будут затрачены на данную задачу. А аля сетевой маркетинг.. вы же получаете с этого прибыль, либо в виде зарплаты, либо в виде сэкономленных денег на программиста.. Если вам это очень надо то учите матчасть, если у вас нет времени или вам лень, значит вам этого не надо.
    nbIpKuH_BaH9I и Raider нравится это.