Имя: Пароль:
1C
1С v8
Документ при открытии
0 Rumpil
 
13.01.12
17:09
Если открыть документ "Заказ поставщику" из отчета и потом закрыть документ не изменив не капли, то выскакивает окно "Сохранить измененные данные ?" - какие данные то ? код проверял, в коде только проверяется этот документ новый или нет и если не новый то никаких изменений документа не происходит
1 rotting
 
13.01.12
17:10
плохо проверял
2 golden-pack
 
13.01.12
17:10
(0) кэп говорит что изменения есть
3 Rumpil
 
13.01.12
17:12
вот весь код, больше ничего нет

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

       
   КонецЕсли;    
   
   
   
КонецПроцедуры
4 Рыцарь
 
13.01.12
17:14
проверь подписки
5 Галахад
 
гуру
13.01.12
17:14
А перед открытием?
6 Rumpil
 
13.01.12
17:15
(5) такой процедуры вообще нет в этом документе (до самописный)
7 mikecool
 
13.01.12
17:20
(6) а если найду? (с)
модуль смотри
8 NWsFF
 
13.01.12
17:23
Ставь брекпоинт и топай вперед пока не изменится значение Модифицированость() на истина
9 Rumpil
 
13.01.12
17:25
(7) найди, вот весь код формы документа:

Перем мТекущаяДатаДокумента;

Процедура КнопкаЗагрузитьНажатие(Элемент)

   ЗагрузитьЭлементы();
   
КонецПроцедуры

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

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

Процедура КонтрагентПриИзменении(Элемент)
   
   ДоговорКонтрагента = Контрагент.ОсновнойДоговорКонтрагента;
   ВалютаДокумента    = Контрагент.ОсновнойДоговорКонтрагента.ВалютаВзаиморасчетов;
   
   РаботаСДиалогами.ОбновитьПодсказкуКодНомерОбъекта(ЭтотОбъект.Метаданные(), ЭлементыФормы.ДействияФормы.Кнопки.Подменю, ЭлементыФормы.Номер);
   
КонецПроцедуры

Процедура ФайлыНачалоВыбора(Элемент, СтандартнаяОбработка)
   
   Файлы = "";    
   Диалог = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие);    
   Диалог.ПолноеИмяФайла = "";    
   Если Диалог.Выбрать() Тогда        
       Файлы = Диалог.ПолноеИмяФайла;        
   Иначе        
       Возврат;        
   КонецЕслИ;
   
КонецПроцедуры

Процедура ФайлыОткрытие(Элемент, СтандартнаяОбработка)
   
   //СтандартнаяОбработка = Ложь;
   //
   //РасширениеВременногоФайла = Прав(Файлы, 4);
   //
   //Если Лев(РасширениеВременногоФайла, 1) = "." Тогда
   //    РасширениеВременногоФайла = Прав(Файлы, 3);
   //    ИмяВременногоФайла = ПолучитьИмяВременногоФайла(РасширениеВременногоФайла);
   //Иначе
   //    ИмяВременногоФайла = ПолучитьИмяВременногоФайла();
   //КонецЕсли;
   //
   //СохранитьЗапуститьФайл(ИмяВременногоФайла, Истина);

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

Процедура СохранитьЗапуститьФайл(ИмяВнешнегоФайла, Запустить = Ложь)
   
   Если ПустаяСтрока(ИмяВнешнегоФайла) Тогда
       Предупреждение("Не указано имя файла!");
       Возврат;
   КонецЕсли;
   
   ВнешнийФайл = Хранилище.Получить();
   Попытка
       ВнешнийФайл.Записать(ИмяВнешнегоФайла);
   Исключение
       Сообщить("Ошибка при сохранении файла: " + ОписаниеОшибки(), СтатусСообщения.Важное);
       Возврат;
   КонецПопытки;
   
   Если Запустить Тогда
       
       Файл = Новый Файл(ИмяВнешнегоФайла);
       
       Если Файл.Существует() Тогда
           Попытка
               ЗапуститьПриложение(ИмяВнешнегоФайла);
           Исключение
               Сообщить("Ошибка при запуске файла: " + ОписаниеОшибки(), СтатусСообщения.Важное);
               Возврат;
           КонецПопытки;
       Иначе
           Предупреждение("Не удалось найти файл " + ИмяВнешнегоФайла + " на диске!");
       КонецЕсли;
       
   КонецЕсли;
   
КонецПроцедуры

