новое событие
Информационный поток
Задания вакансии материалы разработки сообщения форума
Пимшин Дмитрий Александрович
Приватное сообщение

В типовую БП2.0 добавлена ТТН 1-Т. Необходимо переписать под БП3.0.

65 |  0
19 мая 2023 в 20:11:54 (1 год 26 недель 6 дней 7 часов назад)
66900
Текст задания
Есть типовая БП2.0. В ней самописный документ ТТН 1-Т (модули приведены ниже). Надо переписать его для работы с БП3.0.49. Желательно, максимально использовать новые механизмы (печать, проверка договора и пр.).

Модуль объекта.
Перем мВалютаРегламентированногоУчета Экспорт;

#Если Клиент Тогда

///==============================================================================
function GetResponsibles()

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

ИначеЕсли Руководители.ОтветственноеЛицо = Перечисления.ОтветственныеЛицаОрганизаций.ГлавныйБухгалтер Тогда
Результат.ГлавныйБухгалтер = Руководители.ФизическоеЛицо;
Результат.ГлавныйБухгалтерДолжность = Руководители.Должность;
Результат.ГлавныйБухгалтерПредставление = Руководители.Представление;

ИначеЕсли Руководители.ОтветственноеЛицо = Перечисления.ОтветственныеЛицаОрганизаций.Кассир Тогда
Результат.Кассир = Руководители.ФизическоеЛицо;
Результат.КассирДолжность = Руководители.Должность;
Результат.КассирПредставление = Руководители.Представление;

ИначеЕсли Руководители.ОтветственноеЛицо = Перечисления.ОтветственныеЛицаОрганизаций.отпускРазрешилТТН Тогда
Результат.отпускРазрешилТТН = Руководители.ФизическоеЛицо;
Результат.отпускРазрешилТТНДолжность = Руководители.Должность;
Результат.отпускРазрешилТТНПредставление = Руководители.Представление;

КонецЕсли;
КонецЦикла;
return Результат;
endFunction // GetResponsible

///==============================================================================
// Функция осуществляет печать формы "1-Т"
// на основании документа "РеализацияТоваровУслуг".
function ПечатьТТН()
Перем ПодразделениеОтветственныхЛиц;

Запрос = Новый Запрос;
Запрос.УстановитьПараметр("Документ", ref);
Запрос.УстановитьПараметр("ПустойКонтрагент", Справочники.Контрагенты.ПустаяСсылка());

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

Шапка = Запрос.Выполнить().Выбрать();
Шапка.Следующий();
ВыборкаСтрок = Шапка.Товары.Выгрузить();

ТабДокумент = Новый ТабличныйДокумент;
Макет = ПолучитьМакет("ТТН");

// Зададим параметры макета
ТабДокумент.ПолеСверху = 0;
ТабДокумент.ПолеСлева = 0;
ТабДокумент.ПолеСнизу = 0;
ТабДокумент.ПолеСправа = 0;
ТабДокумент.ОриентацияСтраницы = ОриентацияСтраницы.Ландшафт;

ТабДокумент.ИмяПараметровПечати = "ПАРАМЕТРЫ_ПЕЧАТИ_1Т";

// Выводим общие реквизиты шапки
СведенияОПоставщике = УправлениеКонтактнойИнформацией.СведенияОЮрФизЛице(Шапка.ЮрФизЛицо, Шапка.ДатаДокумента , , Шапка.БанковскийСчет);
СведенияОГрузоотправителе = УправлениеКонтактнойИнформацией.СведенияОЮрФизЛице(Шапка.Грузоотправитель, Шапка.ДатаДокумента , , ?(Шапка.Грузоотправитель = Шапка.ЮрФизЛицо, Шапка.БанковскийСчет, Неопределено));
СведенияОПокупателе = УправлениеКонтактнойИнформацией.СведенияОЮрФизЛице(Шапка.Покупатель, Шапка.ДатаДокумента);
СведенияОГрузополучателе = УправлениеКонтактнойИнформацией.СведенияОЮрФизЛице(Шапка.Грузополучатель, Шапка.ДатаДокумента);

