Имя: Пароль:
1C
1C 7.7
v7: Помогите добавить ИтогоКоличество
0 GskIvan
 
04.08.12
15:47
Ничего в 1С не понимаю, помогите пожалуйста добавить строчку ИтогоКоличество.
1 GskIvan
 
04.08.12
15:47
//*****************************************************************************
// Описание переменных
Перем СписокДействий;  // Список действий по документу

Перем НаименованиеСкладаОтправителя;
Перем НаименованиеСкладаПолучателя;
Перем НаименованиеФирмы;

Перем СтараяДата;      
Перем НачальнаяДатаДокумента; // Для контроля даты документа
Перем ОстаткиТоваров, РезервыТоваров, ОбщРег;

//*****************************************************************************
// "служебные" функции и процедуры

//*****************************************************************************
Функция ЗаголовокФормы()
   Перем Заголовок, Название;
   Заголовок = "Накладная перемещения";
   Название = "Накладная №";
   //Форма.НазваниеДокумента.Цвет(-1);

   Если Выбран() = 1 Тогда  
       Если Проведен() = 1 Тогда
           Заголовок = Заголовок + ".Проведен";
       Иначе
           Заголовок = Заголовок + ".Не проведен";
       КонецЕсли;
   Иначе
       Заголовок = Заголовок + ".Новый";
   КонецЕсли;
   Форма.Заголовок(Заголовок);    
   Возврат Название;
КонецФункции //ЗаголовокФормы

//*****************************************************************************
// функции и процедуры, вызываемые из формул элементов диалога

//******************************************************************************
//Процедура ПересчетРегистров()
//    ОбщРег            = СоздатьОбъект("Регистры");
//    ОстаткиТоваров    = ОбщРег.ОстаткиТоваров;
//    РезервыТоваров    = ОбщРег.РезервыТоваров;
//    
//    Если (ДатаДок < ПолучитьДатуТА()) И (Константа.ОстаткиНаДатуДокумента = Да) Тогда
//        ОстаткиТоваров.ВременныйРасчет();
//        РезервыТоваров.ВременныйРасчет();
//        ОбщРег.РассчитатьРегистрыПо(ДатаДок);
//        
//    КонецЕсли;
//    
//КонецПроцедуры

//******************************************************************************
Процедура ВыборДаты()
   глПриИзмененииДатыДокумента(Контекст, СтараяДата);
   //ПересчетРегистров();
   Если ПустоеЗначение(Фирма) = 0 Тогда
       НаименованиеФирмы = Фирма.Наименование;
   КонецЕсли;
КонецПроцедуры
//*****************************************************************************
Процедура ВыборФирмы()
   Перем ВыбФирма;
   ВыбФирма = СоздатьОбъект("Справочник.Фирмы");
   ВыбФирма.ИспользоватьДату(ДатаДок);
   Если ВыбФирма.Выбрать("Выберите фирму","")>0 Тогда
       Фирма=ВыбФирма.ТекущийЭлемент();
       НаименованиеФирмы = Фирма.Наименование;
   КонецЕсли;
КонецПроцедуры    
   
//*****************************************************************************
Процедура ВыборОснования()
   // Процедура по кнопке редактирования основания в документе
   Перем КонтекстДокумента;
   КонтекстДокумента = глВзятьКонтекст(Контекст);
   ОткрытьФормуМодально("Обработка.ОснованиеДокумента", КонтекстДокумента);
   Форма.ТекстОснования.Заголовок(СокрП(Основание));
КонецПроцедуры    

//******************************************************************************
Процедура ВыборСклада(ВидСклада)
   Перем ВыбСклад;
   ВыбСклад = СоздатьОбъект("Справочник.МестаХранения");
   ВыбСклад.ИспользоватьДату(ДатаДок);
   Если ВыбСклад.Выбрать("Склад","")>0 Тогда
       Если ВидСклада = "получатель" Тогда
           СкладПолучатель = ВыбСклад.ТекущийЭлемент();
           НаименованиеСкладаПолучателя = СкладПолучатель.Наименование;
       ИначеЕсли ВидСклада = "отправитель" Тогда
           Склад = ВыбСклад.ТекущийЭлемент();
           НаименованиеСкладаОтправителя = Склад.Наименование;
       КонецЕсли;
   КонецЕсли;
КонецПроцедуры