Процедура ЗагрузитьЭлементы()
   
   //Файлы = "";    
   //Диалог = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие);    
   //Диалог.ПолноеИмяФайла = "";    
   //Если Диалог.Выбрать() Тогда        
   //    Файлы = Диалог.ПолноеИмяФайла;        
   //Иначе        
   //    Возврат;        
   //КонецЕслИ;
   
   Попытка        
       гл_appExcel = Новый COMObject("Excel.Application");        
   Исключение        
       Сообщить(ОписаниеОшибки());
       Возврат;        
   КонецПопытки;        
   
   exWorkBook = гл_appExcel.Workbooks.Open(Файлы);    
   RangeAll = exWorkBook.ActiveSheet.UsedRange;
   
   если СтрокиС = 0 тогда
       СтрокиС=1;
   КонецЕсли;    
   
   //СтрокиПо = RangeAll.Rows.Count;
   //Сообщить(СтрокиПо);
   
   Для НомерСтроки = СтрокиС По СтрокиПо Цикл
       ПрописьюНоменклатура = RangeAll.Cells(НомерСтроки, 1 ).Value;
       ПрописьюШтрихкод = RangeAll.Cells(НомерСтроки, 2 ).Value;
       ПрописьюКоличество = RangeAll.Cells(НомерСтроки, 3 ).Value;
       ПрописьюЦена = RangeAll.Cells(НомерСтроки, 4 ).Value;
       ПрописьюСклад = RangeAll.Cells(НомерСтроки, 5 ).Value;
       
       //Сообщить(ПрописьюНоменклатура);
       //Сообщить(ПрописьюШтрихкод);
       //Сообщить(ПрописьюКоличество);
       //Сообщить(ПрописьюЦена);
       //Сообщить(ПрописьюСклад);
       
       Товар = Справочники.Номенклатура.ПустаяСсылка();
       
       //Товар = Справочники.Номенклатура.НайтиПоНаименованию(ПрописьюНоменклатура,Истина);
       
       Товар = Справочники.Номенклатура.НайтиПоРеквизиту("Артикул",ПрописьюШтрихкод);
       
       //Сред(ПрописьюШтрихкод,1,16);
       
       если Товар.Пустая() Тогда
           Товар = Справочники.Номенклатура.СоздатьЭлемент();
           Товар.Наименование                = СокрЛП(ПрописьюНоменклатура);
           Товар.НаименованиеПолное        = СокрЛП(ПрописьюНоменклатура);
           Товар.Артикул                    = СокрЛП(Сред(ПрописьюШтрихкод,1,16));
           Товар.БазоваяЕдиницаИзмерения    = Справочники.КлассификаторЕдиницИзмерения.Штука;
           Товар.ЕдиницаХраненияОстатков    = Справочники.КлассификаторЕдиницИзмерения.Штука;
           Товар.ЕдиницаДляОтчетов         = Справочники.КлассификаторЕдиницИзмерения.Штука;
           Товар.ЕдиницаИзмеренияМест      = Справочники.КлассификаторЕдиницИзмерения.Штука;
           Товар.СтавкаНДС                    = Перечисления.СтавкиНДС.БезНДС;
           Товар.ВидНоменклатуры              = Справочники.ВидыНоменклатуры.ПАКЕТ;
           Товар.Записать();
           Сообщить("Создан товар "+Товар.Наименование+" со штрих кодом "+Товар.Артикул,СтатусСообщения.Информация);
       КонецЕсли;                
       
       НоваяСтрока = Товары.Добавить();
       НоваяСтрока.Номенклатура     = Справочники.Номенклатура.НайтиПоНаименованию(Товар.Ссылка,Истина);
       НоваяСтрока.ЕдиницаИзмерения = Справочники.КлассификаторЕдиницИзмерения.Штука;
       НоваяСтрока.Артикул         = Сред(ПрописьюШтрихкод,1,16);
       НоваяСтрока.Количество         = ПрописьюКоличество;
       НоваяСтрока.Цена             = ПрописьюЦена;
       НоваяСтрока.Сумма             = ПрописьюКоличество*ПрописьюЦена;
       НоваяСтрока.СкладРезерв     = Справочники.Склады.НайтиПоНаименованию(ПрописьюСклад,Истина);        
       
   КонецЦикла;    
       
   exWorkBook.Close( Ложь );
   
   гл_appExcel.Workbooks.Close( );


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

Процедура СтрокиСПриИзменении(Элемент)
   
   если СтрокиС = 0 тогда
       Предупреждение("Не можеть быть 0 ");
       Возврат;
   КонецЕсли;    
   