ОбластьМакета = Макет.ПолучитьОбласть("Шапка");
ОбластьМакета.Параметры.НомерДокумента = ОбщегоНазначения.ПолучитьНомерНаПечать(Шапка);
ОбластьМакета.Параметры.ДатаДокумента = Шапка.ДатаДокумента;
ОбластьМакета.Параметры.Грузоотправитель = Шапка.Грузоотправитель;
ОбластьМакета.Параметры.Грузополучатель = Шапка.Грузополучатель;
ОбластьМакета.Параметры.Плательщик = Шапка.Покупатель;
ОбластьМакета.Параметры.ГрузоотправительПредставление = ФормированиеПечатныхФорм.ОписаниеОрганизации(СведенияОГрузоотправителе, "НаименованиеДляПечатныхФорм,ИНН,ФактическийАдрес,Телефоны,НомерСчета,Банк,БИК,КоррСчет");
ОбластьМакета.Параметры.ГрузополучательПредставление = ФормированиеПечатныхФорм.ОписаниеОрганизации(СведенияОГрузополучателе, "НаименованиеДляПечатныхФорм,ИНН,ФактическийАдрес,Телефоны,НомерСчета,Банк,БИК,КоррСчет");
ОбластьМакета.Параметры.ПлательщикПредставление = ФормированиеПечатныхФорм.ОписаниеОрганизации(СведенияОПокупателе);
ОбластьМакета.Параметры.ГрузоотправительПоОКПО = СведенияОГрузоотправителе.КодПоОКПО;

ТабДокумент.Вывести(ОбластьМакета);

СтрокНаСтранице = 23;
СтрокШапки = 10;
СтрокПодвала = 9;
НомерСтраницы = 1;

// Выводим заголовок таблицы
ЗаголовокТаблицы = Макет.ПолучитьОбласть("ЗаголовокТаблицы");
ЗаголовокТаблицы.Параметры.НомерСтраницы = "Страница " + НомерСтраницы;
ТабДокумент.Вывести(ЗаголовокТаблицы);

КоличествоСтрок = ВыборкаСтрок.Количество();
// инициализация итогов по странице
ИтогоКоличествоНаСтранице = 0;
ИтогоСуммаНаСтранице = 0;
ИтогоНДСНаСтранице = 0;
ИтогоСуммаСНДСНаСтранице = 0;

// инициализация итогов по документу
ИтогоМест = 0;
ИтогоКоличество = 0;
ИтогоСуммаСНДС = 0;
ИтогоСумма = 0;
ИтогоНДС = 0;
Ном = 0;

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

ОбластьМакета.Параметры.Заполнить(ВыборкаСтрокТовары);
if ValueIsFilled(ВыборкаСтрокТовары.ХарактеристикаНоменклатуры) then
ОбластьМакета.Параметры.ТоварНаименование = ВыборкаСтрокТовары.ТоварНаименование + " " + ВыборкаСтрокТовары.ХарактеристикаНоменклатуры;
endIf;

ТабДокумент.Вывести(ОбластьМакета);

Количество = ВыборкаСтрокТовары.Количество;
// увеличим итоги по странице
ИтогоКоличествоНаСтранице = ИтогоКоличествоНаСтранице + Количество;
ИтогоСуммаНаСтранице = ИтогоСуммаНаСтранице + ВыборкаСтрокТовары.Сумма;

// увеличим итоги по документу
ИтогоМест = ИтогоМест + ВыборкаСтрокТовары.КоличествоМест;
ИтогоКоличество = ИтогоКоличество + Количество;
ИтогоСуммаСНДС = ИтогоСуммаСНДС + ВыборкаСтрокТовары.Сумма;
КонецЦикла;

// Выводим подвал документа
ОбластьМакета = Макет.ПолучитьОбласть("Подвал");
ОбластьМакета.Параметры.КоличествоПорядковыхНомеровЗаписейПрописью = ЧислоПрописью(КоличествоСтрок, ,",,,,,,,,0");
ТабДокумент.Вывести(ОбластьМакета);

Руководители = GetResponsibles();