//******************************************************************************
Процедура ПечатьТОРГ13()
   Перем ИсхТаблица;
   
   Перем ИтогоКоличество, ИтогоСумма;    // итоги по странице
   Перем ВсегоКоличество, ВсегоСумма;    // итоги по документу
   
   // номер текущей страницы
   Перем НомерСтраницы;
   // макс. количество строк, которое влезает на страницу (без шапки и подвала)
   Перем СтрокНаСТранице;
   // высота шапки и подвала документах в товарных строках
   Перем ВысотаШапки, ВысотаПодвала;
   // количество выведеных строк
   Перем ВыведеноНаСтраницу, ВыведеноВсего;
   // количество строк документа
   Перем ВсегоСтрок;
   // используется для расчета количества строк, которое может вместить страница
   Перем ОстатокСтрок;
   
   Перем Себестоимость;
   
   ВсегоСтрок = КоличествоСтрок();
   ВыведеноНаСтраницу = 0; ВыведеноВсего = 0;
   
   НомерСтраницы = 1;
   // установка размеров секций
   ВысотаШапки = 14;
   ВысотаПодвала = 8;
   СтрокНаСТранице = 32;
   
   // инициализация
   Себестоимость = 0;
   ВсегоКоличество    = 0; ВсегоСумма = 0;
   ИтогоКоличество = 0; ИтогоСумма = 0;
   
   Фирма.ИспользоватьДату(ДатаДок);
   
   // сформируем таблицу, содержащую себестоимость товаров
   ВремРегистры=СоздатьОбъект("Регистры");
   РегПартии=ВремРегистры.ПартииТоваров;

   СписокСтатусов=СоздатьОбъект("СписокЗначений");
   СписокСтатусов.ДобавитьЗначение(Купленный);
   СписокСтатусов.ДобавитьЗначение(Принятый);
   
   ТЗИтоги=СоздатьОбъект("ТаблицаЗначений");

   РегПартии.УстановитьЗначениеФильтра("Фирма",глПустаяФирма);
   РегПартии.УстановитьЗначениеФильтра("Статус",СписокСтатусов,2);
   
   Если (ДатаДок<ПолучитьДатуТА()) Тогда
       РегПартии.ВременныйРасчет();
       ВремРегистры.РассчитатьРегистрыПО(ДатаДок);
   КонецЕсли;                                      
       
   РегПартии.ВыгрузитьИтоги(ТЗИтоги,0,1);
   ТЗИтоги    .Свернуть("Товар","Стоимость,СтоимостьНП,НДС,ОстатокТовара");
   
   ИсхТаблица = СоздатьОбъект("Таблица");
   ИсхТаблица.ИсходнаяТаблица("ТОРГ13");
   ИсхТаблица.ВывестиСекцию("Шапка");
   ИсхТаблица.ВывестиСекцию("Заголовок");
   
   // выводим строки документа
   ВыбратьСтроки();
       
   Пока ПолучитьСтроку() = 1 Цикл
       
       // получим количество строк, которое еще можно поместить на странице
       ОстатокСтрок = СтрокНаСТранице - ВыведеноНаСтраницу;
       
       // если 1-я страница, то уменьшим количество строк на высоту шапки
       Если НомерСтраницы = 1 Тогда
           ОстатокСтрок = ОстатокСтрок - ВысотаШапки;
       КонецЕсли;
       
       Если ВыведеноВсего = ВсегоСтрок -1  Тогда
           // выводим последнюю строку
           ОстатокСтрок = ОстатокСтрок - ВысотаПодвала;
       КонецЕсли;
       
       Если Не(ОстатокСтрок > 0) Тогда
           // выводим итоги по странице
           ИсхТаблица.ВывестиСекцию("Итог_по_странице");
           
           // переход на новую страницу
           ИсхТаблица.НоваяСтраница();
           ИсхТаблица.ВывестиСекцию("Заголовок");
           ВыведеноНаСтраницу = 0;    
           // обнуляем итоги по старанице
           ИтогоКоличество = 0; ИтогоСумма = 0;
           // увеличиваем номер страницы
           НомерСтраницы = НомерСтраницы + 1;
       КонецЕсли;
       
       // получим себестоимость товара
       НомСтр="";
       Если ТЗИтоги.НайтиЗначение(Товар,НомСтр,"Товар")=0 Тогда
           Себестоимость = 0;
       Иначе                                  
           ТЗИтоги.ПолучитьСтрокуПоНомеру(НомСтр);
           Если ТЗИтоги.ОстатокТовара = 0 Тогда
               Себестоимость = 0;
           Иначе
               Себестоимость = (ТЗИтоги.Стоимость+ТЗИтоги.СтоимостьНП+ТЗИтоги.НДС)/ТЗИтоги.ОстатокТовара;
               Себестоимость = глПересчет(Себестоимость,Товар.ВалютаУчета,ДатаДок,Рубли,ДатаДок);
           КонецЕсли;
       КонецЕсли;
       
       ВсегоКоличество    = ВсегоКоличество + Количество;
       ВсегоСумма = ВсегоСумма + Себестоимость * Количество;
       ИтогоКоличество = ИтогоКоличество + Количество;
       ИтогоСумма = ИтогоСумма + Себестоимость * Количество;
       
       ИсхТаблица.ВывестиСекцию("Строка");
       
       ВыведеноНаСтраницу = ВыведеноНаСтраницу + 1;
       ВыведеноВсего = ВыведеноВсего + 1;
   КонецЦикла;
   
   // заполним остаток страницы пустыми строками
   //ОстатокСтрок = СтрокНаСТранице - ВыведеноНаСтраницу - ВысотаПодвала;
   //Для Инд=1 По ОстатокСтрок Цикл
   //    ИсхТаблица.ВывестиСекцию("Пустая_строка");
   //КонецЦикла;

   
   ИсхТаблица.ВывестиСекцию("Итог_по_странице");
   ИсхТаблица.ВывестиСекцию("Подвал");
   
   ИсхТаблица.Опции(0,0,0,0,ПарСтрДок);
   ИсхТаблица.Защита(Константа.ФлагЗащитыТаблиц);
   ИсхТаблица.ТолькоПросмотр(1);
   
   ИсхТаблица.Показать("Печать накладной на перемещение","");
   
КонецПроцедуры

//******************************************************************************
Процедура Печать()
   Фирма.ИспользоватьДату(ДатаДок);
   Таб=СоздатьОбъект("Таблица");
   Таб.ВывестиСекцию("Шапка");
   ВыбратьСтроки();
   Ном=0;
   Пока ПолучитьСтроку() = 1 Цикл
       Ном=Ном+1;
       Таб.ВывестиСекцию("Строка");
   КонецЦикла;
   Таб.ВывестиСекцию("Подвал");
   Таб.Опции(0,0,0,0,ПарСтрДок);
   Таб.Защита(Константа.ФлагЗащитыТаблиц);
   Таб.ТолькоПросмотр(1);
   Таб.Показать("Печать накладной","");
