|
v7: Прошу помощи с сортировкой в таблице документа (ТиС) | ☑ | ||
---|---|---|---|---|
0
sotnikov
30.06.15
✎
12:30
|
Парни, подскажите, как написать сортировку по реквизиту Артикул в счет-фактуре, которая выводится следующим модулем:
//////////////////////////////////////////////////////////////////////////////// // ПЕРЕМЕННЫЕ МОДУЛЯ // Перем Прочерк, КороткийПрочерк; Перем ПечВалюта; Перем глДатаПоПриказу147; Перем глДатаПостановления451; // глБратьСуммыИзУчета(ДатаОперации) // // Параметры: // ДатаОперации - дата, дата операции, отражаемой в печатной форме // // Возвращаемое значение: // Число, 1 - брать суммы из учета, 0 - брать суммы из табличной части // // Описание: // Возвращает режим формирования печатных форм - по суммам из табличной // части и по суммам, отраженным в учете. До начала действия приказа № 147 // всегда возвращается 0, так как разница в режимах проявляется только // для операций, на которые распространяется действие данного приказа // (фактически 1 января 2008 года и позднее). // Функция глБратьСуммыИзУчета(ДатаОперации, КодОперации = "") Если ДатаОперации < глДатаПоПриказу147 Тогда Возврат 0; ИначеЕсли (КодОперации = Перечисление.КодыОпераций.ВозвратОтРеализатора) ИЛИ (КодОперации = Перечисление.КодыОпераций.ВозвратКомитенту) ИЛИ (КодОперации = Перечисление.КодыОпераций.ПриемНаРеализацию) ИЛИ (КодОперации = Перечисление.КодыОпераций.ПриемНаРеализациюРозница) ИЛИ (КодОперации = Перечисление.КодыОпераций.ПередачаНаРеализацию) Тогда Возврат 0; Иначе Возврат Константа.СуммыВПечатныхФормахПоУчету; КонецЕсли; КонецФункции // глБратьСуммыИзУчета() //////////////////////////////////////////////////////////////////////////////// // ПРОЦЕДУРЫ И ФУНКЦИИ МОДУЛЯ // //****************************************************************************** // ПолучитьИНН(ИННКПП) // // Параметры: // ИННКПП - строка, написанные вместе ИНН и КПП юр лица. // // Возвращаемое значение: // значение ИНН юр лица. // // Описание: // Функция возращает ИНН из переданной строки // Функция ПолучитьИНН(ИННКПП) Если Найти(ИННКПП, "\") <> 0 Тогда // найден разделитель Возврат Лев(ИННКПП, Найти(ИННКПП, "\") - 1); Иначе Возврат СокрЛП(ИННКПП); КонецЕсли; КонецФункции // ПолучитьИНН() //****************************************************************************** // ПолучитьКПП(ИННКПП) // // Параметры: // ИННКПП - строка, написанные вместе ИНН и КПП юр лица. // // Возвращаемое значение: // значение КПП юр лица. // // Описание: // Функция возращает КПП из переданной строки // Функция ПолучитьКПП(ИННКПП) Если Найти(ИННКПП, "\") <> 0 Тогда // найден разделитель Возврат Сред(ИННКПП, Найти(ИННКПП, "\") + 1); Иначе Возврат ""; КонецЕсли; КонецФункции // ПолучитьКПП() //****************************************************************************** // ПодготовитьРеквизитыШапки(Докум, Рекв) // // Параметры: // Докум - контекст СФ, выводимого на печать, // Рекв - список значений реквизитов шапки. // // Возвращаемое значение: // Нет // // Описание: // Формирует список значений для формирования шапки печатной формы // Процедура ПодготовитьРеквизитыШапки(Докум, Рекв) ЮрФизЛицо = Докум.Контрагент.ЮрФизЛицо; ЮрФизЛицо = ?(ПустоеЗначение(ЮрФизЛицо) = 1, ПолучитьПустоеЗначение("Справочник.ЮрЛица"), ЮрФизЛицо); Рекв = СоздатьОбъект("СписокЗначений"); Если Докум.ДатаДок >= глДатаПостановления451 Тогда Рекв.ДобавитьЗначение(Шаблон("Продавец [Докум.Фирма.ЮрЛицо.ПолнНаименование]"), "Поставщик"); Иначе Рекв.ДобавитьЗначение(Шаблон("Продавец [Докум.Фирма.ЮрЛицо.ПолнНаименование]"), "Поставщик"); КонецЕсли; ДатаСтр = НРег(Формат(Докум.ДатаДок, "Д(0)ДДММММГГГГ")); Рекв.ДобавитьЗначение(Шаблон("СЧЕТ-ФАКТУРА № [глНомерНаПечать(Докум)] от " + ДатаСтр), "Номер"); Рекв.ДобавитьЗначение(Шаблон("Адрес [глПредставлениеАдреса(Докум.Фирма.ЮрЛицо.ЮрАдрес)]"), "АдресПоставщика"); Рекв.ДобавитьЗначение(Шаблон("Телефон [Докум.Фирма.ЮрЛицо.Телефоны]"), "ТелефонПоставщика"); ТекстКПП = ?(ПустаяСтрока(ПолучитьКПП(Докум.Фирма.ЮрЛицо.ИНН)) = 0,"/"+ПолучитьКПП(Докум.Фирма.ЮрЛицо.ИНН),""); Рекв.ДобавитьЗначение(Шаблон("ИНН/КПП продавца [ПолучитьИНН(Докум.Фирма.ЮрЛицо.ИНН)][ТекстКПП]"), "ИНН_КПППоставщика"); Рекв.ДобавитьЗначение(Шаблон("Грузоотправитель и его адрес [Докум.Фирма.ЮрЛицо.ПолнНаименование], [глПредставлениеАдреса(Докум.Фирма.ЮрЛицо.ЮрАдрес)]"), "Грузоотправитель"); Рекв.ДобавитьЗначение(Шаблон("Грузополучатель и его адрес [ЮрФизЛицо.ПолнНаименование], [глПредставлениеАдреса(ЮрФизЛицо.ФактАдрес)]"), "Грузополучатель"); Рекв.ДобавитьЗначение("К платежно-расчетному документу №______________от____________", "ПоДокументу"); Рекв.ДобавитьЗначение(Шаблон("Покупатель [СокрП(ЮрФизЛицо.ПолнНаименование)]"), "Покупатель"); Рекв.ДобавитьЗначение(Шаблон("Адрес [глПредставлениеАдреса(ЮрФизЛицо.ЮрАдрес)]"), "АдресПокупателя"); Рекв.ДобавитьЗначение(Шаблон("Телефон [ЮрФизЛицо.Телефоны]"), "ТелефонПокупателя"); ТекстКПП = ?(ПустаяСтрока(ПолучитьКПП(ЮрФизЛицо.ИНН)) = 0,"/"+ПолучитьКПП(ЮрФизЛицо.ИНН),""); Рекв.ДобавитьЗначение(Шаблон("ИНН/КПП покупателя: [ПолучитьИНН(ЮрФизЛицо.ИНН)][ТекстКПП]"), "ИННКПП_Покупателя"); // Индивидуальный предприниматель Если Докум.Фирма.ЮрЛицо.ИндивидуальныйПредприниматель = 1 Тогда Рекв.ДобавитьЗначение("", "РуководительРасшифровка"); Рекв.ДобавитьЗначение("", "ГлБухгалтерРасшифровка"); Рекв.ДобавитьЗначение(Шаблон("№ [Докум.Фирма.ЮрЛицо.СвидетельствоСерияНомер] от [Докум.Фирма.ЮрЛицо.СвидетельствоДатаВыдачи] г."), "ПредпринимательРеквизитыСвидетельства"); Рекв.ДобавитьЗначение(Шаблон("/[Докум.Фирма.ЮрЛицо.Руководитель.Получить(Докум.ДатаДок)]/"),"ПредпринимательРасшифровка"); Иначе Рекв.ДобавитьЗначение(Шаблон("/[Докум.Фирма.ЮрЛицо.Руководитель.Получить(Докум.ДатаДок)]/"), "РуководительРасшифровка"); Рекв.ДобавитьЗначение(Шаблон("/[Докум.Фирма.ЮрЛицо.ГлБухгалтер.Получить(Докум.ДатаДок)]/"), "ГлБухгалтерРасшифровка"); Рекв.ДобавитьЗначение("","ПредпринимательРеквизитыСвидетельства"); Рекв.ДобавитьЗначение("","ПредпринимательРасшифровка"); КонецЕсли; КонецПроцедуры // ПодготовитьРеквизитыШапки() //****************************************************************************** // СоздатьСтруктуру(МнЧ) // // Параметры: // МнЧ - подготавливаемая таблица значений для спецификации документа. // // Возвращаемое значение: // Нет // // Описание: // Создает стреуктуры таблицы значений для спецификации документа. // Процедура СоздатьСтруктуру(МнЧ) МнЧ = СоздатьОбъект("ТаблицаЗначений"); МнЧ.НоваяКолонка("Цена",); МнЧ.НоваяКолонка("Сумма",); МнЧ.НоваяКолонка("СтавкаНДС"); МнЧ.НоваяКолонка("СуммаНДС",); МнЧ.НоваяКолонка("СуммаНП",); МнЧ.НоваяКолонка("ВсегоСНДС",); МнЧ.НоваяКолонка("Номенклатура"); МнЧ.НоваяКолонка("СтранаН"); МнЧ.НоваяКолонка("СтранаК"); МнЧ.НоваяКолонка("НомерГТД"); МнЧ.НоваяКолонка("Единица"); МнЧ.НоваяКолонка("ЕдиницаКод"); МнЧ.НоваяКолонка("Количество"); МнЧ.НоваяКолонка("АкцизЦена"); КонецПроцедуры // СоздатьСтруктуру() //****************************************************************************** // СкорректироватьТаблицуОснования(МнЧ) // // Параметры: // ТаблицаОснования // // Возвращаемое значение: // Нет // // Описание: // Корректирует цену, сумму, сумму НДС и сумму НП по итогам проведения // документа основания по регистрам в зависимости от вида документа // Процедура СкорректироватьТаблицуОснования(Докум, ТаблицаОснования, ВидОсн) Если (ВидОсн = "Реализация") ИЛИ (ВидОсн = "РеализацияПрочее") Тогда ПечВалюта = "наименование, код " + Константа.ВалютаБухУчета.ПолнНаименование + ", " + Константа.ВалютаБухУчета.Код; // корретируем табличную часть по регистру "Книга продаж" СуммыПоУчету = СоздатьОбъект("ТаблицаЗначений"); СуммыПоУчету.НоваяКолонка("СуммаПоУчету", "Число", 15, 2); СуммыПоУчету.НоваяКолонка("СуммаНДСПоУчету", "Число", 15, 2); СуммыПоУчету.НоваяКолонка("СуммаНППоУчету", "Число", 15, 2); ВсегоСтрок = ТаблицаОснования.КоличествоСтрок(); ОбщаяСуммаДокумента = ТаблицаОснования.Итог("Сумма"); ОбщаяСуммаНДСДокумента = ТаблицаОснования.Итог("СуммаНДС"); ОбщаяСуммаНПДокумента = ТаблицаОснования.Итог("СуммаНП"); Если Докум.ДокОснование.СуммаВклНДС = 0 Тогда ОбщаяСуммаДокумента = ОбщаяСуммаДокумента + ОбщаяСуммаНДСДокумента; КонецЕсли; Сумма0Стр = 0; СуммаНДС0Стр = 0; СуммаНП0Стр = 0; Для Сч = 1 По ВсегоСтрок Цикл СуммыПоУчету.НоваяСтрока(); КонецЦикла; РегистрКнигиПродаж = СоздатьОбъект("Регистр.КнигаПродаж"); Если РегистрКнигиПродаж.ВыбратьДвиженияДокумента(Докум.ДокОснование) = 1 Тогда Пока РегистрКнигиПродаж.ПолучитьДвижение() = 1 Цикл Если РегистрКнигиПродаж.Приход = 1 Тогда Если РегистрКнигиПродаж.НомерСтроки() = 0 Тогда Сумма0Стр = Сумма0Стр + РегистрКнигиПродаж.СуммаРуб; СуммаНДС0Стр = СуммаНДС0Стр + РегистрКнигиПродаж.СуммаНДС; СуммаНП0Стр = СуммаНП0Стр + РегистрКнигиПродаж.СуммаНП; Иначе СуммыПоУчету.УстановитьЗначение(РегистрКнигиПродаж.НомерСтроки(), "СуммаПоУчету", РегистрКнигиПродаж.СуммаРуб + СуммыПоУчету.ПолучитьЗначение(РегистрКнигиПродаж.НомерСтроки(), "СуммаПоУчету")); СуммыПоУчету.УстановитьЗначение(РегистрКнигиПродаж.НомерСтроки(), "СуммаНДСПоУчету", РегистрКнигиПродаж.СуммаНДС + СуммыПоУчету.ПолучитьЗначение(РегистрКнигиПродаж.НомерСтроки(), "СуммаНДСПоУчету")); СуммыПоУчету.УстановитьЗначение(РегистрКнигиПродаж.НомерСтроки(), "СуммаНППоУчету", РегистрКнигиПродаж.СуммаНП + СуммыПоУчету.ПолучитьЗначение(РегистрКнигиПродаж.НомерСтроки(), "СуммаНППоУчету")); КонецЕсли; КонецЕсли; КонецЦикла; КонецЕсли; ТаблицаОснования.ВыбратьСтроки(); Пока ТаблицаОснования.ПолучитьСтроку() = 1 Цикл СуммаПеч = СуммыПоУчету.ПолучитьЗначение(ТаблицаОснования.НомерСтроки, "СуммаПоУчету"); СуммаНДСПеч = СуммыПоУчету.ПолучитьЗначение(ТаблицаОснования.НомерСтроки, "СуммаНДСПоУчету"); СуммаНППеч = СуммыПоУчету.ПолучитьЗначение(ТаблицаОснования.НомерСтроки, "СуммаНППоУчету"); // распределяем общие суммы по строкам документа Если ОбщаяСуммаДокумента <> 0 Тогда СуммаПеч = СуммаПеч + Сумма0Стр * ТаблицаОснования.Сумма / ОбщаяСуммаДокумента; КонецЕсли; Если ОбщаяСуммаНДСДокумента <> 0 Тогда СуммаНДСПеч = СуммаНДСПеч + СуммаНДС0Стр * ТаблицаОснования.СуммаНДС / ОбщаяСуммаНДСДокумента; КонецЕсли; Если ОбщаяСуммаНПДокумента <> 0 Тогда СуммаНППеч = СуммаНППеч + СуммаНП0Стр * ТаблицаОснования.СуммаНП / ОбщаяСуммаНПДокумента; КонецЕсли; ТаблицаОснования.Сумма = СуммаПеч; ТаблицаОснования.СуммаНДС = СуммаНДСПеч; ТаблицаОснования.СуммаНП = СуммаНППеч; КонецЦикла; КонецЕсли; КонецПроцедуры // СкорректироватьТаблицуОснования() //****************************************************************************** // ПодготовитьМнЧосн(Докум, МнЧ, Итоги, ФорматКоличества) // // Параметры: // Докум - контекст выводимого документа (СФ), // МнЧ - таблица значений спецификации документа, // Итоги - список значений для итогов по документу, // ФорматКоличества - строка представления формата количества // "Ч10.3" - если встречается дробное количество, // "Ч6.0" - если количество только целое. // // Возвращаемое значение: // "пустую строку" - если таблица подготовлена, или строку с описанием ошибки. // // Описание: // формирует таблицу значений из табличной части документа основания // Функция ПодготовитьМнЧосн(Докум, МнЧ, Итоги, ФорматКоличества) Перем ТаблицаГТД; Перем РегПартии; ТаблицаГТД = СоздатьОбъект("ТаблицаЗначений"); ТаблицаГТД.НоваяКолонка("Номенклатура"); ТаблицаГТД.НоваяКолонка("СтранаПроисхождения"); ТаблицаГТД.НоваяКолонка("ГТД"); ТаблицаГТД.НоваяКолонка("Количество"); //в базовых единицах КолвоГТДТов = СоздатьОбъект("СписокЗначений"); // Переберем все партии, которые были списаны документом - основанием. // Если в партии были выбраны страна и ГТД, их следует перенести в СФ РегПартии = СоздатьОбъект("Регистр.ПартииНаличие"); РегПартии.ВыбратьДвиженияДокумента(Докум.ДокОснование); Пока РегПартии.ПолучитьДвижение() = 1 Цикл Если (РегПартии.Расход = 1) и (РегПартии.Партия.Выбран()=1) Тогда ВремСтрана = РегПартии.Партия.СтранаПроисхождения; ВремГТД = РегПартии.Партия.ГТД; Если (ПустоеЗначение(ВремСтрана) = 0) или (ПустоеЗначение(ВремГТД ) = 0) Тогда ТаблицаГТД.НоваяСтрока(); ТаблицаГТД.Номенклатура = РегПартии.Номенклатура; ТаблицаГТД.СтранаПроисхождения = ВремСтрана; ТаблицаГТД.ГТД = ВремГТД; ТаблицаГТД.Количество = РегПартии.Количество; КонецЕсли; КонецЕсли; КонецЦикла; СоздатьСтруктуру(МнЧ); // создадим таблицу документа ТаблицаОснования = СоздатьОбъект("ТаблицаЗначений"); Докум.ДокОснование.ВыгрузитьТабличнуюЧасть(ТаблицаОснования); // теперь у нас есть таблица, в которой собраны строки документа - основания в нужной валюте // надо проставить ГТД ВидОсн = Докум.ДокОснование.Вид(); Если ВидОсн = "ВводОстатковПокупателя" Тогда ТаблицаОснования.НоваяКолонка("Сумма"); ТаблицаОснования.НоваяКолонка("Номенклатура"); Иначе Если глЕстьРеквизитМнЧ("СуммаНП", ВидОсн) = 0 Тогда ТаблицаОснования.НоваяКолонка("СуммаНП"); ОснСуммаВклНП = 0; Иначе ОснСуммаВклНП = Докум.ДокОснование.СуммаВклНП; КонецЕсли; Если глЕстьРеквизитМнЧ("СуммаНДС", ВидОсн) = 0 Тогда ТаблицаОснования.НоваяКолонка("СуммаНДС"); ОснСуммаВклНДС = 0; Иначе ОснСуммаВклНДС = Докум.ДокОснование.СуммаВклНДС; КонецЕсли; КонецЕсли; Если глЕстьРеквизитШапки("КодОперации", ВидОсн) = 1 Тогда БратьСуммыИзУчета = глБратьСуммыИзУчета(Докум.ДатаДок, Докум.ДокОснование.КодОперации); Иначе БратьСуммыИзУчета = глБратьСуммыИзУчета(Докум.ДатаДок); КонецЕсли; Если БратьСуммыИзУчета = 1 Тогда СкорректироватьТаблицуОснования(Докум, ТаблицаОснования, ВидОсн); КонецЕсли; ИтогСумма = 0; ВывелиСтроку = 0; РаспредГТД = СоздатьОбъект("ТаблицаЗначений"); РаспредГТД.НоваяКолонка("Колво"); РаспредГТД.НоваяКолонка("Страна"); РаспредГТД.НоваяКолонка("Номер"); ТаблицаОснования . ВыбратьСтроки(); Пока ТаблицаОснования.ПолучитьСтроку()=1 Цикл Если ВидОсн = "ВводОстатковПокупателя" Тогда ТаблицаОснования.Сумма = ТаблицаОснования.СуммаРуб - ТаблицаОснования.СуммаНДС - ТаблицаОснования.СуммаНП; Иначе Если ОснСуммаВклНП = 1 Тогда ТаблицаОснования.Сумма = ТаблицаОснования.Сумма - ТаблицаОснования.СуммаНП; КонецЕсли; Если ОснСуммаВклНДС = 1 Тогда ТаблицаОснования.Сумма = ТаблицаОснования.Сумма - ТаблицаОснования.СуммаНДС; КонецЕсли; КонецЕсли; МнЧ.НоваяСтрока(); МнЧ.СтранаН = ""; МнЧ.СтранаК = ""; МнЧ.НомерГТД = ""; МнЧ.АкцизЦена = "без акциза"; Если ПустоеЗначение(ТаблицаОснования.Сумма) = 1 Тогда МнЧ.Сумма = КороткийПрочерк; МнЧ.СтавкаНДС = "без НДС"; МнЧ.СуммаНДС = КороткийПрочерк; МнЧ.СуммаНП = КороткийПрочерк; Иначе МнЧ.Сумма = ТаблицаОснования.Сумма; МнЧ.СтавкаНДС = ?(ТаблицаОснования.СтавкаНДС = Перечисление.СтавкиНДС.безНДС, "Без НДС", Строка(ТаблицаОснования.СтавкаНДС)); МнЧ.СуммаНДС = ?(ТаблицаОснования.СтавкаНДС = Перечисление.СтавкиНДС.безНДС, КороткийПрочерк, глФРМ(ТаблицаОснования.СуммаНДС)); МнЧ.СуммаНП = глФРМ(ТаблицаОснования.СуммаНП); КонецЕсли; Если ВидОсн = "РеализацияПрочее" Тогда МнЧ.Номенклатура = ТаблицаОснования.Содержание; ВсегоКол = 0; МнЧ.Количество = ТаблицаОснования.Количество; ТекЕдиница = "-"; ТекЕдиницаКод = "-"; Если (Докум.ДокОснование.УчитыватьНДС = 1) и (Докум.ДокОснование.СуммаВклНДС = 0) Тогда МнЧ.Цена = ТаблицаОснования.Цена; Иначе МнЧ.Цена = ?(ТаблицаОснования.Количество = 0, 0, ТаблицаОснования.Сумма/ТаблицаОснования.Количество); КонецЕсли; ИначеЕсли ВидОсн = "ВводОстатковПокупателя" Тогда МнЧ.Номенклатура = ТаблицаОснования.ВидДолга; МнЧ.Количество = 0; ТекЕдиница = "-"; ТекЕдиницаКод = "-"; МнЧ.Цена = "-"; Иначе МнЧ.Номенклатура = ТаблицаОснования.Номенклатура.ПолнНаименование + ?(Константа.ПоказыватьАртикул = 1, " " + ТаблицаОснования.Номенклатура.Артикул, ""); МнЧ.Количество = ТаблицаОснования.Количество; ТекЕдиница = ТаблицаОснования.Единица; ТекЕдиницаКод = ТаблицаОснования.Единица.ОКЕИ.Код; ВсегоКол = ТаблицаОснования.Количество; Если (Докум.ДокОснование.УчитыватьНДС = 1) и (Докум.ДокОснование.СуммаВклНДС = 0) Тогда МнЧ.Цена = ТаблицаОснования.Цена; Иначе МнЧ.Цена = ?(ТаблицаОснования.Количество = 0, 0, ТаблицаОснования.Сумма/ТаблицаОснования.Количество); КонецЕсли; КонецЕсли; МнЧ.Единица = ТекЕдиница; МнЧ.ЕдиницаКод = ТекЕдиницаКод; МнЧ.ВсегоСНДС = ТаблицаОснования.Сумма + ТаблицаОснования.СуммаНДС; Если (МнЧ.Количество - Цел(МнЧ.Количество)) > 0 Тогда ФорматКоличества = "Ч10.3"; КонецЕсли; НомСтр = 0; ОстКолво = ВсегоКол; РаспредГТД.УдалитьСтроки(); Если (ВидОсн <> "РеализацияПрочее") и (ВидОсн <> "ВводОстатковПокупателя") Тогда Пока (ОстКолво > 0) и (ТаблицаГТД.НайтиЗначение(ТаблицаОснования.Номенклатура, НомСтр, "Номенклатура") <> 0) Цикл ТаблицаГТД.ПолучитьСтрокуПоНомеру(НомСтр); РаспредГТД.НоваяСтрока(); РаспредГТД.Колво = Мин(ОстКолво, ?(ТаблицаОснования.Коэффициент <> 0, ТаблицаГТД.Количество / ТаблицаОснования.Коэффициент, ТаблицаГТД.Количество)); РаспредГТД.Номер = ТаблицаГТД.ГТД; РаспредГТД.Страна = ТаблицаГТД.СтранаПроисхождения; ТаблицаГТД.Количество = ТаблицаГТД.Количество - РаспредГТД.Колво * ?(ТаблицаОснования.Коэффициент = 0, 1, ТаблицаОснования.Коэффициент); Если ТаблицаГТД.Количество <= 0 Тогда // если по ГТД все списали, то удаляем строку ТаблицаГТД.УдалитьСтроку(); КонецЕсли; ОстКолво = ОстКолво - РаспредГТД.Колво; НомСтр = 0; КонецЦикла; ТекТМЦ = ТаблицаОснования.Номенклатура; Если (ОстКолво > 0) и (ОстКолво < ВсегоКол) Тогда // только часть товара распределилась по ГТД РаспредГТД.НоваяСтрока(); РаспредГТД.Колво = ОстКолво; РаспредГТД.Номер = ""; РаспредГТД.Страна = ""; // Заполним номер ГТД и Страну из Номенклатуры, если там есть... Если ПустоеЗначение(ТекТМЦ.НомерГТД) = 0 Тогда РаспредГТД.Номер = СокрЛП(ТекТМЦ.НомерГТД); КонецЕсли; Если ПустоеЗначение(ТекТМЦ.СтранаПроисхождения) = 0 Тогда РаспредГТД.Страна = ТекТМЦ.СтранаПроисхождения; КонецЕсли; КонецЕсли; РаспредГТД.Свернуть("Страна, Номер", "Колво"); КолСтрокГТД = РаспредГТД.КоличествоСтрок(); Если КолСтрокГТД = 0 Тогда // нет распределения по ГТД // Заполним номер ГТД и Страну из Номенклатуры, если там есть... Если ПустоеЗначение(ТекТМЦ.НомерГТД) = 0 Тогда МнЧ.НомерГТД = СокрЛП(ТекТМЦ.НомерГТД); КонецЕсли; Если ПустоеЗначение(ТекТМЦ.СтранаПроисхождения) = 0 Тогда МнЧ.СтранаН = СокрЛП(ТекТМЦ.СтранаПроисхождения); Если ТипЗначенияСтр(ТекТМЦ.СтранаПроисхождения) = "Справочник" Тогда МнЧ.СтранаК = СокрЛП(ТекТМЦ.СтранаПроисхождения.Код); Иначе МнЧ.СтранаК = ""; КонецЕсли; КонецЕсли; ИначеЕсли КолСтрокГТД = 1 Тогда РаспредГТД.ВыбратьСтроки(); РаспредГТД.ПолучитьСтроку(); // одна строка в таблице. Товара с номером ГТД и страной в одной строке МнЧ.НомерГТД = РаспредГТД.Номер; МнЧ.СтранаН = СокрЛП(РаспредГТД.Страна); Если ТипЗначенияСтр(РаспредГТД.Страна) = "Справочник" Тогда МнЧ.СтранаК = РаспредГТД.Страна.Код; Иначе МнЧ.СтранаК = ""; КонецЕсли; Иначе РаспредГТД.ВыбратьСтроки(); Пока РаспредГТД.ПолучитьСтроку() = 1 Цикл МнЧ.НоваяСтрока(); МнЧ.Номенклатура = " в т.ч."; МнЧ.Цена = КороткийПрочерк; МнЧ.Сумма = КороткийПрочерк; МнЧ.СтавкаНДС = КороткийПрочерк; МнЧ.СуммаНДС   |
|||
1
aka AMIGO
30.06.15
✎
12:33
|
Выгрузить ТЧ в ТЗ, сортировать по колонке, записать обратно в ТЧ
|
|||
2
Ёпрст
30.06.15
✎
12:34
|
МнЧ.Сортировать("ИмяКолонкиКаойНадо");
|
|||
3
LazyStranger
30.06.15
✎
12:35
|
в МнЧ добавить колонку "артикул", после заполнения сортировать
|
|||
4
palpetrovich
30.06.15
✎
12:49
|
ставлю дайм что портянку никто из (1)(2)(3) не читал
а зря, зачетная :) |
|||
5
sotnikov
30.06.15
✎
12:49
|
Можете подробнее написать? Что конкретно и в какое место кода вставить?
|
|||
6
palpetrovich
30.06.15
✎
12:56
|
(5) так примерно
Функция ПодготовитьМнЧосн(Докум, МнЧ, Итоги, ФорматКоличества) Перем ТаблицаГТД; Перем РегПартии; ТаблицаГТД = СоздатьОбъект("ТаблицаЗначений"); ТаблицаГТД.НоваяКолонка("Номенклатура"); ТаблицаГТД.НоваяКолонка("Артикул"); // блаблабла ТаблицаГТД.НоваяСтрока(); ТаблицаГТД.Номенклатура = РегПартии.Номенклатура; ТаблицаГТД.Артикул = ТаблицаГТД.Номенклатура.Артикул; // блаблабла // перед выводом на печать: ТаблицаГТД.Сортировать("Артикул"); |
|||
7
Mikeware
30.06.15
✎
12:57
|
(4) а что там такого уж зачетного? вроде типовая счет-фактура семерочная (тисовская)...
|
|||
8
palpetrovich
30.06.15
✎
13:07
|
(7) уж0с :) ...почему-то не жалею что не знаю русский тис
|
|||
9
sotnikov
30.06.15
✎
13:08
|
(6) Вставляю ТаблицаГТД.Сортировать("Артикул"); в конец функции ПодготовитьМнЧосн толку ноль
|
|||
10
Ёпрст
30.06.15
✎
13:09
|
(9) ну ясен пень, смотри (2)
|
|||
11
Ёпрст
30.06.15
✎
13:11
|
Ежели, в этой табличке, нет колонки "ИмяКолонкиКаойНадо", то её надо туда добавить и заполнить. Потом, отсортировать.
Дальше наслаждаться и кушать печенки. |
|||
12
sotnikov
30.06.15
✎
13:11
|
(10) Куда твой код-то пихать? Поясни тупому.
|
|||
13
sotnikov
30.06.15
✎
13:12
|
(11) Легко сказать добавить и заполнить. КАК?
|
|||
14
palpetrovich
30.06.15
✎
13:12
|
(9) там-же написано "так примерно", я-эж не знаю какая именно ТЗ выводится на печать
|
|||
15
Масянька
30.06.15
✎
13:13
|
(8) Ничего подобного. Даже в первый раз не страшно.
(11) Что у тебя в ПодготовитьМнЧ? Давай еще одну простыню :) |
|||
16
sotnikov
30.06.15
✎
13:17
|
(15)
Функция ПодготовитьМнЧосн(Докум, МнЧ, Итоги, ФорматКоличества) Перем ТаблицаГТД; Перем РегПартии; ТаблицаГТД = СоздатьОбъект("ТаблицаЗначений"); ТаблицаГТД.НоваяКолонка("Номенклатура"); ТаблицаГТД.НоваяКолонка("СтранаПроисхождения"); ТаблицаГТД.НоваяКолонка("ГТД"); ТаблицаГТД.НоваяКолонка("Количество"); //в базовых единицах КолвоГТДТов = СоздатьОбъект("СписокЗначений"); // Переберем все партии, которые были списаны документом - основанием. // Если в партии были выбраны страна и ГТД, их следует перенести в СФ РегПартии = СоздатьОбъект("Регистр.ПартииНаличие"); РегПартии.ВыбратьДвиженияДокумента(Докум.ДокОснование); Пока РегПартии.ПолучитьДвижение() = 1 Цикл Если (РегПартии.Расход = 1) и (РегПартии.Партия.Выбран()=1) Тогда ВремСтрана = РегПартии.Партия.СтранаПроисхождения; ВремГТД = РегПартии.Партия.ГТД; Если (ПустоеЗначение(ВремСтрана) = 0) или (ПустоеЗначение(ВремГТД ) = 0) Тогда ТаблицаГТД.НоваяСтрока(); ТаблицаГТД.Номенклатура = РегПартии.Номенклатура; ТаблицаГТД.СтранаПроисхождения = ВремСтрана; ТаблицаГТД.ГТД = ВремГТД; ТаблицаГТД.Количество = РегПартии.Количество; КонецЕсли; КонецЕсли; КонецЦикла; СоздатьСтруктуру(МнЧ); // создадим таблицу документа ТаблицаОснования = СоздатьОбъект("ТаблицаЗначений"); Докум.ДокОснование.ВыгрузитьТабличнуюЧасть(ТаблицаОснования); // теперь у нас есть таблица, в которой собраны строки документа - основания в нужной валюте // надо проставить ГТД ВидОсн = Докум.ДокОснование.Вид(); Если ВидОсн = "ВводОстатковПокупателя" Тогда ТаблицаОснования.НоваяКолонка("Сумма"); ТаблицаОснования.НоваяКолонка("Номенклатура"); Иначе Если глЕстьРеквизитМнЧ("СуммаНП", ВидОсн) = 0 Тогда ТаблицаОснования.НоваяКолонка("СуммаНП"); ОснСуммаВклНП = 0; Иначе ОснСуммаВклНП = Докум.ДокОснование.СуммаВклНП; КонецЕсли; Если глЕстьРеквизитМнЧ("СуммаНДС", ВидОсн) = 0 Тогда ТаблицаОснования.НоваяКолонка("СуммаНДС"); ОснСуммаВклНДС = 0; Иначе ОснСуммаВклНДС = Докум.ДокОснование.СуммаВклНДС; КонецЕсли; КонецЕсли; Если глЕстьРеквизитШапки("КодОперации", ВидОсн) = 1 Тогда БратьСуммыИзУчета = глБратьСуммыИзУчета(Докум.ДатаДок, Докум.ДокОснование.КодОперации); Иначе БратьСуммыИзУчета = глБратьСуммыИзУчета(Докум.ДатаДок); КонецЕсли; Если БратьСуммыИзУчета = 1 Тогда СкорректироватьТаблицуОснования(Докум, ТаблицаОснования, ВидОсн); КонецЕсли; ИтогСумма = 0; ВывелиСтроку = 0; РаспредГТД = СоздатьОбъект("ТаблицаЗначений"); РаспредГТД.НоваяКолонка("Колво"); РаспредГТД.НоваяКолонка("Страна"); РаспредГТД.НоваяКолонка("Номер"); ТаблицаОснования . ВыбратьСтроки(); Пока ТаблицаОснования.ПолучитьСтроку()=1 Цикл Если ВидОсн = "ВводОстатковПокупателя" Тогда ТаблицаОснования.Сумма = ТаблицаОснования.СуммаРуб - ТаблицаОснования.СуммаНДС - ТаблицаОснования.СуммаНП; Иначе Если ОснСуммаВклНП = 1 Тогда ТаблицаОснования.Сумма = ТаблицаОснования.Сумма - ТаблицаОснования.СуммаНП; КонецЕсли; Если ОснСуммаВклНДС = 1 Тогда ТаблицаОснования.Сумма = ТаблицаОснования.Сумма - ТаблицаОснования.СуммаНДС; КонецЕсли; КонецЕсли; МнЧ.НоваяСтрока(); МнЧ.СтранаН = ""; МнЧ.СтранаК = ""; МнЧ.НомерГТД = ""; МнЧ.АкцизЦена = "без акциза"; Если ПустоеЗначение(ТаблицаОснования.Сумма) = 1 Тогда МнЧ.Сумма = КороткийПрочерк; МнЧ.СтавкаНДС = "без НДС"; МнЧ.СуммаНДС = КороткийПрочерк; МнЧ.СуммаНП = КороткийПрочерк; Иначе МнЧ.Сумма = ТаблицаОснования.Сумма; МнЧ.СтавкаНДС = ?(ТаблицаОснования.СтавкаНДС = Перечисление.СтавкиНДС.безНДС, "Без НДС", Строка(ТаблицаОснования.СтавкаНДС)); МнЧ.СуммаНДС = ?(ТаблицаОснования.СтавкаНДС = Перечисление.СтавкиНДС.безНДС, КороткийПрочерк, глФРМ(ТаблицаОснования.СуммаНДС)); МнЧ.СуммаНП = глФРМ(ТаблицаОснования.СуммаНП); КонецЕсли; Если ВидОсн = "РеализацияПрочее" Тогда МнЧ.Номенклатура = ТаблицаОснования.Содержание; ВсегоКол = 0; МнЧ.Количество = ТаблицаОснования.Количество; ТекЕдиница = "-"; ТекЕдиницаКод = "-"; Если (Докум.ДокОснование.УчитыватьНДС = 1) и (Докум.ДокОснование.СуммаВклНДС = 0) Тогда МнЧ.Цена = ТаблицаОснования.Цена; Иначе МнЧ.Цена = ?(ТаблицаОснования.Количество = 0, 0, ТаблицаОснования.Сумма/ТаблицаОснования.Количество); КонецЕсли; ИначеЕсли ВидОсн = "ВводОстатковПокупателя" Тогда МнЧ.Номенклатура = ТаблицаОснования.ВидДолга; МнЧ.Количество = 0; ТекЕдиница = "-"; ТекЕдиницаКод = "-"; МнЧ.Цена = "-"; Иначе МнЧ.Номенклатура = ТаблицаОснования.Номенклатура.ПолнНаименование + ?(Константа.ПоказыватьАртикул = 1, " " + ТаблицаОснования.Номенклатура.Артикул, ""); МнЧ.Количество = ТаблицаОснования.Количество; ТекЕдиница = ТаблицаОснования.Единица; ТекЕдиницаКод = ТаблицаОснования.Единица.ОКЕИ.Код; ВсегоКол = ТаблицаОснования.Количество; Если (Докум.ДокОснование.УчитыватьНДС = 1) и (Докум.ДокОснование.СуммаВклНДС = 0) Тогда МнЧ.Цена = ТаблицаОснования.Цена; Иначе МнЧ.Цена = ?(ТаблицаОснования.Количество = 0, 0, ТаблицаОснования.Сумма/ТаблицаОснования.Количество); КонецЕсли; КонецЕсли; МнЧ.Единица = ТекЕдиница; МнЧ.ЕдиницаКод = ТекЕдиницаКод; МнЧ.ВсегоСНДС = ТаблицаОснования.Сумма + ТаблицаОснования.СуммаНДС; Если (МнЧ.Количество - Цел(МнЧ.Количество)) > 0 Тогда ФорматКоличества = "Ч10.3"; КонецЕсли; НомСтр = 0; ОстКолво = ВсегоКол; РаспредГТД.УдалитьСтроки(); Если (ВидОсн <> "РеализацияПрочее") и (ВидОсн <> "ВводОстатковПокупателя") Тогда Пока (ОстКолво > 0) и (ТаблицаГТД.НайтиЗначение(ТаблицаОснования.Номенклатура, НомСтр, "Номенклатура") <> 0) Цикл ТаблицаГТД.ПолучитьСтрокуПоНомеру(НомСтр); РаспредГТД.НоваяСтрока(); РаспредГТД.Колво = Мин(ОстКолво, ?(ТаблицаОснования.Коэффициент <> 0, ТаблицаГТД.Количество / ТаблицаОснования.Коэффициент, ТаблицаГТД.Количество)); РаспредГТД.Номер = ТаблицаГТД.ГТД; РаспредГТД.Страна = ТаблицаГТД.СтранаПроисхождения; ТаблицаГТД.Количество = ТаблицаГТД.Количество - РаспредГТД.Колво * ?(ТаблицаОснования.Коэффициент = 0, 1, ТаблицаОснования.Коэффициент); Если ТаблицаГТД.Количество <= 0 Тогда // если по ГТД все списали, то удаляем строку ТаблицаГТД.УдалитьСтроку(); КонецЕсли; ОстКолво = ОстКолво - РаспредГТД.Колво; НомСтр = 0; КонецЦикла; ТекТМЦ = ТаблицаОснования.Номенклатура; Если (ОстКолво > 0) и (ОстКолво < ВсегоКол) Тогда // только часть товара распределилась по ГТД РаспредГТД.НоваяСтрока(); РаспредГТД.Колво = ОстКолво; РаспредГТД.Номер = ""; РаспредГТД.Страна = ""; // Заполним номер ГТД и Страну из Номенклатуры, если там есть... Если ПустоеЗначение(ТекТМЦ.НомерГТД) = 0 Тогда РаспредГТД.Номер = СокрЛП(ТекТМЦ.НомерГТД); КонецЕсли; Если ПустоеЗначение(ТекТМЦ.СтранаПроисхождения) = 0 Тогда РаспредГТД.Страна = ТекТМЦ.СтранаПроисхождения; КонецЕсли; КонецЕсли; РаспредГТД.Свернуть("Страна, Номер", "Колво"); КолСтрокГТД = РаспредГТД.КоличествоСтрок(); Если КолСтрокГТД = 0 Тогда // нет распределения по ГТД // Заполним номер ГТД и Страну из Номенклатуры, если там есть... Если ПустоеЗначение(ТекТМЦ.НомерГТД) = 0 Тогда МнЧ.НомерГТД = СокрЛП(ТекТМЦ.НомерГТД); КонецЕсли; Если ПустоеЗначение(ТекТМЦ.СтранаПроисхождения) = 0 Тогда МнЧ.СтранаН = СокрЛП(ТекТМЦ.СтранаПроисхождения); Если ТипЗначенияСтр(ТекТМЦ.СтранаПроисхождения) = "Справочник" Тогда МнЧ.СтранаК = СокрЛП(ТекТМЦ.СтранаПроисхождения.Код); Иначе МнЧ.СтранаК = ""; КонецЕсли; КонецЕсли; ИначеЕсли КолСтрокГТД = 1 Тогда РаспредГТД.ВыбратьСтроки(); РаспредГТД.ПолучитьСтроку(); // одна строка в таблице. Товара с номером ГТД и страной в одной строке МнЧ.НомерГТД = РаспредГТД.Номер; МнЧ.СтранаН = СокрЛП(РаспредГТД.Страна); Если ТипЗначенияСтр(РаспредГТД.Страна) = "Справочник" Тогда МнЧ.СтранаК = РаспредГТД.Страна.Код; Иначе МнЧ.СтранаК = ""; КонецЕсли; Иначе РаспредГТД.ВыбратьСтроки(); Пока РаспредГТД.ПолучитьСтроку() = 1 Цикл МнЧ.НоваяСтрока(); МнЧ.Номенклатура = " в т.ч."; МнЧ.Цена = КороткийПрочерк; МнЧ.Сумма = КороткийПрочерк; МнЧ.СтавкаНДС = КороткийПрочерк; МнЧ.СуммаНДС = КороткийПрочерк; МнЧ.СуммаНП = КороткийПрочерк; МнЧ.ВсегоСНДС = КороткийПрочерк; МнЧ.Единица = ТекЕдиница; МнЧ.ЕдиницаКод = ТекЕдиницаКод; МнЧ.Количество = РаспредГТД.Колво; МнЧ.НомерГТД = РаспредГТД.Номер; МнЧ.СтранаН = РаспредГТД.Страна; Если ТипЗначенияСтр(РаспредГТД.Страна) = "Справочник" Тогда МнЧ.СтранаК = РаспредГТД.Страна.Код; Иначе МнЧ.СтранаК = ""; КонецЕсли; Если (МнЧ.Количество - Цел(МнЧ.Количество)) > 0 Тогда ФорматКоличества = "Ч10.3"; КонецЕсли; КонецЦикла; КонецЕсли; КонецЕсли; КонецЦикла;// по строкам таблицы основания Если ПустоеЗначение(ФорматКоличества) = 1 Тогда ФорматКоличества = "Ч010.0"; КонецЕсли; Итоги = СоздатьОбъект("СписокЗначений"); Итоги.ДобавитьЗначение(ТаблицаОснования.Итог("Сумма") + ТаблицаОснования.Итог("СуммаНДС"), "ИтогВсегоСНДС"); Итоги.ДобавитьЗначение(ТаблицаОснования.Итог("Сумма") , "ИтогСумма"); Итоги.ДобавитьЗначение(ТаблицаОснования.Итог("СуммаНДС"), "ИтогСуммаНДС"); Итоги.ДобавитьЗначение(ТаблицаОснования.Итог("СуммаНП") , "ИтогСуммаНП"); Возврат ""; КонецФункции // ПодготовитьМнЧосн() |
|||
17
Ёпрст
30.06.15
✎
13:18
|
(13)
в процу СоздатьСтруктуру(МнЧ) воткнуть в конец Мнч.НоваяКолонка("Вася");, далее в коде искать, где присваивается значение Мнч.Номенклатура = ... добавить Мнч.Вася = ... Перед выводом, Мнч.Сортировать("Вася"); наслаждаться. |
|||
18
Ёпрст
30.06.15
✎
13:19
|
в твоём коде,это будет вот так
Иначе МнЧ.Номенклатура = ТаблицаОснования.Номенклатура.ПолнНаименование + ?(Константа.ПоказыватьАртикул = 1, " " + ТаблицаОснования.Номенклатура.Артикул, ""); МнЧ.Вася = ТаблицаОснования.Номенклатура.Артикул; |
|||
19
Масянька
30.06.15
✎
13:21
|
(16) Перед "Если ПустоеЗначение(ФорматКоличества) = 1 Тогда" воткни сортировку, только сначала сделай то, что говорит Ёпрст.
|
|||
20
VladZ
30.06.15
✎
13:23
|
У ж о с! Там работы на 3 минуты.
|
|||
21
Mikeware
30.06.15
✎
13:27
|
(20) "А поговорить?"©
|
|||
22
Масянька
30.06.15
✎
13:34
|
(21) Обойдешься :)
|
|||
23
sotnikov
30.06.15
✎
13:37
|
Не сортируется=(
Функция ПодготовитьМнЧосн(Докум, МнЧ, Итоги, ФорматКоличества) Перем ТаблицаГТД; Перем РегПартии; ТаблицаГТД = СоздатьОбъект("ТаблицаЗначений"); ТаблицаГТД.НоваяКолонка("Номенклатура"); ТаблицаГТД.НоваяКолонка("СтранаПроисхождения"); ТаблицаГТД.НоваяКолонка("ГТД"); ТаблицаГТД.НоваяКолонка("Количество"); //в базовых единицах КолвоГТДТов = СоздатьОбъект("СписокЗначений"); // Переберем все партии, которые были списаны документом - основанием. // Если в партии были выбраны страна и ГТД, их следует перенести в СФ РегПартии = СоздатьОбъект("Регистр.ПартииНаличие"); РегПартии.ВыбратьДвиженияДокумента(Докум.ДокОснование); Пока РегПартии.ПолучитьДвижение() = 1 Цикл Если (РегПартии.Расход = 1) и (РегПартии.Партия.Выбран()=1) Тогда ВремСтрана = РегПартии.Партия.СтранаПроисхождения; ВремГТД = РегПартии.Партия.ГТД; Если (ПустоеЗначение(ВремСтрана) = 0) или (ПустоеЗначение(ВремГТД ) = 0) Тогда ТаблицаГТД.НоваяСтрока(); ТаблицаГТД.Номенклатура = РегПартии.Номенклатура; ТаблицаГТД.СтранаПроисхождения = ВремСтрана; ТаблицаГТД.ГТД = ВремГТД; ТаблицаГТД.Количество = РегПартии.Количество; КонецЕсли; КонецЕсли; КонецЦикла; СоздатьСтруктуру(МнЧ); // создадим таблицу документа ТаблицаОснования = СоздатьОбъект("ТаблицаЗначений"); Докум.ДокОснование.ВыгрузитьТабличнуюЧасть(ТаблицаОснования); // теперь у нас есть таблица, в которой собраны строки документа - основания в нужной валюте // надо проставить ГТД ВидОсн = Докум.ДокОснование.Вид(); Если ВидОсн = "ВводОстатковПокупателя" Тогда ТаблицаОснования.НоваяКолонка("Сумма"); ТаблицаОснования.НоваяКолонка("Номенклатура"); Иначе Если глЕстьРеквизитМнЧ("СуммаНП", ВидОсн) = 0 Тогда ТаблицаОснования.НоваяКолонка("СуммаНП"); ОснСуммаВклНП = 0; Иначе ОснСуммаВклНП = Докум.ДокОснование.СуммаВклНП; КонецЕсли; Если глЕстьРеквизитМнЧ("СуммаНДС", ВидОсн) = 0 Тогда ТаблицаОснования.НоваяКолонка("СуммаНДС"); ОснСуммаВклНДС = 0; Иначе ОснСуммаВклНДС = Докум.ДокОснование.СуммаВклНДС; КонецЕсли; КонецЕсли; Если глЕстьРеквизитШапки("КодОперации", ВидОсн) = 1 Тогда БратьСуммыИзУчета = глБратьСуммыИзУчета(Докум.ДатаДок, Докум.ДокОснование.КодОперации); Иначе БратьСуммыИзУчета = глБратьСуммыИзУчета(Докум.ДатаДок); КонецЕсли; Если БратьСуммыИзУчета = 1 Тогда СкорректироватьТаблицуОснования(Докум, ТаблицаОснования, ВидОсн); КонецЕсли; ИтогСумма = 0; ВывелиСтроку = 0; РаспредГТД = СоздатьОбъект("ТаблицаЗначений"); РаспредГТД.НоваяКолонка("Колво"); РаспредГТД.НоваяКолонка("Страна"); РаспредГТД.НоваяКолонка("Номер"); ТаблицаОснования . ВыбратьСтроки(); Пока ТаблицаОснования.ПолучитьСтроку()=1 Цикл Если ВидОсн = "ВводОстатковПокупателя" Тогда ТаблицаОснования.Сумма = ТаблицаОснования.СуммаРуб - ТаблицаОснования.СуммаНДС - ТаблицаОснования.СуммаНП; Иначе Если ОснСуммаВклНП = 1 Тогда ТаблицаОснования.Сумма = ТаблицаОснования.Сумма - ТаблицаОснования.СуммаНП; КонецЕсли; Если ОснСуммаВклНДС = 1 Тогда ТаблицаОснования.Сумма = ТаблицаОснования.Сумма - ТаблицаОснования.СуммаНДС; КонецЕсли; КонецЕсли; МнЧ.НоваяСтрока(); МнЧ.СтранаН = ""; МнЧ.СтранаК = ""; МнЧ.НомерГТД = ""; МнЧ.АкцизЦена = "без акциза"; Если ПустоеЗначение(ТаблицаОснования.Сумма) = 1 Тогда МнЧ.Сумма = КороткийПрочерк; МнЧ.СтавкаНДС = "без НДС"; МнЧ.СуммаНДС = КороткийПрочерк; МнЧ.СуммаНП = КороткийПрочерк; Иначе МнЧ.Сумма = ТаблицаОснования.Сумма; МнЧ.СтавкаНДС = ?(ТаблицаОснования.СтавкаНДС = Перечисление.СтавкиНДС.безНДС, "Без НДС", Строка(ТаблицаОснования.СтавкаНДС)); МнЧ.СуммаНДС = ?(ТаблицаОснования.СтавкаНДС = Перечисление.СтавкиНДС.безНДС, КороткийПрочерк, глФРМ(ТаблицаОснования.СуммаНДС)); МнЧ.СуммаНП = глФРМ(ТаблицаОснования.СуммаНП); КонецЕсли; Если ВидОсн = "РеализацияПрочее" Тогда МнЧ.Номенклатура = ТаблицаОснования.Содержание; ВсегоКол = 0; МнЧ.Количество = ТаблицаОснования.Количество; ТекЕдиница = "-"; ТекЕдиницаКод = "-"; Если (Докум.ДокОснование.УчитыватьНДС = 1) и (Докум.ДокОснование.СуммаВклНДС = 0) Тогда МнЧ.Цена = ТаблицаОснования.Цена; Иначе МнЧ.Цена = ?(ТаблицаОснования.Количество = 0, 0, ТаблицаОснования.Сумма/ТаблицаОснования.Количество); КонецЕсли; ИначеЕсли ВидОсн = "ВводОстатковПокупателя" Тогда МнЧ.Номенклатура = ТаблицаОснования.ВидДолга; МнЧ.Количество = 0; ТекЕдиница = "-"; ТекЕдиницаКод = "-"; МнЧ.Цена = "-"; Иначе МнЧ.Номенклатура = ТаблицаОснования.Номенклатура.ПолнНаименование + ?(Константа.ПоказыватьАртикул = 1, " " + ТаблицаОснования.Номенклатура.Артикул, ""); Мнч.Артикул = ТаблицаОснования.Номенклатура.Артикул; МнЧ.Количество = ТаблицаОснования.Количество; ТекЕдиница = ТаблицаОснования.Единица; ТекЕдиницаКод = ТаблицаОснования.Единица.ОКЕИ.Код; ВсегоКол = ТаблицаОснования.Количество; Если (Докум.ДокОснование.УчитыватьНДС = 1) и (Докум.ДокОснование.СуммаВклНДС = 0) Тогда МнЧ.Цена = ТаблицаОснования.Цена; Иначе МнЧ.Цена = ?(ТаблицаОснования.Количество = 0, 0, ТаблицаОснования.Сумма/ТаблицаОснования.Количество); КонецЕсли; КонецЕсли; МнЧ.Единица = ТекЕдиница; МнЧ.ЕдиницаКод = ТекЕдиницаКод; МнЧ.ВсегоСНДС = ТаблицаОснования.Сумма + ТаблицаОснования.СуммаНДС; Если (МнЧ.Количество - Цел(МнЧ.Количество)) > 0 Тогда ФорматКоличества = "Ч10.3"; КонецЕсли; НомСтр = 0; ОстКолво = ВсегоКол; РаспредГТД.УдалитьСтроки(); Если (ВидОсн <> "РеализацияПрочее") и (ВидОсн <> "ВводОстатковПокупателя") Тогда Пока (ОстКолво > 0) и (ТаблицаГТД.НайтиЗначение(ТаблицаОснования.Номенклатура, НомСтр, "Номенклатура") <> 0) Цикл ТаблицаГТД.ПолучитьСтрокуПоНомеру(НомСтр); РаспредГТД.НоваяСтрока(); РаспредГТД.Колво = Мин(ОстКолво, ?(ТаблицаОснования.Коэффициент <> 0, ТаблицаГТД.Количество / ТаблицаОснования.Коэффициент, ТаблицаГТД.Количество)); РаспредГТД.Номер = ТаблицаГТД.ГТД; РаспредГТД.Страна = ТаблицаГТД.СтранаПроисхождения; ТаблицаГТД.Количество = ТаблицаГТД.Количество - РаспредГТД.Колво * ?(ТаблицаОснования.Коэффициент = 0, 1, ТаблицаОснования.Коэффициент); Если ТаблицаГТД.Количество <= 0 Тогда // если по ГТД все списали, то удаляем строку ТаблицаГТД.УдалитьСтроку(); КонецЕсли; ОстКолво = ОстКолво - РаспредГТД.Колво; НомСтр = 0; КонецЦикла; ТекТМЦ = ТаблицаОснования.Номенклатура; Если (ОстКолво > 0) и (ОстКолво < ВсегоКол) Тогда // только часть товара распределилась по ГТД РаспредГТД.НоваяСтрока(); РаспредГТД.Колво = ОстКолво; РаспредГТД.Номер = ""; РаспредГТД.Страна = ""; // Заполним номер ГТД и Страну из Номенклатуры, если там есть... Если ПустоеЗначение(ТекТМЦ.НомерГТД) = 0 Тогда РаспредГТД.Номер = СокрЛП(ТекТМЦ.НомерГТД); КонецЕсли; Если ПустоеЗначение(ТекТМЦ.СтранаПроисхождения) = 0 Тогда РаспредГТД.Страна = ТекТМЦ.СтранаПроисхождения; КонецЕсли; КонецЕсли; РаспредГТД.Свернуть("Страна, Номер", "Колво"); КолСтрокГТД = РаспредГТД.КоличествоСтрок(); Если КолСтрокГТД = 0 Тогда // нет распределения по ГТД // Заполним номер ГТД и Страну из Номенклатуры, если там есть... Если ПустоеЗначение(ТекТМЦ.НомерГТД) = 0 Тогда МнЧ.НомерГТД = СокрЛП(ТекТМЦ.НомерГТД); КонецЕсли; Если ПустоеЗначение(ТекТМЦ.СтранаПроисхождения) = 0 Тогда МнЧ.СтранаН = СокрЛП(ТекТМЦ.СтранаПроисхождения); Если ТипЗначенияСтр(ТекТМЦ.СтранаПроисхождения) = "Справочник" Тогда МнЧ.СтранаК = СокрЛП(ТекТМЦ.СтранаПроисхождения.Код); Иначе МнЧ.СтранаК = ""; КонецЕсли; КонецЕсли; ИначеЕсли КолСтрокГТД = 1 Тогда РаспредГТД.ВыбратьСтроки(); РаспредГТД.ПолучитьСтроку(); // одна строка в таблице. Товара с номером ГТД и страной в одной строке МнЧ.НомерГТД = РаспредГТД.Номер; МнЧ.СтранаН = СокрЛП(РаспредГТД.Страна); Если ТипЗначенияСтр(РаспредГТД.Страна) = "Справочник" Тогда МнЧ.СтранаК = РаспредГТД.Страна.Код; Иначе МнЧ.СтранаК = ""; КонецЕсли; Иначе РаспредГТД.ВыбратьСтроки(); Пока РаспредГТД.ПолучитьСтроку() = 1 Цикл МнЧ.НоваяСтрока(); МнЧ.Номенклатура = " в т.ч."; МнЧ.Цена = КороткийПрочерк; МнЧ.Сумма = КороткийПрочерк; МнЧ.СтавкаНДС = КороткийПрочерк; МнЧ.СуммаНДС = КороткийПрочерк; МнЧ.СуммаНП = КороткийПрочерк; МнЧ.ВсегоСНДС = КороткийПрочерк; МнЧ.Единица = ТекЕдиница; МнЧ.ЕдиницаКод = ТекЕдиницаКод; МнЧ.Количество = РаспредГТД.Колво; МнЧ.НомерГТД = РаспредГТД.Номер; МнЧ.СтранаН = РаспредГТД.Страна; Если ТипЗначенияСтр(РаспредГТД.Страна) = "Справочник" Тогда МнЧ.СтранаК = РаспредГТД.Страна.Код; Иначе МнЧ.СтранаК = ""; КонецЕсли; Если (МнЧ.Количество - Цел(МнЧ.Количество)) > 0 Тогда ФорматКоличества = "Ч10.3"; КонецЕсли; КонецЦикла; КонецЕсли; КонецЕсли; КонецЦикла;// по строкам таблицы основания Мнч.Сортировать("Артикул"); Если ПустоеЗначение(ФорматКоличества) = 1 Тогда ФорматКоличества = "Ч010.0"; КонецЕсли; Итоги = СоздатьОбъект("СписокЗначений"); Итоги.ДобавитьЗначение(ТаблицаОснования.Итог("Сумма") + ТаблицаОснования.Итог("СуммаНДС"), "ИтогВсегоСНДС"); Итоги.ДобавитьЗначение(ТаблицаОснования.Итог("Сумма") , "ИтогСумма"); Итоги.ДобавитьЗначение(ТаблицаОснования.Итог("СуммаНДС"), "ИтогСуммаНДС"); Итоги.ДобавитьЗначение(ТаблицаОснования.Итог("СуммаНП") , "ИтогСуммаНП"); Возврат ""; КонецФункции // ПодготовитьМнЧосн() |
|||
24
palpetrovich
30.06.15
✎
13:39
|
(23) а Константа.ПоказыватьАртикул = 1 ?
зы скачал руТиС, прикольный, заполняет себе что-то уже минуты 2 :) |
|||
25
sotnikov
30.06.15
✎
13:41
|
МнЧ = СоздатьОбъект("ТаблицаЗначений");
МнЧ.НоваяКолонка("Цена",); МнЧ.НоваяКолонка("Сумма",); МнЧ.НоваяКолонка("СтавкаНДС"); МнЧ.НоваяКолонка("СуммаНДС",); МнЧ.НоваяКолонка("СуммаНП",); МнЧ.НоваяКолонка("ВсегоСНДС",); МнЧ.НоваяКолонка("Номенклатура"); МнЧ.НоваяКолонка("СтранаН"); МнЧ.НоваяКолонка("СтранаК"); МнЧ.НоваяКолонка("НомерГТД"); МнЧ.НоваяКолонка("Единица"); МнЧ.НоваяКолонка("ЕдиницаКод"); МнЧ.НоваяКолонка("Количество"); МнЧ.НоваяКолонка("АкцизЦена"); Мнч.НоваяКолонка("Артикул"); //***** МнЧ.Номенклатура = ТаблицаОснования.Номенклатура.ПолнНаименование + ?(Константа.ПоказыватьАртикул = 1, " " + ТаблицаОснования.Номенклатура.Артикул, ""); Мнч.Артикул = ТаблицаОснования.Номенклатура.Артикул; //***** Мнч.Сортировать("Артикул"); Если ПустоеЗначение(ФорматКоличества) = 1 Тогда |
|||
26
sotnikov
30.06.15
✎
13:42
|
(24) Да, судя по тому что он выводится в печатной форме перед наименованием.
|
|||
27
Ёпрст
30.06.15
✎
13:47
|
(25) уже лучше.
Теперь ищи, где есть в коде Мнч.Свернуть |
|||
28
Ёпрст
30.06.15
✎
13:47
|
или Мнч.Сортировать
|
|||
29
Ёпрст
30.06.15
✎
13:48
|
и думай.
|
|||
30
Масянька
30.06.15
✎
13:48
|
(27) (28) Можно добавлю? Искать нужно в процедуре. где уже происходит печать (вывод).
|
|||
31
sotnikov
30.06.15
✎
13:49
|
(28) Нет других сортировок.
|
|||
32
sotnikov
30.06.15
✎
13:49
|
(27) РаспредГТД.Свернуть("Страна, Номер", "Колво");
Только это |
|||
33
Ёпрст
30.06.15
✎
13:50
|
(31) тогда ищи, где еще может заполняться номенклатура.
|
|||
34
Ёпрст
30.06.15
✎
13:51
|
в эту табличку.
|
|||
35
Ёпрст
30.06.15
✎
13:51
|
и туда пропиши свой артикул.
|
|||
36
Масянька
30.06.15
✎
13:52
|
(31) У себя в ТОРГ-12 написала:
Процедура ОбработкаМнЧ(ПечДокумент) МнЧ = СоздатьОбъект("ТаблицаЗначений"); МнЧ.НоваяКолонка("Номенклатура"); МнЧ.НоваяКолонка("Единица"); МнЧ.НоваяКолонка("Количество"); МнЧ.НоваяКолонка("Коэффициент"); МнЧ.НоваяКолонка("Сумма"); МнЧ.НоваяКолонка("Цена"); МнЧ.НоваяКолонка("СуммаНДС"); МнЧ.НоваяКолонка("СуммаНП"); МнЧ.НоваяКолонка("СтавкаНДС"); ПечДокумент.ВыбратьСтроки(); Пока ПечДокумент.ПолучитьСтроку() = 1 Цикл Если ПечДокумент.Номенклатура.ВидНоменклатуры = Перечисление.ВидыНоменклатуры.Прочее Тогда МнЧ.НоваяСтрока(); МнЧ.Номенклатура = ПечДокумент.Номенклатура; МнЧ.Единица = ПечДокумент.Единица; МнЧ.Количество = ПечДокумент.Количество;; МнЧ.Коэффициент = ПечДокумент.Коэффициент; МнЧ.Сумма = ПечДокумент.Сумма; МнЧ.Цена = ПечДокумент.Цена; МнЧ.СуммаНДС = ПечДокумент.СуммаНДС; МнЧ.СуммаНП = ПечДокумент.СуммаНП; МнЧ.СтавкаНДС = ПечДокумент.СтавкаНДС; КонецЕсли; КонецЦикла; МнЧ.Сортировать("Номенклатура"); КоличествоСтрок = МнЧ.КоличествоСтрок(); КонецПроцедуры // ОбработкаМнЧ добавлена строка про сортировку - все арбайтен. Разбирайся. |
|||
37
Mikeware
30.06.15
✎
13:52
|
(35) "не поможет!"© прочитай его первую тему...
а ведь он совсем не изменился... |
|||
38
Масянька
30.06.15
✎
13:53
|
(37) Дык, п-п-предупрежадть надо (С)
|
|||
39
Злопчинский
30.06.15
✎
13:56
|
(8) ага, только сделать что требуется в ТИСе - для удобства и новых фич пользователя - два пальца об асфальт - хоть конфигу поменять, хоть модули проведения переписать. А как заходит речь о чем-то нестандартном - восьмерочников аж курутит как грешников на костре.
|
|||
40
Масянька
30.06.15
✎
13:59
|
(39) И не говори.
Сделать конфетку из клюшек (хоть с орехами, хоть с коньяком) - легко. А вот из снеговика получаются только пирожки... Да и те, с котятами. :))) |
|||
41
Mikeware
30.06.15
✎
14:03
|
(39) это не самое прикольное...
|
|||
42
sotnikov
30.06.15
✎
14:06
|
Да ладно вам ребят, если я не программист, то что мне делать с такой мелкой по меркам программера задачей? Не звонить же в франч. Вот и приходится тут спрашивать...
|
|||
43
Mikeware
30.06.15
✎
14:08
|
(42) а если зуб заболит - чего стоматолога беспокоить?
|
|||
44
sotnikov
30.06.15
✎
14:10
|
(43) Зуб болит - это очень абстрактно.
Скол на зубе натирает язык - можно подпилить пилочкой и не нужен врач=) В данном случае имхо более уместное сравнение. |
|||
45
palpetrovich
30.06.15
✎
14:11
|
вон оно че Михалыч, вон оно че
Функция ПодготовитьМнЧ1137(МнЧ, Итоги, ФорматКоличества) //... ВыбратьСтроки(); Пока ПолучитьСтроку() = 1 Цикл МнЧ.НоваяСтрока(); МнЧ.Номенклатура = СокрП(Наименование); Наименование - реквизит ТЧ, тип - строка ну и Процедура ПриНачалеВыбораЗначения(ИдентЭлемДиалога) Если ИдентЭлемДиалога = "Наименование" Тогда ОткрытьФорму("Справочник.Номенклатура"); КонецЕсли; КонецПроцедуры // ПриНачалеВыбораЗначения() зы: не,я не проив, но нафига так? :) |
|||
46
mehfk
30.06.15
✎
14:11
|
(44) А острый аппендицит у директора возьмешься исправить?
|
|||
47
sotnikov
30.06.15
✎
14:13
|
(46) Одно дело вопрос жизни и здоровья, другое - мелкая неприятность отдельного сотрудника (как в случае необходимости данной доработки)
|
|||
48
sotnikov
30.06.15
✎
14:29
|
Разобрался. Вставил сортировку в процедуру Печать.
Всем спасибо за объективную критику и советы. |
|||
49
Злопчинский
30.06.15
✎
16:59
|
(40) дай пять! ;-) не пирожков, а краба!
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |