7.7 Отчет!Нумерация и Цена

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

  1. TopicStarter Overlay
    andryscha92
    Offline

    andryscha92 Опытный в 1С

    Регистрация:
    31 янв 2012
    Сообщения:
    389
    Симпатии:
    1
    Баллы:
    29
    Всем доброго вечера!
    1.) Подскажите как сделать нумерацию,что бы она учитывала не только инструменты но и их детали?параметр в таблице <НомерГ> (Рис 1)
    2). И ещё сумма в параметр <Цена> (Рис1 выделено синим)попадала из табличной части документа а именно жёстко привязывалась к услуге Гарантийный ремонт и к колонке Всего.(Рис 2)
    Заранее благодарен!!!

    Код:
    Процедура Ведомость()
    Док = СоздатьОбъект("Документ.Диагностика"); 
    
    Номер = 0;	 
    НомерГ = 0;
    Кол1  = 0;
    Сум   = 0;
    Табл  = СоздатьОбъект("Таблица");
    Табл.ИсходнаяТаблица("Интерскол");
    Табл.ВывестиСекцию("Шапка");
    Таб.ВыбратьСтроки();
    Пока Таб.ПолучитьСтроку() = 1 Цикл
    Кол   = 0;
    Номер   = Номер + 1;
    Док.НайтиДокумент(Таб.Док);
    А = Найти(Док.Инструмент,"Интерскол");
    B = Найти(Док.Инструмент,"Байкал");
    Если А>0 Тогда
    Модель = Лев(СокрЛП(Док.Инструмент),А-1)+Прав(СокрЛП(Док.Инструмент),СтрДлина(Док.Инструмент)-А-9);
    ИначеЕсли B>0 Тогда
    Модель = Лев(СокрЛП(Док.Инструмент),B-1)+Прав(СокрЛП(Док.Инструмент),СтрДлина(Док.Инструмент)-B-6);
    КонецЕсли;
    
    
    ДатаПрод = Док.ДатаПродажи;
    ДатаРемонта = Док.ДатаВыдачи; 
    Если  ПустоеЗначение(Док.СерийныйНомер) = 1 Тогда
    ЗавНомер    = "б/н";
    Иначе
    ЗавНомер  = Док.СерийныйНомер;
    КонецЕсли;				
    Табл.ВывестиСекцию("Детали|Инст");
    Док.ВыбратьСтроки();
    Пока Док.ПолучитьСтроку() = 1 Цикл
    Если (Док.Товар.ТипНоменклатуры = Перечисление.ТипыНоменклатуры.Материал) и (Док.НомерСтроки = 1) Тогда
    Деталь   = СокрЛП(Док.Товар)+" "+СокрЛП(Док.Товар.Код);
    Количество   = Док.Количество;		 
    Цена   = Строка(Док.Итог("Всего"))+",00р.";
    Табл.ПрисоединитьСекцию("Детали|Деталь");
    Табл.ПрисоединитьСекцию("Детали|Итог");
    Кол    = Кол + Док.Количество;
    Сум    = Сум + Док.Итог("Всего");
    Кол1   = Кол1 + Док.Количество;
    ИначеЕсли (Док.Товар.ТипНоменклатуры = Перечисление.ТипыНоменклатуры.Материал) Тогда
    Деталь   = СокрЛП(Док.Товар)+" "+СокрЛП(Док.Товар.Код);
    Количество   = Док.Количество;		 
    Цена   = Док.Итог("Всего");
    Табл.ВывестиСекцию("Ит|Инст");
    Табл.ПрисоединитьСекцию("Детали|Деталь");
    Табл.ПрисоединитьСекцию("Ит|Итог");
    Кол    = Кол + Док.Количество;
    Кол1   = Кол1 + Док.Количество;
    КонецЕсли;															 
    КонецЦикла;			 
    КонецЦикла;	   
    Итоги = Кол1;
    Сумма   = Строка(Сум)+",00р.";
    Табл.ВывестиСекцию("Подвал");
    Табл.Показать("Отчет о выполненых работах", "");
    КонецПроцедуры 

    Вложения:

    • 77.jpg
      77.jpg
      Размер файла:
      165,5 КБ
      Просмотров:
      20
    • 88.jpg
      88.jpg
      Размер файла:
      132,2 КБ
      Просмотров:
      21
  2. Бухгалтерский угодник
    Offline

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

    Регистрация:
    29 дек 2008
    Сообщения:
    21.523
    Симпатии:
    407
    Баллы:
    104
    1)
    Код:
    ....
    Кол1   = Кол1 + Док.Количество;
    ИначеЕсли (Док.Товар.ТипНоменклатуры = Перечисление.ТипыНоменклатуры.Материал) Тогда
    Деталь   = СокрЛП(Док.Товар)+" "+СокрЛП(Док.Товар.Код);
    Количество   = Док.Количество;		
    Цена   = Док.Итог("Всего");
    Номер   = Номер + 1; //возможно нужно править еще и таблицу (скорее всего). В формулу ячейки добавьте номер
    Табл.ВывестиСекцию("Ит|Инст");
    Табл.ПрисоединитьСекцию("Детали|Деталь");
    Табл.ПрисоединитьСекцию("Ит|Итог");
    ........
    

    2) Расшифруйте вашу фразу
    "из табличной части документа а именно жёстко привязывалась к услуге Гарантийный ремонт и к колонке Всего"
  3. TopicStarter Overlay
    andryscha92
    Offline

    andryscha92 Опытный в 1С

    Регистрация:
    31 янв 2012
    Сообщения:
    389
    Симпатии:
    1
    Баллы:
    29
    что бы Цена(во вложении рисунок отмечена) попадала из табличной части документа "Диагностика".а именно цена Гарантийного ремонта. примерно что то такое как но не работает(.
    Цена = Док.Товар.НайтиПоКоду("00000045").Цена

    Вложения:

    • 99.jpg
      99.jpg
      Размер файла:
      131,5 КБ
      Просмотров:
      6
  4. Бухгалтерский угодник
    Offline

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

    Регистрация:
    29 дек 2008
    Сообщения:
    21.523
    Симпатии:
    407
    Баллы:
    104
    Но ведь документов как я понял м.б. несколько. Вам их нужно объединить в одну строку (общая сумма гарантийного ремонта) или должно быть несколько строк?
  5. TopicStarter Overlay
    andryscha92
    Offline

    andryscha92 Опытный в 1С

    Регистрация:
    31 янв 2012
    Сообщения:
    389
    Симпатии:
    1
    Баллы:
    29
    Да документов может несколько быть.В каждом документе оформляется один инструмент, в табличной части которого заносятся запчасти и гарантийный ремонт.Нужно цену из гарантийного ремонта из колонки "всего" привязать к табличному документу в колонку "Цена" для всех инструментов.Я на 7ке незнаю как сделать это(
  6. Бухгалтерский угодник
    Offline

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

    Регистрация:
    29 дек 2008
    Сообщения:
    21.523
    Симпатии:
    407
    Баллы:
    104
    Суть то я понял. У вас в цикле стоит условие, что выводить в макет только ТМЦ с видом "материал". Можно убрать это условие - тогда выведет ВСЕ. Это самый простой вариант. Тогда будет столько услуг, сколько документов. А можно
    • или объединить услуги (при условии что цена одинаковая)
    • или усреднить количество/цену и вывести одной строкой
    • или просто вывести услуги в конце списка.
    Вам то как нужно?
  7. TopicStarter Overlay
    andryscha92
    Offline

    andryscha92 Опытный в 1С

    Регистрация:
    31 янв 2012
    Сообщения:
    389
    Симпатии:
    1
    Баллы:
    29
    1)Похоже всё нужно выводить а точнее инструмент и его замененные детали,а цену напротив инструмента в последней колонке указывать из гарантийного ремонта если он имеется. Рис1
    2)И нумерация во второй колонке работает правильно но не всё отображается в макете, что нужно там подправить?Рис1
    для ясности во вложении отчет...

    Вложения:

    • Интерскол.ert
      Размер файла:
      190 КБ
      Просмотров:
      3
    • 00.jpg
      00.jpg
      Размер файла:
      148,1 КБ
      Просмотров:
      4
  8. Бухгалтерский угодник
    Offline

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

    Регистрация:
    29 дек 2008
    Сообщения:
    21.523
    Симпатии:
    407
    Баллы:
    104
    я вам говорю: уберите условие
    Код:
    (Док.Товар.ТипНоменклатуры = Перечисление.ТипыНоменклатуры.Материал) 
    и услуги будут печататься
  9. TopicStarter Overlay
    andryscha92
    Offline

    andryscha92 Опытный в 1С

    Регистрация:
    31 янв 2012
    Сообщения:
    389
    Симпатии:
    1
    Баллы:
    29
    Вопрос с нумерацией решён.Спасибо
  10. TopicStarter Overlay
    andryscha92
    Offline

    andryscha92 Опытный в 1С

    Регистрация:
    31 янв 2012
    Сообщения:
    389
    Симпатии:
    1
    Баллы:
    29
    Помогите пожалуйста ещё с этим....Есть документ.У него табличная часть. В ней содержаться элементы из справочника.Как обратиться к конкретному элементу документа в табличной части а именно к его сумме т.е. колонке Всего???Цена = Док.Товары.НайтиПоКоду("0000045").Всего ...это не работает...Пробовал Док.ПолучитьАтрибут("Всего") выводит цену первого элемента в табличной части, а нужно конкретного элемента с этого документа из табличной части, а именно "Гарантийный ремонт".Код "0000045".Убирать ничего видимо не надо всё работает за исключением этой проблемки... может это условие наложить ИначеЕсли (Док.Товар.ТипНоменклатуры = Перечисление.ТипыНоменклатуры.Услуга) Тогда.......и как то с позиционироваться на конкретном элементе и взять его цену.

    Вложения:

    • 88.jpg
      88.jpg
      Размер файла:
      132,2 КБ
      Просмотров:
      3
  11. Бухгалтерский угодник
    Offline

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

    Регистрация:
    29 дек 2008
    Сообщения:
    21.523
    Симпатии:
    407
    Баллы:
    104
    Ну... Примерно так
    Код:
    Функция ВернутьСуммуГарании(Док)
    Сумма=0;
    Док.ВыбратьСтроки();
    Пока Док.ПолучитьСтроку()=1 Цикл
    Если Док.Товар.Код="0000045" Тогда
    Сумма=Док.Всего;
    Прервать;
    КонецЕсли;
    КонецЦикла;
    Возврат Сумма;
    КонецФункции
    
  12. TopicStarter Overlay
    andryscha92
    Offline

    andryscha92 Опытный в 1С

    Регистрация:
    31 янв 2012
    Сообщения:
    389
    Симпатии:
    1
    Баллы:
    29
    После вставки этого условия //

    Функция ВернутьСуммуГарантии(Док)
    Цена = 0;
    Док.ВыбратьСтроки();

    Пока Док.ПолучитьСтроку()=1 Цикл

    Если Док.Товар.Код="00000045" Тогда
    Цена = Док.Всего;
    Прервать;
    КонецЕсли;


    КонецЦикла;

    Возврат Цена;

    КонецФункции



    Процедура Ведомость()
    Док = СоздатьОбъект("Документ.Диагностика");
    Номер = 0;
    НомерГ = 0;
    Кол1 = 0;
    Сум = 0;
    Табл = СоздатьОбъект("Таблица");
    Табл.ИсходнаяТаблица("Интерскол");
    Табл.ВывестиСекцию("Шапка");
    Таб.ВыбратьСтроки();
    Пока Таб.ПолучитьСтроку() = 1 Цикл
    Кол = 0;
    Номер = Номер + 1;
    НомерГ = НомерГ +1;
    Док.НайтиДокумент(Таб.Док);
    А = Найти(Док.Инструмент,"Интерскол");
    B = Найти(Док.Инструмент,"Байкал");
    Если А>0 Тогда
    Модель = Лев(СокрЛП(Док.Инструмент),А-1)+Прав(СокрЛП(Док.Инструмент),СтрДлина(Док.Инструмент)-А-9);
    ИначеЕсли B>0 Тогда
    Модель = Лев(СокрЛП(Док.Инструмент),B-1)+Прав(СокрЛП(Док.Инструмент),СтрДлина(Док.Инструмент)-B-6);
    КонецЕсли;


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

    перестали выводиться все детали т.е. не выполняеться второе условие см (рис. у). в этом кусочке кода
    Если Док.Товар.Код="00000045" Тогда
    Цена = Док.Всего;
    Прервать;//заменил на прервать на Продолжить программа стала зависать...
    КонецЕсли;
    что можно сделать?

    Вложения:

    • у.png
      у.png
      Размер файла:
      490,7 КБ
      Просмотров:
      4
  13. Бухгалтерский угодник
    Offline

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

    Регистрация:
    29 дек 2008
    Сообщения:
    21.523
    Симпатии:
    407
    Баллы:
    104
    Так вы применили цикл по строкам внутри цикла по тому же объекту!
    Я привел вам пример для документа... В отчете (вне цикла по объекту) все бы сработало, но в цикле, нужно иначе.
    Объект должен быть другим

    Попробуйте так:
    Код:
    Функция ВернутьСуммуГарантии(Док)
    Докум=СоздатьОбъект("Документ");
    Докум.НайтиДокумент(Док.ТекущийДокумент);
    Цена = 0;
    Докум.ВыбратьСтроки();
    Пока Докум.ПолучитьСтроку()=1 Цикл
    Если Докум.Товар.Код="00000045" Тогда
    Цена = Докум.Всего;
    Прервать;
    КонецЕсли;
    КонецЦикла;
    Возврат Цена;
    КонецФункции
    
  14. TopicStarter Overlay
    andryscha92
    Offline

    andryscha92 Опытный в 1С

    Регистрация:
    31 янв 2012
    Сообщения:
    389
    Симпатии:
    1
    Баллы:
    29
    Спасибо Вам большое!Очень помогли!!!
  15. Бухгалтерский угодник
    Offline

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

    Регистрация:
    29 дек 2008
    Сообщения:
    21.523
    Симпатии:
    407
    Баллы:
    104

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