КонецПроцедуры

//********************************************************************************
// НАЗВАНИЕ: ВыборПечатнойФормы
// ПАРАМЕТРЫ:
//    Нет.
// ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ:
//    Нет.
// ОПИСАНИЕ:
// выводит на экран всплывающее меню, в котором можно выбрать печатную форму.
Процедура ВыборПечатнойФормы()
   Перем СписокФорм, ВыбЗначение;
   
   // формируем список
   СписокФорм    = СоздатьОбъект("СписокЗначений");
   
   СписокФорм.ДобавитьЗначение(1, "Накладная на перемещение");
   СписокФорм.ДобавитьЗначение(2, "ТОРГ-13");
   
   // открываем список ввиде меню
   
   Если СписокФорм.ВыбратьЗначение(ВыбЗначение, , , , 1) = 1 Тогда
       // значение выбрано
       Если ВыбЗначение = 1 Тогда
           Печать();
           
       Иначе
           ПечатьТОРГ13();
           
       КонецЕсли;

   КонецЕсли;
   
КонецПроцедуры

//******************************************************************************
Функция КонтрольОстатка()
   Перем ТекОстаток;
   
   Если (Выбран() = 0) ИЛИ (ДатаДок = ПолучитьДатуТА()) Тогда
       // если новый или дата равна дате ТА
       ТекОстаток    = глПолучитьОстатокТовара(Товар, Единица, ?(ТипУчета = Фин, Фирма, глПустаяФирма), Склад, 0);
       Возврат СокрЛ(Формат(ТекОстаток, глФорматКоличестваВформах)) + " " + Единица.ТипЕдиницы;
       
   Иначе
       Возврат "";
       
   КонецЕсли;
   
КонецФункции

//*****************************************************************************
// Предопределенные процедуры

//******************************************************************************
Процедура ВводНового(Скопирован)

   глЗаполнитьШапку(Контекст, Скопирован);
   
   Если Скопирован = 1 Тогда    //копирование документа
       Возврат;
       
   КонецЕсли;
   
   ДатаДок    = РабочаяДата();

КонецПроцедуры

//******************************************************************************
Процедура ВводНаОсновании(ДокОснование)
   Предупреждение("Документ "+ПредставлениеВида()+" не вводят на основании других документов!");
   СтатусВозврата(0);
КонецПроцедуры

//******************************************************************************
Процедура ПриОткрытии()

   Парам     = Форма.Параметр;
   Если Лев(Парам, 13) = "ПЕЧАТЬСПРОСМ_" Тогда
       
       ВыборПечатнойФормы();
       
       СтатусВозврата(0);
       Возврат;
   
   КонецЕсли;
   
   НачальнаяДатаДокумента = ДатаДок;

   глПроверкаРазрешенияРедактирования(Контекст);
   глУстановкаРеквизитаТип(Контекст);
   Тип.ДобавитьЗначение("Упр.");
   Тип.ДобавитьЗначение("Общ.");
   Тип.ДобавитьЗначение("Фин.");
   Тип.ТекущаяСтрока(ТипУчета+1);
   Если Форма.ТолькоПросмотр()=1 Тогда
       Форма.кнФирма.Доступность(0);
       Форма.КнСкладПолучатель.Доступность(0);
       Форма.КнСкладОтправитель.Доступность(0);
       Форма.кнОснование.Доступность(0);

       Форма.кнПодборПоКаталогу.Доступность(0);
       Форма.кнИзменитьСостав.Доступность(0);

       Форма.кнЗаписать.Доступность(0);
       Форма.кнПровести.Доступность(0);
       Форма.ОК.Доступность(0);

       Форма.КнопкаПоУмолчанию("Закрыть");
   Иначе
       Форма.КнопкаПоУмолчанию("ОК");
   КонецЕсли;
   // Формируем информационные строки
   Форма.ТекстОснования.Заголовок(СокрП(Основание));
   НаименованиеФирмы = Фирма.Наименование;
   НаименованиеСкладаПолучателя = СкладПолучатель.Наименование;
   НаименованиеСкладаОтправителя = Склад.Наименование;
   
   СтараяДата = ДатаДок;
   //ПересчетРегистров();
КонецПроцедуры

//*****************************************************************************
Процедура ОбработкаПодбора(Выб) //Предопределенная процедура
   глПриОбработкеПодбора(Выб,Контекст);
КонецПроцедуры //Обработка подбора

//*****************************************************************************
Процедура ПриЗаписи() //Предопределенная процедура
   Если глМожноЗаписатьДокумент(Контекст)=0 Тогда
       СтатусВозврата(0);                        
   ИначеЕсли глКонтрольДатыДокумента(Контекст, НачальнаяДатаДокумента)=1 Тогда
       СтатусВозврата(0);
   КонецЕсли;
КонецПроцедуры

//*****************************************************************************
//Инициализирум список действий по кнопке "Действия"
СписокДействий = СоздатьОбъект("СписокЗначений");
СписокДействий.ДобавитьЗначение("Отчет о движениях документа");
СписокДействий.ДобавитьЗначение("Отчет о бухгалтерских проводках");
СписокДействий.ДобавитьЗначение("Открыть в журнале");

