середа, 29 вересня 2021 р.

Аналіз наявності періоду в формі списку документів

Часом в формі списку документів, потрібно обробити документи, але щоб не перебирати всі документи,
краще обмежити період перебору, тому перед виконанням обробки, даний код дозволяє перевірити
чи вибраний період.

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

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

вівторок, 3 березня 2020 р.

Читання csv файлу

ТекстВопроса = "Перед заполнением табличнaя часть будет очищена. Заполнить?";
Ответ = Вопрос(ТекстВопроса, РежимДиалогаВопрос.ДаНет, , КодВозвратаДиалога.Да,);

Если Ответ <> КодВозвратаДиалога.Да Тогда
Возврат;
КонецЕсли;
ОтработанноеВремя.Очистить();


Таблица = Новый ТаблицаЗначений;
Разделитель = ";";

Файл = "E:\Program Files\Exchange\022020.csv";

// чтение
ЗагружаемыйФайл = Новый ТекстовыйДокумент;
ЗагружаемыйФайл.Прочитать(Файл);

Шапка = ЗагружаемыйФайл.ПолучитьСтроку(1);

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

//генерируем столбцы
Для Каждого ИмяСтолбца Из МассивКол Цикл
ИмяБезПробелов = СтрЗаменить(ИмяСтолбца," ",""); // убираем из имени пробелы
Таблица.Колонки.Добавить(ИмяБезПробелов,,ИмяСтолбца);
//НовыйСтолбец = Таблица.Колонки.Добавить(ИмяБезПробелов, ИмяСтолбца);
//НовыйСтолбец.Данные = ИмяБезПробелов;
КонецЦикла;

Для НомерСтроки = 2 по ЗагружаемыйФайл.КоличествоСтрок() Цикл
Состояние("Обрабатывается "+Строка(Формат(?(ЗагружаемыйФайл.КоличествоСтрок()=0,0,((100*НомерСтроки)/                                                                                                ЗагружаемыйФайл.КоличествоСтрок())),"ЧЦ=3; ЧДЦ=0"))+" %");
ОбработкаПрерыванияПользователя(); //указав данный оператор, цикл можно прервать в любой момент нажатие ctrl+break

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

Если МассивКол.Количество() <> Таблица.Колонки.Количество() Тогда
Продолжить; // скорее всего в тексте содержит разделитель
КонецЕсли;

Для НомерСтолбца= 1 по МассивКол.Количество() Цикл
//заполняем строчку значениями
ТекущееЗначение = МассивКол[НомерСтолбца-1];
ИмяКолонки = Таблица.Колонки[НомерСтолбца-1].Имя;
НоваяСтрочка[ИмяКолонки] = ТекущееЗначение;
КонецЦикла;
КонецЦикла;

Таблица.ВыбратьСтроку();

неділя, 5 січня 2020 р.

Перехід на Йоксель

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

субота, 21 грудня 2019 р.

Вибрати документи видаткова накладна, потім вибрати операції документів, лише товар

// ======================================================== 

Процедура ОтриматиТЗ() 

    тз = СоздатьОбъект("ТаблицаЗначений"); 
    тз.НоваяКолонка("ДокПриходу","Документ");
    тз.НоваяКолонка("ДокРеалізації","Документ");
    тз.НоваяКолонка("Покупець","Справочник.Контрагенты");      тз.НоваяКолонка("Постачальник","Справочник.Контрагенты"); тз.НоваяКолонка("ТМЦ","Справочник.ТМЦ"); тз.НоваяКолонка("ПартіяПриходу","Справочник.Партии"); тз.НоваяКолонка("ПрогнозованаТочкаДоставки","Справочник.ТочкиДоставкиТовару"); тз.НоваяКолонка("ЦінаПартіїПриходу","Число",15,2); 
 тз.НоваяКолонка("Кст","Число",15,3); 
 тз.НоваяКолонка("Сума","Число",15,2); 

док = СоздатьОбъект("Документ.РасходнаяНакладная"); док.ВыбратьДокументы(Дата1,Дата2); Пока док.ПолучитьДокумент() = 1 Цикл 

Если док.Проведен() = 0 Тогда 
    Продолжить; 
КонецЕсли; 
Если вДокументРеалізації.Выбран() = 1 
    Тогда Если док.ТекущийДокумент() <> вДокументРеалізації Тогда 
        Продолжить; 
    КонецЕсли; 