КонецПроцедуры

Процедура ТоварыНоменклатураПриИзменении(Элемент)
   
   ТекДан=ЭлементыФормы.Товары.ТекущиеДанные;
   
   ПровЭлемент(ТекДан);    
   
   Расчет();
   АвтоматическийЗаполнения();
   
КонецПроцедуры

Функция ПровЭлемент(ТекДан)
   
   прОтказ=Ложь;
   ТекДан = ЭлементыФормы.Товары.ТекущиеДанные;

   Если ТекДан.Номенклатура.ВидНоменклатуры = Справочники.ВидыНоменклатуры.ПАКЕТ Тогда
       Предупреждение(ТекДан.Номенклатура.Наименование + " невозможно выбрать пакет.");
       прОтказ=Истина;    
       ТекДан.Номенклатура = Неопределено;
   КонецЕсли;
   
   Возврат прОтказ;
   
КонецФункции

Процедура Расчет()
   
   ТекущаяДанные = ЭлементыФормы.Товары.ТекущиеДанные;
   ТекущаяДанные.Сумма = ТекущаяДанные.Количество*ТекущаяДанные.Цена;    
   
КонецПроцедуры

Процедура АвтоматическийЗаполнения()
   
   ТекущаяДанные = ЭлементыФормы.Товары.ТекущиеДанные;
   ТекущаяДанные.ЕдиницаИзмерения = ТекущаяДанные.Номенклатура.БазоваяЕдиницаИзмерения;
   ТекущаяДанные.Артикул = ТекущаяДанные.Номенклатура.Артикул;    
   
КонецПроцедуры

Процедура ТоварыКоличествоПриИзменении(Элемент)
   Расчет();
КонецПроцедуры

Процедура ТоварыЦенаПриИзменении(Элемент)
   
   Расчет();
   
КонецПроцедуры

Процедура ТоварыПриВыводеСтроки(Элемент, ОформлениеСтроки, ДанныеСтроки)

   СуммаДокумента = Товары.Итог("Сумма");
   
КонецПроцедуры

Процедура ДействияФормыРедактироватьКодНомер(Кнопка)
   
   РаботаСДиалогами.ИзменениеВозможностиРедактированияНомера(ЭтотОбъект.Метаданные(), ЭтаФорма, ЭлементыФормы.ДействияФормы.Кнопки.Подменю, ЭлементыФормы.Номер);
   
КонецПроцедуры

Процедура ДатаПриИзменении(Элемент)
   
   РаботаСДиалогами.ПроверитьНомерДокумента(ЭтотОбъект, мТекущаяДатаДокумента);
   РаботаСДиалогами.ОбновитьПодсказкуКодНомерОбъекта(ЭтотОбъект.Метаданные(), ЭлементыФормы.ДействияФормы.Кнопки.Подменю, ЭлементыФормы.Номер);

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

Процедура ОрганизацияПриИзменении(Элемент)
   
   РаботаСДиалогами.ОбновитьПодсказкуКодНомерОбъекта(ЭтотОбъект.Метаданные(), ЭлементыФормы.ДействияФормы.Кнопки.Подменю, ЭлементыФормы.Номер);
   
КонецПроцедуры

Процедура ДоговорКонтрагентаПриИзменении(Элемент)
   
   РаботаСДиалогами.ОбновитьПодсказкуКодНомерОбъекта(ЭтотОбъект.Метаданные(), ЭлементыФормы.ДействияФормы.Кнопки.Подменю, ЭлементыФормы.Номер);
   
КонецПроцедуры

Процедура СкладПриИзменении(Элемент)
   
   РаботаСДиалогами.ОбновитьПодсказкуКодНомерОбъекта(ЭтотОбъект.Метаданные(), ЭлементыФормы.ДействияФормы.Кнопки.Подменю, ЭлементыФормы.Номер);
   
КонецПроцедуры

Процедура ПослеЗаписи()
   
   РаботаСДиалогами.ОбновитьПодсказкуКодНомерОбъекта(ЭтотОбъект.Метаданные(), ЭлементыФормы.ДействияФормы.Кнопки.Подменю, ЭлементыФормы.Номер);
   
КонецПроцедуры

Процедура ТоварыХарактеристикаНоменклатурыПриИзменении(Элемент)
   
       СтрокаТабличнойЧасти = ЭлементыФормы.Товары.ТекущиеДанные;
   //СуммаСтроки = СтрокаТабличнойЧасти.Цена * СтрокаТабличнойЧасти.Количество;
   
   УправлениеЗапасами.ДобавитьСоставНабора(СтрокаТабличнойЧасти, ЭтотОбъект);

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