НаименованиеСкладаОтправителя = "<не выбран>";
НаименованиеСкладаПолучателя = "<не выбран>";
НаименованиеФирмы = "<не выбрана>";
2 GskIvan
 
04.08.12
15:49
Пишу в таблице <ИтогоКоличество> а результат 0, помогите
3 GskIvan
 
04.08.12
15:50
т.е не 0, а не считает вообще )
4 m-serg74
 
04.08.12
15:50
Итого("Количество") может
5 m-serg74
 
04.08.12
15:51
Итог точнее а не Итого
6 m-serg74
 
04.08.12
15:54
а в таблице ячейка там где ИтогоКоличество - это Тип = Выражение ?
7 m-serg74
 
04.08.12
15:54
угловые скобки не вручную писать надо а тип у ячейки делать - Выражение
8 m-serg74
 
04.08.12
15:56
ТС ты где?
9 GskIvan
 
04.08.12
16:00
Выражение стоит, там 2 таблице к одному модулю, во второй написано ИтогоКоличество и ВсегоКоличество и всё считает
10 m-serg74
 
04.08.12
16:02
где в коде выводится строка где должно вывестись ИтогоКоличество , перед этим сделай Сообщить(ИтогоКоличество) и посмотри что там
11 m-serg74
 
04.08.12
16:05
Процедура Печать()
   Фирма.ИспользоватьДату(ДатаДок);
   Таб=СоздатьОбъект("Таблица");
   Таб.ВывестиСекцию("Шапка");
   ВыбратьСтроки();
   Ном=0;
   Пока ПолучитьСтроку() = 1 Цикл
       Ном=Ном+1;
       Таб.ВывестиСекцию("Строка");
   КонецЦикла;
   Таб.ВывестиСекцию("Подвал");
   Таб.Опции(0,0,0,0,ПарСтрДок);
   Таб.Защита(Константа.ФлагЗащитыТаблиц);
   Таб.ТолькоПросмотр(1);
   Таб.Показать("Печать накладной","");
КонецПроцедуры

вот этот коод твою таблицу выводит?
12 GskIvan
 
04.08.12
16:08
не знаю ) там 1 вариант печати идёт на "таблица" а второй на "Торг13"
так вот на торг13 написано // инициализация
   Себестоимость = 0;
   ВсегоКоличество    = 0; ВсегоСумма = 0;
   ИтогоКоличество = 0; ИтогоСумма = 0;
а где модуль для "Таблица" ?
13 m-serg74
 
04.08.12
16:11
ну а у тебя где ИтогоКоличество считается?
14 GskIvan
 
04.08.12
16:12
и вот внизу выдаёт Переменная не определена <ИтогоКоличество>
15 GskIvan
 
04.08.12
16:12
считает в Торг13
16 m-serg74
 
04.08.12
16:12
да это две разные процецуры!!!
17 m-serg74
 
04.08.12
16:13
причем тут ТОРГ-13
18 GskIvan
 
04.08.12
16:14
так эти 2 таблицы в одном модуле
19 GskIvan
 
04.08.12
16:15
вообще это 2 накладные Списание и перемещение, при печати считает только количество строк, надо добавить количество штук, вот первоначальная задача ))
20 m-serg74
 
04.08.12
16:15
ну да и в одной конфигурации... и чё теперь?
21 m-serg74
 
04.08.12
16:16
(16) внимательно подумай
22 GskIvan
 
04.08.12
16:17
//*****************************************************************************
// Описание переменных
Перем СписокДействий;  // Список действий по документу
Перем СтараяДата;

Перем ВариантыЗаполнения;
Перем НачальнаяДатаДокумента; // Для контроля даты документа
Перем ОстаткиТоваров, РезервыТоваров, ОбщРег;
//*****************************************************************************
// "служебные" функции и процедуры

//*****************************************************************************
Функция ЗаголовокФормы()
   Перем Заголовок, Название;
   Заголовок = "Акт списания";
   Название = "Акт списания №";
   //Форма.НазваниеДокумента.Цвет(-1);

   Если Выбран() = 1 Тогда  
       Если Проведен() = 1 Тогда
           Заголовок = Заголовок + ".Проведен";
       Иначе
           Заголовок = Заголовок + ".Не проведен";
       КонецЕсли;
   Иначе
       Заголовок = Заголовок + " Новый";
   КонецЕсли;
   Форма.Заголовок(Заголовок);    
   Возврат Название;
КонецФункции //ЗаголовокФормы

//******************************************************************************
Процедура ОбновитьНадписи()
   Форма.ТекстФирмы.Заголовок(глСтрокаФирмы(Контекст));
   Форма.ТекстОснования.Заголовок(СокрП(Основание));
КонецПроцедуры

//*****************************************************************************
// функции и процедуры, вызываемые из формул элементов диалога

//******************************************************************************
//Процедура ПересчетРегистров()
//    ОбщРег            = СоздатьОбъект("Регистры");
//    ОстаткиТоваров    = ОбщРег.ОстаткиТоваров;
//    РезервыТоваров    = ОбщРег.РезервыТоваров;
//    
//    Если (ДатаДок < ПолучитьДатуТА()) И (Константа.ОстаткиНаДатуДокумента = Да) Тогда
//        ОстаткиТоваров.ВременныйРасчет();
//        РезервыТоваров.ВременныйРасчет();
//        ОбщРег.РассчитатьРегистрыПо(ДатаДок);
//        
//    КонецЕсли;
//    
//КонецПроцедуры

//******************************************************************************
Процедура ВыборДаты()
   глПриИзмененииДатыДокумента(Контекст, СтараяДата);
   //ПересчетРегистров();
   ОбновитьНадписи();