КонецЕсли; 
Если вПокупець.Выбран() = 1 Тогда 
    Если док.Контрагент <> вПокупець Тогда 
        Продолжить; 
    КонецЕсли; 
КонецЕсли; 

ОП = СоздатьОбъект("Операция"); ОП.ВыбратьОперации(док.ТекущийДокумент(),док.ТекущийДокумент()); Если ОП.ПолучитьОперацию() = 1 Тогда ОП.ВыбратьПроводки(); Пока ОП.ПолучитьПроводку() = 1 Цикл Если ОП.Кредит.Счет.Код = "281" Тогда Если вПостачальник.Выбран() = 1 Тогда Попытка Постачальник = ОП.Кредит.Партии.Док.Контрагент; Исключение Постачальник = ""; КонецПопытки; Если Постачальник <> вПостачальник Тогда Продолжить; КонецЕсли; КонецЕсли; Если вПрогнозованаТочкаДоставки.Выбран() = 1 Тогда Попытка ПрогнозованаТочкаДоставки = ОП.Кредит.Партии.Док.ПрогнозованаТочкаДоставкиТовару; Исключение ПрогнозованаТочкаДоставки = ""; КонецПопытки; Если ПрогнозованаТочкаДоставки <> вПрогнозованаТочкаДоставки Тогда Продолжить; КонецЕсли; КонецЕсли; Если вТМЦ.Выбран() = 1 Тогда ТМЦ = ОП.Кредит.ТМЦ; Если вТМЦ <> ТМЦ Тогда Продолжить; КонецЕсли; КонецЕсли; Если вДокументПриходу.Выбран() = 1 Тогда Если док.ТекущийДокумент() <> вДокументПриходу Тогда Продолжить; КонецЕсли; КонецЕсли; тз.НоваяСтрока(); тз.ДокПриходу = ОП.Кредит.Партии.Док; тз.ДокРеалізації = док.ТекущийДокумент(); Попытка тз.Постачальник = ОП.Кредит.Партии.Док.Контрагент; Исключение КонецПопытки; Попытка тз.ПрогнозованаТочкаДоставки = ОП.Кредит.Партии.Док.ПрогнозованаТочкаДоставкиТовару; Исключение КонецПопытки; тз.Покупець = док.Контрагент; тз.ПартіяПриходу = ОП.Кредит.Партии; тз.ЦінаПартіїПриходу = ОП.Кредит.Партии.Цена_Прих; тз.ТМЦ = ОП.Кредит.ТМЦ; тз.Кст = ОП.Количество; тз.Сума = ОП.Сумма КонецЕсли; КонецЦикла; КонецЕсли; КонецЦикла; 

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

четвер, 19 грудня 2019 р.

Друк ТЧ документа

Таб=СоздатьОбъект("Таблица"); Таб.ИсходнаяТаблица("НазваТаблиці"); Таб.ВывестиСекцию("Шапка"); ВыбратьСтроки(); Пока ПолучитьСтроку() = 1 Цикл Таб.ВывестиСекцию("Рядок"); КонецЦикла; Таб.ВывестиСекцию("Всього"); Таб.ТолькоПросмотр(1); Таб.ПараметрыСтраницы(2,,,,,,,,,1,,); Таб.Показать();

середа, 18 грудня 2019 р.

Сортувати ТЧ документа по Індексу елементу

// ======================================== Процедура Сортувати() тз = СоздатьОбъект("ТаблицаЗначений"); ВыгрузитьТабличнуюЧасть(тз); тз.НоваяКолонка("Індекс","Число",10,3); тз.ВыбратьСтроки(); Пока тз.ПолучитьСтроку() = 1 Цикл тз.Індекс = тз.ОзнакаДеревини.Індекс; КонецЦикла; тз.Сортировать("Індекс"); ЗагрузитьТабличнуюЧасть(тз); КонецПроцедуры

Меню вибору

Перем Рез; Рез = СоздатьОбъект("СписокЗначений"); Рез.ДобавитьЗначение(1,"Варіант 1"); Рез.ДобавитьЗначение(2,"Варіант 2"); Если Рез.ВыбратьЗначение(Рез,,,,2) <= 0 Тогда Возврат; КонецЕсли;