Версия для печати темы (https://pro1c.org.ua/index.php?s=dcfc294bafd914c9f0a9959bdbd5b75f&showtopic=6583)

Нажмите сюда для просмотра этой темы в обычном формате

Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 _ Программирование в 1С Предприятие 7.7 _ Поиск по ДБФ

Автор: Talkman 05.03.12, 17:47

Задача. Сформировать базу данных минимальных остатков товара на складе для ежедневной перепроверки и дозаказа товара.
Раньше с ДБФ ваапще не сталкивался и попробовал данные о минимальных остатках хранить в ТХТ формате. Не понравилось. Пробовал экспортировать в эксель. Очень не понравился. Загнал данные в ДБФ фалик.

    Б=СоздатьОбъект("XBase");
    Путь = КаталогИБ()+"\Остатки\"+Строка(Склад.Код)+".DBF";  
    Сообщить(Путь);
    Б.ДобавитьПоле("NN","N",4,0);
    Б.ДобавитьПоле("TOVARCODE","S",9,0);
    Б.ДобавитьПоле("TOVAR","S",50,0);
    Б.ДобавитьПоле("Ostatok","N",10,2);
    Если Фс.СуществуетФайл(Путь) = 0 Тогда
        Б.СоздатьФайл(Путь);
    иначе
        Если Вопрос("Файл "+Путь+" уже существует. Заменить его?",4) = 6 тогда
            Фс.УдалитьФайл(Путь);
            Б.СоздатьФайл(Путь);
        иначе
            возврат;
        КонецЕсли;    
    КонецЕсли;
    
    Если Б.Открыта()=0 Тогда
        Попытка
            Б.ОткрытьФайл(Путь);
        исключение    
            Сообщить("Не удалось открыть файл DBF","!");
            Возврат;  
        КонецПопытки
    КонецЕсли;
    Би = СоздатьОбъект("БухгалтерскиеИтоги");
    Би.ИспользоватьСубконто(ВидыСубконто.ТМЦ);
    Би.ИспользоватьСубконто(ВидыСубконто.МестаХранения, Склад);
    Би.ВыполнитьЗапрос(РабочаяДата() - 60, РабочаяДата(), "281");
    Би.ВыбратьСубконто(ВидыСубконто.МестаХранения);
    Би.ПолучитьСубконто(ВидыСубконто.МестаХранения);
    Би.ВыбратьСубконто(ВидыСубконто.ТМЦ);
    Ном = 1;
    Пока Би.ПолучитьСубконто(ВидыСубконто.ТМЦ) = 1 Цикл
        Б.Добавить();
        Б.NN = Ном;
        Б.TOVARCODE = Би.Субконто(ВидыСубконто.ТМЦ).Код;
        Б.TOVAR = Би.Субконто(ВидыСубконто.ТМЦ).Наименование;
        Б.Ostatok = Би.СКД(3);
        Б.Записать();
        ном = Ном + 1;
    КонецЦикла;
    Б.ЗакрытьФайл();



Вроде как все нормально записалось, все устраивает. Только вот ступор у меня вышел, как найти нужній товар в ДБФ-е. В помошнике есть метод НАЙТИ(), но как его правильно применить что-то застопорился... Можете объяснить на пальцах. Буду благодарен также за ссылку на пример. Благодарю.

А поправить отправленное сообщение никак?

Автор: MATEVI 05.03.12, 18:22

ЗаписьНайдена=ДБФ.Найти("Иванов",0)

ЖКК стр 861
А вообще что то не совсем понятно что Вы хотите найти в ДБФе? Вы же его формируете в том куске кода

Автор: Стрелок 05.03.12, 19:29

Цитата(MATEVI @ 05.03.12, 19:22) *
ЗаписьНайдена=ДБФ.Найти("Иванов",0)

ЖКК стр 861
А вообще что то не совсем понятно что Вы хотите найти в ДБФе? Вы же его формируете в том куске кода



телепатирую - у него этот кусок кода выполняется медленно. вот и формирует раз в день файлик. Видимо не только с дбф не сталкивался но и с получением остатков вообще.

Топикстартер - копните в сторону стандартных документов расхода товара а также справочник "ТМЦ" в режиме подбора (когда остатки выводятся в табличке. Поверьте всё гораздо проще и прозрачнее

Мама дорогая. А зачем делать запрос за 60 дней если используется только конечное сальдо?

Автор: sava1 05.03.12, 20:20

Радикальное решение - 1срр (прямой запрос + индексированная таблица)
Хотя это не для топикстартера upset.gif

Автор: Стрелок 05.03.12, 20:32

Цитата(sava1 @ 05.03.12, 21:20) *
Радикальное решение - 1срр (прямой запрос + индексированная таблица)
Хотя это не для топикстартера upset.gif



прямым запросом и без таблицы всё летает. главное правильно условия наложить (накласть)

Автор: sava1 05.03.12, 20:37

но человека интересует сериализация (если я правильно понял)

Автор: Стрелок 05.03.12, 20:40

Цитата(sava1 @ 05.03.12, 21:37) *
но человека интересует сериализация (если я правильно понял)


Его интересует текущий остаток товара и минимально-допустимый (из карточки). Если что - дозаказ. Всё. больше ничего. Получает он в этом коде и пишет в дбф текущий остаток. потом видать хочет читать его и сравнивать с минимальным остатком товара.

Автор: vadim007 06.03.12, 8:08

Цитата(Стрелок @ 05.03.12, 20:40) *
Его интересует текущий остаток товара и минимально-допустимый (из карточки). Если что - дозаказ. Всё. больше ничего. Получает он в этом коде и пишет в дбф текущий остаток. потом видать хочет читать его и сравнивать с минимальным остатком товара.

Он же сказал в начале: "Сформировать базу данных минимальных остатков товара на складе для ежедневной перепроверки и дозаказа товара". А формирует просто остатки, не отбирая минимальных. Зачем телепатировать? Вот когда автор четко сформирует свою задачу, тогда можно и объяснить.

Автор: Talkman 06.03.12, 9:28

Может действительно не совсем точно ситуацию объяснил.
Кусок кода выполняется единоразово при инициализации базы данных минимальных остатков товара. За 60 дней запрос делается чтобы попали все товары по которым были движения не зависимо от того есть ли они сейчас на остатке или нет. Основная задача - ежедневное сравнение остатка товара с минимальным остатком указанным в ДБФе единоразово. То бишь буду ежедневно смотреть остатки товара и сравнивать с необходимым минимальным остатком в ДБФ. Основная задача - быстро найти нужную запись в ДБФнике и сравнить значения остатков.

Еще раз уточню. ДБФ формируется единоразово. Заполнение минимальных остатков товара будет заполнятся вручную людьми, т. к. планированием сколько чего минимально должно оставаться для нормальной торговли будут решать начальники отделов продаж. Основная задача - быстрый поиск записи в дбв. Копал в сторону индексов, но не понравилось. Вроде как из пушки по воробьям. Метод найти() интуитивно понятен, но смущает описание "найти значение по индексу". Может там все как дважды два, но т.к. с индексами не сталкивался прошу помощи либо разъяснения. Спасибо.

Автор: vadim007 06.03.12, 9:47

В какой конфигурации это все делается?

Автор: Talkman 06.03.12, 9:52

Цитата(vadim007 @ 06.03.12, 9:47) *
В какой конфигурации это все делается?

Жутко переделаная ПУБ. Сравнение остатков будет проводится в отдельной обработке.

Автор: vadim007 06.03.12, 10:08

В ПУБ, в справочнике ТМЦ есть реквизит МинимальныйОстаток. Его будут заполнять начальники отделов?

Автор: Talkman 06.03.12, 10:11

Цитата(vadim007 @ 06.03.12, 10:08) http://pro1c.org.ua/index.php?act=findpost&pid=45768
Дело в том, что отдел продаж не один. Грубо говоря есть несколько складов с которых идут продажи и по которым нужно сформировать минимальные остатки для товара.

Минимальные остатки для каждого склада разные

Автор: vadim007 06.03.12, 10:22

И эти минимальные остатки для каждого склада хранятся в 1С? Ведь конфа жутко переработанная, как вы писали. Уже предвижу, в какую сторону она переписана. Если же окажется, что остатки разные не только для каждого склада, но и для каждого отдела продаж... Скорей всего так оно и есть. Но не в этом суть. По моему, речь идет об отчете, в котором, в разрезе отделов и складов, нужно выводить текущий остаток товара на заданную дату, минимальный остаток, и галочку - нужно-ли дозаказывать товар. Если так, то тогда все просто.

Автор: Talkman 06.03.12, 10:46

Цитата(vadim007 @ 06.03.12, 10:22) http://pro1c.org.ua/index.php?act=findpost&pid=45772
В ПУБ, в справочнике ТМЦ есть реквизит МинимальныйОстаток. Его будут заполнять начальники отделов?

Минимальные остатки будут вносится в ДБФ файлик. Для каждого склада свой файлик.

Автор: MATEVI 06.03.12, 10:55

Обращение к ДБФ необходимо в случае если у Вас другая БД (не 1С) и необходим экспорт/импорт данных, или например, экспорта/импорта данных из клиент-банка. Если даже у Вас две параллельные базы 1С то стоит обратить внимание на механизм ОЛЕ.

Автор: Talkman 06.03.12, 11:03

Я конечно дико извиняюсь, но неужели вопрос настолько сложен... Меня интересует как можно посредством 1С найти запись в ДБФ исключая метод простого перебора. Если это метод Найти(), то опишите пожалуйста пример использования, если другой механизм, буду благодарен если Вы мене его продемонстрируете. Значение минимальных остатков товара для каждого товара не считаю целесообразным хранить в 1С, так как эти данные будут использоваться лишь для одного процесса. Зачем приваривать коляску к мотоциклу, если нужно перевести пол мешка картошки...

Автор: MATEVI 06.03.12, 11:14

Ну как знаете. http://pro1c.org.ua/redirect.php?http://www.mista.ru/tutor_1c/dbf.htm. Смотрим в конец страницы.

ПыСы Аллегории проводить не буду.

Автор: Talkman 06.03.12, 11:53

Цитата(MATEVI @ 06.03.12, 11:14) http://pro1c.org.ua/index.php?act=findpost&pid=45779. Смотрим в конец страницы.

ПыСы Аллегории проводить не буду.

Все таки индексы... Значит прямого поиска нет...
Чтож, спасибо. Подумаю о создании подчиненного справочника для ТМЦ, в котором будут реквизиты склад и минимальный остаток.
Либо же из ДБФ загружать данные в ТЗ и уже с ней работать... Короче будем посмотреть...

Автор: vadim007 06.03.12, 12:11

Цитата(Talkman @ 06.03.12, 10:46) http://pro1c.org.ua/index.php?act=findpost&pid=45774
Зачем приваривать коляску к мотоциклу, если нужно перевести пол мешка картошки...

Действительно - зачем?
Цитата(Talkman @ 06.03.12, 11:53) *
Подумаю о создании подчиненного справочника для ТМЦ, в котором будут реквизиты склад и минимальный остаток.

А я то думал, что в жутко переработанной конфе это уже реализовано, осталась только малость - сравнить текущие и минимальные остатки. Тогда - вперед! Только не нужно новый справочник подчинять справочнику ТМЦ.

Автор: Talkman 06.03.12, 12:16

Цитата(vadim007 @ 06.03.12, 12:11) *
Откуда будут браться минимальные остатки? Я так понял, не из 1С. Если их должны вносить начальники отделов, то нужно их обучить работать с какой-нибудь утилитой редактирования dbf.

Действительно - зачем?

А я то думал, что в жутко переработанной конфе это уже реализовано, осталась только малость - сравнить текущие и минимальные остатки. Тогда - вперед! Только не нужно новый справочник подчинять справочнику ТМЦ.

Как так не нужно? А как вы видите структуру справочника?

Автор: Домовик 09.03.12, 18:13

таблицу ввода данных можно использовать. внешнюю обработку. Один раз нажимаете кнопку "заполнить мин остатки". ставите туда ваш код и заполняете ваш товар с ост. в таблицу. их же можно корректировать вручную. и еще кнопка "текущие остатки": заполняете текущие остатки, обнуляете их.
Внешнюю Обработку можно сохранять, таблица будет тоже сохраняться, т. е ваши мин. остатки.

Автор: anatol1c 28.02.22, 17:12

vadim007 @ 06.03.12, 13:11 * ,
Через 10 лет, скорее всего, неактуально. Под Вашу задачу отлично бы подошла таблица значений.

Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7
https://pro1c.org.ua