КонецПроцедуры

//*****************************************************************************
Процедура ВыборФирмы()
   // по кнопке редактирования параметров фирмы в документе
   Перем КонтекстДокумента;
   КонтекстДокумента = глВзятьКонтекст(Контекст);
   ОткрытьФормуМодально("Обработка.ИнформацияОфирме", КонтекстДокумента);
   ОбновитьНадписи();
КонецПроцедуры    
   
//*****************************************************************************
Процедура НачальноеЗаполнение(Способ,НачальноеЗаполнение)
   Перем ТаблицаДокумента;
   
   Если Способ = "ДокументОснование" Тогда
       Если ДокументОснование.Вид() = "ПриходнаяНакладная" Тогда
           ДокументОснование.ВыгрузитьТабличнуюЧасть(ТаблицаДокумента);
           ЗагрузитьТабличнуюЧасть(ТаблицаДокумента);
       Иначе
           ДокОснования = ДокументОснование;
           ДокОснования.ВыбратьСтроки();
           Пока ДокОснования.ПолучитьСтроку()=1 Цикл
               Если ДокОснования.Количество>ДокОснования.ИнвКоличество Тогда
                   НоваяСтрока();
                   Товар=ДокОснования.Товар;
                   Количество=ДокОснования.Количество-ДокОснования.ИнвКоличество;
                   Единица=ДокОснования.Единица;
                   Коэффициент=ДокОснования.Коэффициент;
               КонецЕсли;
           КонецЦикла;
       КонецЕсли;
   КонецЕсли;
КонецПроцедуры    

//*****************************************************************************
Процедура ОбработчикПоКнопкеЗаполнить()
   Перем Способ;
   
   Способ = глВыборСпособаЗаполнения(Контекст,ВариантыЗаполнения);
   Если ПустоеЗначение(Способ)=0 Тогда
       УдалитьСтроки();
       НачальноеЗаполнение(Способ,Да);
       Если КоличествоСтрок()=0 Тогда
           Предупреждение("По выбранному способу заполнения состав оказался пустым.");
       КонецЕсли;
   КонецЕсли;
КонецПроцедуры
//*****************************************************************************
Процедура ВыборОснования()
   // Процедура по кнопке редактирования основания в документе
   КонтекстДокумента = глВзятьКонтекст(Контекст);
   ДокОснование=ДокументОснование;
   ОткрытьФормуМодально("Обработка.ОснованиеДокумента", КонтекстДокумента);
   Если (ДокОснование<>ДокументОснование) И (ПустоеЗначение(ДокументОснование)=0) Тогда
       СпособЗаполнения=глВыборСпособаЗаполнения(Контекст,ВариантыЗаполнения,"по документу-основанию");
       Если ПустоеЗначение(СпособЗаполнения)=0 Тогда
           УдалитьСтроки();
           НачальноеЗаполнение(СпособЗаполнения,Да);
           Если КоличествоСтрок()=0 Тогда
               Предупреждение("По выбранному способу заполнения состав оказался пустым.");
           КонецЕсли;
       КонецЕсли;
   КонецЕсли;
   ОбновитьНадписи();
КонецПроцедуры    

//******************************************************************************
Процедура Печать()
   Фирма.ИспользоватьДату(ДатаДок);
   Таб=СоздатьОбъект("Таблица");
   Таб.ВывестиСекцию("Шапка");
   ВыбратьСтроки();
   Ном=0;
   Пока ПолучитьСтроку() = 1 Цикл
       Ном=Ном+1;
       Таб.ВывестиСекцию("Строка");
   КонецЦикла;
   Таб.ВывестиСекцию("Подвал");
   Таб.Опции(0,0,0,0,ПарСтрДок);
   Таб.Защита(Константа.ФлагЗащитыТаблиц);
   Таб.ТолькоПросмотр(1);
   Таб.Показать("Печать акта...","");
КонецПроцедуры    // Печать