Процедура КоманднаяПанель1ДействиеПодбор(Кнопка)
   
   ФормаПодбора=Справочники.Номенклатура.ПолучитьФормуВыбора(,ЭлементыФормы.Товары);
   ФормаПодбора.Открыть();
   
КонецПроцедуры

Процедура ТоварыОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка)
   
           //добавим строку
    НоваяСтрока=Товары.Добавить();
    НоваяСтрока.Номенклатура     = ВыбранноеЗначение;
    НоваяСтрока.ЕдиницаИзмерения = ВыбранноеЗначение.БазоваяЕдиницаИзмерения;
    НоваяСтрока.Артикул          = ВыбранноеЗначение.Артикул;
       
    ЭлементыФормы.Товары.ТекущаяСтрока=НоваяСтрока;
   
    ПровЭлемент(НоваяСтрока);
   
КонецПроцедуры


Процедура КоманднаяПанель1СоставНабора(Кнопка)
   
   СтрокаТабличнойЧасти = ЭлементыФормы.Товары.ТекущиеДанные;
   Если СтрокаТабличнойЧасти = Неопределено Тогда
       Возврат;
   ИначеЕсли НЕ СтрокаТабличнойЧасти.Номенклатура.Комплект Тогда
       Предупреждение("Номенклатура не является набором-комплектом!");
       Возврат;
   КонецЕсли;

   ФормаСоставНабора = Документы.ЗаказПоставщику.ПолучитьФорму("СоставНабора",);
       
   Запрос = НОвый Запрос;
   Запрос.Текст = "ВЫБРАТЬ
                  |    НоменклатураКомплектующие.Номенклатура,
                  |    НоменклатураКомплектующие.Комплектующая,
                  |    НоменклатураКомплектующие.Количество
                  |ИЗ
                  |    Справочник.Номенклатура.Комплектующие КАК НоменклатураКомплектующие
                  |ГДЕ
                  |    НоменклатураКомплектующие.Ссылка = &прНомен";
   Запрос.УстановитьПараметр("прНомен",СтрокаТабличнойЧасти.Номенклатура);
   Выборка = Запрос.Выполнить().Выбрать();
   ФормаСоставНабора.Комплектующие.Очистить();
   пока Выборка.Следующий() Цикл
       НоваяСтрока = ФормаСоставНабора.Комплектующие.Добавить();
       НоваяСтрока.Номенклатура = Выборка.Номенклатура;
       НоваяСтрока.Комплектующая = Выборка.Комплектующая;
       НоваяСтрока.Количество = Выборка.Количество;
   КонецЦикла;    
   
   ФормаСоставНабора.Открыть();


   

   
   
   //мТекущаяСтрокаНабор = СтрокаТабличнойЧасти;

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

   // Открываем форму "Состав набора".
   //мФормаСоставНабора = Обработки.СоставНабора.ПолучитьФорму("ОсновнаяФорма", ЭтаФорма, ЭтаФорма);
   //мФормаСоставНабора.СтруктураИсходныхПараметров = СтруктураПараметров;
   //мФормаСоставНабора.Открыть();
   
КонецПроцедуры
10 mikecool
 
13.01.12
17:25
платформа 8.2?
11 Rumpil
 
13.01.12
17:26
(10) 8.1
12 Галахад
 
гуру
13.01.12
17:27
Сумма-то меняется.
13 НЕА123
 
13.01.12
17:28
(9)
одно это
>Процедура ТоварыПриВыводеСтроки(Элемент, ОформлениеСтроки, ДанныеСтроки)
>    СуммаДокумента = Товары.Итог("Сумма");
>КонецПроцедуры

уже умиляет!
14 mikecool
 
13.01.12
17:28
(11) тогда (8)
15 Быдлокодер 80 lvl
 
13.01.12
17:29
(13) +1, опередил!
16 Rumpil
 
13.01.12
17:29
(13) а шо, пипец, да ? ))
17 НЕА123
 
13.01.12
17:30
(16)
неа. это пипедище!
18 Rumpil
 
13.01.12
17:35
(17) понял, корректирую, мерси )
19 mikecool
 
13.01.12
17:38
(18) правильно, используй хотя бы ПриПолученииДанных
)))
Проблемы невозможно решaть нa том же уровне компетентности, нa котором они возникaют. Альберт Эйнштейн