СведенияОПеревозчике = УправлениеКонтактнойИнформацией.СведенияОЮрФизЛице(Перевозчик, Шапка.ДатаДокумента);
СведенияОЗаказчике = УправлениеКонтактнойИнформацией.СведенияОЮрФизЛице(Заказчик, Шапка.ДатаДокумента);
ОбластьМакета = Макет.ПолучитьОбласть("ТранспортныйРаздел");
ОбластьМакета.Параметры.Номер = ОбщегоНазначения.ПолучитьНомерНаПечать(Шапка);
ОбластьМакета.Параметры.ОрганизацияПеревозчик = ФормированиеПечатныхФорм.ОписаниеОрганизации(СведенияОПеревозчике, "НаименованиеДляПечатныхФорм,ИНН,ФактическийАдрес,Телефоны,НомерСчета,Банк,БИК,КоррСчет");
ОбластьМакета.Параметры.МаркаАвтомобиля = vehicle.vehicleMark;
ОбластьМакета.Параметры.ГосНомерАвтомобиля = vehicle.gosNumber;
ОбластьМакета.Параметры.ОрганизацияЗаказчик = ФормированиеПечатныхФорм.ОписаниеОрганизации(СведенияОЗаказчике, "НаименованиеДляПечатныхФорм,ИНН,ФактическийАдрес,Телефоны,НомерСчета,Банк,БИК,КоррСчет");
ОбластьМакета.Параметры.ФИОВодителя = Водитель;
ОбластьМакета.Параметры.ВодительскоеУдостоверение = Водитель.ВодительскоеУдостоверение;
ОбластьМакета.Параметры.ПунктПогрузки = ПунктПогрузки;
ОбластьМакета.Параметры.ПунктРазгрузки = ПунктРазгрузки;
/// ОбластьМакета.Параметры.Прицеп = trailer.vehicleMark;
/// ОбластьМакета.Параметры.ГосНомерПрицепа = trailer.gosNumber;
ОбластьМакета.Параметры.СрокДоставки = СрокДоставки;

ТабДокумент.Вывести(ОбластьМакета);

ОбластьМакета = Макет.ПолучитьОбласть("СведенияОГрузеШапка");
ТабДокумент.Вывести(ОбластьМакета);
for each ВыборкаСтрокТовары in ВыборкаСтрок do
ОбластьМакета = Макет.ПолучитьОбласть("СведенияОГрузеСтрока");
ОбластьМакета.Параметры.Заполнить(ВыборкаСтрокТовары);
if ValueIsFilled(ВыборкаСтрокТовары.ХарактеристикаНоменклатуры) then
ОбластьМакета.Параметры.ТоварНаименование = ВыборкаСтрокТовары.ТоварНаименование + " " + ВыборкаСтрокТовары.ХарактеристикаНоменклатуры;
endIf;

ТабДокумент.Вывести(ОбластьМакета);
endDo;

ОбластьМакета = Макет.ПолучитьОбласть("bottom");
////
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| РаботникиОрганизацийСрезПоследних.Должность
|ИЗ
| РегистрСведений.РаботникиОрганизаций.СрезПоследних(&moment, Сотрудник.Физлицо = &Физлицо) КАК РаботникиОрганизацийСрезПоследних";

Запрос.УстановитьПараметр("moment", Дата);
Запрос.УстановитьПараметр("Физлицо", Ответственный.Физлицо);

Результат = Запрос.Выполнить();

ВыборкаДетальныеЗаписи = Результат.Выбрать();

if ВыборкаДетальныеЗаписи.Следующий() then
ОбластьМакета.Параметры.ОтпускРазрешилДолжность = ВыборкаДетальныеЗаписи.Должность;
endIf;
////
ОбластьМакета.Параметры.ОрганизацияЗаказчик = Заказчик;
ОбластьМакета.Параметры.ОрганизацияПеревозчик = Перевозчик;
ОбластьМакета.Параметры.ФИОГрузПринял = Водитель;
ОбластьМакета.Параметры.ФИОГрузПолучил = отвЛицоГрузополучателя.Наименование;
ОбластьМакета.Параметры.ГрузПолучилДолжность = отвЛицоГрузополучателя.Должность;
ОбластьМакета.Параметры.ОтпускПроизвелДолжность = ОтпускПроизвел.ТекущаяДолжностьОрганизации;
ОбластьМакета.Параметры.ФИООтпускПроизвел = ОбщегоНазначения.ФамилияИнициалыФизЛица(ОтпускПроизвел);