//********************************************************************************
// НАЗВАНИЕ: ПечатьТОРГ16
// ПАРАМЕТРЫ:
//    Нет.
// ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ:
//    Нет.
// ОПИСАНИЕ:
//
Процедура ПечатьТОРГ16()
   Перем КолвоНаСтранице;
   Перем ВысотаПодвала;
   Перем ТекСтрокаНаСтр, ТекСтрока;
   Перем ПечФорма;
   
   Перем ПечЦена, ПечСумма, ПечСуммаИтого;
   Перем РегПартии, ЦеныТоваров;
   
   Перем Поз;
   
   Если Проведен()=0 Тогда
       Сообщить("Заполение сумм в форме ТОРГ-16 возможно только при печати проведенного документа!");
   КонецЕсли;
   
   Фирма.ИспользоватьДату(ДатаДок);
   
   ПечЦена            = 0;
   ПечСумма        = 0;
   ПечСуммаИтого    = 0;
   
   // формируем колонки ТЗ, содержащую количество и себестоимость
   // списанного документом товара
   
   ПриДокументы    = СоздатьОбъект("СписокЗначений");
   
   ЦеныТоваров    = СоздатьОбъект("ТаблицаЗначений");
   ЦеныТоваров.НоваяКолонка("Товар", "Справочник.Номенклатура");
   ЦеныТоваров.НоваяКолонка("Стоимость" , "Число", 19, 5);    // формат аналогичен формату
                                                             // ресурса Стоимость
   ЦеныТоваров.НоваяКолонка("Количество", "Число", 15, 5);    // формат аналогичен формату
   
   //********************************************************************************
   // расчет цен товаров в документе. Цены расчитываются только
   // для проведенного документа
   
   Если Проведен() = 1 Тогда
       
                                                                 // ресурса ОстатокТовара
       Если ТипУчета > Упр Тогда
           ТекФирма    = Фирма;
           
       Иначе
           ТекФирма    = глПустаяФирма;
           
       КонецЕсли;

       РегПартии    = СоздатьОбъект("Регистр.ПартииТоваров");
       
       РегПартии.ВыбратьДвиженияДокумента(ТекущийДокумент());
       
       // заполняем ТЗ
       Пока РегПартии.ПолучитьДвижение() = 1 Цикл
           
           Если РегПартии.Фирма<>ТекФирма Тогда
               Продолжить;
           КонецЕсли;
           
           
           ЦеныТоваров.НоваяСтрока();
           
           ЦеныТоваров.Товар        = РегПартии.Товар;
           ЦеныТоваров.Стоимость    = РегПартии.Стоимость + РегПартии.НДС;
           ЦеныТоваров.Количество    = РегПартии.ОстатокТовара;
                         
           Если ПриДокументы.НайтиЗначение(РегПартии.ПрихДокумент)=0 Тогда
               ПриДокументы.ДобавитьЗначение(РегПартии.ПрихДокумент);    
           КонецЕсли;
       КонецЦикла;
       
       // сворачиваем ТЗ по товару
       ЦеныТоваров.Свернуть("Товар", "Стоимость,Количество");
       ПриДокументы.Сортировать(0, 1);
       
   КонецЕсли;
   
   //********************************************************************************
   
   КолвоНаТитСтранице    = 24;
   
   КолвоНаСтранице    = 40;
   ВысотаПодвала    = 13;
   
   СтрокНаТекСтранице = 0;
   ТекСтрокаНаСтр    = 1;
   ТекСтрока        = 1;
   
   НачалоПовтора    = 1;
   КонецПовтора    = 1;
   
   ПечФорма    = СоздатьОбъект("Таблица");
   ПечФорма.ИсходнаяТаблица("ТОРГ16");
   
   // титульный лист
   ПечФорма.ВывестиСекцию("ШапкаОтчета");
   НачалоПовтора    = НачалоПовтора + ПечФорма.ВысотаСекции("ШапкаОтчета");
   
   ПечФорма.ВывестиСекцию("ШапкаТаб1");
   НачалоПовтора    = НачалоПовтора + ПечФорма.ВысотаСекции("ШапкаТаб1");
   
   // печатаем таблицу титульного листа
   Для Инд = 1 по ПриДокументы.РазмерСписка() Цикл
       Если Инд > КолвоНаТитСтранице Тогда
           Прервать;
       КонецЕсли;
       
       ТекДок    = ПриДокументы.ПолучитьЗначение(Инд);
       ПечФорма.ВывестиСекцию("СтрокаТаб1");
       
   КонецЦикла;
   
   // печатаем пустые строки в таблице титульного листа
   Для Инд2 = Инд по КолвоНаТитСтранице Цикл
       ПечФорма.ВывестиСекцию("ПустаяСтрокаТаб1");

   КонецЦикла;

   ПечФорма.ВывестиСекцию("ПоследняяСтрокаТаб1");

   
   ПечФорма.НоваяСтраница();
   
   ПечФорма.ВывестиСекцию("ШапкаТаб2");
   
   НачалоПовтора    = НачалоПовтора + КолвоНаТитСтранице+1;
   КонецПовтора    = НачалоПовтора + ПечФорма.ВысотаСекции("ШапкаТаб2");
   ПечФорма.ПовторятьПриПечатиСтроки(НачалоПовтора, КонецПовтора);
           
   ВыбратьСтроки();
   Пока ПолучитьСтроку() = 1 Цикл
       
       Если ( ТекСтрока = КоличествоСтрок()    ) Тогда    // последняя строка
           СтрокНаТекСтранице    = КолвоНаСтранице - ВысотаПодвала;
           
       Иначе
           СтрокНаТекСтранице    = КолвоНаСтранице;
           
       КонецЕсли;
   
       Если ТекСтрокаНаСтр > СтрокНаТекСтранице Тогда // целая страница
           
           // печатаем пустые строки
           Для Инд = ТекСтрокаНаСтр по КолвоНаСтранице Цикл
               ПечФорма.ВывестиСекцию("ПустаяСтрокаТаб2");
           КонецЦикла;

           ПечФорма.ВывестиСекцию("ПоследняяСтрокаТаб2");
           
           // начинаем новую страницу
           ПечФорма.НоваяСтраница();
           ТекСтрокаНаСтр = 1;
           
       КонецЕсли;

       // получим цену товара
       Поз    = 0;
       Если ЦеныТоваров.НайтиЗначение(Товар, Поз, "Товар") = 1 Тогда
           ПечЦена    = ЦеныТоваров.ПолучитьЗначение(Поз, "Стоимость") /
                     ЦеныТоваров.ПолучитьЗначение(Поз, "Количество");
                     
           ПечЦена    = глПересчет(ПечЦена,
                                ?(ТипУчета > Упр, Рубли, Товар.ВалютаУчета),
                                ДатаДок,
                                Рубли,
                                ДатаДок);
                               
           ПечСумма    = ПечЦена * Количество;
           
       Иначе
           ПечЦена        = 0;
           ПечСумма    = 0;
           
       КонецЕсли;
       
       ПечСуммаИтого    = ПечСуммаИтого + ПечСумма;

       ПечФорма.ВывестиСекцию("СтрокаТаб2");
       // увеличиваем на единицу нумерацию строк
       ТекСтрокаНаСтр    = ТекСтрокаНаСтр + 1;
       ТекСтрока        = ТекСтрока      + 1;
       
   КонецЦикла;
   
   // печатаем пустые строки на последней странице
   Для Инд = ТекСтрокаНаСтр по СтрокНаТекСтранице Цикл
       ПечФорма.ВывестиСекцию("ПустаяСтрокаТаб2");
       
   КонецЦикла;

   // печатаем секцию итого на последней странице
   ПечФорма.ВывестиСекцию("ПоследняяСтрокаТаб2");
   ПечФорма.ВывестиСекцию("ИтогоТаб2");
   
   ПечФорма.ВывестиСекцию("ПодвалТаб2");
   ПечФорма.Опции(0, 0, 0, 0, ПарСтрДок);
   ПечФорма.Защита(Константа.ФлагЗащитыТаблиц);
   ПечФорма.ТолькоПросмотр(1);
   ПечФорма.Показать("Печать акта списания ТОРГ-16","");
   