ОбластьМакета.Параметры.prDateStr = ?(ValueIsFilled(Шапка.ДатаДокумента), ?(Day(Шапка.ДатаДокумента) < 10, "0", "") + Format(Шапка.ДатаДокумента, "ДЛФ=DD"), """ "" _____________ 20 года");
ОбластьМакета.Параметры.ФИООтпускРазрешил = ОбщегоНазначения.ФамилияИнициалыФизЛица(Ответственный.Наименование);///Руководители.отпускРазрешилТТНПредставление;
ТабДокумент.Вывести(ОбластьМакета);
return ТабДокумент;
endFunction // ПечатьТТН()


///==============================================================================
function ПечатьТехПаспортов()

ТабДокумент = new ТабличныйДокумент;
ТабДокумент.ИмяПараметровПечати = "Документы.PD_ТТН_1Т.ПечатьТехПаспортов";
Макет = ПолучитьМакет("ТехПаспорт");
ОбластьМакета = Макет.ПолучитьОбласть("row");
params = ОбластьМакета.Параметры;
params.prFirmName = Организация.НаименованиеСокращенное;

СведенияОПоставщике = УправлениеКонтактнойИнформацией.СведенияОЮрФизЛице(Организация, Дата);
params.prAddress = СведенияОПоставщике.ФактическийАдрес;
params.ДатаИзготовления = Format(Дата, "ДЛФ=DD");
params.ДатаОтгрузки = Format(Дата, "ДЛФ=DD");
params.docNumber = TrimAll(Номер);

СведенияОПокупателе = УправлениеКонтактнойИнформацией.СведенияОЮрФизЛице(Заказчик, Дата);
СведенияОГрузополучателе = УправлениеКонтактнойИнформацией.СведенияОЮрФизЛице(Грузополучатель, Дата);
params.prPartner = ФормированиеПечатныхФорм.ОписаниеОрганизации(СведенияОПокупателе, "НаименованиеДляПечатныхФорм,ЮридическийАдрес");
params.Грузополучатель = ФормированиеПечатныхФорм.ОписаниеОрганизации(СведенияОГрузополучателе, "НаименованиеДляПечатныхФорм,ФактическийАдрес");
Руководители = GetResponsibles();
params.ФИООтпускРазрешил = Руководители.отпускРазрешилТТНПредставление;
for each vLine in Товары do
/// params.Номенклатура = vLine.Номенклатура.Наименование + ?(IsBlankString(Комментарий), "", " " + Комментарий);
/// Со слов Шаблинской И.В. 2013 12 06
params.Номенклатура = vLine.Номенклатура.НаименованиеПолное + ?(ValueIsFilled(vLine.ХарактеристикаНоменклатуры), " " + vLine.ХарактеристикаНоменклатуры, "") + ?(IsBlankString(Комментарий), "", " " + Комментарий);
params.gost = vLine.gost;
params.морозостойкость = vLine.морозостойкость;
params.водонепроницаемость = vLine.водонепроницаемость;
params.Количество = vLine.Количество;
ТабДокумент.Вывести(ОбластьМакета);
endDo;
return ТабДокумент;
endFunction // ПечатьТехПаспортов

///==============================================================================
// Процедура осуществляет печать документа. Можно направить печать на
// экран или принтер, а также распечатать необходимое количество копий.
//
// Название макета печати передается в качестве параметра,
// по переданному названию находим имя макета в соответствии.
//
// Параметры:
// НазваниеМакета - строка, название макета.
Процедура Печать(ИмяМакета, КоличествоЭкземпляров = 1, НаПринтер = Ложь, НепосредственнаяПечать = Ложь) Экспорт

if ИмяМакета = "ТТН" then
ТабДокумент = ПечатьТТН();
elsIf ИмяМакета = "ТехПаспорт" then
ТабДокумент = ПечатьТехПаспортов();
endIf;

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

#КонецЕсли

// Возвращает доступные варианты печати документа
//
// Возвращаемое значение:
// Структура, каждая строка которой соответствует одному из вариантов печати
//
Функция ПолучитьСтруктуруПечатныхФорм() Экспорт

return new Структура("ТТН,ТТН_до20140925,ТехПаспорт", "ТТН 1Т", "ТТН 1Т (до 25 09 2014)", "Паспорт качества бетонной смеси (Технический паспорт)");
КонецФункции // ПолучитьСтруктуруПечатныхФорм()



///==============================================================================
Процедура ПередЗаписью(Отказ, РежимЗаписи, РежимПроведения)

if ОбменДанными.Загрузка then
return;
endIf;

bCanChooseSale = IsInRole("Бухгалтер") or IsInRole("ПолныеПрава");
if not bCanChooseSale and ref.утвержен then
Отказ = true;
Message("Вам нельзя изменять утвержденную ТТН.");
endIf;

totalCount = Товары.Итог("Количество");
goods = "";
separator = "";
for each vLine in Товары do
goods = goods + separator + vLine.Номенклатура.Наименование;
separator = ", ";
endDo;

vt = Товары.Выгрузить(, "Склад");
vt.GroupBy("Склад");
склады = "";
separator = "";
for each vLine in Товары do
склады = склады + separator + vLine.Склад.Наименование;
separator = ", ";
endDo;
КонецПроцедуры // ПередЗаписью

///==============================================================================
Процедура ПриУстановкеНовогоНомера(СтандартнаяОбработка, Префикс)

if IsBlankString(видЖурнала.Код) = false then
Префикс = видЖурнала.Код;
else
Префикс = "";
endIf;
КонецПроцедуры // ПриУстановкеНовогоНомера

///==============================================================================
мВалютаРегламентированногоУчета = Константы.ВалютаРегламентированногоУчета.Получить();





Модуль формы:
// Хранит текущую дату документа - для проверки перехода документа в другой период установки номера
Перем мТекущаяДатаДокумента;
// Хранит список видов договоров, доступных для данного документа
Перем мСписокВидовДоговоров;
// Хранит текущий договор контрагента
// используется для восстановления старого договора в случае некорректного выбора нового
Перем мТекущийДоговорКонтрагента;

Перем мПодменюПечати; // Хранит элемент управления подменю печати
Перем мПечатьПоУмолчанию; // Хранит элемент управления кнопку печать по умолчанию
Перем мДеревоМакетов; // Хранит дерево макетов печатных форм
Перем мКнопкиЗаполненияТЧ; // Хранит соответствие




////////////////////////////////////////////////////////////////////////////////
// ПРОЦЕДУРЫ И ФУНКЦИИ ОБЩЕГО НАЗНАЧЕНИЯ

// Процедура устанавливает подменю "Заполнить" в командных панелях ТЧ документа при необходимости
//
Процедура УстановитьКнопкиПодменюЗаполненияТЧ();

СоответствиеТЧ = Новый Соответствие;
СоответствиеТЧ.Вставить(ЭлементыФормы.Товары, ЭлементыФормы.КоманднаяПанельТовары);
мКнопкиЗаполненияТЧ = УниверсальныеМеханизмы.СформироватьПодменюЗаполненияТЧ(Ссылка, СоответствиеТЧ, Новый Действие("НажатиеНаДополнительнуюКнопкуЗаполненияТЧ"));
КонецПроцедуры

//Процедура устанавливает подменю "Печать" и кнопку "Печать по умолчанию" при необходимости
//
Процедура УстановитьКнопкиПечати()

мДеревоМакетов = УниверсальныеМеханизмы.ПолучитьДеревоМакетовПечати(Ссылка, ПолучитьСтруктуруПечатныхФорм(), Новый Действие("ОсновныеДействияФормыПечать"), Новый Действие("ОсновныеДействияФормыУстановитьПечатьПоУмолчанию"));

УниверсальныеМеханизмы.УстановитьПодменюПечати (мПодменюПечати, ЭлементыФормы.ОсновныеДействияФормы, мДеревоМакетов.Строки.Количество() > 0);
УниверсальныеМеханизмы.УстановитьПечатьПоУмолчанию(мПечатьПоУмолчанию, ЭлементыФормы.ОсновныеДействияФормы, мДеревоМакетов, Метаданные().Имя,Новый Действие("ОсновныеДействияФормыПечатьПоУмолчанию"));

Если Не мПодменюПечати = Неопределено Тогда
УниверсальныеМеханизмы.СформироватьПодменю(мДеревоМакетов, мПодменюПечати,Истина,Истина);
КонецЕсли;
КонецПроцедуры

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

// Процедура - обработчик нажатия на кнопку "Печать по умолчанию"
//
Процедура ОсновныеДействияФормыПечатьПоУмолчанию(Кнопка)
УниверсальныеМеханизмы.ПечатьПоДополнительнойКнопке(мДеревоМакетов, ЭтотОбъект, ЭтаФорма, Кнопка.Текст);
КонецПроцедуры

// Процедура - обработчик нажатия на кнопку "Печать"
//
Процедура ОсновныеДействияФормыПечать(Кнопка)
УниверсальныеМеханизмы.ПечатьПоДополнительнойКнопке(мДеревоМакетов, ЭтотОбъект, ЭтаФорма, Кнопка.Текст);
КонецПроцедуры

// Процедура - обработчик нажатия на кнопку "Установить печать по умолчанию"
//
Процедура ОсновныеДействияФормыУстановитьПечатьПоУмолчанию(Кнопка)

Если УниверсальныеМеханизмы.НазначитьКнопкуПечатиПоУмолчанию(мДеревоМакетов, Метаданные().Имя) Тогда
УстановитьКнопкиПечати();
КонецЕсли;
КонецПроцедуры

// Процедура разрешения/запрещения редактирования номера документа
Процедура ДействияФормыРедактироватьНомер(Кнопка)

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



///==============================================================================
Процедура ПередОткрытием(Отказ, СтандартнаяОбработка)

// Установка кнопок печати
УстановитьКнопкиПечати();
// Установка кнопок заполнение ТЧ
УстановитьКнопкиПодменюЗаполненияТЧ();
КонецПроцедуры // ПередОткрытием

///==============================================================================
// Процедура - обработчик события "ПриОткрытии" формы
Процедура ПриОткрытии()

Если ЭтоНовый() Тогда // проверить объект на то, что он еще не внесен в ИБ
// Заполнить реквизиты значениями по умолчанию.
ЗаполнениеДокументов.ЗаполнитьШапкуДокумента(ЭтотОбъект, глЗначениеПеременной("глТекущийПользователь"), мВалютаРегламентированногоУчета, "Покупка",ПараметрОбъектКопирования);
СрокДоставки = ТекущаяДата();
Документ = "";
if ValueIsFilled(видЖурнала) = false then
видЖурнала = УправлениеПользователями.ПолучитьЗначениеПоУмолчанию(глЗначениеПеременной("глТекущийПользователь"), "mainTTNJournalKind");
endIf;
if ValueIsFilled(грузоотправитель) = false then
грузоотправитель = УправлениеПользователями.ПолучитьЗначениеПоУмолчанию(глЗначениеПеременной("глТекущийПользователь"), "основнойГрузоотправитель");
endIf;

Перевозчик = Константы.TRN_ОсновнойПеревозчик.Получить();
ЗаказчикАвтоуслуг = Константы.TRN_ОсновнойЗаказчикАвтоуслуг.Получить();
реализация = undefined;
утвержен = false;
else
реализация = PD_CommonUnit.ПолучитьРеализациюПо1Т(ref);
КонецЕсли;

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

РаботаСДиалогами.УстановитьЗаголовокФормыДокумента("ТТН 1Т", ЭтотОбъект, ЭтаФорма);
мТекущаяДатаДокумента = Дата;

СтруктураКолонок = Новый Структура();
// Установить колонки, видимостью которых пользователь управлять не может.
СтруктураКолонок.Вставить("Номенклатура");
СтруктураКолонок.Вставить("Количество");

// Установить ограничение - изменять видимость колонок для табличной части
ОбработкаТабличныхЧастей.УстановитьИзменятьВидимостьКолонокТабЧасти(ЭлементыФормы.Товары.Колонки, СтруктураКолонок);

// Установить доступность формы с учетом даты запрета редактирования
РаботаСДиалогами.УстановитьДоступностьФормыДляРедактирования(ЭтотОбъект, ЭтаФорма);
bCanChooseSale = IsInRole("Бухгалтер") or IsInRole("ПолныеПрава");
ЭлементыФормы.реализация.Доступность = bCanChooseSale;
if not bCanChooseSale and утвержен then
ТолькоПросмотр = true;
endIf;
КонецПроцедуры // ПриОткрытии()

///==============================================================================
Процедура ПередЗаписью(Отказ, РежимЗаписи, РежимПроведения)

КонецПроцедуры // ПередЗаписью

///==============================================================================
Процедура ТоварыНоменклатураПриИзменении(Элемент)

vLine = ЭлементыФормы.Товары.ТекущиеДанные;
if vLine = undefined then
return;
endIf;

vLine.ЕдиницаИзмерения = vLine.Номенклатура.БазоваяЕдиницаИзмерения;
if ValueIsFilled(vLine.ХарактеристикаНоменклатуры) and vLine.Номенклатура <> vLine.ХарактеристикаНоменклатуры.Владелец then
vLine.ХарактеристикаНоменклатуры = undefined;
endIf;
КонецПроцедуры // ТоварыНоменклатураПриИзменении

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

vLine = ЭлементыФормы.Товары.ТекущиеДанные;
if vLine = undefined then
return;
endIf;

КонецПроцедуры // ТоварыКоличествоПриИзменении

///==============================================================================
Процедура ТоварыНоменклатураНачалоВыбора(Элемент, СтандартнаяОбработка)

СтандартнаяОбработка = false;
vForm = Справочники.Номенклатура.ПолучитьФормуВыбора(, Элемент, );
vLine = ЭлементыФормы.Товары.ТекущиеДанные;
vForm.организация = Организация;
control = vForm.ЭлементыФормы.СправочникСписок;
control.ИерархическийПросмотр = false;
if vLine <> undefined then
vForm.storehouse = vLine.Склад;
control.ТекущаяСтрока = vLine.Номенклатура;
endIf;

value = УправлениеПользователями.ПолучитьЗначениеПоУмолчанию(ПараметрыСеанса.ТекущийПользователь, "mainGoodsGroup");
if ValueIsFilled(value) and value.IsFolder then
filterItem = vForm.СправочникСписок.Отбор.Ссылка;
filterItem.value = value;
filterItem.use = true;
filterItem.ComparisonType = ComparisonType.InHierarchy;
control.НастройкаОтбора.Ссылка.Доступность = true;
endIf;

vForm.Open();
КонецПроцедуры // ТоварыНоменклатураНачалоВыбора

///==============================================================================
Процедура ТоварыХарактеристикаНоменклатурыПриИзменении(Элемент)

СтрокаТабличнойЧасти = ЭлементыФормы.Товары.ТекущиеДанные;
КонецПроцедуры // ТоварыХарактеристикаНоменклатурыПриИзменении

///==============================================================================
Процедура ВодительПриИзменении(Элемент)
// Вставить содержимое обработчика.
КонецПроцедуры




////////////////////////////////////////////////////////////////////////////////
// ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ФОРМ СВЯЗАННЫХ С КОНТАКТНОЙ ИНФОРМАЦИЕЙ

///==============================================================================
Процедура ПунктРазгрузкиНачалоВыбора(Элемент, СтандартнаяОбработка)

СтандартнаяОбработка = Ложь;
vForm = Справочники.Places.ПолучитьФормуВыбора(, Элемент);
vForm.Open();
КонецПроцедуры // ПунктРазгрузкиНачалоВыбора

///==============================================================================
Процедура ПунктПогрузкиНачалоВыбора(Элемент, СтандартнаяОбработка)

СтандартнаяОбработка = Ложь;
vForm = Справочники.Places.ПолучитьФормуВыбора(, Элемент);
vForm.Open();
КонецПроцедуры // ПунктПогрузкиНачалоВыбора

///==============================================================================
Процедура ПолеВвода1ПриИзменении(Элемент)

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




///==============================================================================
Процедура видЖурналаПриИзменении(Элемент)

Номер = "";
КонецПроцедуры // видЖурналаПриИзменении

///==============================================================================
Процедура ПеревозчикНачалоВыбора(Элемент, СтандартнаяОбработка)

СтандартнаяОбработка = false;
vForm = Справочники.Контрагенты.ПолучитьФормуВыбора(, Элемент);
filters = vForm.СправочникСписок.Отбор;
filters.transporter.Set(true);
vForm.Open();
vForm.ЭлементыФормы.СправочникСписок.HierarchicalView = false;
КонецПроцедуры // ПеревозчикНачалоВыбора

///==============================================================================
Процедура ПеревозчикПриИзменении(Элемент)

if ValueIsFilled(Грузополучатель) = false then
Грузополучатель = Перевозчик;
ГрузополучательПриИзменении(ЭлементыФормы.Грузополучатель);
endIf;
КонецПроцедуры // ПеревозчикПриИзменении

///==============================================================================
Процедура ГрузополучательПриИзменении(Элемент)

if ValueIsFilled(Заказчик) = false then
Заказчик = Грузополучатель;
endIf;
КонецПроцедуры // ГрузополучательПриИзменении

///==============================================================================
Процедура ГрузополучательНачалоВыбора(Элемент, СтандартнаяОбработка)

СтандартнаяОбработка = false;
vForm = Справочники.Контрагенты.ПолучитьФормуВыбора(, Элемент);
filters = vForm.СправочникСписок.Отбор;
filters.transporter.Set(true);
vForm.Open();
vForm.ЭлементыФормы.СправочникСписок.HierarchicalView = false;
КонецПроцедуры // ГрузополучательНачалоВыбора

///==============================================================================
Процедура отвЛицоГрузополучателяНачалоВыбора(Элемент, СтандартнаяОбработка)

СтандартнаяОбработка = Ложь;
vForm = Справочники.КонтактныеЛица.ПолучитьФормуВыбора(, Элемент);
filterItem = vForm.СправочникСписок.Отбор.ОбъектВладелец;
filterItem.value = Грузополучатель;
filterItem.use = true;
filterItem.ComparisonType = ComparisonType.Equal;
vForm.Open();
КонецПроцедуры // отвЛицоГрузополучателяНачалоВыбора



///==============================================================================
Процедура ПослеЗаписи()

РаботаСДиалогами.УстановитьЗаголовокФормыДокумента("", ЭтотОбъект, ЭтаФорма);
МеханизмНумерацииОбъектов.ОбновитьПодсказкуКодНомерОбъекта(ЭтотОбъект.Метаданные(), ЭлементыФормы.ДействияФормы.Кнопки.Подменю, ЭлементыФормы.Номер);
УстановитьКнопкиПечати();
if not MakeSale() then
утвержен = false;
ПодключитьОбработчикОжидания("ЗаписатьСнятиеУтверждение", 0.1, true);
endIf;
КонецПроцедуры // ПослеЗаписи

///==============================================================================
function MakeSale()

if not утвержен then
return true;
endIf;
if not ValueIsFilled(ДоговорКонтрагента) then
Message("У заказчика не указан основной договор.");
return false;
endIf;

priceType = ДоговорКонтрагента.ТипЦен;
if not ValueIsFilled(priceType) then
Message("В основном договоре не указан тип цен.");
return false;
endIf;
if ValueIsFilled(реализация) then
sale = реализация;
else
sale = PD_CommonUnit.ПолучитьРеализациюПо1Т(ref);
endIf;

SetPrivilegedMode(true);
BeginTransaction();
try
if ValueIsFilled(sale) then
saleObj = sale.GetObject();
else
saleObj = Документы.РеализацияТоваровУслуг.СоздатьДокумент();
endIf;

saleObj.Дата = CurrentDate();
saleObj.Заполнить(ref);
saleObj.Комментарий = "Создан / обновлен на основании ТТН № " + Номер + " (" + CurrentDate() + "); " + saleObj.Комментарий;
saleObj.Write(РежимЗаписиДокумента.Проведение);
sale = saleObj.ref;

mng = РегистрыСведений.Привязка1ТиРеализации.СоздатьМенеджерЗаписи();
mng.ТТН_1Т = ref;
mng.реализация = sale;
mng.Write(true);

if sale.УчитыватьНДС then
invoice = УчетНДС.НайтиПодчиненныйСчетФактуру(sale, "СчетФактураВыданный");
if not ЗначениеЗаполнено(invoice) then
invObj = Документы.СчетФактураВыданный.СоздатьДокумент();
invObj.ВидСчетаФактуры = Перечисления.ВидСчетаФактурыВыставленного.НаРеализацию;
invObj.Ответственный = ПараметрыСеанса.ТекущийПользователь;
invObj.Заполнить(sale);
invObj.Write(РежимЗаписиДокумента.Проведение);
endIf;
endIf;
except
RollbackTransaction();
DoMessageBox("Не возможно создать / обновить реализацию.");
return false;
endTry;

CommitTransaction();
реализация = sale;
return true;
endFunction // MakeSale

///==============================================================================
procedure ЗаписатьСнятиеУтверждение()

ОбменДанными.Загрузка = true;
ЗаписатьВФорме(РежимЗаписиДокумента.Запись);
endProcedure // ЗаписатьСнятиеУтверждение




// Процедура - обработчик события "ПриИзменении" поля ввода организации.
//
Процедура ОрганизацияПриИзменении(Элемент)

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

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

// Процедура - обработчик события "ПриИзменении" поля ввода контрагента.
//
Процедура КонтрагентПриИзменении(Элемент)

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

// Процедура - обработчик события "НачалоВыбора" поля ввода ДоговорКонтрагента
//
Процедура ДоговорКонтрагентаНачалоВыбора(Элемент, СтандартнаяОбработка)

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

///==============================================================================
// Процедура - обработчик события "ПриИзменении" поля ввода
// "ДоговорКонтрагента". Процедура выполняет действия при изменении договора
// взаиморасчетов с контрагентом.
Процедура ДоговорКонтрагентаПриИзменении(Элемент)

ПриИзмененииДоговора();
КонецПроцедуры // ДоговорКонтрагентаПриИзменении

///==============================================================================
Процедура ЗаполнитьСписокВидовДоговоров()

мСписокВидовДоговоров = Новый СписокЗначений;
мСписокВидовДоговоров.Добавить(Перечисления.ВидыДоговоровКонтрагентов.СПокупателем);
КонецПроцедуры // ЗаполнитьСписокВидовДоговоров

// Процедура выполняет необходимые действия при изменении договора взаиморасчетов
// с контрагентом.
//
Процедура ПриИзмененииДоговора()

Если НЕ ЗначениеЗаполнено(ДоговорКонтрагента) Тогда
Возврат;
КонецЕсли;

Если НЕ ЗначениеЗаполнено(Заказчик) Тогда
Заказчик = ДоговорКонтрагента.Владелец;

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