КонецПроцедуры    // ПечатьТОРГ16

//********************************************************************************
// НАЗВАНИЕ: ВыборПечатнойФормы
// ПАРАМЕТРЫ:
//    Нет.
// ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ:
//    Нет.
// ОПИСАНИЕ:
// выводит на экран всплывающее меню, в котором можно выбрать печатную форму.
Процедура ВыборПечатнойФормы()
   Перем СписокФорм, ВыбЗначение;
   
   // формируем список
   СписокФорм    = СоздатьОбъект("СписокЗначений");
   
   СписокФорм.ДобавитьЗначение(1, "Акт списания");
   СписокФорм.ДобавитьЗначение(2, "ТОРГ-16");
   
   // открываем список ввиде меню
   
   Если СписокФорм.ВыбратьЗначение(ВыбЗначение, , , , 1) = 1 Тогда
       // значение выбрано
       Если ВыбЗначение = 1 Тогда
           Печать();
           
       Иначе
           ПечатьТОРГ16();
           
       КонецЕсли;

   КонецЕсли;
   
КонецПроцедуры

//******************************************************************************
Функция КонтрольОстатка()
   Перем ТекОстаток;
   
   Если (Выбран() = 0) ИЛИ (ДатаДок = ПолучитьДатуТА()) Тогда
       // если новый или дата равна дате ТА
       ТекОстаток    = глПолучитьОстатокТовара(Товар, Единица, ?(ТипУчета = Фин, Фирма, глПустаяФирма), Склад, 0);
       Возврат СокрЛ(Формат(ТекОстаток, глФорматКоличестваВформах)) + " " + Единица.ТипЕдиницы;
       
   Иначе
       Возврат "";
       
   КонецЕсли;
   
КонецФункции

//*****************************************************************************
// Предопределенные процедуры

//******************************************************************************
Процедура ВводНового(Скопирован)    // предопределенная процедура
   
   Если (ПустоеЗначение(ДокументОснование)=1)И(НазваниеНабораПрав()<>"Администратор") Тогда
       Предупреждение("Без документа основания этот документ может создавать только пользователь с правами ""Администратор"".");
       СтатусВозврата(0);
       Возврат;
   КонецЕсли;
   
   глЗаполнитьШапку(Контекст, Скопирован);
   
   Если Скопирован    = 1 Тогда    //копирование документа
       Возврат;
       
   КонецЕсли;
   
   ДатаДок    = РабочаяДата();
   
КонецПроцедуры

//******************************************************************************
Процедура ВводНаОсновании(ДокОснование)    // предопределенная процедура
   
   СинонимДокумента    = ПредставлениеВида();
   СинонимОснования    = ДокОснование.ПредставлениеВида();

   Список = глПолучитьСписокВводимыхНаОсновании(ДокОснование);
   Поз = Список.НайтиЗначение(Вид());
   Если Поз=0 Тогда
       СтатусВозврата(0);
       Предупреждение("Документ """+СинонимДокумента+""" нельзя вводить на основании """+СинонимОснования+"""");
       Возврат;
   КонецЕсли;
   
   Если НазваниеНабораПрав() <> "Администратор" Тогда
       Если ДокОснование.Вид() = "ПриходнаяНакладная" Тогда
           Если ДокОснование.ПризнакНакладной <> Перечисление.ПризнПрихНакл.ВозвратОтПокупателя Тогда
               Предупреждение("Только пользователь с правами ""Администратор"" может вводить этот документ на основании "+ДокОснование+".",120);
               СтатусВозврата(0);
               Возврат;
           КонецЕсли;
       ИначеЕсли ДокОснование.Вид() = "Инвентаризация" Тогда
       Иначе
           Предупреждение("Только пользователь с правами ""Администратор"" может вводить этот документ на основании "+ДокОснование+".",120);
           СтатусВозврата(0);
           Возврат;
       КонецЕсли;
   КонецЕсли;
   
   ДатаДок=РабочаяДата();
   глЗаполнитьШапкуНаОсн(Контекст,ДокОснование);
   ПричинаСписания = Перечисление.ПричиныСписанияТовара.Недостача;
   Автор = глПользователь;
   
   Если глЕстьРеквизитШапки("ТипИнвентаризации",ДокОснование.Вид()) = Да Тогда
       Если ДокОснование.ТипИнвентаризации <> 2 Тогда
           СтатусВозврата(0);
           Предупреждение("Документ """+СинонимДокумента+""" можно вводить только на основании """+СинонимОснования+"""с типом инвентаризации <по складу>");
           Возврат;
       КонецЕсли;
   КонецЕсли;
   НачальноеЗаполнение("ДокументОснование",Константа.НачальноеЗаполнение);
       
КонецПроцедуры

//******************************************************************************
Процедура ПриОткрытии()    // предопределенная процедура

   Парам     = Форма.Параметр;
   Если Лев(Парам, 13) = "ПЕЧАТЬСПРОСМ_" Тогда
       
       ВыборПечатнойФормы();
       
       СтатусВозврата(0);
       Возврат;
   
   КонецЕсли;
   
   НачальнаяДатаДокумента = ДатаДок;

   глПроверкаРазрешенияРедактирования(Контекст);
   глУстановкаРеквизитаТип(Контекст);
   Тип.ДобавитьЗначение("Упр.");
   Тип.ДобавитьЗначение("Общ.");
   Тип.ДобавитьЗначение("Фин.");
   Тип.ТекущаяСтрока(ТипУчета+1);
   Если Форма.ТолькоПросмотр()=1 Тогда
       Форма.КнФирма.Доступность(0);
       Форма.КнОснование.Доступность(0);

       Форма.кнПодборПоКаталогу.Доступность(0);
       Форма.кнИзменитьСостав.Доступность(0);
       Форма.кнЗаполнитьСостав.Доступность(0);
       
       Форма.кнЗаписать.Доступность(0);
       Форма.кнПровести.Доступность(0);
       Форма.ОК.Доступность(0);
       
       Форма.КнопкаПоУмолчанию("Закрыть");
   Иначе
       Форма.КнопкаПоУмолчанию("ОК");
   КонецЕсли;

   //ПересчетРегистров();
   ОбновитьНадписи();
   // Формируем информационные строки
   СтараяДата = ДатаДок;
КонецПроцедуры    // ПриОткрытии

//*****************************************************************************
Процедура ОбработкаПодбора(Выб) //Предопределенная процедура
   глПриОбработкеПодбора(Выб,Контекст);
КонецПроцедуры //Обработка подбора

//*****************************************************************************
Процедура ПриЗаписи() //Предопределенная процедура
   
   Если ПустоеЗначение(ПричинаСписанияТМЦ) = 1 Тогда
       Предупреждение("Не указана причина списания ТМЦ. Документ не записан!",20);
       СтатусВозврата(0);
       Возврат;
   КонецЕсли;
       
   Если глМожноЗаписатьДокумент(Контекст)=0 Тогда
       СтатусВозврата(0);                        
   ИначеЕсли глКонтрольДатыДокумента(Контекст, НачальнаяДатаДокумента)=1 Тогда
       СтатусВозврата(0);
   Иначе
       ЗаголовокФормы();
   КонецЕсли;
   
КонецПроцедуры // ПриЗаписи()

//*****************************************************************************
//Инициализирум список действий по кнопке "Действия"
СписокДействий = СоздатьОбъект("СписокЗначений");
СписокДействий.ДобавитьЗначение("Структура подчиненности");
СписокДействий.ДобавитьЗначение("Отчет о движениях документа");
СписокДействий.ДобавитьЗначение("Отчет о бухгалтерских проводках");
СписокДействий.ДобавитьЗначение("Открыть в журнале");

ВариантыЗаполнения = СоздатьОбъект("СписокЗначений");
ВариантыЗаполнения.ДобавитьЗначение("ДокументОснование","по документу-основанию");
23 GskIvan
 
04.08.12
16:17
вот спсиание, тут вообще нигде количество не считает
24 GskIvan
 
04.08.12
16:18
я же писал что не понимаю в этом ничего )) вот сижу гуглю уже 3 час )
25 m-serg74
 
04.08.12
16:19
на хрен на хрен 1С угадывать количество должна, конечно в доке ручками кол-во оператор вводит
26 m-serg74
 
04.08.12
16:20
чтоб не ипать моск в ячейке где тебе нужно напиши Итог("Количество")
27 m-serg74
 
04.08.12
16:21
> я же писал что не понимаю в этом ничего
а почему тогда тебе поручили это занятие?
28 GskIvan
 
04.08.12
16:24
в отпуске все )) Итог("Количество") работает, считает ))) всё что нужно было )
29 m-serg74
 
04.08.12
16:25
удачи
30 GskIvan
 
04.08.12
16:26
а в списании не работает ))
31 m-serg74
 
04.08.12
16:26
а где ты его в списании пхаешь?
32 m-serg74
 
04.08.12
16:27
и вообще списание - это Документ?
33 m-serg74
 
04.08.12
16:29
ЦеныТоваров.Итог("Количество") попробуй
34 GskIvan
 
04.08.12
16:30
Не там пихал )) а Итого количество это он считает на 1 странице документа, а итог по всему документу написать Всего("Количество")
35 m-serg74
 
04.08.12
16:31
нет
36 m-serg74
 
04.08.12
16:33
Итог("Количество") это и есть итог по всему документу
37 GskIvan
 
04.08.12
16:35
Ладно, достаточно будет ))  Спасибо тебе огромное, ты мне часть выходного спас ))) удачи, здоровья и успехов, ещё раз спасибо
38 Фдулич
 
04.08.12
16:35
песец , а где специалисты ?
39 m-serg74
 
04.08.12
16:36
(38) в (28)
40 GskIvan
 
04.08.12
16:36
в отпуске